【学术论文】基于多个开源系统的6LoWPAN边界路由器的设计
摘要:
在开源系统OpenWrt基础上,开发应用程序socket-support,并将6LBR移植到OpenWrt上。以TP-link的TL-WR703N芯片和TI公司生产的低功耗CC1310芯片作为核心硬件平台,基于Contiki、6LBR与OpenWrt系统设计了一种6LoWPAN边界路由器。同时采用CC1310芯片设计了两个6LoWPAN子节点,搭建了一个包含PC、子节点和边界路由器在内的物联网应用测试网络。测试结果表明,PC端可利用CoAP协议通过边界路由器实现对6LoWPAN子节点的数据采集与控制,可以应用于工业控制、环境检测、智能家居等多种场合,具有一定的应用价值。
0 引言
自从物联网概念的提出,6LoWPAN(IPv6 over Low Power Wireless Personal Area Network)边界路由器就是主要的研究内容之一。为实现Internet网络与无线传感器网络的互联,IETF工作组早在2004年就提出并制定了基于IPv6的以IEEE802.15.4作为底层标准的低功耗无线个域网6LoWPAN技术标准,其主要包括6LoWPAN适配层、IPv6报头压缩与解压、数据分片与重组、路由协议、IPv6网络接入和节点地址管理技术等[1]。
目前6LoWPAN协议已实现在多种开源系统上,例如6LBR、Contiki,本文采用开源的、高度可移植的6LBR和Contiki操作系统。其中,Contiki是一个开源的专门为需要联网、硬件资源严重受限的嵌入式设备而设计的事件驱动多任务操作系统[2],通过uIP协议栈提供了对IPv4和IPv6的TCP/IP协议的支持,还包含了一套轻量级的无线传感器网络协议栈Rime;同时在IPv6中还实现了6LoWPAN协议、RPL无线路由协议以及应用层协议CoAP。6LBR是为工业应用准备的6LoWPAN/RPL边界路由解决方案,它运行在低成本、开放的硬件平台和Linux主机上,因此6LBR更符合未来边界路由器的发展方向,其设计思路更能满足今后的应用需求[2]。
本文在Contiki和OpenWrt的基础上,将6LBR移植到嵌入式OpenWrt系统上,设计了一种实用的边界路由器。其能够完成IP协议栈和6LoWPAN协议栈之间的转换,使IP网络中的主机可以访问6LoWPAN传感网络中的节点[3]。
1 边界路由器实现方案
OpenWrt是一个基于Linux内核的路由器操作系统,支持各种处理器架构,对拥有ARM架构的TL-WR703N路由器有很好的支持。提供简单易用的环境框架以及模块化设计来构架自己的应用程序,这大大方便了开发应用程序和6LBR移植到OpenWrt系统中。本文在OpenWrt系统的基础上,提出了两种6LoWPAN边界路由器的解决方案,分别是6LBR-OpenWrt边界路由器方案和OpenWrt边界路由器解决方案。
2 6LBR-OpenWrt边界路由器
2.1 6LBR-OpenWrt边界路由器系统结构
6LBR用于将基于802.15.4与6LoWPAN的无线传感器网络和基于以太网的IPv6网络连接起来。6LBR设计灵活,它可以配置为支持各种网络拓扑结构用于连接无线传感器网络与IP世界。路由器TL-WR703N不能直接与6LoWPAN网络中的网络子节点进行无线通信,要采用运行Contiki程序的CC1310DK芯片,程序带有相关SLIP协议,系统框图如图1所示。
2.2 6LBR的运行模式
6LBR目前有两种运行方式:网桥模式和路由模式。在路由模式中,子节点构成的6LoWPAN无线传感器网络和以太网有不同的网络前缀;在网桥模式中,前缀则一样。文献[2]和文献[4]详细介绍了6LBR的几种模式,网桥模式不再赘述。在本文用到的路由器模式中,6LBR当作一个完整的IPv6路由器,用于连接以太网和6LoWPAN网络。6LoWPAN网络由RPL协议来管理,以太网端通过IPv6邻居发现协议管理。在这种模式下,通过数据包过滤器模块,6LBR向Contiki提供了一个虚拟的接口。路由器模式可以将传感器网络分隔成一个独立的子网,这样能清晰地分辨出无线传感器中的节点;由于网络前缀有切换功能,节点可以在不同的6LoWPAN网络中移动;节点会根据新的网络前缀获得一个新的地址,路由器模式结构如图2所示。
2.3 软件设计
本文采用路由器模式,CC1310上运行的Slip-radio程序可以实现6LBR Linux进程和802.15.4无线电的通信,通过串口收发数据。MAC(Medium Acess Control)层在6LBR里,驱动方式为载波侦听多路访问(Carrier Sense Multiple Acess,CSMA);RDC(Radio Duty Cycling)层在Slip-radio里,MAC层接收RDC层发来的数据,并通过RDC发送数据;如果RDC层检测到数据碰撞,MAC重发此数据。6LBR移植到TL-WR703N路由器上之后,需要在路由器上创建6lbr.conf文件,其主要内容如下:
MODE=ROUTER
RAW_ETH=0
BRIDGE=1
ETH_JOIN_BRIDGE=0
DEV_BRIDGE=br-lan
DEV_TAP=tap0
DEV_ETH=br-lan
RAW_ETH_FCS=0
DEV_RADIO=/dev/ttyUSB0 BAUDRATE=9600
CC1310DK与TL-WR703N串口连接,路由器上系统会根据串口生成一个虚拟网卡tap0,br-lan包括有线lan口和无线网;然后让tap0口和br-lan口相接。PC通过lan口把数据传给TL-WR703N,数据经过6LBR处理之后通过tap0即串口发送给CC1310,CC1310通过无线的方式将数据传给6LoWPAN传感器网络。
3 OpenWrt边界路由器
3.1 OpenWrt边界路由器系统结构
OpenWrt边界路由器也采用到CC1310DK芯片,与第一种方案不同的是,CC1310DK芯片不仅作为与6LoWPAN传感器网络连接的802.15.4接口,还作为无线传感器网络的RPL根节点,支持对网络的路由功能和管理RPL网络,集成了6LoWPAN适配层,并能完成IPv6协议和IEEE802.15.4协议的转换,使完整的6LoWPAN/RPL网络和OpenWrt边界路由器实现通信,因此真正起到6LoWPAN边界路由器功能的是CC1310DK。TP-WR703N通过以太网网口或者无线的方式与计算机主机连接,这样OpenWrt边界路由器便实现了处理来自IP网络和WSN的IPv6之间转发的数据。其系统框图如图3所示。
3.2 软件设计
CC1310DK通过USB接口与TL-WR703N连接,此时串口在路由器上生成/dev/ttyUSB0端口号,OpenWrt上的tunslip6软件包把端口号虚拟成tun0网卡。可以实现在TL-WR703N上ping通6LoWPAN传感器网络中的子节点,外部网络如PC通过lan口ping通边界路由器,但无法ping通6LoWPAN传感器网络中的子节点;为了实现IP网络与6LoWPAN传感器网络的通信,有两种方式,第一种是对OpenWrt里的firewall/files里添加如下配置:
config zone option input 'ACCEPT'
option forward 'REJECT'
option output 'ACCEPT'
option name '6lowpan'
option network 'lan6'
config forwarding option dest 'lan'
option src '6lowpan'
config forwarding option dest '6lowpan'
option src 'lan'
在socket-support软件包里加入如下脚本命令:
uci set network.lan6=interface
uci set network.lan6.proto=static
uci set network.lan6.ifname=tun0
uci set network.lan6.ip6assign=64
uci commit network
Uci命令行添加了一个tun0的网口,tun0是6LoWPAN传感器网络和边界路由器通信的接口,这个配置就是让lan口和tun0口相通,两者可以相互转发数据。
6LoWPAN子节点里运行带有CoAP协议的程序。CoAP协议(Constrained Application Protocol)是为物联网中资源受限设备制定的基于UDP的应用层传输协议,可让小型设备接入互联网世界。Libcoap是CoAP协议的C语言实现,它提供了server和client的功能。6LoWPAN子节点用作server端;OpenWrt提供了Libcoap软件包,TL-WR703N路由器可作client端,通过coap-client指令实现路由器对6LoWPAN无线传感器网络中子节点的数据通信。实际上目前的通信仅在TL-WR703N路由器和传感器网络构成的局域网实现。外部网络通过对路由器TL-WR703N的操作实现通信,因此本文第二种方式为在OpenWrt系统上开发了软件包socket-support,软件包主要基于socket程序在Linux下开发了服务器端,通信协议为TCP协议,计算机、手机等外部设备运行客户端。
这两种方式的数据通信除了在PC端接收发送不同外,基本是一样的。PC通过以太网口将数据传递给路由器TL-WR703N,运行border-router程序的CC1310与路由器通信接口是虚拟网卡tun0。CC1310可以看作是6LoWPAN网关节点,网关节点通过SLIP协议从路由器收到数据包,数据包格式为IPv6,而无线传感网络通信标准为IEEE 802.15.4。所以网关节点利用6LoWPAN适配层对数据包进行报头压缩、数据分片,处理后的数据根据目的地址也就是6LoWPAN网络子节点的IPv6地址发送下去;子节点收到数据后进行数据重组,响应命令,将采集到的数据压缩、分片后传给网关节点,6LoWPAN网关节点对收到的数据重组通过tun0口传给路由器,路由器通过以太网口传到IPv6网络上。其通信过程如图4所示。
4 边界路由器功能验证
由于6LBR是作为软件包应用程序移植到OpenWrt上的,为了测试应用方便,可以在第二种方案的基础上选择6LBR应用程序包。这两种方案都需要边界路由器串口连接CC1310DK,TP-WR703N目前只提供一个端口,所以在调试时只能分开测试验证。
4.1 6LBR-Openwrt边界路由器连通性测试
连通性测试主要采取如下步骤:
(1)在PC端打开cmd.exe或者,执行如下命令ping-6 bbbb::100,测试PC到网关已通,如图5所示。
(2)在运行有Copper插件的火狐浏览器内输入coap://[子节点IPv6地址]:5683/,可以访问子节点的Web端程序,然后可以选择特定的资源使用GET/POST/PUT/DELETE来获取资源的具体内容,可以看出子以太网和无线网的IPv6地址前缀并不相同,因此工作方式为路由模式,如图6所示。
4.2 OpenWrt边界路由器连通性测试
(1)打开网络调试助手,选择TCP Client模式连接边界路由器,输入getip和getipall命令可得到边界路由器的IPv6地址以及子节点的IPv6地址,如图7所示。
(2)ping6子节点地址进行ping连通性测试,也可将子节点的IPv6地址输入到浏览器地址栏里访问子节点Web界面。既可在Web页面进行GET/POST/PUT/DELETE命令操作,也可在网络调试助手内输入coap命令进行对子节点控制,如:coap-client-m get coap://:[子节点IPv6地址]:5683/sen/batmon/tem-p(得到子节点芯片的温度值29)。因此可根据具体的实际应用选择Web端页面的方式还是网络调试助手,如图8所示。
5 结论
本文以Contiki、6LBR以及OpenWrt等多个开源系统为基础,从多方面设计研究了6LoWPAN边界路由器,提出了多种可实施的解决方案。从测试结果可看出,所设计的6LoWPAN边界路由器达到了预期的设计目标,可以根据具体无线传感网络应用场合选择合适的边界路由器,下一步将陆续完善边界路由器并应用到环境检测中。
参考文献
[1] 王国清.6LoWPAN的研究及在WSN节点中的实现[D].北京:北方工业大学,2014.
[2] 张岩.基于Contiki系统的物联网应用平台设计与实现[D].哈尔滨:哈尔滨工程大学,2013.
[3] 田广东,叶鑫.基于Contiki的6LoWPAN边界路由器的设计[J].电子技术应用,2016,42(3):61-63,70.
[4] SPANDAN.6LBRModes[EB/OL].(2016-5-20)[2017-12-31].https://Github.com/cetic/6lbr/wiki/6LBR Modes.
[5] HUI J,THUBERT P.Compression format for IPv6 datagrams over IEEE 802.15. 4-based networks[S].RFC 6282,2011.
[6] 杨勇.基于Contiki的6LoWPAN网关节点设计[D].武汉:华中师范大学,2013.
[7] 朱若鑫.基于多个开源系统的6LoWPAN技术在物联网应用中的研究[D].昆明:云南大学,2015.
[8] 常英亮.基于嵌入式Linux的物联网网关研究与实现[D].北京:北京交通大学,2014.
[9] 盛李立.基于Contiki操作系统的无线传感器网络节点的设计与实现[D].武汉:武汉工程大学,2012.
作者信息:
邬明彪1,2,吴桂清1,陈清华2
(1.湖南大学 电气与信息工程学院,湖南 长沙410082;2.浙江清华长三角研究院,浙江 嘉兴314006)