張溢斐 李小龍
(重慶郵電大學(xué)工業(yè)物聯(lián)網(wǎng)與網(wǎng)絡(luò)化控制教育部重點(diǎn)實(shí)驗(yàn)室,中國(guó) 重慶400065)
近年來(lái),物聯(lián)網(wǎng)發(fā)展迅速,在工業(yè)現(xiàn)場(chǎng)、智能電網(wǎng)、倉(cāng)儲(chǔ)物流等領(lǐng)域得到了廣泛應(yīng)用。作為物聯(lián)網(wǎng)的重要組成部分,無(wú)線傳感器網(wǎng)絡(luò)(Wireless Sensor Networks,WSNs)是信息通信領(lǐng)域的一個(gè)熱點(diǎn)。無(wú)線傳感器網(wǎng)絡(luò)包含諸多協(xié)議標(biāo)準(zhǔn),如ZigBee、6LoWPAN、ISA 100.11a、RFID等,隨著各種技術(shù)的發(fā)展,采用不同傳感網(wǎng)協(xié)議的網(wǎng)絡(luò)在現(xiàn)實(shí)生活中相互通信成為一個(gè)亟待解決的問(wèn)題。
IEEE 802.15.4[1]是一種低功耗、低速率、短距離無(wú)線傳輸協(xié)議,描述了低速率無(wú)線個(gè)人局域網(wǎng)的物理層和媒體接入控制協(xié)議,具有可擴(kuò)展性,且只規(guī)定了底層,即單一的媒體訪問(wèn)控制(MAC)層和多樣的物理層,至于MAC以上的協(xié)議,可以采用不同的方案。由此就產(chǎn)生了多種不同的技術(shù),比如ZigBee、6LoWPAN、ISA100.11a等?;赯igBee協(xié)議[2]的應(yīng)用已經(jīng)遍布于工業(yè)控制、智能測(cè)繪、醫(yī)療、家居等各行各業(yè),在技術(shù)的成熟度和產(chǎn)品的市場(chǎng)化方面都要比6LoWPAN更有優(yōu)勢(shì),但是6LoWPAN也有其特有的優(yōu)勢(shì),即6LoWPAN[3]網(wǎng)絡(luò)層采用IPv6協(xié)議,使得6LoWPAN設(shè)備能夠擁有IPv6地址,并在網(wǎng)絡(luò)層面上通信,甚至可以接入互聯(lián)網(wǎng),使互聯(lián)網(wǎng)的應(yīng)用擴(kuò)展到物理世界的任意角落。
本文研究了ZigBee網(wǎng)絡(luò)和6LoWPAN網(wǎng)絡(luò),設(shè)計(jì)實(shí)現(xiàn)了ZigBee和6LoWPAN這兩種不同傳感器網(wǎng)絡(luò)之間相互通信的異構(gòu)WSNs網(wǎng)關(guān)系統(tǒng),在不改變ZigBee與6LoWPAN協(xié)議的基礎(chǔ)上,成功解決了兩種無(wú)線傳感器網(wǎng)絡(luò)間不同協(xié)議互通的問(wèn)題,對(duì)促進(jìn)異構(gòu)網(wǎng)絡(luò)之間的無(wú)縫融合有積極意義。
圖1 異構(gòu)WSNs節(jié)點(diǎn)通信應(yīng)用場(chǎng)景Fig.1 Heterogeneous WSNs communication scenario
圖1所示為本文所實(shí)現(xiàn)的ZigBee與6LoWPAN傳感器網(wǎng)絡(luò)中異構(gòu)節(jié)點(diǎn)互通的場(chǎng)景。ZigBee網(wǎng)絡(luò)與6LoWPAN網(wǎng)絡(luò)通過(guò)本文設(shè)計(jì)的一個(gè)網(wǎng)關(guān)實(shí)現(xiàn)異構(gòu)傳感網(wǎng)節(jié)點(diǎn)間的互通,并可接入IP網(wǎng)絡(luò)與互聯(lián)網(wǎng)上的節(jié)點(diǎn)實(shí)現(xiàn)互通。
圖2 協(xié)議轉(zhuǎn)換模型Fig.2 Protocol conversion model
圖2所示是在圖1的具體應(yīng)用場(chǎng)景中網(wǎng)關(guān)的協(xié)議轉(zhuǎn)換圖。ZigBee網(wǎng)絡(luò)接入模塊與6LoWPAN接入模塊分別通過(guò)串口與ARM處理器相連,一起構(gòu)成網(wǎng)關(guān)的整體。ZigBee節(jié)點(diǎn)采集到的數(shù)據(jù)通過(guò)無(wú)線發(fā)送給ZigBee協(xié)調(diào)器,即ZigBee網(wǎng)絡(luò)接入模塊,解析出數(shù)據(jù)的有效載荷,通過(guò)SLIP協(xié)議發(fā)給ARM處理器,轉(zhuǎn)換成IPv6數(shù)據(jù),再通過(guò)SLIP協(xié)議發(fā)送給6LoWPAN邊界路由器,即6LoWPAN網(wǎng)絡(luò)接入模塊,繼而轉(zhuǎn)發(fā)給6LoWPAN節(jié)點(diǎn)。
網(wǎng)關(guān)由ARM處理器、ZigBee模塊、6LoWPAN模塊組成,ZigBee模塊與6LoWPAN模塊還分別作為ZigBee網(wǎng)絡(luò)的協(xié)調(diào)器與6LoWPAN網(wǎng)絡(luò)的邊界路由器。
網(wǎng)關(guān)功能主要有:
(1)基本協(xié)議解析功能,包括ZigBee協(xié)議、6LoWPAN協(xié)議以及IPv6協(xié)議。
(2)服務(wù)查詢功能,主要通過(guò)在網(wǎng)關(guān)建立起一個(gè)存儲(chǔ)傳感網(wǎng)節(jié)點(diǎn)EUI-64地址與所提供服務(wù)的服務(wù)表實(shí)現(xiàn),節(jié)點(diǎn)向網(wǎng)關(guān)發(fā)送服務(wù)查詢請(qǐng)求命令,網(wǎng)關(guān)向節(jié)點(diǎn)返回服務(wù)查詢響應(yīng)。
(3)協(xié)議轉(zhuǎn)換功能。EUI-64地址要轉(zhuǎn)換成IPv6地址,ZigBee數(shù)據(jù)包轉(zhuǎn)換成IPv6數(shù)據(jù)包。
2.1.1 服務(wù)注冊(cè)
服務(wù)注冊(cè)是將兩個(gè)傳感網(wǎng)中所有節(jié)點(diǎn)的EUI-64地址與其所提供的服務(wù)建立映射關(guān)系,將這些服務(wù)和提供服務(wù)的節(jié)點(diǎn)信息存儲(chǔ)在服務(wù)表中,從而使網(wǎng)關(guān)具有服務(wù)查詢功能[5]。
首先是網(wǎng)關(guān)初始化。ZigBee網(wǎng)絡(luò)和6LoWPAN網(wǎng)絡(luò)采用動(dòng)態(tài)組網(wǎng)方式自動(dòng)組網(wǎng),之后ZigBee節(jié)點(diǎn)上傳自身信息給ZigBee協(xié)調(diào)器,包括EUI-64地址、提供的服務(wù)類型(溫濕度檢測(cè)、設(shè)備控制等),6LoWPAN節(jié)點(diǎn)同樣上傳信息給邊界路由器,最后ARM處理器匯總信息,建立映射并生成服務(wù)表。服務(wù)表如表1所示。
表1 服務(wù)表Tab.1 Service table
2.1.2 服務(wù)查詢
服務(wù)查詢是傳感網(wǎng)節(jié)點(diǎn)向網(wǎng)關(guān)提出服務(wù)查詢請(qǐng)求,網(wǎng)關(guān)向節(jié)點(diǎn)返回服務(wù)查詢響應(yīng)。
為了傳感器節(jié)點(diǎn)能查詢到服務(wù)提供者的EUI-64地址,設(shè)立了服務(wù)代碼表,如表2所示,定義了服務(wù)查詢請(qǐng)求以及服務(wù)查詢響應(yīng)的數(shù)據(jù)包格式,如圖3和圖4所示:
(1)服務(wù)代碼表
把溫度、濕度、一氧化碳濃度等服務(wù)類型分別用以下代碼表示,如表2所示:
表2 服務(wù)代碼表Tab.2 Service code table
(2)服務(wù)查詢請(qǐng)求
圖3 服務(wù)查詢請(qǐng)求數(shù)據(jù)包格式Fig.3 Service query request frame format
其中,字符“?”為數(shù)據(jù)包的標(biāo)志位,字符“P”為數(shù)據(jù)包的識(shí)別符,字符“1”為要查詢的服務(wù)——濕度。
(3)服務(wù)查詢響應(yīng)
圖4 服務(wù)查詢響應(yīng)數(shù)據(jù)包格式Fig.4 Service query response frame format
其中,字符“!”為數(shù)據(jù)包的標(biāo)志位,字符“P”為數(shù)據(jù)包的識(shí)別符,字符“1”為要查詢的服務(wù)——濕度,EUI-64為濕度服務(wù)提供者的EUI-64地址。
節(jié)點(diǎn)查詢到服務(wù)提供者的EUI-64地址后,就可以構(gòu)造報(bào)文發(fā)送到相應(yīng)節(jié)點(diǎn)了。
ZigBee節(jié)點(diǎn)與6LoWPAN節(jié)點(diǎn)發(fā)送數(shù)據(jù)的時(shí)候要把自身的EUI-64地址、查詢得到的6LoWPAN的EUI-64地址以及真正要發(fā)送的數(shù)據(jù)打包放在應(yīng)用層負(fù)載中,因此,應(yīng)用層數(shù)據(jù)通信協(xié)議就需要包含這些必要信息數(shù)據(jù)。在傳輸過(guò)程中統(tǒng)一的數(shù)據(jù)報(bào)文格式[6]如圖5所示。
圖5 應(yīng)用層數(shù)據(jù)格式Fig.5 Application layer data format
ZigBee無(wú)線模塊與6LoWPAN無(wú)線模塊都通過(guò)串口與ARM處理器相連,數(shù)據(jù)的傳輸通過(guò)串口進(jìn)行。為了增加Linux主控單元和WSN子網(wǎng)接入模塊之間通信的安全性,在報(bào)文傳輸過(guò)程中采用SLIP協(xié)議封裝[7],接收數(shù)據(jù)時(shí)可以通過(guò)SLIP的標(biāo)志位判斷數(shù)據(jù)是否完整來(lái)決定接收或者丟棄,SLIP作為鏈路層協(xié)議直接承載IP數(shù)據(jù)包。SLIP協(xié)議封裝具體格式如圖6所示,將原報(bào)文中的字符0xC0替換為0XDB、0xDC,將字符0xDB替換為0xDB、0xDD,解封裝是反之即可,這里不再贅述。
圖6 SLIP的封裝過(guò)程Fig.6 Encapsulation process of SLIP
ZigBee數(shù)據(jù)需要轉(zhuǎn)換成IPv6數(shù)據(jù)來(lái)與6LoWPAN網(wǎng)絡(luò)通信,且6LoWPAN傳輸層采用UDP協(xié)議,因此UDP/IPv6數(shù)據(jù)包封裝與解封裝必不可少。
當(dāng)應(yīng)用層的數(shù)據(jù)產(chǎn)生后,首先要在傳輸層添加UDP首部,然后在網(wǎng)絡(luò)層添加IPv6首部,最后在數(shù)據(jù)鏈路層添加SLIP首部,生成UDP/IPv6數(shù)據(jù)包的過(guò)程如圖7所示。
ARM板串口接收到ZigBee模塊發(fā)送來(lái)的數(shù)據(jù)包,SLIP解封裝后得到應(yīng)用層數(shù)據(jù),依次取出報(bào)文中的各個(gè)變量,即ZigBee節(jié)點(diǎn)EUI-64地址、6LoWPAN節(jié)點(diǎn)的EUI-64地址、數(shù)據(jù)包長(zhǎng)度、純數(shù)據(jù)。按照IPv6首部、UDP首部、UDP偽首部、UDP校驗(yàn)和的規(guī)定依次填充各個(gè)變量,最終構(gòu)造出UDP/IPv6數(shù)據(jù)包[8]。然后添加SLIP首部后通過(guò)串口發(fā)送給6LoWPAN邊界路由器,邊界路由器將IPv6報(bào)文壓縮到只含必要內(nèi)容,且能在以IEEE 802.15.4標(biāo)準(zhǔn)為底層協(xié)議的WSN內(nèi)傳輸?shù)男?shù)據(jù)包,之后發(fā)送給目的6LoWPAN節(jié)點(diǎn)。
6LoWPAN節(jié)點(diǎn)發(fā)送數(shù)據(jù)到ZigBee節(jié)點(diǎn)時(shí),要進(jìn)行UDP/IPv6數(shù)據(jù)包的解封裝,過(guò)程與前面所述相反。
圖7 UDP/IPv6數(shù)據(jù)包封裝過(guò)程Fig.7 Encapsulation process of UDP/IPv6 data packets
節(jié)點(diǎn)交互過(guò)程主要分為3個(gè)階段:網(wǎng)關(guān)初始化階段、服務(wù)查詢階段以及數(shù)據(jù)傳輸階段。圖8所示為ZigBee節(jié)點(diǎn)(A)、異構(gòu)WSNs網(wǎng)關(guān)(B)、6LoWPAN節(jié)點(diǎn)(C)之間的交互流程[9]。主要描述了3個(gè)階段中網(wǎng)關(guān)初始化生成服務(wù)表后,由ZigBee節(jié)點(diǎn)發(fā)起服務(wù)查詢請(qǐng)求,網(wǎng)關(guān)返回服務(wù)查詢響應(yīng),ZigBee節(jié)點(diǎn)得到目的6LoWPAN節(jié)點(diǎn)地址后,發(fā)送數(shù)據(jù)到6LoWPAN節(jié)點(diǎn),6LoWPAN節(jié)點(diǎn)接收數(shù)據(jù)的整個(gè)過(guò)程。
(1)網(wǎng)關(guān)初始化
網(wǎng)關(guān)初始化包括網(wǎng)絡(luò)初始化和服務(wù)注冊(cè)。網(wǎng)關(guān)啟動(dòng)后,ZigBee節(jié)點(diǎn)和6LoWPAN節(jié)點(diǎn)分別自動(dòng)組網(wǎng),建立ZigBee網(wǎng)絡(luò)和6LoWPAN網(wǎng)絡(luò),之后節(jié)點(diǎn)向網(wǎng)關(guān)上傳自己的EUI-64地址和所提供的服務(wù),完成服務(wù)注冊(cè),由此網(wǎng)關(guān)建立起節(jié)點(diǎn)EUI-64地址與所提供服務(wù)的一一映射,存儲(chǔ)ZigBee節(jié)點(diǎn)和6LoWPAN節(jié)點(diǎn)的EUI-64地址及節(jié)點(diǎn)提供的服務(wù)。
圖8 網(wǎng)關(guān)節(jié)點(diǎn)交互流程Fig.8 Interaction flow of gateway nodes
圖9 網(wǎng)關(guān)測(cè)試系統(tǒng)示意圖Fig.9 Gateway test system schematic diagram
(2)服務(wù)查詢
節(jié)點(diǎn)A向網(wǎng)關(guān)B發(fā)起服務(wù)查詢請(qǐng)求,B收到請(qǐng)求后在服務(wù)表中查詢此服務(wù)由哪個(gè)6LoWPAN節(jié)點(diǎn)提供,查詢到是節(jié)點(diǎn)C后,把節(jié)點(diǎn)C的EUI-64地址回復(fù)給節(jié)點(diǎn)A,于是節(jié)點(diǎn)A就知道了節(jié)點(diǎn)C的EUI-64地址。
(3)數(shù)據(jù)傳輸
經(jīng)過(guò)上面兩步網(wǎng)絡(luò)初始化和服務(wù)查詢之后,節(jié)點(diǎn)A知道了提供所需服務(wù)的節(jié)點(diǎn)的EUI-64地址,然后構(gòu)造這樣的報(bào)文,即把ZigBee的EUI-64地址、6LoWPAN的EUI-64地址加上要發(fā)送的數(shù)據(jù)打包按照Z(yǔ)igBee協(xié)議發(fā)給網(wǎng)關(guān),在網(wǎng)關(guān)處進(jìn)行如下處理:ARM處理器接收到數(shù)據(jù)包后依次取出ZigBee的EUI-64地址、6LoWPAN的EUI-64地址以及數(shù)據(jù),再調(diào)用UDP/IPv6封裝程序封裝成一個(gè)IPv6數(shù)據(jù)包。然后通過(guò)串口發(fā)到6LoWPAN邊界路由器的網(wǎng)絡(luò)層,再往下傳送到適配層進(jìn)行分片、壓縮等處理,傳給MAC層及物理層,通過(guò)無(wú)線發(fā)送到目的6LoWPAN節(jié)點(diǎn),至此完成了數(shù)據(jù)從ZigBee節(jié)點(diǎn)到6LoWPAN節(jié)點(diǎn)的全過(guò)程。
網(wǎng)關(guān)測(cè)試系統(tǒng)示意圖如圖9所示:包括ARM處理器、ZigBee無(wú)線通信模塊、6LoWPAN無(wú)線通信模塊、ZigBee與6LoWPAN網(wǎng)絡(luò)節(jié)點(diǎn)。ARM處理器采用三星公司的ARM9處理器芯片S3C2440,ZigBee模塊采用CC2530芯片,6LoWPAN模塊也采用CC2530芯片。ARM處理器與兩個(gè)無(wú)線通信模塊都采用串口相連。ZigBee模塊同時(shí)作為ZigBee網(wǎng)絡(luò)的協(xié)調(diào)器,6LoWPAN模塊也同時(shí)作為6LoWPAN網(wǎng)絡(luò)的邊界路由器。兩個(gè)傳感網(wǎng)節(jié)點(diǎn)通過(guò)無(wú)線方式發(fā)送數(shù)據(jù)給ZigBee模塊和6LoWPAN模塊。
本文的ZigBee網(wǎng)絡(luò)軟件設(shè)計(jì)采用TI免費(fèi)協(xié)議棧ZStack-CC2530-2.3.0-1.4.0,工具軟件采用IAR Embedded Workbench for 80517.60。在TI免費(fèi)協(xié)議棧的基礎(chǔ)上,通過(guò)修改其應(yīng)用層來(lái)實(shí)現(xiàn)不同的功能。
在本文的6LoWPAN傳感網(wǎng)中,我們采用本實(shí)驗(yàn)室獨(dú)立開(kāi)發(fā)的6LoWPAN協(xié)議棧6lowsn_stack_v0.55,本協(xié)議棧已經(jīng)實(shí)現(xiàn)了6LoWPAN的基本功能如報(bào)頭壓縮、分片等。工具軟件采用IAR Embedded Workbench for 80517.60。用于6LoWPAN協(xié)議棧的芯片解決方案采用單芯片方案,即此協(xié)議棧可以單獨(dú)運(yùn)行在一塊CC2530芯片上,成本和復(fù)雜性都比較低。
圖10 服務(wù)查詢抓包結(jié)果Fig.10 Capture package results of service query
圖11 數(shù)據(jù)傳輸抓包結(jié)果Fig.11 Capture package results of data transmission
網(wǎng)關(guān)啟動(dòng)后,ZigBee節(jié)點(diǎn)與6LoWPAN節(jié)點(diǎn)分別各自組網(wǎng),并在網(wǎng)關(guān)處建立起服務(wù)表。ZigBee節(jié)點(diǎn)向網(wǎng)關(guān)發(fā)送服務(wù)查詢請(qǐng)求,網(wǎng)關(guān)向ZigBee節(jié)點(diǎn)返回服務(wù)查詢響應(yīng)。之后ZigBee節(jié)點(diǎn)向網(wǎng)關(guān)發(fā)送數(shù)據(jù),網(wǎng)關(guān)經(jīng)過(guò)處理后發(fā)送給目的6LoWPAN節(jié)點(diǎn),完成了服務(wù)查詢與數(shù)據(jù)傳輸?shù)娜^(guò)程,使用Chipcon Packet sniffer軟件對(duì)整個(gè)過(guò)程進(jìn)行抓包,抓包結(jié)果如下:
圖10是服務(wù)查詢抓包結(jié)果??梢钥闯鼍W(wǎng)關(guān)啟動(dòng)后,ZigBee節(jié)點(diǎn)與6LoWPAN節(jié)點(diǎn)分別各自組網(wǎng),之后ZigBee節(jié)點(diǎn)發(fā)送服務(wù)查詢請(qǐng)求命令“?P1”,網(wǎng)關(guān)查詢服務(wù)表后得到服務(wù)“1”提供者6LoWPAN節(jié)點(diǎn)的EUI-64地址,于是向ZigBee節(jié)點(diǎn)返回服務(wù)查詢響應(yīng) “!P1”加上6LoWPAN節(jié)點(diǎn)的EUI-64地址,服務(wù)查詢階段結(jié)束。
圖11是數(shù)據(jù)傳輸抓包結(jié)果。ZigBee節(jié)點(diǎn)把自身EUI-64地址、查詢到的6LoWPAN的EUI-64地址和要發(fā)送的數(shù)據(jù)“am”打包作為應(yīng)用層數(shù)據(jù)發(fā)送給網(wǎng)關(guān)。網(wǎng)關(guān)接收到數(shù)據(jù)包后經(jīng)過(guò)解析、封裝IPv6包,發(fā)送給6LoWPAN邊界路由器,最后轉(zhuǎn)發(fā)給目的6LoWPAN節(jié)點(diǎn),抓包顯示收到ZigBee節(jié)點(diǎn)發(fā)來(lái)的數(shù)據(jù)包“am”。
本文對(duì)ZigBee和6LoWPAN這兩種不同協(xié)議類型的傳感網(wǎng)之間的通信進(jìn)行了研究,并給出了實(shí)現(xiàn)方案,詳細(xì)闡述了實(shí)現(xiàn)異構(gòu)傳感網(wǎng)通信的關(guān)鍵技術(shù),并搭建了測(cè)試平臺(tái)進(jìn)行軟硬件結(jié)合的測(cè)試,達(dá)到了設(shè)計(jì)的初衷,滿足了異構(gòu)傳感網(wǎng)通信的需求,實(shí)現(xiàn)了兩者之間的點(diǎn)對(duì)點(diǎn)通信。在不更改協(xié)議棧的基礎(chǔ)上進(jìn)行的網(wǎng)關(guān)設(shè)計(jì)具有較強(qiáng)的實(shí)用性和可擴(kuò)展性,方便接入IPv6網(wǎng)絡(luò)以及更多不同協(xié)議的傳感網(wǎng)進(jìn)行自由通信。
[1]蔣挺,趙成林.紫蜂技術(shù)及其應(yīng)用[M].北京:北京郵電大學(xué)出版社,2006.
[2]ZigBee Specification.Version 1.0[R].ZigBee Alliance,2004.
[3]Shelby z,Bormann c.6LoWPAN:The wireless embedded Internet[M].New York,NY,USA:John Wiley&Sons Ltd.,2009.
[4]戚劍超.基于IPv6的無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用研究[D].合肥:合肥工業(yè)大學(xué),2009.
[5]孫紀(jì)敏,沈玉龍,孫玉,張思東.傳感器網(wǎng)絡(luò)接入Internet體系結(jié)構(gòu)和服務(wù)提供方法[J].通信學(xué)報(bào),2008,29(4):84-89.
[6]吳功宜,董大凡,王珺,劉乾.計(jì)算機(jī)網(wǎng)絡(luò)高級(jí)軟件編程技術(shù)[M].北京:清華大學(xué)出版社,2007.
[7]Andrew S.Tanenbaum.Computer Networks[M].3rd edition.北京:清華大學(xué)出版社,2002.
[8]Qing Li,Tatuya Jinmei,Keiichi Shima.IPv6 詳解,卷 1:核心協(xié)議實(shí)現(xiàn)[M].北京:人民郵電出版社,2009.
[9]Wang r c,Chang r s,Chao h c.Internetworking between ZigBee/802.15.4 and IPv6/802.3 network[R].Taipei,China:NICI IPv6 Steering Committee,2007.