付康為 孫玲 任密林 施佺 張晨 沈樂(lè)威 王宏彬
摘 要: 基于REST架構(gòu)的CoAP協(xié)議是6LowPAN協(xié)議棧中的應(yīng)用層協(xié)議,可運(yùn)行在內(nèi)存受限和計(jì)算能力有限的嵌入式設(shè)備中,并具有請(qǐng)求響應(yīng)工作模式和可靠的數(shù)據(jù)傳輸性能,在物聯(lián)網(wǎng)領(lǐng)域中具有極大的發(fā)展?jié)摿?。然而,現(xiàn)有基于CoAP協(xié)議設(shè)計(jì)實(shí)現(xiàn)的客戶(hù)端較為復(fù)雜,影響了它在該領(lǐng)域的應(yīng)用和推廣。針對(duì)這一現(xiàn)狀,提出一種新型CoAP應(yīng)用架構(gòu),該架構(gòu)通過(guò)在CoAP協(xié)議基礎(chǔ)上增加一個(gè)鏈接服務(wù)器,實(shí)現(xiàn)CoAP客戶(hù)端和CoAP服務(wù)器之間的通信,簡(jiǎn)化了基于CoAP架構(gòu)的客戶(hù)端設(shè)計(jì),為推廣CoAP架構(gòu)在物聯(lián)網(wǎng)領(lǐng)域的應(yīng)用提供了參考模型。
關(guān)鍵詞: CoAP協(xié)議; 6LowPAN協(xié)議棧; IPv6; 無(wú)線傳感器網(wǎng)絡(luò); 物聯(lián)網(wǎng); 數(shù)據(jù)傳輸; 嵌入式設(shè)備
中圖分類(lèi)號(hào): TN929.5?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2018)20?0049?04
Abstract: The CoAP protocol based on REST architecture is the application layer protocol in the 6LowPAN protocol stack, can run on embedded devices with limited memory and computing capability, and has the request?respond work mode, reliable data transmission performance, and great development potential in the IoT field. However, the current client designed and implemented on the basis of the CoAP protocol is relatively complex, and its application and popularization in the IoT field are affected. In view of this situation, a new CoAP application architecture is proposed. In this architecture, a link server is added on the basis of the CoAP protocol, so as to realize communication between the CoAP client and CoAP server, simplify the design of the client based on the CoAP architecture, and provide a reference model for the promotion of CoAP architecture application in the IoT field.
Keyword: CoAP protocol; 6LowPAN protocol stack; IPv6; wireless sensor network; IoT; data transmission; embedded device
隨著互聯(lián)網(wǎng)的普及和物聯(lián)網(wǎng)技術(shù)的深入研究與廣泛應(yīng)用,網(wǎng)絡(luò)地址資源有限的問(wèn)題日益突出。為解決IPv4協(xié)議存在的不足,下一代互聯(lián)網(wǎng)協(xié)議IPv6正被越來(lái)越多的推廣和應(yīng)用[1]。6LowPAN作為一種新型的無(wú)線傳感器網(wǎng)絡(luò)技術(shù),基于和ZigBee技術(shù)相同的IEEE 802.15.4標(biāo)準(zhǔn),具有和IPv6互聯(lián)網(wǎng)兼容的特點(diǎn),成為人們研究和關(guān)注的熱點(diǎn)之一。6LowPAN技術(shù)可以讓每個(gè)傳感器節(jié)點(diǎn)擁有獨(dú)一無(wú)二的IPv6地址,便于無(wú)線傳感器網(wǎng)絡(luò)與IPv6互聯(lián)網(wǎng)的融合,從而實(shí)現(xiàn)無(wú)線傳感器網(wǎng)絡(luò)和互聯(lián)網(wǎng)絡(luò)的無(wú)縫連接,方便用戶(hù)遠(yuǎn)程對(duì)傳感器節(jié)點(diǎn)進(jìn)行訪問(wèn)和控制。
在6LowPAN協(xié)議棧中,基于REST架構(gòu)的CoAP協(xié)議是其應(yīng)用層協(xié)議,其架構(gòu)如圖1所示。
為了利用UDP協(xié)議占用硬件資源少、支持多播等優(yōu)點(diǎn),克服其數(shù)據(jù)傳輸不可靠的缺點(diǎn),CoAP采用雙層架構(gòu):Transaction層負(fù)責(zé)處理節(jié)點(diǎn)間的信息交換,同時(shí)增加了對(duì)多播的支持;Request/Response層用來(lái)傳輸對(duì)資源進(jìn)行操作的請(qǐng)求和響應(yīng)信息,其REST架構(gòu)也是基于該層。這種雙層方式使得CoAP協(xié)議在沒(méi)有采用TCP協(xié)議的情況下也可以實(shí)現(xiàn)數(shù)據(jù)的可靠傳輸。
目前,Contiki和Tiny OS這兩大開(kāi)源的物聯(lián)網(wǎng)操作系統(tǒng)實(shí)現(xiàn)了CoAP服務(wù)器部分,可以將代碼移植到嵌入式硬件設(shè)備中。很多大學(xué)也在搭建基于CoAP的實(shí)驗(yàn)平臺(tái),例如哈爾濱工程大學(xué)使用Contiki系統(tǒng)的CoAP服務(wù)器實(shí)現(xiàn)了一個(gè)物聯(lián)網(wǎng)監(jiān)測(cè)平臺(tái)[2]。
1.1 CoAP協(xié)議一般架構(gòu)分析
CoAP應(yīng)用的一般架構(gòu)如圖2所示。圖中,每個(gè)傳感器節(jié)點(diǎn)實(shí)際就是一個(gè)CoAP服務(wù)器,傳感器上的每一個(gè)硬件資源被描述為一個(gè)URL,例如“CoAP://[aaaa::1]/led”表示IPv6地址為aaaa::1的傳感器節(jié)點(diǎn)上的LED硬件資源。用戶(hù)可以通過(guò)get,put,post和delete四種方式對(duì)傳感器節(jié)點(diǎn)上的硬件資源進(jìn)行訪問(wèn)或控制。
圖2中的RPL是低功耗有損網(wǎng)絡(luò)IPv6路由協(xié)議,該協(xié)議能夠讓眾多的傳感器節(jié)點(diǎn)實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信,從而組成無(wú)線傳感器網(wǎng)絡(luò)[3]。邊界路由器是6LowPAN無(wú)線傳感器網(wǎng)絡(luò)與IPv6互聯(lián)網(wǎng)絡(luò)的橋梁,其作用是實(shí)現(xiàn)無(wú)線傳感器網(wǎng)絡(luò)的數(shù)據(jù)包和IP數(shù)據(jù)包之間的相互轉(zhuǎn)換。
圖2中的上位機(jī)軟件用于訪問(wèn)CoAP服務(wù)器。目前,可以訪問(wèn)CoAP服務(wù)器的客戶(hù)端軟件主要有兩種實(shí)現(xiàn)版本,一種是基于C語(yǔ)言的libCoAP,另一種是基于Java的Californium。然而,libCoAP源碼只能在Linux系統(tǒng)上運(yùn)行,Californium則不支持手持設(shè)備(例如IOS)。由于現(xiàn)有這兩種版本的源碼較為復(fù)雜,移植到Windows或其他平臺(tái)上的步驟較為繁瑣,十分不利于CoAP客戶(hù)端的進(jìn)一步開(kāi)發(fā),從而影響了CoAP協(xié)議在物聯(lián)網(wǎng)領(lǐng)域的推廣和應(yīng)用。
1.2 改進(jìn)的CoAP架構(gòu)
為了方便客戶(hù)端軟件的開(kāi)發(fā),并使得任意客戶(hù)端都可以方便地對(duì)CoAP服務(wù)器進(jìn)行訪問(wèn)和控制。本文針對(duì)圖2所示架構(gòu)的不足,提出一種如圖3所示的改進(jìn)CoAP架構(gòu)。由圖3可見(jiàn),該架構(gòu)中的邊界路由器不僅僅起到一個(gè)數(shù)據(jù)轉(zhuǎn)換的功能,還具有實(shí)現(xiàn)CoAP協(xié)議的功能,從而使系統(tǒng)能夠適應(yīng)不同的客戶(hù)端。
圖3所示架構(gòu)中,客戶(hù)端訪問(wèn)特定CoAP服務(wù)器的流程如圖4所示??蛻?hù)端通過(guò)TCP協(xié)議連接到鏈接服務(wù)器,向服務(wù)器發(fā)送CoAP指令字符串;鏈接服務(wù)器解析CoAP指令字符串,然后組成libCoAP程序的參數(shù)并調(diào)用libCoAP程序;libCoAP程序通過(guò)無(wú)線傳感器網(wǎng)絡(luò)向客戶(hù)端需要訪問(wèn)的CoAP服務(wù)器發(fā)送請(qǐng)求Request。CoAP服務(wù)器接收到該Request后生成相應(yīng)的Response,發(fā)送至libCoAP程序。libCoAP程序再將該response信息重定向至邊界路由器中的一個(gè)File(文件)中,鏈接服務(wù)器讀取該文件,然后將文件中的內(nèi)容傳輸給客戶(hù)端。至此,客戶(hù)端完成了訪問(wèn)特定CoAP服務(wù)器的流程。
2.1 CoAP服務(wù)器設(shè)計(jì)
2.1.1 CoAP服務(wù)器硬件設(shè)計(jì)
本文設(shè)計(jì)的CoAP服務(wù)器硬件原理圖如圖5所示,其中,選用CC2530微處理器作為硬件運(yùn)行平臺(tái)[4];DS18B20數(shù)字式溫度傳感器用于獲取當(dāng)前傳感器節(jié)點(diǎn)的環(huán)境溫度。繼電器的作用是控制傳感器節(jié)點(diǎn)周?chē)脑O(shè)備,可以實(shí)現(xiàn)用戶(hù)對(duì)遠(yuǎn)程設(shè)備的開(kāi)關(guān)控制。該CoAP服務(wù)器主要實(shí)現(xiàn)如下功能:
1) 傳感器采集到環(huán)境信息后發(fā)送至微處理器,微處理器通過(guò)天線將數(shù)據(jù)發(fā)送給邊界路由器。
2) 微處理器接收邊界路由器傳輸?shù)臄?shù)據(jù)包,對(duì)數(shù)據(jù)包進(jìn)行處理后發(fā)送控制命令至繼電器。
圖5 CoAP服務(wù)器硬件原理圖
Fig. 5 Schematic diagram for hardware of CoAP server
2.1.2 CoAP服務(wù)器軟件設(shè)計(jì)
CoAP服務(wù)器的軟件架構(gòu)如圖6所示,該軟件架構(gòu)移植了Contiki操作系統(tǒng)[5]。圖中,uip6是一個(gè)簡(jiǎn)易的IPv6網(wǎng)絡(luò)協(xié)議棧,為嵌入式設(shè)備融入IPv6互聯(lián)網(wǎng)提供了條件。由于最大MTU,MAC層路由等原因,IPv6不能直接運(yùn)行在IEEE 802.15.4 MAC層之上,圖中的6LowPAN作為適配層同時(shí)提供對(duì)上下兩層的支持。該層一方面將上層的IPv6數(shù)據(jù)包進(jìn)行頭部壓縮和分片,傳輸至IEEE 802.15.4協(xié)議棧中,另一方面將從IEEE 802.15.4協(xié)議棧中接收到的數(shù)據(jù)包進(jìn)行重組,傳輸至IPv6的網(wǎng)絡(luò)層[6]。
2.2 邊界路由器的設(shè)計(jì)
2.2.1 邊界路由器硬件設(shè)計(jì)
邊界路由器的硬件設(shè)計(jì)如圖7所示。
串口用于微處理器和openWRT路由器之間的數(shù)據(jù)交互。微處理器中移植了Contiki操作系統(tǒng),并在該操作系統(tǒng)下完成了邊界路由器和6LowPAN協(xié)議棧相關(guān)程序設(shè)計(jì)。openWRT是一種嵌入式Linux系統(tǒng)[7],該系統(tǒng)移植了libCoAP和鏈接服務(wù)器的代碼,負(fù)責(zé)串口數(shù)據(jù)和IPv6互聯(lián)網(wǎng)數(shù)據(jù)的交換和路由。
邊界路由器中的微處理器和openWRT路由器之間的通信采用了SLIP協(xié)議[8]。SLIP協(xié)議實(shí)現(xiàn)了在串行通信線路上運(yùn)行TCP/IP協(xié)議及其應(yīng)用服務(wù)的功能。
2.2.2 鏈接服務(wù)器的程序設(shè)計(jì)
鏈接服務(wù)器是本文設(shè)計(jì)的改進(jìn)型CoAP架構(gòu)的核心部分,其程序設(shè)計(jì)使用了Linux操作系統(tǒng)下的Socket網(wǎng)絡(luò)編程以及多線程技術(shù)[9],工作流程圖如圖8所示。
由圖8可見(jiàn),該鏈接服務(wù)器首先監(jiān)聽(tīng)一個(gè)特定的端口,該端口需要和客戶(hù)端發(fā)送/接收網(wǎng)絡(luò)數(shù)據(jù)的端口一致。當(dāng)某個(gè)客戶(hù)端和鏈接服務(wù)器建立連接時(shí),該鏈接服務(wù)器會(huì)建立一個(gè)線程來(lái)處理該客戶(hù)端的請(qǐng)求,即讀取客戶(hù)端的指令字符串。隨后,鏈接服務(wù)器會(huì)對(duì)指令字符串進(jìn)行解析,并組成libCoAP程序的參數(shù),調(diào)用libCoAP程序。最后讀取libCoAP程序返回的File內(nèi)容,并將該內(nèi)容發(fā)送至客戶(hù)端。
這里,客戶(hù)端指令字符串的格式為“CoAP服務(wù)器硬件資源URL 訪問(wèn)方式”,下面給出一個(gè)實(shí)際示例。例如,客戶(hù)端發(fā)送的指令字符串為“CoAP://[aaaa::1]/temp get”,其含義是訪問(wèn)IPv6地址為aaaa::1的CoAP服務(wù)器的溫度傳感器,獲取該溫度傳感器的具體數(shù)值。鏈接服務(wù)器會(huì)將該字符串進(jìn)行解析,解析的結(jié)果是客戶(hù)端需要訪問(wèn)URL地址為“CoAP://[aaaa::1]/temp”的硬件資源,訪問(wèn)該資源的方法是“get”。然后根據(jù)這些信息組成libCoAP程序的參數(shù),即“l(fā)ibCoAP?m get CoAP://[aaaa::1]/temp”,其中“?m get”表示libCoAP程序使用get方法對(duì)硬件資源進(jìn)行訪問(wèn)。
2.3 客戶(hù)端軟件設(shè)計(jì)
軟件設(shè)計(jì)基于跨平臺(tái)的圖形界面設(shè)計(jì)框架Qt[10],其流程如圖9所示。由于采用了改進(jìn)型的邊界路由器方案,客戶(hù)端的設(shè)計(jì)較為簡(jiǎn)單。客戶(hù)端首先和鏈接服務(wù)器建立連接,再向其發(fā)送指令字符串,等待接收鏈接服務(wù)器返回的信息。當(dāng)客戶(hù)端接收到信息時(shí),它會(huì)對(duì)信息進(jìn)行分類(lèi):如果客戶(hù)端發(fā)送的是獲取傳感器數(shù)據(jù)的指令,則會(huì)接收該傳感器返回的數(shù)據(jù),并將數(shù)據(jù)用折線圖進(jìn)行顯示;如果發(fā)送的是獲取設(shè)備當(dāng)前狀態(tài)的指令,則會(huì)接收到設(shè)備的當(dāng)前狀態(tài),并在界面上進(jìn)行顯示;如果發(fā)送的是控制設(shè)備的指令,則會(huì)接收到設(shè)備控制反饋信息,結(jié)束整個(gè)流程,否則需要繼續(xù)發(fā)送控制設(shè)備的指令或者檢查當(dāng)前設(shè)備是否正常工作。由此可以得出,改進(jìn)后的架構(gòu)簡(jiǎn)化了客戶(hù)端設(shè)計(jì),有利于推廣CoAP協(xié)議在物聯(lián)網(wǎng)領(lǐng)域的應(yīng)用。
改進(jìn)型CoAP架構(gòu)的測(cè)試過(guò)程如下:首先,設(shè)置一個(gè)IPv6地址為“aaaa::212:4b00:ef3:418c”的傳感器節(jié)點(diǎn),并將Contiki操作系統(tǒng)和DS18B20設(shè)備驅(qū)動(dòng)移植到該傳感器節(jié)點(diǎn)上,該傳感器即是圖3所示的任意一個(gè)CoAP服務(wù)器;然后,設(shè)置邊界路由器,在邊界路由器中運(yùn)行Contiki系統(tǒng)中的tunslip6程序,該程序用于為邊界路由器分配網(wǎng)絡(luò)地址前綴;隨后在計(jì)算機(jī)上進(jìn)行Ping實(shí)驗(yàn),命令結(jié)果見(jiàn)圖10??梢?jiàn),計(jì)算機(jī)可以訪問(wèn)該CoAP服務(wù)器。
最后,在計(jì)算機(jī)上運(yùn)行設(shè)計(jì)的客戶(hù)端軟件。圖11給出了該客戶(hù)端獲取CoAP服務(wù)器采集的環(huán)境溫度參數(shù)的折線圖。圖12為該客戶(hù)端上顯示的CoAP服務(wù)器控制的設(shè)備當(dāng)前狀態(tài)。
為了簡(jiǎn)化基于CoAP協(xié)議客戶(hù)端的設(shè)計(jì),本文著重提出了一種改進(jìn)的邊界路由器設(shè)計(jì)方案,構(gòu)建了系統(tǒng)架構(gòu),完成了系統(tǒng)硬件電路和軟件程序的設(shè)計(jì)。系統(tǒng)測(cè)試結(jié)果表明,本文設(shè)計(jì)方案有效可行,為推廣CoAP架構(gòu)在物聯(lián)網(wǎng)領(lǐng)域上的應(yīng)用提供了設(shè)計(jì)參考。
注:本文通訊作者為孫玲。
參考文獻(xiàn)
[1] 王曉喃,殷旭東.基于6LoWPAN無(wú)線傳感器網(wǎng)絡(luò)的農(nóng)業(yè)環(huán)境實(shí)時(shí)監(jiān)控系統(tǒng)[J].農(nóng)業(yè)工程學(xué)報(bào),2010,26(10):224?228.
WANG Xiaonan, YIN Xudong. Agricultural environment real?time monitor and control system based on 6LoWPAN sensor networks [J]. Transactions of the CSAE, 2010, 26(10): 224?228.
[2] 湯春明,張熒,吳宇平.無(wú)線物聯(lián)網(wǎng)中CoAP協(xié)議的研究與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2013,36(1):40?44.
TANG Chunming, ZHANG Ying, WU Yuping. Study and implementation of CoAP protocol in wireless Internet of Things [J]. Modern electronics technique, 2013, 36(1): 40?44.
[3] 董文超,江凌云.基于SNMP的6LoWPAN網(wǎng)絡(luò)的分層管理方案[J].南京郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2015,35(6):89?94.
DONG Wenchao, JIANG Lingyun. SNMP?based layered management scheme for 6LoWPAN networks [J]. Journal of Nanjing University of Posts and Telecommunications (Natural science edition), 2015, 35(6): 89?94.
[4] 張京,楊啟良,戈振揚(yáng),等.溫室環(huán)境參數(shù)無(wú)線傳感器網(wǎng)絡(luò)監(jiān)測(cè)系統(tǒng)構(gòu)建與CC2530傳輸特性分析[J].農(nóng)業(yè)工程學(xué)報(bào),2013,29(7):139?147.
ZHANG Jing, YANG Qiliang, GE Zhenyang, et al. WSN monitoring system for greenhouse environmental parameters and CC2530 transmission characteristics [J]. Transactions of the CSAE, 2013, 29(7): 139?147.
(上接第52頁(yè))
[5] 張效奎,白恩健.基于6LoWPAN傳感器網(wǎng)關(guān)設(shè)計(jì)[J].電子科技,2012,25(12):11?14.
ZHANG Xiaokui, BAI Enjian. Research on and design of wireless sensor network gateway based on 6LoWPAN [J]. Electronic science and technology, 2012, 25(12): 11?14.
[6] 吳德倫,張宏科.ZigBee和6LowPan:基于IEEE 802.15.4的兩種新技術(shù)[J].現(xiàn)代電信科技,2006(4):43?46.
WU Delun, ZHANG Hongke. Research of ZigBee and 6LowPan based on IEEE 802.15.4 [J]. Modern science & technology of telecommunications, 2006(4): 43?46.
[7] 苗敬利,李騰.基于openwrt的智能家居服務(wù)器的設(shè)計(jì)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(11):197?198.
MIAO Jingli, LI Teng. The design of openwrt based smart home server [J]. Network security technology & application, 2014(11): 197?198.
[8] 劉湛.底層數(shù)據(jù)通信技術(shù)比較與選擇[J].科技信息,2011(13):464?465.
LIU Zhan. Comparison and selection of underlying data communication technology [J]. Science & technology information, 2011(13): 464?465.
[9] 眭俊華,劉慧娜,王建鑫,等.多核多線程技術(shù)綜述[J].計(jì)算機(jī)應(yīng)用,2013,33(z1):239?242.
SUI Junhua, LIU Huina, WANG Jianxin, et al. Overview of multicore multithread technologies [J]. Journal of computer applications, 2013, 33(S1): 239?242.
[10] 李文帆,劉志剛,伍文城,等.基于Qt的電力系統(tǒng)地理接線圖繪制軟件設(shè)計(jì)[J].電力系統(tǒng)自動(dòng)化,2013,37(7):72?76.
LI Wenfan, LIU Zhigang, WU Wencheng, et al. Design of power system geographical wiring diagram drawing software based on Qt [J]. Automation of electric power systems, 2013, 37(7): 72?76.