郭 顯,方君麗,張恩展
(蘭州理工大學(xué) 計(jì)算機(jī)與通信學(xué)院,甘肅 蘭州 730050)
基于cooja仿真器的無線傳感器網(wǎng)絡(luò)實(shí)驗(yàn)研究
郭 顯,方君麗,張恩展
(蘭州理工大學(xué) 計(jì)算機(jī)與通信學(xué)院,甘肅 蘭州 730050)
分析無線傳感器網(wǎng)絡(luò)教學(xué)中采用集成開發(fā)環(huán)境對(duì)硬件平臺(tái)的依賴性問題,提出基于cooja仿真實(shí)驗(yàn)平臺(tái)和傳感器網(wǎng)絡(luò)標(biāo)準(zhǔn)協(xié)議6LoWPAN協(xié)議,設(shè)計(jì)無線傳感器網(wǎng)絡(luò)應(yīng)用系統(tǒng)方法及分析網(wǎng)絡(luò)協(xié)議的方法。
無線傳感器網(wǎng)絡(luò);6LoWPAN;contiki操作系統(tǒng);cooja
無線傳感器網(wǎng)絡(luò)課程是物聯(lián)網(wǎng)及相關(guān)專業(yè)的核心專業(yè)課程,其內(nèi)容涉及網(wǎng)絡(luò)協(xié)議、通信技術(shù)、嵌入式系統(tǒng)開發(fā)等內(nèi)容?;跓o線傳感器網(wǎng)絡(luò)的應(yīng)用系統(tǒng)開發(fā)有兩種方法,一種是基于特定硬件的商業(yè)化集成開發(fā)環(huán)境開發(fā)應(yīng)用系統(tǒng),這種方法的好處是方便易學(xué),缺點(diǎn)是依賴于特定硬件環(huán)境,開發(fā)系統(tǒng)不便于移植;傳感器設(shè)備差異性較大,如果硬件環(huán)境改變,學(xué)習(xí)者需重新學(xué)習(xí)新的開發(fā)環(huán)境。另一種是基于開源工具搭建開發(fā)環(huán)境設(shè)計(jì)應(yīng)用系統(tǒng),這種方法對(duì)于初學(xué)者而言比較困難,但一旦掌握這些開發(fā)技術(shù),即能以不變應(yīng)硬件平臺(tái)的萬變。目前一些流行的無線傳感器網(wǎng)絡(luò)教學(xué)實(shí)驗(yàn)箱也都是基于集成開發(fā)環(huán)境設(shè)計(jì)的,不便于學(xué)生學(xué)習(xí)。在無線傳感器網(wǎng)絡(luò)課的教學(xué)中,我們基于流行的開源工具搭建仿真實(shí)驗(yàn)教學(xué)平臺(tái),使學(xué)生能夠更好地把理論與實(shí)踐相結(jié)合,學(xué)好無線傳感器網(wǎng)絡(luò)的相關(guān)理論技術(shù)和應(yīng)用開發(fā)技術(shù),為以后在不同環(huán)境下的應(yīng)用系統(tǒng)開發(fā)打下堅(jiān)實(shí)基礎(chǔ)。
Contiki操作系統(tǒng)[1]是一個(gè)輕量級(jí)、開源的適合于資源受限環(huán)境的物聯(lián)網(wǎng)操作系統(tǒng),目前已廣泛應(yīng)用于物聯(lián)網(wǎng)的各個(gè)領(lǐng)域。Contiki系統(tǒng)完全支持IETF推出的物聯(lián)網(wǎng)協(xié)議6LoWPAN協(xié)議棧[2],支持資源受限應(yīng)用層協(xié)議CoAP協(xié)議[3],contiki操作系統(tǒng)還支持Wireshark[4]網(wǎng)絡(luò)協(xié)議分析工具。Cooja仿真器是contiki操作系統(tǒng)下無線傳感器網(wǎng)絡(luò)仿真工具,在cooja仿真器中可以仿真目前流行的多種傳感器構(gòu)成的不同傳感器網(wǎng)絡(luò),在仿真環(huán)境中可以分析網(wǎng)絡(luò)不同層的協(xié)議,cooja仿真工具還可以分析節(jié)點(diǎn)能量使用情況,接收信號(hào)強(qiáng)度、鏈路質(zhì)量等。更重要的是,在cooja仿真環(huán)境中可以開發(fā)基于無線傳感器網(wǎng)絡(luò)的各種應(yīng)用程序。
1.1 無線傳感器網(wǎng)絡(luò)模型
無線傳感器節(jié)點(diǎn)通常部署在感知區(qū)域,如圖1所示,這些分散的傳感器節(jié)點(diǎn)具有采集數(shù)據(jù)并向終端用戶傳輸路由數(shù)據(jù)的能力。因此,傳感器節(jié)點(diǎn)承擔(dān)數(shù)據(jù)源和路由器兩種角色,傳感器節(jié)點(diǎn)采集的數(shù)據(jù)通過多跳、無基礎(chǔ)設(shè)施的自組織傳感器網(wǎng)絡(luò)到達(dá)網(wǎng)關(guān),再由網(wǎng)關(guān)傳輸?shù)浇K端用戶。相反,用戶可通過網(wǎng)關(guān)向傳感器網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)送控制指令,如控制與節(jié)點(diǎn)連接的各種設(shè)備。網(wǎng)關(guān)與終端用戶間的通信方式可以是以太網(wǎng)、互聯(lián)網(wǎng)、衛(wèi)星網(wǎng)絡(luò)和無線網(wǎng)絡(luò)等。
圖1 無線傳感器網(wǎng)絡(luò)模型
1.2 無線傳感器網(wǎng)絡(luò)協(xié)議棧
6LoWPAN協(xié)議是IETF推出的物聯(lián)網(wǎng)標(biāo)準(zhǔn)協(xié)議,其目的是在低功耗無線個(gè)域網(wǎng)上使用IPv6技術(shù)實(shí)現(xiàn)萬物互聯(lián),該協(xié)議完全適合于資源受限傳感器節(jié)點(diǎn)構(gòu)成的無線傳感器網(wǎng)絡(luò)。在無線傳感器網(wǎng)絡(luò)教科書中,一般把6LoWPAN協(xié)議也稱為無線傳感器網(wǎng)絡(luò)標(biāo)準(zhǔn)協(xié)議。6LoWPAN協(xié)議棧結(jié)構(gòu)如圖2所示。
圖2 6LoWPAN協(xié)議棧結(jié)構(gòu)
在使用6LoWPAN協(xié)議棧的傳感器網(wǎng)絡(luò)中,物理層和鏈路層使用IEEE 802.15.4協(xié)議,網(wǎng)絡(luò)層使用RPL協(xié)議[5]組網(wǎng),RPL協(xié)議是IETF專為低功耗有損網(wǎng)絡(luò)LLN推出的路由協(xié)議。運(yùn)輸層一般使用傳統(tǒng)TCP/IP協(xié)議簇運(yùn)輸層的UDP協(xié)議,應(yīng)用層使用專為資源受限設(shè)備設(shè)計(jì)的類似于HTTP協(xié)議的無線傳感器網(wǎng)絡(luò)應(yīng)用層協(xié)議CoAP協(xié)議。在目前流行的瀏覽器軟件,如Firefox瀏覽器中安裝插件copper[6]就可支持CoAP協(xié)議。
1.3 網(wǎng)絡(luò)協(xié)議分析工具
Wireshark是一款開源、廣泛使用的網(wǎng)絡(luò)協(xié)議分析工具,允許對(duì)分組跟蹤嗅探、捕獲和分析,分組跟蹤是對(duì)網(wǎng)絡(luò)上某個(gè)位置的流量的記錄,是對(duì)特定鏈路上傳輸?shù)乃斜忍氐目煺?。分組跟蹤記錄從協(xié)議棧低層到高層的每個(gè)分組的時(shí)間戳,以及構(gòu)成分組的所有比特信息。該工具的使用能夠讓學(xué)生深入理解媒體介入、路由、可靠傳輸、擁塞控制等無線傳感器網(wǎng)絡(luò)原理,能夠深入理解實(shí)現(xiàn)這些機(jī)制的方法,為設(shè)計(jì)新的網(wǎng)絡(luò)協(xié)議和改進(jìn)協(xié)議打下堅(jiān)實(shí)基礎(chǔ)。
1.4 無線傳感器網(wǎng)絡(luò)操作系統(tǒng)
Contiki操作系統(tǒng)是專為資源受限網(wǎng)絡(luò)設(shè)計(jì)的無線傳感器網(wǎng)絡(luò)操作系統(tǒng),它完全支持6LoWPAN協(xié)議及CoAP協(xié)議,支持Wireshark網(wǎng)絡(luò)分析工具。我們選擇contiki操作系統(tǒng)的原因是,contiki操作系統(tǒng)中包含一個(gè)功能豐富的無線傳感器網(wǎng)絡(luò)仿真工具cooja仿真器,它不僅能夠仿真實(shí)現(xiàn)、分析網(wǎng)絡(luò)協(xié)議,跟蹤網(wǎng)絡(luò)節(jié)點(diǎn)能量消耗情況等,還能夠在仿真環(huán)境下設(shè)計(jì)無線傳感器網(wǎng)絡(luò)應(yīng)用系統(tǒng),如設(shè)計(jì)基于CoAP API的應(yīng)用系統(tǒng)等。
2.1 教學(xué)實(shí)驗(yàn)平臺(tái)搭建
Contiki操作系統(tǒng)的安裝有兩種選擇,可以直接在安裝好ubuntu操作系統(tǒng)的計(jì)算機(jī)中安裝contiki操作系統(tǒng),也可以在Windows操作系統(tǒng)中安裝虛擬機(jī)軟件VMWare,然后下載安裝contiki操作系統(tǒng)的虛擬機(jī)instant contiki,instant contiki是一個(gè)完整的contiki開發(fā)環(huán)境,包括contiki系統(tǒng),各種開發(fā)工具、編譯工具和仿真工具。Contiki操作系統(tǒng)的文件夾結(jié)構(gòu)如圖3所示。
Contiki對(duì)硬件的要求很低,移植十分方便,cpu文件夾中列出了支持的硬件平臺(tái),目前已經(jīng)支持8051系列、AVR、MSP430、ARM、ARMCortex、X86等處理器,這樣,方便在不同硬件平臺(tái)上開發(fā)應(yīng)用程序。Examples文件夾中包含了各種應(yīng)用程序開發(fā)實(shí)例,這些應(yīng)用程序可以在應(yīng)用開發(fā)中使用,tools文件夾中包括cooja仿真工具等。
圖3 contiki系統(tǒng)文件夾結(jié)構(gòu)
另外,如果是在ubuntu下直接安裝contiki系統(tǒng),為了讓ubuntu中的Fixfox瀏覽器支持CoAP協(xié)議,需要安裝Copper插件,還需要安裝Wireshark工具,以便網(wǎng)絡(luò)協(xié)議分析。
2.2 CoAP API
Contiki操作系統(tǒng)中,CoAP協(xié)議的實(shí)現(xiàn)是基于contiki系統(tǒng)的低功耗REST引擎Erbium(Er)的,CoAP引擎在apps/rest-engine/er-coap-engine.c中實(shí)現(xiàn),引擎接口由下面的結(jié)構(gòu)體提供,我們把它稱為CoAP 應(yīng)用編程接口API:
可用下面的函數(shù)調(diào)用CoAP引擎:
REST.get_query_variable();
基本的REST設(shè)計(jì)使用了HTTP協(xié)議或CoAP協(xié)議的POST、GET、PUT和DELETE等方法,Web服務(wù)被看成是由URIs唯一標(biāo)識(shí)的資源(resources)。在Web服務(wù)器上有多種可用的資源,每個(gè)資源都有REST層調(diào)用的處理函數(shù),以便為客戶請(qǐng)求提供服務(wù),REST服務(wù)器通過向客戶發(fā)送其請(qǐng)求的資源內(nèi)容作為響應(yīng)。要建立新的CoAP資源時(shí),可以使用contiki系統(tǒng)中定義的基本“資源”類型:normal resource、parent resource、separate resource、event resource和periodic resource。文件apps/rest-engin/rest-engin.h中給出了這些資源的宏定義。如普通資源的宏定義如下:
普通資源(normal resource)由與資源處理函數(shù)相關(guān)的靜態(tài)uri-path定義,它是所有其他資源類型的基礎(chǔ)。父資源(parent resource)通過評(píng)價(jià)uri-path管理幾個(gè)子資源。
一旦聲明和實(shí)現(xiàn)了資源,需要通過使用以下函數(shù)初始化REST框架,啟動(dòng)HTTP或CoAP進(jìn)程:
void rest_init_engine(void);
然后再用下面的函數(shù)激活每個(gè)聲明的資源:
2.3 應(yīng)用程序舉例
通過簡單應(yīng)用程序可以說明CoAP API的使用方法,假設(shè)本例中的網(wǎng)絡(luò)節(jié)點(diǎn)上有光敏傳感器和執(zhí)行器兩個(gè)設(shè)備,光敏傳感器向用戶發(fā)送采集數(shù)據(jù),執(zhí)行器控制節(jié)點(diǎn)上紅色led燈的開/關(guān)。Examples/er-rest-example/resource文件中的res_ light.c和res_toggle.c中分別定義了rest_light和rest_toggle兩種資源,這兩種資源與節(jié)點(diǎn)上的光敏傳感器和執(zhí)行器相對(duì)應(yīng),資源聲明如下:
資源聲明中指定資源名稱為res_light,res_ toggle,與它們對(duì)應(yīng)的回調(diào)處理分別是GET(res_get_handler)、POST(res_post_handler),即通過HTTP或CoAP協(xié)議的GET、POST方法就可獲得傳感器采集值或控制節(jié)點(diǎn)紅色led燈的開/關(guān)。
激活這兩種資源的函數(shù)如下:
其含義是資源分別在uri_path標(biāo)識(shí)“sensors/ light”和“actuators/toggle”下可用,函數(shù)的功能是將資源存入資源表。
下面是rest_light和rest_toggle資源對(duì)應(yīng)的靜態(tài)處理函數(shù),細(xì)節(jié)參見資源定義程序:
2.4 仿真實(shí)現(xiàn)過程
Contiki操作系統(tǒng)下進(jìn)入tools/cooja文件夾,運(yùn)行“ant run”命令啟動(dòng)cooja仿真器,在cooja仿真器中,我們建立如圖5(a)所示的網(wǎng)絡(luò),網(wǎng)絡(luò)中的節(jié)點(diǎn)是“sky”類型的傳感器節(jié)點(diǎn)。節(jié)點(diǎn)1為傳感器網(wǎng)絡(luò)的網(wǎng)關(guān),其上運(yùn)行examples/ ipv6/rpl-border-router/border-router.c程序。在使用6LoWPAN協(xié)議棧的傳感器網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)都使用根據(jù)MAC地址自動(dòng)生成的IPv6鏈路本地地址,所以節(jié)點(diǎn)的地址都是以“fe80”開頭的地址。為了能夠通過互聯(lián)網(wǎng)上的遠(yuǎn)程用戶終端訪問傳感器節(jié)點(diǎn),需要將鏈路本地地址映射為IPv6的全球單播地址,這一工作由網(wǎng)關(guān)完成。首先通過仿真器的菜單項(xiàng)tools->serial scoket->sky1打開網(wǎng)關(guān)的偵聽端口,然后打開新的ubuntu終端窗口,使用如下命令即可完成地址映射:
本例中除節(jié)點(diǎn)1外,其他節(jié)點(diǎn)上都運(yùn)行服務(wù)器程序examples/er-rest-example/er-example-server.c,該程序主要是激活定義的各種資源。網(wǎng)絡(luò)中節(jié)點(diǎn)使用RPL路由協(xié)議組網(wǎng)。現(xiàn)在,選擇cooja仿真器的simulation->start simulation菜單項(xiàng)就可啟動(dòng)仿真過程。仿真運(yùn)行過程中,遠(yuǎn)程用戶通過瀏覽器訪問網(wǎng)關(guān)節(jié)點(diǎn)1,瀏覽器窗口中就會(huì)列出網(wǎng)絡(luò)拓?fù)湫畔?,如網(wǎng)關(guān)節(jié)點(diǎn)的一跳鄰居節(jié)點(diǎn)信息以及由路由協(xié)議RPL協(xié)議建立的從網(wǎng)關(guān)節(jié)點(diǎn)到各節(jié)點(diǎn)的路徑信息,如圖5(b)所示,顯然該網(wǎng)絡(luò)是多跳自組織網(wǎng)絡(luò)。
圖5 仿真實(shí)例
傳感器網(wǎng)絡(luò)中的節(jié)點(diǎn)類似于Web服務(wù)器,基于定義的各種“資源”向客戶提供服務(wù)。在安裝了copper插件的Firefox瀏覽器中連接網(wǎng)絡(luò)節(jié)點(diǎn),單擊“discover”按鈕后,就會(huì)在瀏覽器“discovering”區(qū)域列出在其上運(yùn)行程序中激活的已定義資源,如前文中介紹的控制傳感器節(jié)點(diǎn)led燈的res_toggle資源,該資源的uri-path為actuators/toggle。圖6(a)顯示了連接網(wǎng)絡(luò)中節(jié)點(diǎn)4并單擊“discovering”后的結(jié)果。
因?yàn)榕cres_light資源對(duì)應(yīng)的處理函數(shù)是res_ get_()_handler(),所以通過瀏覽器上的“GET” 按鈕就可獲得光敏傳感器采集的數(shù)據(jù)。同理,通過瀏覽器上的“POST”按鈕就可遠(yuǎn)程控制傳感器節(jié)點(diǎn)上的紅色led燈。如圖6(a)中選中“actuators/ toggle”,然后單擊瀏覽器上“POST” 按鈕就可控制節(jié)點(diǎn)4上的紅色Led燈,圖6(b)是單擊之前的狀態(tài),圖6(c)是單擊“POST”按鈕之后的狀態(tài)。由圖6(c)可知,節(jié)點(diǎn)1通過節(jié)點(diǎn)7向節(jié)點(diǎn)4發(fā)送控制指令控制節(jié)點(diǎn)4上的紅色led燈打開。
圖6 仿真結(jié)果
啟動(dòng)網(wǎng)絡(luò)仿真程序之前,選擇cooja仿真器的菜單項(xiàng)tools->radio messages打開radio messages對(duì)話框,在radio messages對(duì)話框中選擇analyzer->6LoWPAN Analyzer with PCAP菜單項(xiàng),則在仿真過程中會(huì)自動(dòng)生成wireshark分組跟蹤記錄文件,該文件保存在contiki操作系統(tǒng)的tools/cooja/ build文件夾中,文件擴(kuò)展名是.pcap。這樣,可以在wireshark中打開這些文件進(jìn)行網(wǎng)絡(luò)協(xié)議分析。例如,圖7顯示了仿真開始時(shí),節(jié)點(diǎn)間通過交換RPL協(xié)議的控制消息DIS(DODAG Information Solicitation),DIO(DODAG Information Object)和DAO (Destination Advertisment Object)消息建立以網(wǎng)關(guān)為根的有向無環(huán)圖DODAG,節(jié)點(diǎn)進(jìn)而加入RPL網(wǎng)絡(luò)時(shí)的部分分組。圖8顯示了當(dāng)單擊瀏覽器上“POST”按鈕(如圖6(a)所示)時(shí),節(jié)點(diǎn)1和節(jié)點(diǎn)4之間交換的部分CoAP分組。如果想觀察分組的細(xì)節(jié),可以雙擊相應(yīng)分組對(duì)應(yīng)的行,如雙擊圖8中序號(hào)為293的分組,就會(huì)顯示出該分組的詳細(xì)信息,如圖9所示,能夠觀察到6LoWPAN協(xié)議棧的完整信息。
圖7 DODAG建立分組
圖8 CoAP協(xié)議分組
圖9 CoAP分組
無線傳感器網(wǎng)絡(luò)是物聯(lián)網(wǎng)及相關(guān)專業(yè)的核心專業(yè)課程,內(nèi)容涉及網(wǎng)絡(luò)協(xié)議、通信技術(shù)、嵌入式系統(tǒng)開發(fā)等內(nèi)容,內(nèi)容多,學(xué)習(xí)難度較大。教學(xué)中,我們基于無線傳感器網(wǎng)絡(luò)操作系統(tǒng)contiki下的cooja仿真器構(gòu)建仿真實(shí)驗(yàn)平臺(tái),便于學(xué)生把理論和實(shí)踐相結(jié)合,在仿真實(shí)驗(yàn)平臺(tái)上分析網(wǎng)絡(luò)協(xié)議原理,設(shè)計(jì)應(yīng)用系統(tǒng)程序。通過實(shí)例分析采用6LoWPAN協(xié)議的無線傳感器網(wǎng)絡(luò)仿真實(shí)驗(yàn)方法及應(yīng)用程序的開發(fā)過程,并說明基于wireshark工具分析網(wǎng)絡(luò)協(xié)議的方法。
[1] Contiki: 開源物聯(lián)網(wǎng)操作系統(tǒng)[EB/OL]. [2016-11-13].http://www.contiki-os.org.
[2] Kushalnagar N, Montenegro G, Schumacher C. IPv6 over low-power wireless personal area networks (6LoWPANs): Overiew, assumptions, problem statement, and goals (RFC 4919)[EB/OL]. [2016-10-14]. https://datatracker.ietf.org/doc/rfc4919/.
[3] Shelby Z, Hartke K, Bormann C. Constrained application protocol (CoAP)(RFC 7252)[EB/OL]. [2016-06-28]. https://tools.ietf.org/ html/draft-ietf-core-coap-18.
[4] Wireshark: 開源網(wǎng)絡(luò)包分析工具[EB/OL]. [2016-10-14]. https://www.wireshark.org/.
[5] Winter T, Thubert P. Rpl: Ipv6 routing protocol for low-power and lossy networks(RFC 6550)[EB/OL]. [2016-10-13]. https:// datatracker.ietf.org/doc/rfc6550/.
[6] Matthias K. Demo abstract: Human-CoAP interaction with copper[C]//Proceeding of the 7th IEEE International Conference on Distributed Computing in Sensor Systems and Workshops (DCOSS). Washington D C: IEEE, 2011:1-2.
(編輯:郭田珍)
1672-5913(2017)03-0167-06
G642
國家自然科學(xué)基金項(xiàng)目(61461027);甘肅省自然科學(xué)基金項(xiàng)目(145RJZA078)。
郭顯,男,副教授,研究方向?yàn)槲锫?lián)網(wǎng)工程、網(wǎng)絡(luò)安全,iamxg@63.com。