劉 彬, 韓毅剛, 宿國(guó)防
(南開大學(xué) 電子信息與光學(xué)工程學(xué)院 天津市光電傳感器與傳感網(wǎng)絡(luò)技術(shù)重點(diǎn)實(shí)驗(yàn)室,天津 300350)
隨著IPv6互聯(lián)網(wǎng)不斷地成熟和發(fā)展,以及無(wú)線傳感器網(wǎng)絡(luò)(wireless sensor networks,WSNs)的應(yīng)用也不斷增長(zhǎng)[1~6],無(wú)線傳感器網(wǎng)絡(luò)采用IPv6通信也成為一種趨勢(shì)[7~9]。實(shí)現(xiàn)通信的關(guān)鍵技術(shù)就是無(wú)線傳感器網(wǎng)絡(luò)的IPv6地址配置。
目前,國(guó)內(nèi)外研究人員提出了多種無(wú)線傳感器網(wǎng)絡(luò)IPv6地址配置方案[10~12]。實(shí)現(xiàn)IPv6自動(dòng)配置的方法主要有兩種,有狀態(tài)地址分配和無(wú)狀態(tài)地址分配[13]。有狀態(tài)地址分配會(huì)通過(guò)服務(wù)器、客戶端的形式來(lái)分配地址。無(wú)狀態(tài)地址分配會(huì)采用多播的方式通過(guò)鄰居發(fā)現(xiàn)協(xié)議,實(shí)現(xiàn)地址分配[14],但需要采用多播方式通過(guò)鄰居發(fā)現(xiàn)協(xié)議對(duì)地址進(jìn)行重復(fù)地址沖突檢測(cè),用以確保地址在網(wǎng)絡(luò)中的唯一性。但單獨(dú)的有狀態(tài)地址依賴于服務(wù)器,會(huì)產(chǎn)生極大的能量消耗,對(duì)于無(wú)線傳感器網(wǎng)絡(luò)不適合。單獨(dú)的無(wú)狀態(tài)地址分配如6LoWPAN[15]雖然通過(guò)地址初始化過(guò)程可以實(shí)現(xiàn)分配一個(gè)全球的唯一地址,并且無(wú)需地址重復(fù)檢測(cè),降低了復(fù)雜度,但是沒(méi)有考慮節(jié)點(diǎn)之間的層次性和關(guān)聯(lián)性。此外,文獻(xiàn)[16]提出了一種基于簇的全I(xiàn)P無(wú)線傳感器網(wǎng)絡(luò)配置方法,實(shí)現(xiàn)有狀態(tài)地址分配與無(wú)狀態(tài)地址分配相結(jié)合的方式,具有比較好的層次性,但仍然需要部分重復(fù)地址檢測(cè)。
上述的地址配置方法為實(shí)現(xiàn)本文研究奠定了基礎(chǔ),為此,本文提出了在LEACH協(xié)議成簇[16~18]的同時(shí),也實(shí)現(xiàn)分配IPv6地址的功能,并且地址分配僅由自身節(jié)點(diǎn)構(gòu)成,而且具有很強(qiáng)的層次性,也無(wú)需要重復(fù)地址檢測(cè),具有較低的復(fù)雜度。
為了使LEACH協(xié)議下的無(wú)線傳感器網(wǎng)絡(luò)與IPv6網(wǎng)體系結(jié)構(gòu)深度融合,將傳感器節(jié)點(diǎn)分為3類,與IPv6的網(wǎng)絡(luò)相連接的接入節(jié)點(diǎn),簇首節(jié)點(diǎn)和簇內(nèi)節(jié)點(diǎn)。其中,接入節(jié)點(diǎn)和簇首節(jié)點(diǎn)相當(dāng)于IPv6網(wǎng)絡(luò)中的路由器,具有路由和轉(zhuǎn)發(fā)功能;簇內(nèi)節(jié)點(diǎn)不具有路由和轉(zhuǎn)發(fā)功能,僅負(fù)責(zé)采集數(shù)據(jù),相當(dāng)于IPv6中的主機(jī)。LEACH下的無(wú)線傳感器網(wǎng)絡(luò)結(jié)構(gòu)分為2個(gè)層次:1)由接入節(jié)點(diǎn)和簇首節(jié)點(diǎn)構(gòu)成的骨干網(wǎng);2)由簇首節(jié)點(diǎn)與簇內(nèi)節(jié)點(diǎn)構(gòu)成的簇。骨干網(wǎng)由一個(gè)接入節(jié)點(diǎn)和若干個(gè)簇首節(jié)點(diǎn)構(gòu)成。本文采用由接入節(jié)點(diǎn)出發(fā),遍歷所有簇首節(jié)點(diǎn)而形成一條通路的結(jié)構(gòu)。具體的網(wǎng)絡(luò)體系結(jié)構(gòu)如圖1所示。
圖1 LEACH協(xié)議下無(wú)線傳感器網(wǎng)絡(luò)體系結(jié)構(gòu)
針對(duì)簇的無(wú)線傳感器網(wǎng)絡(luò),本文采用表1和表2地址結(jié)構(gòu)。
表1 簇首節(jié)點(diǎn)地址結(jié)構(gòu)
表2 簇內(nèi)節(jié)點(diǎn)地址結(jié)構(gòu)
IP地址中全局路由前綴會(huì)由接入節(jié)點(diǎn)(基站)向全局廣播,這樣每個(gè)節(jié)點(diǎn)都能接收到,減少在后續(xù)過(guò)程中的能量損耗。本文后續(xù)地址配置中,就僅闡述除路由前綴的后續(xù)部分。
本文采用簇首節(jié)點(diǎn)地址由其父節(jié)點(diǎn)ID+自身部分MAC地址+自身節(jié)點(diǎn)ID構(gòu)成,這樣一方面會(huì)使簇首節(jié)點(diǎn)具有層次結(jié)構(gòu),另一方面簇首節(jié)點(diǎn)可以通過(guò)最多一跳的方式獲知下個(gè)簇首節(jié)點(diǎn)。簇內(nèi)節(jié)點(diǎn)地址由簇首節(jié)點(diǎn)ID+自身部分MAC地址+自身節(jié)點(diǎn)ID構(gòu)成,這樣會(huì)直觀地表現(xiàn)出其隸屬于哪個(gè)簇。按照本文方法分配的地址,可以保證地址的唯一性。
在地址配置過(guò)程中,接入節(jié)點(diǎn)的IPv6地址需要預(yù)先設(shè)定。
1)簇首節(jié)點(diǎn)地址分配
接入節(jié)點(diǎn)會(huì)向全簇進(jìn)行廣播其全局路由前綴和自身節(jié)點(diǎn)ID,最先形成的簇首節(jié)點(diǎn)F1會(huì)根據(jù)接入節(jié)點(diǎn)的信息,構(gòu)建自己的地址。其中全局路由前綴均一致,父節(jié)點(diǎn)ID為接入節(jié)點(diǎn)ID,MAC位為自身MAC地址的后2位,自身節(jié)點(diǎn)ID為在本網(wǎng)內(nèi)的序號(hào)值,主機(jī)位設(shè)置為1。簇首節(jié)點(diǎn)F1會(huì)繼續(xù)進(jìn)行一跳傳輸,傳輸信息為自身節(jié)點(diǎn)ID,收到消息的下一個(gè)簇首節(jié)點(diǎn)F2會(huì)根據(jù)F1的信息,構(gòu)建自己的地址。其中父節(jié)點(diǎn)ID為F1的ID,MAC位為自身MAC地址的后4位,自身節(jié)點(diǎn)ID為在本網(wǎng)內(nèi)的序號(hào)值,主機(jī)位第一位設(shè)置為1,其他位置0。依次類推,直至所有簇首節(jié)點(diǎn)地址配置完成。
2)簇內(nèi)節(jié)點(diǎn)分配
簇首節(jié)點(diǎn)會(huì)向本簇內(nèi)廣播其父節(jié)點(diǎn)ID,MAC位和自身節(jié)點(diǎn)ID信息,簇內(nèi)成員節(jié)點(diǎn)將收到的信息作為自己地址的父節(jié)點(diǎn)ID、MAC位和自身節(jié)點(diǎn)ID,主機(jī)位由自己的MAC地址構(gòu)成,不足的位置置0。依次類推,直至所有的簇內(nèi)節(jié)點(diǎn)分配完地址。
為了評(píng)估本文方法的性能, 在NS—3仿真平臺(tái)上對(duì)本文方法進(jìn)行了仿真,參數(shù)設(shè)置如表3所示。并對(duì)正常分簇和邊分簇邊分配地址兩者在能量損耗進(jìn)行了對(duì)比分析。能量損耗差異在于邊分簇邊分配地址過(guò)程會(huì)傳輸比正常分簇更多的地址信息,會(huì)產(chǎn)生更多的能量損耗。
表3 仿真參數(shù)設(shè)置
當(dāng)節(jié)點(diǎn)數(shù)量為50時(shí),隨著輪數(shù)的增加,能量損耗如圖2所示??梢钥闯?,在輪數(shù)比較少時(shí),分配地址的LEACH算法和傳統(tǒng)的LEACH算法能量損耗差距不大,但隨著輪數(shù)的增加,性能就有一個(gè)明顯的下降。原因在于,由于分配地址的LEACH算法傳輸?shù)臄?shù)據(jù)長(zhǎng)度會(huì)比傳統(tǒng)的LEACH算法更大,在輪數(shù)較少的初期,還不是很明顯,但隨著輪數(shù)增加,數(shù)據(jù)量就會(huì)累加很多,性能就與傳統(tǒng)的LEACH算法相比差距逐漸變大。
圖2 節(jié)點(diǎn)數(shù)為50時(shí)的平均能量損耗
通過(guò)對(duì)比圖2~圖4,可以看出,隨著節(jié)點(diǎn)數(shù)的增加,分配地址的LEACH算法性能逐漸提升。通過(guò)觀察,發(fā)現(xiàn)在其中出現(xiàn)了一個(gè)很明顯的拐點(diǎn),這個(gè)拐點(diǎn)出現(xiàn)的原因在于,當(dāng)節(jié)點(diǎn)能量不斷降低時(shí),就無(wú)法進(jìn)行正常通信。
圖3 節(jié)點(diǎn)數(shù)為75時(shí)的平均能量損耗
圖4 節(jié)點(diǎn)數(shù)為100時(shí)的平均能量損耗
由圖2~圖4可見(jiàn),本文方法的優(yōu)勢(shì)在于:1)實(shí)現(xiàn)了一種在分簇過(guò)程中同時(shí)為節(jié)點(diǎn)分配IPv6地址的功能。2)提出了一種具有層次性的IPv6地址結(jié)構(gòu),針對(duì)簇首節(jié)點(diǎn)和簇內(nèi)節(jié)點(diǎn)分別設(shè)計(jì)了地址結(jié)構(gòu)。3)提出了一種基于分布式的IPv6地址分配,簇首節(jié)點(diǎn)采用有狀態(tài)地址分配,并且僅需一跳就可以完成,簇內(nèi)節(jié)點(diǎn)采用無(wú)狀態(tài)地址分配,且無(wú)需沖突檢測(cè)。所有的地址分配僅僅是由自身完成,僅僅需要接收父節(jié)點(diǎn)的ID信息。4)本文的方法與傳統(tǒng)的LEACH算法相比,雖然能量損耗有所增加,但僅考慮輪數(shù)較少的情況下,二者大致相同。
本文提出了一種基于IPv6的無(wú)線傳感器網(wǎng)絡(luò)地址分配方法,采用傳統(tǒng)的LEACH算法構(gòu)造的簇結(jié)構(gòu),在分簇過(guò)程中也實(shí)現(xiàn)其分配地址的功能。地址分配采用了有狀態(tài)與無(wú)狀態(tài)結(jié)合的方式,并且所有節(jié)點(diǎn)地址僅由自身分配。仿真結(jié)果表明:與傳統(tǒng)的LEACH算法分簇相比,該方法能耗雖然增加了一部分,但在輪數(shù)較低的情況下二者相差很小。