基于6LoWPAN与MQTT的无线传感网络设计*
2019-03-19樊振宇
阳 旺,樊振宇,吴 帆
(中南大学 信息科学与工程学院, 湖南 长沙 410083)
随着物联网的发展,无线传感网络被运用于越来越多的场景,需要联网的设备日益增多,采用ZigBee技术的传统无线传感网络面临着一些亟须解决的问题。ZigBee技术虽然具有自组网、低功耗、安全性高和可靠性强等特点,但是其无法直接连接到互联网,ZigBee节点在与外界通信时需要十分复杂的应用层专用网关,外界只是与网关相连,并没有实现物物相连[1]。因此,国际互联网工程任务组(Internet Engineering Task Force, IETF)提出基于IPv6的低功耗无线个域网(IPv6 Low Power Wireless Personal Area Network, 6LoWPAN)标准[2],使得IP网络得以扩展到无线传感器网络,真正意义上实现了无线传感网络节点与互联网的互联互通。
随着6LoWPAN标准化进程的不断推进, 6LoWPAN技术日趋完善,但是现阶段,基于6LoWPAN的无线传感网络设计与应用还存在着一些亟待解决的问题。近年来,国内外研究学者对于6LoWPAN无线传感网络的设计与实现研究主要集中在以下三个方面:一是基于6LoWPAN的无线传感网络结构设计与优化研究[3-5];二是6LoWPAN无线传感网络边界路由器的设计与实现研究[6-8];三是6LoWPAN无线传感网络结合不同应用层协议实现在不同场景的应用研究[9-11]。上述研究中基于6LoWPAN无线传感网络的应用,系统大多采用星型网络,可扩展性较差。同时,由于6LoWPAN无线传感网络的IPv6环境与目前互联网的IPv4环境不兼容,手机等IPv4终端不能很好地实现对无线传感网络的远程监控。另外,对于智能家居、温室大棚和智能照明等具有小范围、小数据量特点的应用场景采用完全不同的设计方案并不实用。
针对上述问题,本文设计并实现了基于6LoWPAN与消息队列遥测传输(Message Queuing Telemetry Transport, MQTT)的无线传感网络系统,实现了无线传感网络节点与IPv4网络的端到端通信。通过MQTT协议构建了完整的消息转发系统,实现了无线传感网络节点上传到远程服务器以及远程客户端对无线传感网络节点的实时监控。最后还将系统部署到智能家居场景对无线传感网络和边界路由器进行了性能评估,提供了一个稳定可靠的6LoWPAN无线传感器网络框架。
1 6LoWPAN与MQTT概述
1.1 6LoWPAN
6LoWPAN是一种在IEEE 802.15.4标准基础上传输IPv6数据包的技术,它能够实现嵌入式节点设备的网络组网、数据分发等功能[12]。6LoWPAN为网络中每个设备配备一个IPv6地址,保证网络内所有节点都可以访问外部网络。6LoWPAN无线传感网络边界路由器只负责数据转发,并不进行应用层数据处理,实现真正意义上的物与物通信。
6LoWPAN协议模型如图1所示,其中,6LoWPAN适配层以下的物理层和数据链路层均采用IEEE 802.15.4标准,其上层则采用TCP/IPv6协议栈,而应用层不仅支持HTTP协议,也支持为资源受限的嵌入式设备设计的受限应用协议(Constrained Application Protocol,CoAP)和MQTT等协议。6LoWPAN适配层作为IPv6网络层和IEEE 802.15.4 MAC层之间的一个中间层,其主要提供LoWPAN网络构建、报头压缩和链路层分片与重组等功能。
应用层传输层网络层适配层数据链路层物理层HTTP/CoAP/MQTT…TCP/UDP/ICMPv6IPv66LoWPANIEEE 802.15.4MAC层IEEE 802.15.4PHY层
图1 6LoWPAN协议栈
Fig.1 6LoWPAN protocol stack
1.2 MQTT
MQTT是一种基于代理的轻量级发布/订阅式的消息传输协议[13],它使用TCP/IP提供网络连接,通过心跳包来保持TCP长连接以便实现实时消息推送。如图2所示,在MQTT 协议中有三种身份:发布者、MQTT代理、订阅者。MQTT是多个客户端通过一个中央代理传递消息的多对多协议,消息的发布者和订阅者都作为客户端,消息代理作为服务器,消息发布者也同时可以是消息的订阅者。
图2 MQTT模型Fig.2 MQTT model
MQTT提供一对多的消息发布,解除应用程序耦合,并且具有简单易用、协议开销低、支持大量连接和服务质量(Quality of Service,QoS)等优点,十分适合于资源受限的物联网场景。与CoAP协议相比,在较低丢包率的情况下,MQTT消息具有更低的延迟;在使用默认协议参数的情况下,MQTT提供了更好的吞吐量性能;在实现功能相同的情况下,MQTT的发布/订阅的交互机制能有效减少传感器网络的数据流量[14-15]。随着传感器网络规模的增加,发布/订阅模型交互机制的优势将更加明显。此外,MQTT协议已经被应用于很多实际产品,其开源支持十分友好,部分物联网云平台也已支持MQTT协议,采用MQTT协议的无线传感网络可以更好地实现与云端的集成。
2 无线传感网络设计
2.1 无线传感网络系统框架设计
基于6LoWPAN与MQTT的无线传感网络是由多个6LoWPAN节点和一个6LoWPAN边界路由器组成的多跳网络。该无线传感网络结合远程服务器和远程客户端组成一个如图3所示的无线传感网络系统。在系统功能实现方面,无线传感网络节点主要实现数据采集与指令执行功能;6LoWPAN边界路由器部分主要实现无线传感网络节点与远程服务器和远程客户端的互联互通、IPv6与IPv4地址和协议转换以及无线传感网络节点管理功能;远程服务器则主要作为MQTT代理实现消息转发,并作为无线传感网络的远程数据中心实现数据存储和管理功能;远程客户端则作为无线传感网络的远程控制终端实现对无线传感网络节点的远程监测与控制功能。
图3 无线传感网络系统Fig.3 Wireless sensor network system
在系统安全方面,通过在MQTT代理服务器和边界路由器上启用UFW防火墙来防止针对本系统的恶意攻击。对于无线传感网络节点,考虑到其资源相对受限的特点,难以实现开销较大的传输层安全性协议/安全套接字(Transport Layer Security/Secure Sockets Layer, TLS/SSL)。因此,不仅采用MQTT协议的用户名密码认证机制对接入MQTT代理服务器的节点进行身份验证,还采用MQTT有效载荷加密机制。客户端采用轻量级椭圆曲线加密库micro-ecc[16]对每个MQTT消息有效载荷的加密,MQTT代理服务器只负责转发消息,再由接收消息的客户端解密。
系统启动后,6LoWPAN节点自动获取网络前缀生成自己的IPv6地址,通过基于IPv6的低功耗有损无线局域网路由器(IPv6 Routing Protocol for Low power and lossy networks,RPL)路由协议构建以边界路由器为根节点的树型网络。无线传感网络节点和远程客户端通过MQTT协议连接并认证到远程服务器,然后通过MQTT消息实现交互。
2.2 6LoWPAN无线传感网络节点
2.2.1 功能需求
6LoWPAN无线传感网络节点分为感知节点和执行节点两类,感知节点感知环境数据并发送到远程服务器,而执行节点可以实现远程控制功能。无线传感网络节点要实现完整的6LoWPAN协议栈,并在应用层实现MQTT客户端功能,从而使得节点能够与远程服务器和客户端实现数据交互。
2.2.2 硬件设计
无线传感网络节点硬件部分由6LoWPAN控制单元、传感器/执行器单元和供电单元组成,如图4所示。
图4 传感节点硬件架构Fig.4 Sensor node hardware architecture
6LoWPAN控制单元可采用单芯片解决方案、双芯片解决方案或网络处理器解决方案[16]。其中,单芯片方案中使用片上系统射频技术,将射频模块和微控制器、闪存、内存等集成在一起,非常适用于对成本和体积有一定要求的无线传感节点。双芯片方案中,应用处理器和射频芯片是分开的,6LoWPAN协议栈与嵌入式应用要集成到同一块微控制器中,集成过程需要大量工程和测试工作。虽然网络处理器解决方案可以获得较大的性能提升,但是其成本也相对较高,不适合大部分无线传感网络场景。因此,单芯片解决方案更适合作为6LoWPAN无线传感网络节点的硬件设计方案。
传感器/执行器单元按照其指定的协议,使用相应的接口与6LoWPAN控制单元进行数据交换来实现数据采集和指令执行。6LoWPAN无线传感网络节点的供电单元则采用可充电的锂电池模块。
2.2.3 软件设计
1)操作系统。无线传感网络节点通常会搭载嵌入式操作系统进行内存管理、底层驱动和网络协议实现等。目前,实现了6LoWPAN协议栈的主流嵌入式操作系统包括TinyOS、Contiki和RIOT[17],其对比如表1所示。TinyOS是一个开源嵌入式操作系统,它使用专用的nesC进行开发,需要采用专用编译器,移植难度大。RIOT是一个新兴的专注于低功耗无线物联网设备的开源操作系统,它能够在众多平台上运行,而且拥有易于使用的应用程序接口(Application Programming Interface, API)。但是,目前基于RIOT实现的边界路由器存在程序执行不稳定以及6LoWPAN网络和其他网络之间的连通性差等问题,因此它不适合组建多跳网络。而Contiki完全采用C语言开发,并且基于事件驱动,具有可移植性好、对硬件要求低等优点,被广泛应用于6LoWPAN无线传感网络。另外,与TinyOS的伯克利低功耗IP协议栈(Berkeley Low-power IP stack, BLIP)协议栈相比,Contiki中的uIP协议栈更加侧重IP功能,在组网方面更加出色。综合考虑无线传感网络的实际需求、稳定性以及系统的成熟度等,无线传感网络节点采用Contiki系统。
表1 操作系统对比
2)程序设计与实现。在节点的程序设计与实现中,感知节点与执行节点的基本程序执行流程如图5所示。无线传感网络节点启动后首先进行系统初始化,然后启动MQTT线程,向MQTT代理服务器发送连接请求并进行认证,认证成功后则会订阅相关主题并通过发送心跳包来保持TCP长连接。不同的是,感知节点会进行周期性数据采集,然后将数据发布到MQTT代理服务器。执行节点则在启动MQTT线程后一直等待远程客户端的控制命令,一旦收到远程客户端对于指定主题发送的消息,它就会触发相应的事件,然后根据指令执行相应的处理程序。
图5 感知节点与执行节点程序流程Fig.5 Sensor node and actuator node program flow
在基本程序执行流程中,MQTT线程是至关重要的,它涉及数据的上传与控制指令的下发。程序启动后就会激活MQTT线程,在MQTT线程中实现了一个如图6所示的状态机,该线程通过定时器来定期检查MQTT状态并实现状态切换。首先,MQTT线程调用MQTT初始化函数,初始化完成后调用mqtt_register函数注册MQTT引擎。然后,节点尝试加入以6LoWPAN边界路由器为根节点的6LoWPAN网络,成功加入网络后节点向MQTT代理发起MQTT连接并进行认证,认证成功后即可向MQTT 代理订阅或发布MQTT消息。当出现断开连接事件,即节点与MQTT代理失去连接,节点会马上尝试进行MQTT重连以恢复到连接状态。如果重连次数达到设定的最大尝试次数,它就会转换到错误状态。
图6 MQTT状态机Fig.6 MQTT state machine
2.3 6LoWPAN边界路由器
2.3.1 功能需求
6LoWPAN边界路由器的主要功能需求是实现6LoWPAN无线传感网络和以太网的互联,即实现数据的双向转发。另外,无线传感网络节点中运行了6LoWPAN协议栈,所传输的都是IPv6的数据包,而目前IPv6网络还未全面普及,远程服务器和远程客户端都处于IPv4环境。因此,还要在边界路由器实现IPv6与IPv4网络地址和协议的转换。
2.3.2 设计方案
边界路由器采用如图7所示的基于Contiki系统的CETIC-6LBR设计方案[18-19],它能够连接基于6LoWPAN的无线传感器网络和基于以太网的现有IP有线网络。CETIC-6LBR方案是在Contiki系统之上模拟出第二个接口,不需要对uIP协议栈进行大量修改,它还实现了基于RPL的多跳网络管理。此外,CETIC-6LBR边界路由器还提供Web访问接口,通过该接口可以获取6LoWPAN无线传感网络的基本状态信息,并实现对其高效快捷的配置与管理。
图7 CETIC-6LBR 设计方案Fig.7 CETIC-6LBR design scheme
2.3.3 硬件设计
CETIC-6LBR支持多种硬件实现方案,主要分为两类:
1)MCU-Hosted方案。MCU-Hosted方案如图8所示,它采用一个运行Contiki操作系统的无线传感网络节点与一台Linux主机组合的方式来实现边界路由器。此方案中Contiki节点只负责数据转发,CETIC-6LBR运行在Linux主机,数据处理全部由Linux主机完成,Contiki节点与Linux主机之间通过串行线路网际协议(Serial Line Internet Protocol,SLIP)进行数据传输。
图8 MCU-Hosted方案Fig.8 MCU-Hosted scheme
2)MCU-Ethernet方案。MCU-Ethernet方案如图9所示,它包含一个运行Contiki操作系统的无线传感网络节点和一个以太网控制器。此方案不使用Linux主机,而是在Contiki节点运行轻量级的CETIC-6LBR,数据包转发与处理都由Contiki节点完成,以太网控制器与Contiki节点之间使用串行外设接口(Serial Peripheral Interface, SPI)协议进行数据传输。
图9 MCU-Ethernet方案Fig.9 MCU-Ethernet scheme
由于MCU-Ethernet方案中Contiki节点的计算能力有限,所以只能采用CETIC-6LBR的轻量级版本,这会限制整个网络的处理能力,其稳定性、可靠性都无法保证。而MCU-Hosted的Linux主机可以提供强大的计算能力,运行将更稳定、更可靠。因此,本系统采用MCU-Hosted方案实现边界路由器。
2.3.4 软件设计
根据MCU-Hosted方案,Contiki节点需要设计数据传输程序,一方面从无线收发器中读取来自无线传感网络节点的数据包并通过串口转发给Linux主机进行处理;另一方面从串口接收来自Linux主机的数据包并将其通过无线收发器发送给无线传感网络节点。
Linux主机移植CETIC-6LBR方案的开源实现,并参考其开发文档对其进行配置。在转发数据包功能的设计上,CETIC-6LBR支持三种运行模式:智能网桥模式、路由器模式和透明网桥模式。在路由器模式中,CETIC-6LBR为具有不同IPv6地址前缀的以太网和无线传感网络提供路由功能,实现以太网和6LoWPAN无线传感网络两个IPv6子网的互联。由于该模式以运行CETIC-6LBR 的边界路由器作为RPL 实例的根节点,无线传感网络节点作为RPL实例的子节点,因此可以更好地实现对整个6LoWPAN无线传感器网络的管理。综合考虑数据转发性能与无线传感网络的管理功能,边界路由器采用路由器模式。
在IPv6和IPv4互联的设计上,目前比较成熟的方案是采用IETF提出的NAT64协议。NAT64[20]是一种有状态的网络地址与协议转换技术,它可以实现TCP、UDP、ICMP协议下的IPv6与IPv4网络地址和协议转换。6LoWPAN无线传感网络是纯IPv6环境,无线传感节点编程时要使用熟知前缀::ffff:0:0/96或64:ff9b::/96与要访问的IPv4地址组合成IPv6地址。然后,在边界路由器通过NAT64解析出该IPv4地址并进行数据包转换,反之,则将IPv4转换成IPv6。CETIC-6LBR方案已经集成了Contiki操作系统中NAT64模块的扩展版,在CETIC-6LBR中启用并配置好NAT64模块即可实现网络地址和协议的转换功能。
3 性能评估
3.1 评估配置
根据6LoWPAN无线传感网络的设计方案,本文选择智能家居系统作为应用场景,设计与实现了包含5个无线传感节点、1个边界路由器、1个远程服务器和客户端的智能家居系统,并进行了性能评估。无线传感网络节点硬件平台的控制单元采用cc2538dk(development kits),外接的传感器/执行器单元中感知节点包括温湿度传感器、气体烟雾传感器、人体红外感应器,执行节点包括RGB三色灯和继电器开关。
边界路由器由Raspberry Pi 3 Model B与cc2538dk组成,Raspberry Pi与cc2538dk之间的连接采用通用串行总线(Universal Serial Bus, USB)转逻辑门电路(Transistor-Transistor Logic, TTL)模块连接,并采用SLIP协议实现数据传输。Raspberry Pi采用Raspbian操作系统,在其上移植CETIC-6LBR方案的开源实现,cc2538dk上基于Contiki操作系统运行数据传输程序,实现无线接口与串口的数据转发。远程服务器采用Ubuntu操作系统,在其上基于开源MQTT代理Mosquitto实现MQTT代理功能。远程客户端则基于Android平台开发了具有MQTT客户端功能、支持数据获取与展示的App。
系统搭建完成后将其部署到普通家庭环境中,使用笔记本电脑作为测试工具。按照如图10所示的评估配置,将笔记本电脑连接上WiFi网络,然后将WiFi网络共享给以太网卡,使用网线连接笔记本电脑和Raspberry Pi的以太网接口,最后对笔记本电脑进行相应的网络设置。
图10 评估配置Fig.10 Evaluation configuration
3.2 无线传感网络性能评估
系统启动后,在笔记本电脑中访问CETIC-6LBR提供的Web服务器可以获得6LBR的状态信息包括IPv6地址、前缀以及启用NAT64后获得的局域网IPv4地址信息,还可以获得无线传感网络的拓扑结构以及节点的地址和状态等信息。如图11所示,无线传感网络由边界路由器和5个传感节点组成。
图11 网络拓扑结构Fig.11 Network topology
在运行Windows操作系统的笔记本电脑上使用PSPing工具测试不同有效载荷大小的ICMPv6报文到达节点的往返时间,获得了树型拓扑中每一层节点的平均往返时间(Round-Trip Time,RTT)值。如图12所示的测试结果表明,随着树的层次增加,RTT值越大,同时,随着有效载荷的增大,RTT值也越大。当有效载荷为56 B时,ICMPv6报文为64 B,封装成IPv6报文后达到104 B,已经超过IEEE 802.15.4有效载荷102 B的限制。由于数据包需要在6LoWPAN适配层进行报头压缩、报文分片与重组等处理,这会带来一定的时间开销,所以RTT值出现了较大的增长,但是没有出现丢包的情况。总之,从测试结果来看,往返时延较低,除了分片重组带来较大的延时变化外,其他方面对通信时延带来的影响较小。链路较为稳定,符合预期,验证了所设计的无线传感网络良好的连通性与稳定性。
图12 有效载荷与往返时间Fig.12 Payload size versus round-trip time
3.3 边界路由器性能评估
在Raspberry Pi的Linux操作系统中,使用性能监测工具pidstat实时监测CETIC-6LBR进程的CPU使用率。为防止报头压缩、报文分片与重组等操作影响边界路由器性能测试,本文只使用有效载荷为8 B、16 B和32 B的ICMPv6报文在20 ms、50 ms、100 ms、200 ms和400 ms等不同间隔下进行Ping测试。同时,实时监测边界路由器CETIC-6LBR主进程的CPU使用率,每次测试统计了100 s内的平均CPU使用率。
图13 Ping间隔时间与平均CPU使用率Fig.13 Ping interval versus average CPU utilization
测试结果如图13所示,当Ping的间隔小于1000 ms时,随着Ping间隔的减小,CPU使用率增加;同时,当Ping的间隔一定时,ICMPv6报文的载荷越大,平均CPU使用率越高。当Ping的间隔大于1000 ms时,平均CPU使用率会趋于平稳。由于间隔较大,流经边界路由器的流量较小,只需要较少的CPU资源即可完成处理,所以平均CPU使用率会稳定在4%附近。当使用载荷为32 B的ICMPv6报文在间隔为20 ms的情况下进行测试时,边界路由器需要处理的流量最大,但是CETIC-6LBR主进程的平均CPU使用率依然不会超过6%。由于无线传感网络的流量通常相对较小,因此本系统所设计的边界路由器具有一定的稳定性和可靠性。
3.4 系统功能评估
系统启动后各个节点会按照设定的程序工作,查看Android客户端的数据如图14所示。其中,温湿度数据正常显示,气体烟雾节点和红外人体传感节点工作正常。当出现烟雾或者人体靠近红外人体传感器时,Android客户端会迅速接收到警报信息。测试RGB灯和继电器开关的控制按钮,观察到无线传感节点能够迅速做出相应的响应。经过多次测试,系统各项功能表现良好,无线传感网络运行稳定,表明系统设计方案合理,验证了系统的可靠性。
图14 远程客户端数据显示Fig.14 Remote client data display
4 结论
本文设计并实现了基于6LoWPAN与MQTT技术的无线传感网络,无线传感网络节点运行完整的6LoWPAN协议栈,应用层采用MQTT协议实现MQTT客户端功能,边界路由器采用CETIC-6LBR方案,并通过NAT64实现无线传感网络节点与IPv4网络的通信。最后,将其应用到智能家居场景,搭建了包含6LoWPAN无线传感网络节点、边界路由器、远程服务器和远程客户端的无线传感网络系统,并对无线传感网络与边界路由器进行了性能评估,验证了基于6LoWPAN与MQTT的无线传感网络设计的合理性与可靠性。后续,将对所设计的无线传感网络进行更深入的性能评估与优化,使其具有更好的可扩展性,以便适用于更多的应用场景。