基于OpenWrt的6LoWPAN边界路由器的实现
扫描二维码
随时随地手机看文章
OpenWrt 可以被描述为一个嵌入式的 Linux 发行版,(主流路由器固件有 dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的、静态的系统。OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。
对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。
6LoWPAN是一种基于IPv6的低速无线个域网标准,即IPv6 over IEEE 802.15.4。
将IP协议引入无线通信网络一直被认为是不现实的(不是完全不可能)。迄今为止,无线网只采用专用协议,因为IP协议对内存和带宽要求较高,要降低它的运行环境要求以适应微控制器及低功率无线连接很困难。
基于IEEE 802.15.4实现IPv6通信的IETF 6LoWPAN[1] 草案标准的发布有望改变这一局面。6LoWPAN所具有的低功率运行的潜力使它很适合应用在从手持机到仪器的设备中,而其对AES-128加密的内置支持为强健的认证和安全性打下了基础。
IEEE 802.15.4标准设计用于开发可以靠电池运行1到5年的紧凑型低功率廉价嵌入式设备(如传感器)。该标准使用工作在2.4GHz频段的无线电收发器传送信息,使用的频带与Wi-Fi相同,但其射频发射功率大约只有Wi-Fi的1%。这限制了IEEE 802.15.4设备的传输距离,因此,多台设备必须一起工作才能在更长的距离上逐跳传送信息和绕过障碍物。
基于OpenWrt的6LoWPAN边界路由器的实现6LoWPAN作为WSN和IPv6技术结合的产物,既继承了IPv6巨大地址空间的优势,又满足了无线传感网低功耗的要求,受到了越来越多无线传感器网络使用者的喜爱[1]。就6LoWPAN网络自身特性而言,它应当和某些外部网络互连,使外部网络可以监测和控制6LoWPAN网络才具有更实际的意义。而IP网络作为目前的主流网络,如何实现该网络与6LoWPAN网络的连通,是目前亟待解决的问题。
OpenWrt作为一个功能强大的开源路由器Linux系统,用户可以很方便地对其进行定制、优化,从而实现自己的功能需求[2]。本文设计的基于OpenWrt的6LoWPAN边界路由器,成功解决了6LoWPAN网络与IP网络之间异构网络互通的问题,对于无线传感网的发展及促进异构网络之间的无缝融合具有深远的意义。
1 系统架构6LoWPAN边界路由器作为连接IPv6网络和6LoWPAN网络的桥梁,需要同时提供两种网络的接入功能,以及数据包在两种不同网络之间的转发和路由。本文设计的6LoWPAN边界路由器的系统架构如图1所示,主要包括底层硬件、设备驱动、操作系统及上层应用等几部分。
该边界路由器通过自身的以太网接口与IPv6网络进行通信,而与6LoWPAN网络之间的通信,则通过基于IEEE802.15.4的射频模块来实现。系统拓扑如图2所示。
2 系统硬件设计6LoWPAN边界路由器主要用来帮助一些能力受限的6LoWPAN节点接入IPv6网络,基于以上目的,该边界路由设备在硬件设计上需具备较好的协议执行能力和一定的处理能力[3]。本文设计的6LoWPAN边界路由器的硬件结构设计如图3所示,主要包括以太网接入部分和6LoWPAN网络接入部分,两部分之间通过串口连接。
以太网接入部分主控芯片选用的是台湾雷凌(Ralink)科技公司推出的一款高集成低成本SOC芯片RT5350F。该芯片是一颗高性能的MIPS 24Kc CPU内核,最高主频为360 MHz,较高的主频保证了一定的处理能力。除此之外,该部分采用16 MB Flash闪存作为程序存储器,采用32 MB的16 bit SDRAM作为内存,可以嵌入完整的TCP/IP网络协议,实现强大的网络通信功能,同时还能有足够的空间用于安装程序以及依赖库,满足用户的功能扩展需求。
由于RT5350只提供了IEEE802.11协议的射频接口,而6LoWPAN协议目前是建立在IEEE802.15.4标准上,所以需要采用其他芯片来提供6LoWPAN网络接入的功能支持。本文采用以CC2530F256芯片为主的射频接入模块及其外部功能拓展电路,提供向6LoWPAN网络的接入。
3 系统软件设计为实现两种异构网络的互连,边界路由器必须同时具有IPv6和6LoWPAN标准。虽然6LoWPAN协议是由IPv6协议转变而来,但该协议具有自己的特殊性:它包含一个适配层来实现IP数据包在IEEE 802.15.4链路上的传输[4]。
由于IPv6数据包的最大传输单元为1 280 B,而IEEE802.15.4定义MAC层的每一帧的长度为127 B,这样就会造成IPv6数据报和IEEE802.15.4帧在长度上的不匹配,许多IPv6数据包不能完整地放进一个IEEE802.15.4帧中进行传输[5]。为了解决这一问题,IPv6数据包需要在适配层进行分片和重组,同时还要对数据包的头部进行压缩,以适应IEEE802.15.4帧的大小[6]。
根据以上情况,对6LoWPAN边界路由器协议栈部分进行了如图4所示的设计:先分别实现IPv6和6LoWPAN协议栈,然后通过SLIP(Serial Line Internet Protocol)协议在两种协议栈间建立一个串行通信链路,让两种异构网络能够通过该链路进行IP数据报的传输,从而实现两种异构网络之间的通信。
3.1 IPv6接入模块
该模块的建立主要采用OpenWrt操作系统来完成。该系统使用uClibc、busybox和shell解释器等,通过嵌入式Linux工具,提供硬件抽象层和软件包管理,系统的内部组成如图5所示。用户只需要重新编译uClibc和软件包以匹配目标架构,从而获得在不同嵌入式设备上相同的应用程序。鉴于OpenWrt嵌入式系统的诸多优点,它非常适合应用于IP网络接入模块。
3.2 6LoWPAN接入模块
6LoWPAN接入模块主要是基于Conki操作系统实现,该系统作为一个可以高度移植、支持多任务环境并且开源免费的嵌入式操作系统,非常适合用于6LoWPAN接入模块的设计。该系统的软件结构如图6所示,主要由三部分组成:uIP协议栈、Rime协议栈和上层应用程序。
uIP是一个小型的符合RFC规范的TCP/IP协议栈,使得Conki可以直接和Internet通信。uIP协议栈主要任务是处理由底层驱动收到的数据包,或者将需要转发的数据包交由底层设备驱动来实现数据包转发[7]。而其包含的网络层RPL(IPv6 Roung Protocol for Low-Power and Lossy Network)协议,则提供了6LoWPAN的组网功能。
MAC层的Rime是一个轻量级的、为低功耗无线传感器网络设计的协议栈,该协议栈提供了大量的通信原语,能够实现从简单的一跳广播通信到复杂的可靠多跳数据传输等通信功能[8]。
上层应用程序主要包括桥接程序和边界路由程序。前者用于通过SLIP串口实现数据包向RPL接口的转发,它是RPL数据收发转换的中间层。后者负责向IP接入模块请求本节点的子网前缀,初始化6LoWPAN接入模块,并定时维护组建的6LoWPAN网络。
3.3 两种协议栈之间通道的建立
两个协议栈之间通道的建立主要借助tun虚拟网卡驱动和SLIP协议来实现。其中,tun虚拟网卡驱动主要用来接收来自TCP/IP协议栈的网络数据包并发送,或者反过来将接收到的网络数据包传给协议栈处理;同时该部分还要承担在点对点设备传输过程中,对数据包进行相应封装的任务。至于封装格式,主要由点对点设备传输方式决定,本文采用的是SLIP协议,是在链路层上传输的串行线路网际协议,主要对要传输的IP数据包进行简单的封装,即加上相应的头部和尾部,并对数据包进行适当的修改,防止头部和尾部的误判。
以上通道的建立主要在OpenWrt系统上实现,通过一个tunslip6程序来建立相应的虚拟网卡和SLIP封装。具体的SLIP通道处理数据的流程可以用图7来描述。
3.4 整个边界路由的运行过程
当边界路由器的射频接口接收到了6LoWPAN子网发送来的比特流后, 先需要经过适配层对数据包进行分片整合,整合成一个完整的IPv6数据包。之后传递到网络层,经由RPL路由协议判定数据包的目的地址是否是在6LoWPAN网络中。如果是,则转发数据包到6LoWPAN网络中;如果不是,则继续判断数据包的目的地址前缀是否属于6LoWPAN网络。如果属于,则因为没有目的端的路由,丢弃;如果不属于,则转发到IPv6接入模块。在IPv6接入模块中,先判断是否存在目的地址的路由,如果存在,则直接发送到相应的IPv6主机;如果不存在目的端的路由,则应进行邻居发现操作,根据结果对数据包做出相应处理。整个过程如图8所示。
该边界路由器对以太网数据帧的处理流程与上述处理6LoWPAN数据包的过程相反,本文不再赘述。
4 测试为了验证本文设计的6LoWPAN边界路由器是否能够连通IPv6网络和6LoWPAN网络,进行了连通性测试。测试过程中除了边界路由器外,还包括两个6LoWPAN传感器节点和一台IPv6主机。
首先放置两个传感器节点在离边界路由器10 m左右距离的位置,边界路由器通过LAN口和IPv6主机连接。由于实验室没有提供IPv6网络的接入,所以边界路由器的WAN口暂不使用。之后在IPv6主机上分别对两个传感器节点进行ping命令测试。从测试结果可以看出,响应时间在30 ms内,并且数据包无丢失,能够保证IPv6网络和6LoWPAN网络的数据的转发和路由。
5 结论本文提出了一种基于OpenWrt操作系统的6LoWPAN边界路由器的实现方法,通过在边界路由器上分别实现两种协议栈,并在协议栈之间建立SLIP通道来实现数据包在两种异构网络之间的转发和路由。通过对边界路由器进行ping命令的测试,证明该方案是可行的,能够实现6LoWPAN网络和IPv6网络主机之间的通信。而在现实应用中,可以作为物联网设备接入互联网的中间网关设备随着物联网设备的大量使用,该设备具有广阔的应用前景。
0次