陽(yáng) 旺,樊振宇,吳 帆
(中南大學(xué) 信息科學(xué)與工程學(xué)院, 湖南 長(zhǎng)沙 410083)
隨著物聯(lián)網(wǎng)的發(fā)展,無(wú)線傳感網(wǎng)絡(luò)被運(yùn)用于越來(lái)越多的場(chǎng)景,需要聯(lián)網(wǎng)的設(shè)備日益增多,采用ZigBee技術(shù)的傳統(tǒng)無(wú)線傳感網(wǎng)絡(luò)面臨著一些亟須解決的問(wèn)題。ZigBee技術(shù)雖然具有自組網(wǎng)、低功耗、安全性高和可靠性強(qiáng)等特點(diǎn),但是其無(wú)法直接連接到互聯(lián)網(wǎng),ZigBee節(jié)點(diǎn)在與外界通信時(shí)需要十分復(fù)雜的應(yīng)用層專用網(wǎng)關(guān),外界只是與網(wǎng)關(guān)相連,并沒(méi)有實(shí)現(xiàn)物物相連[1]。因此,國(guó)際互聯(lián)網(wǎng)工程任務(wù)組(Internet Engineering Task Force, IETF)提出基于IPv6的低功耗無(wú)線個(gè)域網(wǎng)(IPv6 Low Power Wireless Personal Area Network, 6LoWPAN)標(biāo)準(zhǔn)[2],使得IP網(wǎng)絡(luò)得以擴(kuò)展到無(wú)線傳感器網(wǎng)絡(luò),真正意義上實(shí)現(xiàn)了無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)與互聯(lián)網(wǎng)的互聯(lián)互通。
隨著6LoWPAN標(biāo)準(zhǔn)化進(jìn)程的不斷推進(jìn), 6LoWPAN技術(shù)日趨完善,但是現(xiàn)階段,基于6LoWPAN的無(wú)線傳感網(wǎng)絡(luò)設(shè)計(jì)與應(yīng)用還存在著一些亟待解決的問(wèn)題。近年來(lái),國(guó)內(nèi)外研究學(xué)者對(duì)于6LoWPAN無(wú)線傳感網(wǎng)絡(luò)的設(shè)計(jì)與實(shí)現(xiàn)研究主要集中在以下三個(gè)方面:一是基于6LoWPAN的無(wú)線傳感網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)與優(yōu)化研究[3-5];二是6LoWPAN無(wú)線傳感網(wǎng)絡(luò)邊界路由器的設(shè)計(jì)與實(shí)現(xiàn)研究[6-8];三是6LoWPAN無(wú)線傳感網(wǎng)絡(luò)結(jié)合不同應(yīng)用層協(xié)議實(shí)現(xiàn)在不同場(chǎng)景的應(yīng)用研究[9-11]。上述研究中基于6LoWPAN無(wú)線傳感網(wǎng)絡(luò)的應(yīng)用,系統(tǒng)大多采用星型網(wǎng)絡(luò),可擴(kuò)展性較差。同時(shí),由于6LoWPAN無(wú)線傳感網(wǎng)絡(luò)的IPv6環(huán)境與目前互聯(lián)網(wǎng)的IPv4環(huán)境不兼容,手機(jī)等IPv4終端不能很好地實(shí)現(xiàn)對(duì)無(wú)線傳感網(wǎng)絡(luò)的遠(yuǎn)程監(jiān)控。另外,對(duì)于智能家居、溫室大棚和智能照明等具有小范圍、小數(shù)據(jù)量特點(diǎn)的應(yīng)用場(chǎng)景采用完全不同的設(shè)計(jì)方案并不實(shí)用。
針對(duì)上述問(wèn)題,本文設(shè)計(jì)并實(shí)現(xiàn)了基于6LoWPAN與消息隊(duì)列遙測(cè)傳輸(Message Queuing Telemetry Transport, MQTT)的無(wú)線傳感網(wǎng)絡(luò)系統(tǒng),實(shí)現(xiàn)了無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)與IPv4網(wǎng)絡(luò)的端到端通信。通過(guò)MQTT協(xié)議構(gòu)建了完整的消息轉(zhuǎn)發(fā)系統(tǒng),實(shí)現(xiàn)了無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)上傳到遠(yuǎn)程服務(wù)器以及遠(yuǎn)程客戶端對(duì)無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)的實(shí)時(shí)監(jiān)控。最后還將系統(tǒng)部署到智能家居場(chǎng)景對(duì)無(wú)線傳感網(wǎng)絡(luò)和邊界路由器進(jìn)行了性能評(píng)估,提供了一個(gè)穩(wěn)定可靠的6LoWPAN無(wú)線傳感器網(wǎng)絡(luò)框架。
6LoWPAN是一種在IEEE 802.15.4標(biāo)準(zhǔn)基礎(chǔ)上傳輸IPv6數(shù)據(jù)包的技術(shù),它能夠?qū)崿F(xiàn)嵌入式節(jié)點(diǎn)設(shè)備的網(wǎng)絡(luò)組網(wǎng)、數(shù)據(jù)分發(fā)等功能[12]。6LoWPAN為網(wǎng)絡(luò)中每個(gè)設(shè)備配備一個(gè)IPv6地址,保證網(wǎng)絡(luò)內(nèi)所有節(jié)點(diǎn)都可以訪問(wèn)外部網(wǎng)絡(luò)。6LoWPAN無(wú)線傳感網(wǎng)絡(luò)邊界路由器只負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),并不進(jìn)行應(yīng)用層數(shù)據(jù)處理,實(shí)現(xiàn)真正意義上的物與物通信。
6LoWPAN協(xié)議模型如圖1所示,其中,6LoWPAN適配層以下的物理層和數(shù)據(jù)鏈路層均采用IEEE 802.15.4標(biāo)準(zhǔn),其上層則采用TCP/IPv6協(xié)議棧,而應(yīng)用層不僅支持HTTP協(xié)議,也支持為資源受限的嵌入式設(shè)備設(shè)計(jì)的受限應(yīng)用協(xié)議(Constrained Application Protocol,CoAP)和MQTT等協(xié)議。6LoWPAN適配層作為IPv6網(wǎng)絡(luò)層和IEEE 802.15.4 MAC層之間的一個(gè)中間層,其主要提供LoWPAN網(wǎng)絡(luò)構(gòu)建、報(bào)頭壓縮和鏈路層分片與重組等功能。
應(yīng)用層傳輸層網(wǎng)絡(luò)層適配層數(shù)據(jù)鏈路層物理層HTTP/CoAP/MQTT…TCP/UDP/ICMPv6IPv66LoWPANIEEE 802.15.4MAC層IEEE 802.15.4PHY層
圖1 6LoWPAN協(xié)議棧
Fig.1 6LoWPAN protocol stack
MQTT是一種基于代理的輕量級(jí)發(fā)布/訂閱式的消息傳輸協(xié)議[13],它使用TCP/IP提供網(wǎng)絡(luò)連接,通過(guò)心跳包來(lái)保持TCP長(zhǎng)連接以便實(shí)現(xiàn)實(shí)時(shí)消息推送。如圖2所示,在MQTT 協(xié)議中有三種身份:發(fā)布者、MQTT代理、訂閱者。MQTT是多個(gè)客戶端通過(guò)一個(gè)中央代理傳遞消息的多對(duì)多協(xié)議,消息的發(fā)布者和訂閱者都作為客戶端,消息代理作為服務(wù)器,消息發(fā)布者也同時(shí)可以是消息的訂閱者。
圖2 MQTT模型Fig.2 MQTT model
MQTT提供一對(duì)多的消息發(fā)布,解除應(yīng)用程序耦合,并且具有簡(jiǎn)單易用、協(xié)議開(kāi)銷低、支持大量連接和服務(wù)質(zhì)量(Quality of Service,QoS)等優(yōu)點(diǎn),十分適合于資源受限的物聯(lián)網(wǎng)場(chǎng)景。與CoAP協(xié)議相比,在較低丟包率的情況下,MQTT消息具有更低的延遲;在使用默認(rèn)協(xié)議參數(shù)的情況下,MQTT提供了更好的吞吐量性能;在實(shí)現(xiàn)功能相同的情況下,MQTT的發(fā)布/訂閱的交互機(jī)制能有效減少傳感器網(wǎng)絡(luò)的數(shù)據(jù)流量[14-15]。隨著傳感器網(wǎng)絡(luò)規(guī)模的增加,發(fā)布/訂閱模型交互機(jī)制的優(yōu)勢(shì)將更加明顯。此外,MQTT協(xié)議已經(jīng)被應(yīng)用于很多實(shí)際產(chǎn)品,其開(kāi)源支持十分友好,部分物聯(lián)網(wǎng)云平臺(tái)也已支持MQTT協(xié)議,采用MQTT協(xié)議的無(wú)線傳感網(wǎng)絡(luò)可以更好地實(shí)現(xiàn)與云端的集成。
基于6LoWPAN與MQTT的無(wú)線傳感網(wǎng)絡(luò)是由多個(gè)6LoWPAN節(jié)點(diǎn)和一個(gè)6LoWPAN邊界路由器組成的多跳網(wǎng)絡(luò)。該無(wú)線傳感網(wǎng)絡(luò)結(jié)合遠(yuǎn)程服務(wù)器和遠(yuǎn)程客戶端組成一個(gè)如圖3所示的無(wú)線傳感網(wǎng)絡(luò)系統(tǒng)。在系統(tǒng)功能實(shí)現(xiàn)方面,無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)主要實(shí)現(xiàn)數(shù)據(jù)采集與指令執(zhí)行功能;6LoWPAN邊界路由器部分主要實(shí)現(xiàn)無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)與遠(yuǎn)程服務(wù)器和遠(yuǎn)程客戶端的互聯(lián)互通、IPv6與IPv4地址和協(xié)議轉(zhuǎn)換以及無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)管理功能;遠(yuǎn)程服務(wù)器則主要作為MQTT代理實(shí)現(xiàn)消息轉(zhuǎn)發(fā),并作為無(wú)線傳感網(wǎng)絡(luò)的遠(yuǎn)程數(shù)據(jù)中心實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)和管理功能;遠(yuǎn)程客戶端則作為無(wú)線傳感網(wǎng)絡(luò)的遠(yuǎn)程控制終端實(shí)現(xiàn)對(duì)無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)的遠(yuǎn)程監(jiān)測(cè)與控制功能。
圖3 無(wú)線傳感網(wǎng)絡(luò)系統(tǒng)Fig.3 Wireless sensor network system
在系統(tǒng)安全方面,通過(guò)在MQTT代理服務(wù)器和邊界路由器上啟用UFW防火墻來(lái)防止針對(duì)本系統(tǒng)的惡意攻擊。對(duì)于無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn),考慮到其資源相對(duì)受限的特點(diǎn),難以實(shí)現(xiàn)開(kāi)銷較大的傳輸層安全性協(xié)議/安全套接字(Transport Layer Security/Secure Sockets Layer, TLS/SSL)。因此,不僅采用MQTT協(xié)議的用戶名密碼認(rèn)證機(jī)制對(duì)接入MQTT代理服務(wù)器的節(jié)點(diǎn)進(jìn)行身份驗(yàn)證,還采用MQTT有效載荷加密機(jī)制??蛻舳瞬捎幂p量級(jí)橢圓曲線加密庫(kù)micro-ecc[16]對(duì)每個(gè)MQTT消息有效載荷的加密,MQTT代理服務(wù)器只負(fù)責(zé)轉(zhuǎn)發(fā)消息,再由接收消息的客戶端解密。
系統(tǒng)啟動(dòng)后,6LoWPAN節(jié)點(diǎn)自動(dòng)獲取網(wǎng)絡(luò)前綴生成自己的IPv6地址,通過(guò)基于IPv6的低功耗有損無(wú)線局域網(wǎng)路由器(IPv6 Routing Protocol for Low power and lossy networks,RPL)路由協(xié)議構(gòu)建以邊界路由器為根節(jié)點(diǎn)的樹(shù)型網(wǎng)絡(luò)。無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)和遠(yuǎn)程客戶端通過(guò)MQTT協(xié)議連接并認(rèn)證到遠(yuǎn)程服務(wù)器,然后通過(guò)MQTT消息實(shí)現(xiàn)交互。
2.2.1 功能需求
6LoWPAN無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)分為感知節(jié)點(diǎn)和執(zhí)行節(jié)點(diǎn)兩類,感知節(jié)點(diǎn)感知環(huán)境數(shù)據(jù)并發(fā)送到遠(yuǎn)程服務(wù)器,而執(zhí)行節(jié)點(diǎn)可以實(shí)現(xiàn)遠(yuǎn)程控制功能。無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)要實(shí)現(xiàn)完整的6LoWPAN協(xié)議棧,并在應(yīng)用層實(shí)現(xiàn)MQTT客戶端功能,從而使得節(jié)點(diǎn)能夠與遠(yuǎn)程服務(wù)器和客戶端實(shí)現(xiàn)數(shù)據(jù)交互。
2.2.2 硬件設(shè)計(jì)
無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)硬件部分由6LoWPAN控制單元、傳感器/執(zhí)行器單元和供電單元組成,如圖4所示。
圖4 傳感節(jié)點(diǎn)硬件架構(gòu)Fig.4 Sensor node hardware architecture
6LoWPAN控制單元可采用單芯片解決方案、雙芯片解決方案或網(wǎng)絡(luò)處理器解決方案[16]。其中,單芯片方案中使用片上系統(tǒng)射頻技術(shù),將射頻模塊和微控制器、閃存、內(nèi)存等集成在一起,非常適用于對(duì)成本和體積有一定要求的無(wú)線傳感節(jié)點(diǎn)。雙芯片方案中,應(yīng)用處理器和射頻芯片是分開(kāi)的,6LoWPAN協(xié)議棧與嵌入式應(yīng)用要集成到同一塊微控制器中,集成過(guò)程需要大量工程和測(cè)試工作。雖然網(wǎng)絡(luò)處理器解決方案可以獲得較大的性能提升,但是其成本也相對(duì)較高,不適合大部分無(wú)線傳感網(wǎng)絡(luò)場(chǎng)景。因此,單芯片解決方案更適合作為6LoWPAN無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)的硬件設(shè)計(jì)方案。
傳感器/執(zhí)行器單元按照其指定的協(xié)議,使用相應(yīng)的接口與6LoWPAN控制單元進(jìn)行數(shù)據(jù)交換來(lái)實(shí)現(xiàn)數(shù)據(jù)采集和指令執(zhí)行。6LoWPAN無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)的供電單元?jiǎng)t采用可充電的鋰電池模塊。
2.2.3 軟件設(shè)計(jì)
1)操作系統(tǒng)。無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)通常會(huì)搭載嵌入式操作系統(tǒng)進(jìn)行內(nèi)存管理、底層驅(qū)動(dòng)和網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)等。目前,實(shí)現(xiàn)了6LoWPAN協(xié)議棧的主流嵌入式操作系統(tǒng)包括TinyOS、Contiki和RIOT[17],其對(duì)比如表1所示。TinyOS是一個(gè)開(kāi)源嵌入式操作系統(tǒng),它使用專用的nesC進(jìn)行開(kāi)發(fā),需要采用專用編譯器,移植難度大。RIOT是一個(gè)新興的專注于低功耗無(wú)線物聯(lián)網(wǎng)設(shè)備的開(kāi)源操作系統(tǒng),它能夠在眾多平臺(tái)上運(yùn)行,而且擁有易于使用的應(yīng)用程序接口(Application Programming Interface, API)。但是,目前基于RIOT實(shí)現(xiàn)的邊界路由器存在程序執(zhí)行不穩(wěn)定以及6LoWPAN網(wǎng)絡(luò)和其他網(wǎng)絡(luò)之間的連通性差等問(wèn)題,因此它不適合組建多跳網(wǎng)絡(luò)。而Contiki完全采用C語(yǔ)言開(kāi)發(fā),并且基于事件驅(qū)動(dòng),具有可移植性好、對(duì)硬件要求低等優(yōu)點(diǎn),被廣泛應(yīng)用于6LoWPAN無(wú)線傳感網(wǎng)絡(luò)。另外,與TinyOS的伯克利低功耗IP協(xié)議棧(Berkeley Low-power IP stack, BLIP)協(xié)議棧相比,Contiki中的uIP協(xié)議棧更加側(cè)重IP功能,在組網(wǎng)方面更加出色。綜合考慮無(wú)線傳感網(wǎng)絡(luò)的實(shí)際需求、穩(wěn)定性以及系統(tǒng)的成熟度等,無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)采用Contiki系統(tǒng)。
表1 操作系統(tǒng)對(duì)比
2)程序設(shè)計(jì)與實(shí)現(xiàn)。在節(jié)點(diǎn)的程序設(shè)計(jì)與實(shí)現(xiàn)中,感知節(jié)點(diǎn)與執(zhí)行節(jié)點(diǎn)的基本程序執(zhí)行流程如圖5所示。無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)啟動(dòng)后首先進(jìn)行系統(tǒng)初始化,然后啟動(dòng)MQTT線程,向MQTT代理服務(wù)器發(fā)送連接請(qǐng)求并進(jìn)行認(rèn)證,認(rèn)證成功后則會(huì)訂閱相關(guān)主題并通過(guò)發(fā)送心跳包來(lái)保持TCP長(zhǎng)連接。不同的是,感知節(jié)點(diǎn)會(huì)進(jìn)行周期性數(shù)據(jù)采集,然后將數(shù)據(jù)發(fā)布到MQTT代理服務(wù)器。執(zhí)行節(jié)點(diǎn)則在啟動(dòng)MQTT線程后一直等待遠(yuǎn)程客戶端的控制命令,一旦收到遠(yuǎn)程客戶端對(duì)于指定主題發(fā)送的消息,它就會(huì)觸發(fā)相應(yīng)的事件,然后根據(jù)指令執(zhí)行相應(yīng)的處理程序。
圖5 感知節(jié)點(diǎn)與執(zhí)行節(jié)點(diǎn)程序流程Fig.5 Sensor node and actuator node program flow
在基本程序執(zhí)行流程中,MQTT線程是至關(guān)重要的,它涉及數(shù)據(jù)的上傳與控制指令的下發(fā)。程序啟動(dòng)后就會(huì)激活MQTT線程,在MQTT線程中實(shí)現(xiàn)了一個(gè)如圖6所示的狀態(tài)機(jī),該線程通過(guò)定時(shí)器來(lái)定期檢查MQTT狀態(tài)并實(shí)現(xiàn)狀態(tài)切換。首先,MQTT線程調(diào)用MQTT初始化函數(shù),初始化完成后調(diào)用mqtt_register函數(shù)注冊(cè)MQTT引擎。然后,節(jié)點(diǎn)嘗試加入以6LoWPAN邊界路由器為根節(jié)點(diǎn)的6LoWPAN網(wǎng)絡(luò),成功加入網(wǎng)絡(luò)后節(jié)點(diǎn)向MQTT代理發(fā)起MQTT連接并進(jìn)行認(rèn)證,認(rèn)證成功后即可向MQTT 代理訂閱或發(fā)布MQTT消息。當(dāng)出現(xiàn)斷開(kāi)連接事件,即節(jié)點(diǎn)與MQTT代理失去連接,節(jié)點(diǎn)會(huì)馬上嘗試進(jìn)行MQTT重連以恢復(fù)到連接狀態(tài)。如果重連次數(shù)達(dá)到設(shè)定的最大嘗試次數(shù),它就會(huì)轉(zhuǎn)換到錯(cuò)誤狀態(tài)。
圖6 MQTT狀態(tài)機(jī)Fig.6 MQTT state machine
2.3.1 功能需求
6LoWPAN邊界路由器的主要功能需求是實(shí)現(xiàn)6LoWPAN無(wú)線傳感網(wǎng)絡(luò)和以太網(wǎng)的互聯(lián),即實(shí)現(xiàn)數(shù)據(jù)的雙向轉(zhuǎn)發(fā)。另外,無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)中運(yùn)行了6LoWPAN協(xié)議棧,所傳輸?shù)亩际荌Pv6的數(shù)據(jù)包,而目前IPv6網(wǎng)絡(luò)還未全面普及,遠(yuǎn)程服務(wù)器和遠(yuǎn)程客戶端都處于IPv4環(huán)境。因此,還要在邊界路由器實(shí)現(xiàn)IPv6與IPv4網(wǎng)絡(luò)地址和協(xié)議的轉(zhuǎn)換。
2.3.2 設(shè)計(jì)方案
邊界路由器采用如圖7所示的基于Contiki系統(tǒng)的CETIC-6LBR設(shè)計(jì)方案[18-19],它能夠連接基于6LoWPAN的無(wú)線傳感器網(wǎng)絡(luò)和基于以太網(wǎng)的現(xiàn)有IP有線網(wǎng)絡(luò)。CETIC-6LBR方案是在Contiki系統(tǒng)之上模擬出第二個(gè)接口,不需要對(duì)uIP協(xié)議棧進(jìn)行大量修改,它還實(shí)現(xiàn)了基于RPL的多跳網(wǎng)絡(luò)管理。此外,CETIC-6LBR邊界路由器還提供Web訪問(wèn)接口,通過(guò)該接口可以獲取6LoWPAN無(wú)線傳感網(wǎng)絡(luò)的基本狀態(tài)信息,并實(shí)現(xiàn)對(duì)其高效快捷的配置與管理。
圖7 CETIC-6LBR 設(shè)計(jì)方案Fig.7 CETIC-6LBR design scheme
2.3.3 硬件設(shè)計(jì)
CETIC-6LBR支持多種硬件實(shí)現(xiàn)方案,主要分為兩類:
1)MCU-Hosted方案。MCU-Hosted方案如圖8所示,它采用一個(gè)運(yùn)行Contiki操作系統(tǒng)的無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)與一臺(tái)Linux主機(jī)組合的方式來(lái)實(shí)現(xiàn)邊界路由器。此方案中Contiki節(jié)點(diǎn)只負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),CETIC-6LBR運(yùn)行在Linux主機(jī),數(shù)據(jù)處理全部由Linux主機(jī)完成,Contiki節(jié)點(diǎn)與Linux主機(jī)之間通過(guò)串行線路網(wǎng)際協(xié)議(Serial Line Internet Protocol,SLIP)進(jìn)行數(shù)據(jù)傳輸。
圖8 MCU-Hosted方案Fig.8 MCU-Hosted scheme
2)MCU-Ethernet方案。MCU-Ethernet方案如圖9所示,它包含一個(gè)運(yùn)行Contiki操作系統(tǒng)的無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)和一個(gè)以太網(wǎng)控制器。此方案不使用Linux主機(jī),而是在Contiki節(jié)點(diǎn)運(yùn)行輕量級(jí)的CETIC-6LBR,數(shù)據(jù)包轉(zhuǎn)發(fā)與處理都由Contiki節(jié)點(diǎn)完成,以太網(wǎng)控制器與Contiki節(jié)點(diǎn)之間使用串行外設(shè)接口(Serial Peripheral Interface, SPI)協(xié)議進(jìn)行數(shù)據(jù)傳輸。
圖9 MCU-Ethernet方案Fig.9 MCU-Ethernet scheme
由于MCU-Ethernet方案中Contiki節(jié)點(diǎn)的計(jì)算能力有限,所以只能采用CETIC-6LBR的輕量級(jí)版本,這會(huì)限制整個(gè)網(wǎng)絡(luò)的處理能力,其穩(wěn)定性、可靠性都無(wú)法保證。而MCU-Hosted的Linux主機(jī)可以提供強(qiáng)大的計(jì)算能力,運(yùn)行將更穩(wěn)定、更可靠。因此,本系統(tǒng)采用MCU-Hosted方案實(shí)現(xiàn)邊界路由器。
2.3.4 軟件設(shè)計(jì)
根據(jù)MCU-Hosted方案,Contiki節(jié)點(diǎn)需要設(shè)計(jì)數(shù)據(jù)傳輸程序,一方面從無(wú)線收發(fā)器中讀取來(lái)自無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)的數(shù)據(jù)包并通過(guò)串口轉(zhuǎn)發(fā)給Linux主機(jī)進(jìn)行處理;另一方面從串口接收來(lái)自Linux主機(jī)的數(shù)據(jù)包并將其通過(guò)無(wú)線收發(fā)器發(fā)送給無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)。
Linux主機(jī)移植CETIC-6LBR方案的開(kāi)源實(shí)現(xiàn),并參考其開(kāi)發(fā)文檔對(duì)其進(jìn)行配置。在轉(zhuǎn)發(fā)數(shù)據(jù)包功能的設(shè)計(jì)上,CETIC-6LBR支持三種運(yùn)行模式:智能網(wǎng)橋模式、路由器模式和透明網(wǎng)橋模式。在路由器模式中,CETIC-6LBR為具有不同IPv6地址前綴的以太網(wǎng)和無(wú)線傳感網(wǎng)絡(luò)提供路由功能,實(shí)現(xiàn)以太網(wǎng)和6LoWPAN無(wú)線傳感網(wǎng)絡(luò)兩個(gè)IPv6子網(wǎng)的互聯(lián)。由于該模式以運(yùn)行CETIC-6LBR 的邊界路由器作為RPL 實(shí)例的根節(jié)點(diǎn),無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)作為RPL實(shí)例的子節(jié)點(diǎn),因此可以更好地實(shí)現(xiàn)對(duì)整個(gè)6LoWPAN無(wú)線傳感器網(wǎng)絡(luò)的管理。綜合考慮數(shù)據(jù)轉(zhuǎn)發(fā)性能與無(wú)線傳感網(wǎng)絡(luò)的管理功能,邊界路由器采用路由器模式。
在IPv6和IPv4互聯(lián)的設(shè)計(jì)上,目前比較成熟的方案是采用IETF提出的NAT64協(xié)議。NAT64[20]是一種有狀態(tài)的網(wǎng)絡(luò)地址與協(xié)議轉(zhuǎn)換技術(shù),它可以實(shí)現(xiàn)TCP、UDP、ICMP協(xié)議下的IPv6與IPv4網(wǎng)絡(luò)地址和協(xié)議轉(zhuǎn)換。6LoWPAN無(wú)線傳感網(wǎng)絡(luò)是純IPv6環(huán)境,無(wú)線傳感節(jié)點(diǎn)編程時(shí)要使用熟知前綴::ffff:0:0/96或64:ff9b::/96與要訪問(wèn)的IPv4地址組合成IPv6地址。然后,在邊界路由器通過(guò)NAT64解析出該IPv4地址并進(jìn)行數(shù)據(jù)包轉(zhuǎn)換,反之,則將IPv4轉(zhuǎn)換成IPv6。CETIC-6LBR方案已經(jīng)集成了Contiki操作系統(tǒng)中NAT64模塊的擴(kuò)展版,在CETIC-6LBR中啟用并配置好NAT64模塊即可實(shí)現(xiàn)網(wǎng)絡(luò)地址和協(xié)議的轉(zhuǎn)換功能。
根據(jù)6LoWPAN無(wú)線傳感網(wǎng)絡(luò)的設(shè)計(jì)方案,本文選擇智能家居系統(tǒng)作為應(yīng)用場(chǎng)景,設(shè)計(jì)與實(shí)現(xiàn)了包含5個(gè)無(wú)線傳感節(jié)點(diǎn)、1個(gè)邊界路由器、1個(gè)遠(yuǎn)程服務(wù)器和客戶端的智能家居系統(tǒng),并進(jìn)行了性能評(píng)估。無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)硬件平臺(tái)的控制單元采用cc2538dk(development kits),外接的傳感器/執(zhí)行器單元中感知節(jié)點(diǎn)包括溫濕度傳感器、氣體煙霧傳感器、人體紅外感應(yīng)器,執(zhí)行節(jié)點(diǎn)包括RGB三色燈和繼電器開(kāi)關(guān)。
邊界路由器由Raspberry Pi 3 Model B與cc2538dk組成,Raspberry Pi與cc2538dk之間的連接采用通用串行總線(Universal Serial Bus, USB)轉(zhuǎn)邏輯門(mén)電路(Transistor-Transistor Logic, TTL)模塊連接,并采用SLIP協(xié)議實(shí)現(xiàn)數(shù)據(jù)傳輸。Raspberry Pi采用Raspbian操作系統(tǒng),在其上移植CETIC-6LBR方案的開(kāi)源實(shí)現(xiàn),cc2538dk上基于Contiki操作系統(tǒng)運(yùn)行數(shù)據(jù)傳輸程序,實(shí)現(xiàn)無(wú)線接口與串口的數(shù)據(jù)轉(zhuǎn)發(fā)。遠(yuǎn)程服務(wù)器采用Ubuntu操作系統(tǒng),在其上基于開(kāi)源MQTT代理Mosquitto實(shí)現(xiàn)MQTT代理功能。遠(yuǎn)程客戶端則基于Android平臺(tái)開(kāi)發(fā)了具有MQTT客戶端功能、支持?jǐn)?shù)據(jù)獲取與展示的App。
系統(tǒng)搭建完成后將其部署到普通家庭環(huán)境中,使用筆記本電腦作為測(cè)試工具。按照如圖10所示的評(píng)估配置,將筆記本電腦連接上WiFi網(wǎng)絡(luò),然后將WiFi網(wǎng)絡(luò)共享給以太網(wǎng)卡,使用網(wǎng)線連接筆記本電腦和Raspberry Pi的以太網(wǎng)接口,最后對(duì)筆記本電腦進(jìn)行相應(yīng)的網(wǎng)絡(luò)設(shè)置。
圖10 評(píng)估配置Fig.10 Evaluation configuration
系統(tǒng)啟動(dòng)后,在筆記本電腦中訪問(wèn)CETIC-6LBR提供的Web服務(wù)器可以獲得6LBR的狀態(tài)信息包括IPv6地址、前綴以及啟用NAT64后獲得的局域網(wǎng)IPv4地址信息,還可以獲得無(wú)線傳感網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)以及節(jié)點(diǎn)的地址和狀態(tài)等信息。如圖11所示,無(wú)線傳感網(wǎng)絡(luò)由邊界路由器和5個(gè)傳感節(jié)點(diǎn)組成。
圖11 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)Fig.11 Network topology
在運(yùn)行Windows操作系統(tǒng)的筆記本電腦上使用PSPing工具測(cè)試不同有效載荷大小的ICMPv6報(bào)文到達(dá)節(jié)點(diǎn)的往返時(shí)間,獲得了樹(shù)型拓?fù)渲忻恳粚庸?jié)點(diǎn)的平均往返時(shí)間(Round-Trip Time,RTT)值。如圖12所示的測(cè)試結(jié)果表明,隨著樹(shù)的層次增加,RTT值越大,同時(shí),隨著有效載荷的增大,RTT值也越大。當(dāng)有效載荷為56 B時(shí),ICMPv6報(bào)文為64 B,封裝成IPv6報(bào)文后達(dá)到104 B,已經(jīng)超過(guò)IEEE 802.15.4有效載荷102 B的限制。由于數(shù)據(jù)包需要在6LoWPAN適配層進(jìn)行報(bào)頭壓縮、報(bào)文分片與重組等處理,這會(huì)帶來(lái)一定的時(shí)間開(kāi)銷,所以RTT值出現(xiàn)了較大的增長(zhǎng),但是沒(méi)有出現(xiàn)丟包的情況??傊瑥臏y(cè)試結(jié)果來(lái)看,往返時(shí)延較低,除了分片重組帶來(lái)較大的延時(shí)變化外,其他方面對(duì)通信時(shí)延帶來(lái)的影響較小。鏈路較為穩(wěn)定,符合預(yù)期,驗(yàn)證了所設(shè)計(jì)的無(wú)線傳感網(wǎng)絡(luò)良好的連通性與穩(wěn)定性。
圖12 有效載荷與往返時(shí)間Fig.12 Payload size versus round-trip time
在Raspberry Pi的Linux操作系統(tǒng)中,使用性能監(jiān)測(cè)工具pidstat實(shí)時(shí)監(jiān)測(cè)CETIC-6LBR進(jìn)程的CPU使用率。為防止報(bào)頭壓縮、報(bào)文分片與重組等操作影響邊界路由器性能測(cè)試,本文只使用有效載荷為8 B、16 B和32 B的ICMPv6報(bào)文在20 ms、50 ms、100 ms、200 ms和400 ms等不同間隔下進(jìn)行Ping測(cè)試。同時(shí),實(shí)時(shí)監(jiān)測(cè)邊界路由器CETIC-6LBR主進(jìn)程的CPU使用率,每次測(cè)試統(tǒng)計(jì)了100 s內(nèi)的平均CPU使用率。
圖13 Ping間隔時(shí)間與平均CPU使用率Fig.13 Ping interval versus average CPU utilization
測(cè)試結(jié)果如圖13所示,當(dāng)Ping的間隔小于1000 ms時(shí),隨著Ping間隔的減小,CPU使用率增加;同時(shí),當(dāng)Ping的間隔一定時(shí),ICMPv6報(bào)文的載荷越大,平均CPU使用率越高。當(dāng)Ping的間隔大于1000 ms時(shí),平均CPU使用率會(huì)趨于平穩(wěn)。由于間隔較大,流經(jīng)邊界路由器的流量較小,只需要較少的CPU資源即可完成處理,所以平均CPU使用率會(huì)穩(wěn)定在4%附近。當(dāng)使用載荷為32 B的ICMPv6報(bào)文在間隔為20 ms的情況下進(jìn)行測(cè)試時(shí),邊界路由器需要處理的流量最大,但是CETIC-6LBR主進(jìn)程的平均CPU使用率依然不會(huì)超過(guò)6%。由于無(wú)線傳感網(wǎng)絡(luò)的流量通常相對(duì)較小,因此本系統(tǒng)所設(shè)計(jì)的邊界路由器具有一定的穩(wěn)定性和可靠性。
系統(tǒng)啟動(dòng)后各個(gè)節(jié)點(diǎn)會(huì)按照設(shè)定的程序工作,查看Android客戶端的數(shù)據(jù)如圖14所示。其中,溫濕度數(shù)據(jù)正常顯示,氣體煙霧節(jié)點(diǎn)和紅外人體傳感節(jié)點(diǎn)工作正常。當(dāng)出現(xiàn)煙霧或者人體靠近紅外人體傳感器時(shí),Android客戶端會(huì)迅速接收到警報(bào)信息。測(cè)試RGB燈和繼電器開(kāi)關(guān)的控制按鈕,觀察到無(wú)線傳感節(jié)點(diǎn)能夠迅速做出相應(yīng)的響應(yīng)。經(jīng)過(guò)多次測(cè)試,系統(tǒng)各項(xiàng)功能表現(xiàn)良好,無(wú)線傳感網(wǎng)絡(luò)運(yùn)行穩(wěn)定,表明系統(tǒng)設(shè)計(jì)方案合理,驗(yàn)證了系統(tǒng)的可靠性。
圖14 遠(yuǎn)程客戶端數(shù)據(jù)顯示Fig.14 Remote client data display
本文設(shè)計(jì)并實(shí)現(xiàn)了基于6LoWPAN與MQTT技術(shù)的無(wú)線傳感網(wǎng)絡(luò),無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)運(yùn)行完整的6LoWPAN協(xié)議棧,應(yīng)用層采用MQTT協(xié)議實(shí)現(xiàn)MQTT客戶端功能,邊界路由器采用CETIC-6LBR方案,并通過(guò)NAT64實(shí)現(xiàn)無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)與IPv4網(wǎng)絡(luò)的通信。最后,將其應(yīng)用到智能家居場(chǎng)景,搭建了包含6LoWPAN無(wú)線傳感網(wǎng)絡(luò)節(jié)點(diǎn)、邊界路由器、遠(yuǎn)程服務(wù)器和遠(yuǎn)程客戶端的無(wú)線傳感網(wǎng)絡(luò)系統(tǒng),并對(duì)無(wú)線傳感網(wǎng)絡(luò)與邊界路由器進(jìn)行了性能評(píng)估,驗(yàn)證了基于6LoWPAN與MQTT的無(wú)線傳感網(wǎng)絡(luò)設(shè)計(jì)的合理性與可靠性。后續(xù),將對(duì)所設(shè)計(jì)的無(wú)線傳感網(wǎng)絡(luò)進(jìn)行更深入的性能評(píng)估與優(yōu)化,使其具有更好的可擴(kuò)展性,以便適用于更多的應(yīng)用場(chǎng)景。