李洋
(武汉信息传播职业技术学院,湖北 武汉 430223)
6LoWPAN边界的路由器是连接IPv6网络、6LoWPAN网络的桥梁,需要同时提供出两组网络接入的功能,数据包则是在两种不同网络之间的转发、路由。本文设计的6LoWPAN边界路由器的系统架构主要包含了底层的硬件、设备驱动、操作系统、上层应用。
6LoWPAN边界路由器能够帮助一些能力上受限制的6LoWPAN边节点接入IPv6网络,对以上目的进行实现,这个边界的路由设备在硬件设计方面有着良好的协议执行能力、处理的能力。本文设计的6LoWPAN边界路由器硬件结构设计还包含以太网接入部分、6LoWPAN网络接入部分,这两个部分能够应用串口实施连接。
以太网的接入部分主控芯片的选用是Ralink科技公司的SOC芯片RT5350F,这个芯片是一颗高性能MIPS 24Kc CPU内核,最高的主频则是在360 MHz,较高主频能够确保处理能力。另外,这个部分采用16 MB Flash闪存作为程序的存储器,应用32 MB的16 bit SDRAM作为内存,嵌入完整的TCP/IP网络协议,能够实现网络通信功能的强大需求,并且还有着充足的空间作为安装程序、依赖库,对用户功能的扩展需求进行满足。
为实现这两种异构网络之间的互连,边界的路由器应该有着IPv6、6LoWPAN的标准。虽然说6LoWPAN协议主要是由IPv6协议所转变的,但是这个协议还有着自己特殊的性质,包含了一个适配层,实现IP数据包在IEEE 802.15.4链路上的传输。因为IPv6数据包最大的传输单位是1 280 B,IEEE802.15.4定义MAC层的每一帧的长度为127 B,造成了IPv6数据报和IEEE802.15.4帧在长度上的不匹配,一些IPv6数据包不能完整的放进一个IEEE802.15.4帧中实施传输,为对其问题进行解决,IPv6数据包通常需要在适配层实施分片、重组,另外还需压缩数据包头部,适应IEEE802.15.4帧的大小。
按照以上资料分析得知,就6LoWPAN边界路由器协议栈部分的设计,先实现了IPv6和6LoWPAN协议栈,之后经过SLIP协议在两种协议栈间建立串行通信的链路,促使两种异构网络能够经过该链路传输IP数据,实现两种异构网络的通信。
IPv6接入模块建立主要是采用OpenWrt操作系统来完成。该系统使用uClibc、busybox和shell解释器等,通过嵌入式Linux工具,提供硬件抽象层和软件包管理,系统的内部组成。用户只需要重新编译uClibc和软件包以匹配目标架构,从而获得在不同嵌入式设备上相同的应用程序。鉴于OpenWrt嵌入式系统的诸多优点,它非常适合应用于IP网络接入模块。
6LoWPAN接入模块主要是基于Conki操作系统实现,该系统作为一个可以高度移植、支持多任务环境并且开源免费的嵌入式操作系统,非常适合用于6LoWPAN接入模块的设计。该系统的软件结构主要由 uIP协议栈、Rime协议栈和上层应用程序所组成的。
1.uIP是一个小型的符合RFC规范的TCP/IP协议栈,使得Conki可以直接和Internet通信。uIP协议栈主要任务是处理由底层驱动收到的数据包,或者将需要转发的数据包交由底层设备驱动来实现数据包转发。
2.MAC层的Rime是一个轻量级的、为低功耗无线传感器网络设计的协议栈,该协议栈提供了大量的通信原语,能够实现从简单的一跳广播通信到复杂的可靠多跳数据传输等通信功能。
3.上层应用程序主要包括桥接程序和边界路由程序。前者用于通过SLIP串口实现数据包向RPL接口的转发,它是RPL数据收发转换的中间层。后者负责向IP接入模块请求本节点的子网前缀,初始化6LoWPAN接入模块,并定时维护组建的6LoWPAN网络。
两个协议栈之间通道的建立主要借助tun虚拟网卡驱动和SLIP协议来实现。其中,tun虚拟网卡驱动主要用来接收来自TCP/IP协议栈的网络数据包并发送,或者反过来将接收到的网络数据包传给协议栈处理;同时该部分还要承担在点对点设备传输过程中,对数据包进行相应封装的任务。至于封装格式,主要由点对点设备传输方式决定,本文采用的是SLIP协议,是在链路层上传输的串行线路网际协议,主要对要传输的IP数据包进行简单的封装,即加上相应的头部和尾部,并对数据包进行适当的修改,防止头部和尾部的误判。
以上通道的建立主要在OpenWrt系统上实现,通过一个tunslip6程序来建立相应的虚拟网卡和SLIP封装。
在边界路由器的射频接口接收到6LoWPAN子网发送来的比特流后,先需要经过适配层对数据包进行分片整合,整合成一个完整的IPv6数据包。之后传递到网络层,经由RPL路由协议判定数据包的目的地址是否是在6LoWPAN网络中。如果是,则转发数据包到6LoWPAN网络中;如果不是,则继续判断数据包的目的地址前缀是否属于6LoWPAN网络。如果属于,则因为没有目的端的路由,丢弃;如果不属于,则转发到IPv6接入模块。在IPv6接入模块中,先判断是否存在目的地址的路由,如果存在,则直接发送到相应的IPv6主机;如果不存在目的端的路由,则应进行邻居发现操作,根据结果对数据包做出相应处理。
为验证本文设计的6LoWPAN边界路由器是否能够连通IPv6网络和6LoWPAN网络,进行了连通性测试。测试过程中除了边界路由器外,还包括两个6LoWPAN传感器节点和一台IPv6主机。需要先放置两个传感器节点在离边界路由器10 m左右距离的位置,边界路由器通过LAN口和IPv6主机连接。因为实验室没有提供IPv6网络的接入,所以边界路由器的WAN口暂不使用。之后在IPv6主机上分别对两个传感器节点进行ping命令测试。从测试结果可以看出,响应时间在30 ms内,并且数据包无丢失,能够保证IPv6网络和6LoWPAN网络的数据的转发和路由。
综上所述,基于OpenWrt操作系统的6LoWPAN边界路由器的实现方法,通过在边界路由器上分别实现两种协议栈,在协议栈之间建立SLIP通道来实现数据包在两种异构网络之间的转发和路由。对边界路由器进行ping命令的测试,证明这个方案是可行的,可以实现6LoWPAN网络和IPv6网络主机之间的通信。在实际应用过程中,能够作为物联网设备接入互联网的中间网关设备随着物联网设备的大量使用,这个设备具有广阔的应用前景。