一种无需根权限的安卓多跳路由实现方法
技术领域
本发明涉及一种基于安卓(Andriod)操作系统的无线设备多跳选路方法,适用于运行安卓4.0版本以上操作系统手机的非根权限(root)下的多跳路由表建立及数据转发方法。
背景技术
近年来,智能手机、智能平板等已经得到了广泛普及。智能终端上的主流操作系统主要有两个:Android和IOS。其中,IOS操作系统由苹果公司开发,主要用于Iphone、iPad系列设备,而Android操作系统则由Google公司开发,运行的操作系统涵盖三星及绝大部分国产手机和平板设备如华为、中兴,以及大量智能家居系统如电视等。这些手机上大多集成有Wi-Fi和蓝牙芯片组,可以实现短距离无线数据传输。其中蓝牙主要用于点对点的数据传输,例如文件共享。而wifi则基本作为接入公众网络的快速接入手段,需要基础设施即WI-FI热点的支持。但是,目前的绝大多数无线应用都要依赖基础设施,即2G/3G/4G的移动基站或者是WI-FI热点,有些移动用户相互之间的信息交互也要经过基站或者热点转发,因而在基站和热点缺乏(如偏远景区、边远地区等)以及特殊环境如海上、自然灾害时,手机的无线数据传输功能则完全不可使用。严重影响了用户体验。
随着微信等交互工具越来越普及,近年来不依赖基站或基础设施,手机之间直接进行数据交互的需求越来越多,越来越迫切。传统应用通常通过蓝牙来实现相互邻接设备间的点到点数据传输,但蓝牙通信距离仅为几米,而且人们的使用习惯更倾向于Wi-Fi,为了满足这一需求,WI-FI标准工作组在制定IEEE 802.11标准的基础上,增加了ad hoc模式和Wi-Fi Direct模式。Ad hoc模式可以支持多个Wi-Fi设备之间自组网,但是迄今为止,ad hoc模式没有得到广泛响应,大部分手机的Wi-Fi芯片组不支持ad hoc模式。同时,即便是手机Wi-Fi芯片组支持ad hoc模式,从Wi-Fi的常规模式切换到ad hoc模式也需要应用具有root权限。这个权限只有少量专业级手机用户才能获得。从而导致了ad hoc模式并不实用。另一方面,Wi-Fi Direct模式近年来得到了很多手机生产厂家 和操作系统的支持,Google公司在Android 4.0后支持Wi-Fi Direct模式,且从常规模式切换到Wi-Fi Direct模式不需要root权限即可实现设备间的P2P通信。
到目前为止,智能设备可以通过WIFI DIRECT或是蓝牙实现无需固定设施支持的直接数据通信,在互联网上也涌现出了基于上述技术的很多局域网通信应用。但是,这些通信应用只支持邻居间的一跳通信,支持的用户数量有限,用户间距离也必须在物理设备的通信距离内。目前支持多跳无线组网的ad hoc组网技术研究已经很深入,并有大量的专用设备在使用该技术进行多跳无线通信。该技术需要在系统路由表添加多跳转发路由,而在android系统中只有获得root权限才能够对系统路由表进行操作。
【参考文献】
[1]Crow B P,Widjaja I,Kim J G,et al.IEEE 802.11wireless local area networks[J].Communications Magazine,IEEE,1997,35(9):116-126.
[2]Anastasi G,Borgia E,Conti M,et al.IEEE 802.11ad hoc networks:performance measurements[C]//Distributed Computing Systems Workshops,2003.Proceedings.23rd International Conference on.IEEE,2003:758-763.
[4]Camps-Mur D,Garcia-Saavedra A,Serrano P.Device-to-device communications with Wi-Fi Direct:overview and experimentation[J].Wireless Communications,IEEE,2013,20(3).
[5]K.Doppler,M.Rinne,C.Wijting,C.Ribeiro,and K.Hugl,"Deviceto-device communication as an underlay to LTE-advanced networks,"Communications Magazine,IEEE,vol.47,no.12,pp.42-49,2009.
[6]VpnService-Android SDK|Android Developers.http://web.mit.edu/majapw/MacData/afs/sipb/project/android/docs/referen ce/android/net/VpnService.html.
发明内容
技术问题:本发明的目的是提供一种无需根权限的安卓多跳路由实现方法,利用Android 4.0以后版本提供的VPN功能,通过用户创建的虚拟网络接口设备,截获发往网络的数据,在该接口上完成路由表的构建和数据的转发设计,同时将希望提交给系统网络协议栈的数据插入该接口,实现无需root权限的多跳无线路由表构建及数据转发设计。该路由和转发功能对第三方设计的网络通信程序是透明的,作为底层支撑完成对多跳数据通信的支持。
技术方案:在android 4.0以上版本的操作系统中提供了对VPN技术的支 持,VPN技术可以为非root权限用户提供一个可供操作的虚拟网络接口。本发明就是利用该虚拟接口完成用户路由表的构建和与系统网络协议栈的衔接功能,从而构建一个无需root权限的多跳路由框架。为所有的无线通信程序提供多跳扩展支撑。
Android VPN提供了VPNService类供用户开发应用程序使用,帮助用户创建一个虚拟网络设备接口,通过该接口用户程序可以截获发往网络的数据,并将需要提交系统网络协议栈的数据插入该接口。在该接口上构建一个用户管理的路由表,当数据需要从该接口发出时,先查询本地管理路由表,获取下一跳信息,根据下一跳信息对数据进行隧道封装,通过实际WI FI或蓝牙接口将数据发出,从而实现不需要root权限的多跳路由和数据转发工作。
本发明的一种无需根权限的安卓多跳路由实现方法为:
1)、基于Andriod4.0(安卓4.0)以上版本虚拟专用网络VPN(Virtual Private Network,以下简称VPN)的VPNService类,创建本地可访问的虚拟网络接口,从而提供非根权限下与网络协议栈的接口;
2)、构建用户路由表,表项中以其它节点的虚拟接口地址为目的地址,以实际无线网络接口地址为下一跳地址,由于路由不需要插入系统路由表,因此不需要获取root权限;
3)、将从虚拟接口捕获的网际协议(IP)分组查表,作为用户数据保协议(UDP)数据内容进行隧道封装,以路由表中的下一跳地址作为UDP的目的地址发送。
对所获取的IP分组进行以路由表下一跳地址为目的的隧道封装,隧道封装方式以传输控制协议(TCP)方式封装;
对所获取的IP分组进行以路由表下一跳地址为目的的隧道封装,隧道封装方式以原始网际协议(RAW IP)方式封装。
有益效果:利用该多跳路由实现方法,android4.0以上操作系统的智能设备可以不依赖2G/3G/4G基站,利用wifi或是蓝牙设备完成多个智能设备之间的自组织组网功能,实现相互间通信的互转功能。在邻近的手机之间共享、交互信息,使手机成为一种可以脱离基站的群组之间交流工具。本方法采用android 4.0以上版本开放给用户使用的VPN(虚拟专用网)作为技术基础,所以采用此方法的应用程序不需要root权限,只要在运行andriod 4.0的手机上均可实现。通过与该多跳方法配合,可以支持目前的局域网一跳通信工具无缝的扩展到多跳通 信,不需要固定基础设施的支持,为偏远、救灾、集团活动等场合的大范围智能android设备组网通信提供支撑。
附图说明
下面结合附图对本发明进一步说明。
图1a是数据发送流程,图1b是数据转发流程,图1c是数据接收流程。
图2:数据封装,
图3:路由表格式。
具体实施方式
用户路由表的表项信息是通过无线多跳路由算法得到的,具体的路由发现及选路算法不在本专利申请范围内。
程序加载后利用VPNService类,创建一个虚拟接口,并为该接口分配IP地址,该IP地址采用与本机地址相同的主机部分地址,网络地址可以选择193网段的内网地址。
多跳路由算法生成指向各个节点虚拟接口的路由表项,该表项如图3所示。表项由以下内容组成:目的(虚拟接口地址),下一跳(对端实际无线设备地址)。
本发明可以作为一个对第三方应用通信程序的支撑软件,其数据流程如图1所示。在图1中本发明内容作为选路转发程序存在。当位于系统协议栈以上的第三方应用通信程序向另一个节点的虚拟接口地址发送数据时,该数据将被系统网络协议栈交给本机虚拟接口,被选路转发程序中的虚拟接口接收程序获得,此时数据将是一个完整的IP分组,称作IP分组A,根据分组A中的目的IP地址查询用户路由表,获得下一跳IP地址D。用户路由程序将分组A作为数据内容以UDP方式发送给地址D,UDP端口可以自行约定。(数据封装过程如图2所示,采用UDP方式实现了对分组的隧道封装)。由于D是对端实际无线设备接口地址,与本机无线设备IP地址在同一个网段中,因此该分组将从本机无线设备中发出,被对端的无线接口设备(WIFI或是蓝牙设备)收到,上交给选路转发程序中的UDP接收程序,UDP接收程序收到该消息后把内容部分提取,该部分内容为应用程序发送的完整IP分组,如果该分组的目的地址为本机虚拟端口地址,则通过虚拟设备接口将该IP分组上交给系统网络协议栈,系统网络协议栈认为这是一 个从网络收到的IP分组,上交给第三方应用通信程序,完成一次通信过程。如果目的地址不是本机地址则查找本机用户路由表重新选择下一跳,继续重复前面的转发过程。
实例:
第一步:一个想加入多跳网络的节点i,首先启动自己的无线设备与多跳网络中的其它设备物理可联通,并为该设备获得IP地址Ai,及掩码长度Mi(地址获取方式可以是动态获取或是静态分配,不在本专利范围内)。选路转发程序启动VPN,调用VPNservice类,创建一个虚拟接口设备Vi,获得该设备的文件描述符fdi。通过VPNService类的addAddress方法为Vi分配主机部分与Ai相同,位于另一个内网网络段的地址VAi,掩码长度为Mi。例如Ai=192.168.0.2,Mi=24,则Vi的地址可以为VAi=193.168.0.2,掩码长度为24。
第二步:选路转发程序中运行路由协议,该路由协议需要在各个节点间交互其地址VAi,Mi及VAi消息生成路由表Ti,具体路由算法不在本发明范围内;
第三步:选路转发程序从虚拟接口设备接收本节点发送往其它节点的分组。
例如:节点i发送目的地址为VAj的数据给节点j,该分组将会从虚拟接口Vi发送,该接收程序将会获得目的地址为VAj,源地址为VAi的IP分组Pi。
第四步:查询Ti,找到目的地址为VAj的表项,得到其下一跳地址为Vk(下一跳转发节点为节点k)。
第五步:将收到的IP分组Pi作为UDP分组的内容部分进行封装,发往目的地址VAj,目的端口号为X;
第六步:k节点运行应用层接收程序收到UDP分组,提取其内容Pi,Pi中的目的IP地址为VAj。
第七步:如果VAj与VAk相等则将Pi写入虚拟接口设备,否则重复第四到第七步。
第八步:写入fdk的数据将被用户通信程序接收,完成本次多跳通信过程。