付康為 孫玲 任密林 施佺 張晨 沈樂威 王宏彬
摘 要: 基于REST架構的CoAP協(xié)議是6LowPAN協(xié)議棧中的應用層協(xié)議,可運行在內(nèi)存受限和計算能力有限的嵌入式設備中,并具有請求響應工作模式和可靠的數(shù)據(jù)傳輸性能,在物聯(lián)網(wǎng)領域中具有極大的發(fā)展?jié)摿ΑH欢F(xiàn)有基于CoAP協(xié)議設計實現(xiàn)的客戶端較為復雜,影響了它在該領域的應用和推廣。針對這一現(xiàn)狀,提出一種新型CoAP應用架構,該架構通過在CoAP協(xié)議基礎上增加一個鏈接服務器,實現(xiàn)CoAP客戶端和CoAP服務器之間的通信,簡化了基于CoAP架構的客戶端設計,為推廣CoAP架構在物聯(lián)網(wǎng)領域的應用提供了參考模型。
關鍵詞: CoAP協(xié)議; 6LowPAN協(xié)議棧; IPv6; 無線傳感器網(wǎng)絡; 物聯(lián)網(wǎng); 數(shù)據(jù)傳輸; 嵌入式設備
中圖分類號: TN929.5?34 文獻標識碼: A 文章編號: 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)技術的深入研究與廣泛應用,網(wǎng)絡地址資源有限的問題日益突出。為解決IPv4協(xié)議存在的不足,下一代互聯(lián)網(wǎng)協(xié)議IPv6正被越來越多的推廣和應用[1]。6LowPAN作為一種新型的無線傳感器網(wǎng)絡技術,基于和ZigBee技術相同的IEEE 802.15.4標準,具有和IPv6互聯(lián)網(wǎng)兼容的特點,成為人們研究和關注的熱點之一。6LowPAN技術可以讓每個傳感器節(jié)點擁有獨一無二的IPv6地址,便于無線傳感器網(wǎng)絡與IPv6互聯(lián)網(wǎng)的融合,從而實現(xiàn)無線傳感器網(wǎng)絡和互聯(lián)網(wǎng)絡的無縫連接,方便用戶遠程對傳感器節(jié)點進行訪問和控制。
在6LowPAN協(xié)議棧中,基于REST架構的CoAP協(xié)議是其應用層協(xié)議,其架構如圖1所示。
為了利用UDP協(xié)議占用硬件資源少、支持多播等優(yōu)點,克服其數(shù)據(jù)傳輸不可靠的缺點,CoAP采用雙層架構:Transaction層負責處理節(jié)點間的信息交換,同時增加了對多播的支持;Request/Response層用來傳輸對資源進行操作的請求和響應信息,其REST架構也是基于該層。這種雙層方式使得CoAP協(xié)議在沒有采用TCP協(xié)議的情況下也可以實現(xiàn)數(shù)據(jù)的可靠傳輸。
目前,Contiki和Tiny OS這兩大開源的物聯(lián)網(wǎng)操作系統(tǒng)實現(xiàn)了CoAP服務器部分,可以將代碼移植到嵌入式硬件設備中。很多大學也在搭建基于CoAP的實驗平臺,例如哈爾濱工程大學使用Contiki系統(tǒng)的CoAP服務器實現(xiàn)了一個物聯(lián)網(wǎng)監(jiān)測平臺[2]。
1.1 CoAP協(xié)議一般架構分析
CoAP應用的一般架構如圖2所示。圖中,每個傳感器節(jié)點實際就是一個CoAP服務器,傳感器上的每一個硬件資源被描述為一個URL,例如“CoAP://[aaaa::1]/led”表示IPv6地址為aaaa::1的傳感器節(jié)點上的LED硬件資源。用戶可以通過get,put,post和delete四種方式對傳感器節(jié)點上的硬件資源進行訪問或控制。
圖2中的RPL是低功耗有損網(wǎng)絡IPv6路由協(xié)議,該協(xié)議能夠讓眾多的傳感器節(jié)點實現(xiàn)點對點通信,從而組成無線傳感器網(wǎng)絡[3]。邊界路由器是6LowPAN無線傳感器網(wǎng)絡與IPv6互聯(lián)網(wǎng)絡的橋梁,其作用是實現(xiàn)無線傳感器網(wǎng)絡的數(shù)據(jù)包和IP數(shù)據(jù)包之間的相互轉換。
圖2中的上位機軟件用于訪問CoAP服務器。目前,可以訪問CoAP服務器的客戶端軟件主要有兩種實現(xiàn)版本,一種是基于C語言的libCoAP,另一種是基于Java的Californium。然而,libCoAP源碼只能在Linux系統(tǒng)上運行,Californium則不支持手持設備(例如IOS)。由于現(xiàn)有這兩種版本的源碼較為復雜,移植到Windows或其他平臺上的步驟較為繁瑣,十分不利于CoAP客戶端的進一步開發(fā),從而影響了CoAP協(xié)議在物聯(lián)網(wǎng)領域的推廣和應用。
1.2 改進的CoAP架構
為了方便客戶端軟件的開發(fā),并使得任意客戶端都可以方便地對CoAP服務器進行訪問和控制。本文針對圖2所示架構的不足,提出一種如圖3所示的改進CoAP架構。由圖3可見,該架構中的邊界路由器不僅僅起到一個數(shù)據(jù)轉換的功能,還具有實現(xiàn)CoAP協(xié)議的功能,從而使系統(tǒng)能夠適應不同的客戶端。
圖3所示架構中,客戶端訪問特定CoAP服務器的流程如圖4所示。客戶端通過TCP協(xié)議連接到鏈接服務器,向服務器發(fā)送CoAP指令字符串;鏈接服務器解析CoAP指令字符串,然后組成libCoAP程序的參數(shù)并調(diào)用libCoAP程序;libCoAP程序通過無線傳感器網(wǎng)絡向客戶端需要訪問的CoAP服務器發(fā)送請求Request。CoAP服務器接收到該Request后生成相應的Response,發(fā)送至libCoAP程序。libCoAP程序再將該response信息重定向至邊界路由器中的一個File(文件)中,鏈接服務器讀取該文件,然后將文件中的內(nèi)容傳輸給客戶端。至此,客戶端完成了訪問特定CoAP服務器的流程。
2.1 CoAP服務器設計
2.1.1 CoAP服務器硬件設計
本文設計的CoAP服務器硬件原理圖如圖5所示,其中,選用CC2530微處理器作為硬件運行平臺[4];DS18B20數(shù)字式溫度傳感器用于獲取當前傳感器節(jié)點的環(huán)境溫度。繼電器的作用是控制傳感器節(jié)點周圍的設備,可以實現(xiàn)用戶對遠程設備的開關控制。該CoAP服務器主要實現(xiàn)如下功能:
1) 傳感器采集到環(huán)境信息后發(fā)送至微處理器,微處理器通過天線將數(shù)據(jù)發(fā)送給邊界路由器。
2) 微處理器接收邊界路由器傳輸?shù)臄?shù)據(jù)包,對數(shù)據(jù)包進行處理后發(fā)送控制命令至繼電器。
圖5 CoAP服務器硬件原理圖
Fig. 5 Schematic diagram for hardware of CoAP server
2.1.2 CoAP服務器軟件設計
CoAP服務器的軟件架構如圖6所示,該軟件架構移植了Contiki操作系統(tǒng)[5]。圖中,uip6是一個簡易的IPv6網(wǎng)絡協(xié)議棧,為嵌入式設備融入IPv6互聯(lián)網(wǎng)提供了條件。由于最大MTU,MAC層路由等原因,IPv6不能直接運行在IEEE 802.15.4 MAC層之上,圖中的6LowPAN作為適配層同時提供對上下兩層的支持。該層一方面將上層的IPv6數(shù)據(jù)包進行頭部壓縮和分片,傳輸至IEEE 802.15.4協(xié)議棧中,另一方面將從IEEE 802.15.4協(xié)議棧中接收到的數(shù)據(jù)包進行重組,傳輸至IPv6的網(wǎng)絡層[6]。
2.2 邊界路由器的設計
2.2.1 邊界路由器硬件設計
邊界路由器的硬件設計如圖7所示。
串口用于微處理器和openWRT路由器之間的數(shù)據(jù)交互。微處理器中移植了Contiki操作系統(tǒng),并在該操作系統(tǒng)下完成了邊界路由器和6LowPAN協(xié)議棧相關程序設計。openWRT是一種嵌入式Linux系統(tǒng)[7],該系統(tǒng)移植了libCoAP和鏈接服務器的代碼,負責串口數(shù)據(jù)和IPv6互聯(lián)網(wǎng)數(shù)據(jù)的交換和路由。
邊界路由器中的微處理器和openWRT路由器之間的通信采用了SLIP協(xié)議[8]。SLIP協(xié)議實現(xiàn)了在串行通信線路上運行TCP/IP協(xié)議及其應用服務的功能。
2.2.2 鏈接服務器的程序設計
鏈接服務器是本文設計的改進型CoAP架構的核心部分,其程序設計使用了Linux操作系統(tǒng)下的Socket網(wǎng)絡編程以及多線程技術[9],工作流程圖如圖8所示。
由圖8可見,該鏈接服務器首先監(jiān)聽一個特定的端口,該端口需要和客戶端發(fā)送/接收網(wǎng)絡數(shù)據(jù)的端口一致。當某個客戶端和鏈接服務器建立連接時,該鏈接服務器會建立一個線程來處理該客戶端的請求,即讀取客戶端的指令字符串。隨后,鏈接服務器會對指令字符串進行解析,并組成libCoAP程序的參數(shù),調(diào)用libCoAP程序。最后讀取libCoAP程序返回的File內(nèi)容,并將該內(nèi)容發(fā)送至客戶端。
這里,客戶端指令字符串的格式為“CoAP服務器硬件資源URL 訪問方式”,下面給出一個實際示例。例如,客戶端發(fā)送的指令字符串為“CoAP://[aaaa::1]/temp get”,其含義是訪問IPv6地址為aaaa::1的CoAP服務器的溫度傳感器,獲取該溫度傳感器的具體數(shù)值。鏈接服務器會將該字符串進行解析,解析的結果是客戶端需要訪問URL地址為“CoAP://[aaaa::1]/temp”的硬件資源,訪問該資源的方法是“get”。然后根據(jù)這些信息組成libCoAP程序的參數(shù),即“l(fā)ibCoAP?m get CoAP://[aaaa::1]/temp”,其中“?m get”表示libCoAP程序使用get方法對硬件資源進行訪問。
2.3 客戶端軟件設計
軟件設計基于跨平臺的圖形界面設計框架Qt[10],其流程如圖9所示。由于采用了改進型的邊界路由器方案,客戶端的設計較為簡單。客戶端首先和鏈接服務器建立連接,再向其發(fā)送指令字符串,等待接收鏈接服務器返回的信息。當客戶端接收到信息時,它會對信息進行分類:如果客戶端發(fā)送的是獲取傳感器數(shù)據(jù)的指令,則會接收該傳感器返回的數(shù)據(jù),并將數(shù)據(jù)用折線圖進行顯示;如果發(fā)送的是獲取設備當前狀態(tài)的指令,則會接收到設備的當前狀態(tài),并在界面上進行顯示;如果發(fā)送的是控制設備的指令,則會接收到設備控制反饋信息,結束整個流程,否則需要繼續(xù)發(fā)送控制設備的指令或者檢查當前設備是否正常工作。由此可以得出,改進后的架構簡化了客戶端設計,有利于推廣CoAP協(xié)議在物聯(lián)網(wǎng)領域的應用。
改進型CoAP架構的測試過程如下:首先,設置一個IPv6地址為“aaaa::212:4b00:ef3:418c”的傳感器節(jié)點,并將Contiki操作系統(tǒng)和DS18B20設備驅動移植到該傳感器節(jié)點上,該傳感器即是圖3所示的任意一個CoAP服務器;然后,設置邊界路由器,在邊界路由器中運行Contiki系統(tǒng)中的tunslip6程序,該程序用于為邊界路由器分配網(wǎng)絡地址前綴;隨后在計算機上進行Ping實驗,命令結果見圖10。可見,計算機可以訪問該CoAP服務器。
最后,在計算機上運行設計的客戶端軟件。圖11給出了該客戶端獲取CoAP服務器采集的環(huán)境溫度參數(shù)的折線圖。圖12為該客戶端上顯示的CoAP服務器控制的設備當前狀態(tài)。
為了簡化基于CoAP協(xié)議客戶端的設計,本文著重提出了一種改進的邊界路由器設計方案,構建了系統(tǒng)架構,完成了系統(tǒng)硬件電路和軟件程序的設計。系統(tǒng)測試結果表明,本文設計方案有效可行,為推廣CoAP架構在物聯(lián)網(wǎng)領域上的應用提供了設計參考。
注:本文通訊作者為孫玲。
參考文獻
[1] 王曉喃,殷旭東.基于6LoWPAN無線傳感器網(wǎng)絡的農(nóng)業(yè)環(huán)境實時監(jiān)控系統(tǒng)[J].農(nóng)業(yè)工程學報,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] 湯春明,張熒,吳宇平.無線物聯(lián)網(wǎng)中CoAP協(xié)議的研究與實現(xiàn)[J].現(xiàn)代電子技術,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)絡的分層管理方案[J].南京郵電大學學報(自然科學版),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] 張京,楊啟良,戈振揚,等.溫室環(huán)境參數(shù)無線傳感器網(wǎng)絡監(jiān)測系統(tǒng)構建與CC2530傳輸特性分析[J].農(nóng)業(yè)工程學報,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頁)
[5] 張效奎,白恩健.基于6LoWPAN傳感器網(wǎng)關設計[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的兩種新技術[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的智能家居服務器的設計[J].網(wǎ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ù)通信技術比較與選擇[J].科技信息,2011(13):464?465.
LIU Zhan. Comparison and selection of underlying data communication technology [J]. Science & technology information, 2011(13): 464?465.
[9] 眭俊華,劉慧娜,王建鑫,等.多核多線程技術綜述[J].計算機應用,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)地理接線圖繪制軟件設計[J].電力系統(tǒ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.