高江軍,洪 鋒
(1.池州職業(yè)技術(shù)學(xué)院 電子信息與傳媒系,安徽 池州 247000;2.池州學(xué)院 智能感知與計(jì)算研究中心,安徽 池州 247000)
路由算法是指用于計(jì)算網(wǎng)絡(luò)中數(shù)據(jù)包傳輸路徑的算法。當(dāng)一個(gè)數(shù)據(jù)包從源節(jié)點(diǎn)發(fā)送到目標(biāo)節(jié)點(diǎn)時(shí),需要通過(guò)一系列的中間節(jié)點(diǎn)進(jìn)行轉(zhuǎn)發(fā),路由算法就是根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、鏈路狀態(tài)、流量負(fù)載等信息,計(jì)算出數(shù)據(jù)包傳輸?shù)淖罴崖窂健?/p>
路由算法是網(wǎng)絡(luò)協(xié)議棧中非常重要的一部分,不同的網(wǎng)絡(luò)協(xié)議??赡懿捎貌煌穆酚伤惴▉?lái)實(shí)現(xiàn)數(shù)據(jù)包的傳輸和路由選擇。以基于openFlow/SDN控制器的路由算法[1]為例,該算法利用openFlow的SDN控制平面與數(shù)據(jù)平面分離,在制定路由策略時(shí)考慮全網(wǎng)流量信息和網(wǎng)絡(luò)狀態(tài),并以網(wǎng)狀網(wǎng)和胖二叉樹(shù)網(wǎng)絡(luò)為基礎(chǔ),制定網(wǎng)絡(luò)轉(zhuǎn)發(fā)策略。
RPL(低功耗有損網(wǎng)絡(luò)路由協(xié)議)是一種可以不依賴(lài)定位系統(tǒng)自行組網(wǎng)的無(wú)線傳感網(wǎng)路由協(xié)議,主要在LLN(低功耗有損網(wǎng)絡(luò))網(wǎng)絡(luò)中應(yīng)用,該網(wǎng)絡(luò)中的節(jié)點(diǎn)以無(wú)源節(jié)點(diǎn)為主。節(jié)點(diǎn)之間通過(guò)RPL協(xié)議自行構(gòu)建由父子節(jié)點(diǎn)組成的有向無(wú)環(huán)圖,根節(jié)點(diǎn)通過(guò)廣播收集全網(wǎng)節(jié)點(diǎn)的數(shù)據(jù)[2]。但在實(shí)際的無(wú)線傳感網(wǎng)中,如果只是收集指定區(qū)域或者指定節(jié)點(diǎn)的信息時(shí),全網(wǎng)發(fā)送數(shù)據(jù)就會(huì)造成數(shù)據(jù)的冗余轉(zhuǎn)發(fā),對(duì)于節(jié)點(diǎn)能量有限的無(wú)源節(jié)點(diǎn)就會(huì)減少網(wǎng)絡(luò)的生存時(shí)間。
加入組播機(jī)制后的網(wǎng)絡(luò)可以解決傳統(tǒng)RPL路由算法中存在的數(shù)據(jù)轉(zhuǎn)發(fā)冗余問(wèn)題,延長(zhǎng)網(wǎng)絡(luò)的生存時(shí)間。隨著無(wú)線網(wǎng)絡(luò)規(guī)模的逐漸擴(kuò)大,雖然組播技術(shù)已經(jīng)大大減少了節(jié)點(diǎn)轉(zhuǎn)發(fā)數(shù)據(jù)量,但是由于網(wǎng)絡(luò)結(jié)構(gòu)是樹(shù)形結(jié)構(gòu),關(guān)鍵節(jié)點(diǎn)的轉(zhuǎn)發(fā)資源消耗依然很大。傳統(tǒng)的算法設(shè)計(jì)主要圍繞中小型網(wǎng)絡(luò)進(jìn)行算法改進(jìn),當(dāng)網(wǎng)絡(luò)規(guī)模不斷擴(kuò)大后,關(guān)鍵轉(zhuǎn)發(fā)節(jié)點(diǎn)就會(huì)快速消耗殆盡。
目前關(guān)于RPL分簇組播路由算法的國(guó)內(nèi)外研究并不多,研究的方向主要有基于位置的路由算法和基于消息報(bào)文設(shè)計(jì)的路由算法。
基于位置的算法主要是通過(guò)定位系統(tǒng)將各個(gè)節(jié)點(diǎn)的地理信息發(fā)送給根節(jié)點(diǎn)或者關(guān)鍵轉(zhuǎn)發(fā)節(jié)點(diǎn),如SenCast算法[3]和HGMR算法[4]。其中,SenCast算法思想主要是在大規(guī)模無(wú)線傳感網(wǎng)中建立一個(gè)強(qiáng)大的基站,根據(jù)網(wǎng)絡(luò)功能需求和各個(gè)節(jié)點(diǎn)的路由信息建立最優(yōu)組播樹(shù),再對(duì)該組播樹(shù)進(jìn)行分簇。在轉(zhuǎn)發(fā)數(shù)據(jù)時(shí),基站首先與各個(gè)簇首進(jìn)行數(shù)據(jù)交互,簇首再將數(shù)據(jù)以無(wú)狀態(tài)的方式發(fā)送給各組播接收節(jié)點(diǎn)。該算法的優(yōu)勢(shì)是利用強(qiáng)大的基站來(lái)維護(hù)所有節(jié)點(diǎn)的路由信息,承擔(dān)了大多的路由計(jì)算,但是簇首的能量消耗較大,而且無(wú)狀態(tài)的組播會(huì)因?yàn)槁酚蔁o(wú)法固定,容易導(dǎo)致部分?jǐn)?shù)據(jù)的轉(zhuǎn)發(fā)路徑復(fù)雜甚至丟失。HGMR算法思想首先將網(wǎng)絡(luò)劃分成多個(gè)子樹(shù),網(wǎng)絡(luò)中有一個(gè)能量充足的sink節(jié)點(diǎn)(根節(jié)點(diǎn)),各子樹(shù)根據(jù)地理哈希算法選取一個(gè)簇首,數(shù)據(jù)的發(fā)送從sink節(jié)點(diǎn)和簇首開(kāi)始,再由簇首轉(zhuǎn)發(fā)到各個(gè)子樹(shù)的接收節(jié)點(diǎn)。該算法的優(yōu)點(diǎn)是大量的路由信息由sink節(jié)點(diǎn)和簇首分擔(dān),分散了關(guān)鍵轉(zhuǎn)發(fā)節(jié)點(diǎn)的能量消耗。但是存在兩個(gè)問(wèn)題,一是sink節(jié)點(diǎn)和簇首的位置難以固定,如果距離較遠(yuǎn),可能導(dǎo)致信號(hào)接收不到或者不穩(wěn)定現(xiàn)象;二是簇首的能量消耗較大,沒(méi)有較好的輪換機(jī)制,很容易導(dǎo)致網(wǎng)絡(luò)頻繁重構(gòu)、數(shù)據(jù)轉(zhuǎn)發(fā)延遲或者丟失。
基于修改消息報(bào)文的組播主要有DODAG(以目的節(jié)點(diǎn)為導(dǎo)向的有向無(wú)環(huán)圖)組播[5]和EBMR組播[6]。其中,DODAG組播是通過(guò)修改RPL組網(wǎng)消息中的option選項(xiàng)的內(nèi)容,在各接收節(jié)點(diǎn)消息option選項(xiàng)中增加組播地址并根據(jù)RPL算法建立組播樹(shù),每個(gè)組播接收節(jié)點(diǎn)都有一個(gè)父節(jié)點(diǎn)和備份父節(jié)點(diǎn)。該算法的優(yōu)點(diǎn)在于當(dāng)轉(zhuǎn)發(fā)節(jié)點(diǎn)失效時(shí),可以通過(guò)備份節(jié)點(diǎn)完成轉(zhuǎn)發(fā),增加了網(wǎng)絡(luò)傳輸?shù)目煽啃?。而該算法的缺點(diǎn)是每次發(fā)送數(shù)據(jù)都會(huì)經(jīng)過(guò)父節(jié)點(diǎn)和備份父節(jié)點(diǎn),這種冗余發(fā)送會(huì)造成父節(jié)點(diǎn)能量多余消耗。EBMR算法前期的研究主要是通過(guò)在option選項(xiàng)中增加剩余能量計(jì)算機(jī)制,并設(shè)定節(jié)點(diǎn)的能量閾值,建立能量均衡最優(yōu)轉(zhuǎn)發(fā)節(jié)點(diǎn)集合,數(shù)據(jù)的傳輸選擇能量剩余大于閾值的節(jié)點(diǎn)進(jìn)行轉(zhuǎn)發(fā)。當(dāng)節(jié)點(diǎn)能量小于閾值,從節(jié)點(diǎn)集合中更換大于閾值的節(jié)點(diǎn)進(jìn)行轉(zhuǎn)發(fā)。該算法能很好地平衡各關(guān)鍵轉(zhuǎn)發(fā)節(jié)點(diǎn)的能耗,但在大規(guī)模無(wú)線傳感網(wǎng)中,由于節(jié)點(diǎn)數(shù)量較多,組播地址和路由數(shù)據(jù)也會(huì)不斷增大,遠(yuǎn)距離的傳輸會(huì)加快節(jié)點(diǎn)因計(jì)算過(guò)多導(dǎo)致的能量消耗,網(wǎng)絡(luò)生存時(shí)間會(huì)大幅減少[7]。
大規(guī)模無(wú)線傳感網(wǎng)中,已有基于位置和消息報(bào)文設(shè)計(jì)的算法都還存在很多問(wèn)題,若要有效地提高網(wǎng)絡(luò)的生存周期和傳輸效率,應(yīng)該結(jié)合多種協(xié)議算法的優(yōu)缺點(diǎn),合理優(yōu)化網(wǎng)絡(luò)算法。本研究主要是通過(guò)固定節(jié)點(diǎn)分簇和最優(yōu)轉(zhuǎn)發(fā)節(jié)點(diǎn)輪換機(jī)制來(lái)降低大規(guī)模網(wǎng)絡(luò)節(jié)點(diǎn)的存儲(chǔ)壓力和數(shù)據(jù)轉(zhuǎn)發(fā)冗余率。
大規(guī)模無(wú)線傳感網(wǎng)的節(jié)點(diǎn)數(shù)量龐大,僅僅使用RPL組播是不實(shí)際的,節(jié)點(diǎn)存儲(chǔ)和轉(zhuǎn)發(fā)量過(guò)大都會(huì)造成節(jié)點(diǎn)能量快速消耗殆盡。在網(wǎng)絡(luò)密度相同時(shí),將大規(guī)模網(wǎng)絡(luò)根據(jù)覆蓋區(qū)域和節(jié)點(diǎn)數(shù)量分成若干大小相近的簇,網(wǎng)絡(luò)的簇首選擇NB-IoT基站模式,簇首按照蜂窩結(jié)構(gòu)排列,所有簇首之間通過(guò)NB-IoT協(xié)議[8]進(jìn)行數(shù)據(jù)通信。各個(gè)簇首負(fù)責(zé)本簇內(nèi)的節(jié)點(diǎn)組播通信,簇內(nèi)采用RPL組播路由協(xié)議,根據(jù)前期研究的EBMR算法構(gòu)建基于能耗均衡的最優(yōu)轉(zhuǎn)發(fā)集合進(jìn)行組播分組轉(zhuǎn)發(fā)。
簇內(nèi)通過(guò)構(gòu)建DODAG完成所有節(jié)點(diǎn)的自行組網(wǎng)。簇首先向鄰居節(jié)點(diǎn)廣播DIO消息,所有鄰居節(jié)點(diǎn)處于監(jiān)聽(tīng)狀態(tài),收到DIO消息后根據(jù)目標(biāo)函數(shù)和度量值考慮是否加入DODAG,如果鄰居節(jié)點(diǎn)符合加入條件則以簇首作為其父節(jié)點(diǎn)添加路由,并向父節(jié)點(diǎn)回復(fù)包含自己rank值(在DODAG中的深度)的DAO消息。加入DODAG的鄰居節(jié)點(diǎn)繼續(xù)向下定期發(fā)送DIO消息,直到所有節(jié)點(diǎn)按照上述方法完成注冊(cè)和rank值計(jì)算,并在rank值與父節(jié)點(diǎn)相近的鄰居節(jié)點(diǎn)中選擇一個(gè)備份父節(jié)點(diǎn),在構(gòu)建DODAG過(guò)程中同時(shí)完成環(huán)路檢測(cè),確保網(wǎng)絡(luò)沒(méi)有環(huán)路。最后簇首完成所有簇內(nèi)節(jié)點(diǎn)的路由信息更新。
在投放無(wú)線傳感器之前,所有節(jié)點(diǎn)都存儲(chǔ)了組播地址,根據(jù)收集數(shù)據(jù)的不同進(jìn)行分組。簇首通過(guò)構(gòu)建DODAG已存儲(chǔ)所有組播接收節(jié)點(diǎn)的路由信息,組播分組轉(zhuǎn)發(fā)會(huì)選擇最優(yōu)的轉(zhuǎn)發(fā)路線進(jìn)行轉(zhuǎn)發(fā)。
簇首的由于采用NB-IoT基站,可以確保無(wú)線信號(hào)覆蓋簇內(nèi)的所有節(jié)點(diǎn),組播分組在組播樹(shù)中轉(zhuǎn)發(fā),會(huì)出現(xiàn)rank值小的節(jié)點(diǎn)成為關(guān)鍵轉(zhuǎn)發(fā)節(jié)點(diǎn),長(zhǎng)時(shí)間的數(shù)據(jù)收發(fā),會(huì)造成這類(lèi)節(jié)點(diǎn)能量比其他節(jié)點(diǎn)更快地消耗,即使有備份節(jié)點(diǎn)的輪換,也不會(huì)維持太長(zhǎng)時(shí)間。因此,當(dāng)部分節(jié)點(diǎn)能量耗盡時(shí),很容易觸發(fā)DODAG重構(gòu),能量耗盡的節(jié)點(diǎn)區(qū)域則無(wú)法采集數(shù)據(jù)。因此,在節(jié)點(diǎn)輪換時(shí),要合理考慮網(wǎng)絡(luò)中各節(jié)點(diǎn)的能耗均衡,確保節(jié)點(diǎn)無(wú)意外損害的情況下,可以維持更長(zhǎng)的時(shí)間。本文研究的RPL-CMRA算法,主要是通過(guò)在各節(jié)點(diǎn)消息的option中增加能量計(jì)算機(jī)制和節(jié)點(diǎn)輪換能量閾值,讓節(jié)點(diǎn)能夠根據(jù)閾值進(jìn)行輪換。由于各節(jié)點(diǎn)都可以與簇首建立鄰居關(guān)系,可以讓網(wǎng)絡(luò)中所有節(jié)點(diǎn)都可以參與輪換,最大限度的提高整個(gè)簇內(nèi)網(wǎng)絡(luò)節(jié)點(diǎn)能耗均衡性能。
RPL-CMRA算法思想核心是NB-IoT基站模式和簇內(nèi)最優(yōu)節(jié)點(diǎn)轉(zhuǎn)發(fā)算法。NB-IoT基站相比前期研究中的RPL節(jié)點(diǎn),具有3個(gè)優(yōu)勢(shì),一是信號(hào)覆蓋范圍廣可以達(dá)到10km;二是支持海量連接,可以支持10萬(wàn)個(gè)連接,非常適合WSN(無(wú)線傳感網(wǎng))低功耗節(jié)點(diǎn)的部署需求;三是低功耗,普通的電池供電可以擁有10年壽命。為了能實(shí)現(xiàn)NB-IoT和WSN網(wǎng)絡(luò)有效融合,需要在NB-IoT簇首協(xié)議棧進(jìn)行修改和添加移動(dòng)通信網(wǎng)關(guān)硬件模塊,確保能將無(wú)線傳感網(wǎng)收集的信息轉(zhuǎn)發(fā)到移動(dòng)通信網(wǎng)絡(luò)中。簇內(nèi)最優(yōu)轉(zhuǎn)發(fā)的核心是建立最優(yōu)轉(zhuǎn)發(fā)節(jié)點(diǎn)輪換機(jī)制,設(shè)定簇內(nèi)節(jié)點(diǎn)總數(shù)為n,各組播節(jié)點(diǎn)編號(hào)為N,rank值為R,組播編號(hào)為M,記錄節(jié)點(diǎn)剩余能量為E,節(jié)點(diǎn)剩余能量上報(bào)定時(shí)器為T(mén),設(shè)計(jì)節(jié)點(diǎn)輪換閾值為S,用i表示節(jié)點(diǎn)序號(hào)。
簇首組播信息如表1所示。
表1 簇首組播信息表
組播成員信息如表2所示。
表2 組播成員信息表
NB-IoT基站簇首,存儲(chǔ)了本簇內(nèi)的所有組播組地址和成員信息,RPL協(xié)議建立組播樹(shù)之后,每當(dāng)需要收集指定組播組的數(shù)據(jù)時(shí),簇首會(huì)向各個(gè)組播成員發(fā)送收集數(shù)據(jù)消息。收到簇首的消息后,各個(gè)成員將采集的數(shù)據(jù)回送給簇首,并將轉(zhuǎn)發(fā)過(guò)程中各個(gè)節(jié)點(diǎn)的剩余能量值Si一并發(fā)送給簇首。當(dāng)在T時(shí)間內(nèi)沒(méi)有收到簇首消息時(shí),節(jié)點(diǎn)會(huì)主動(dòng)發(fā)送自身的能量剩余值給簇首。簇首比較父節(jié)點(diǎn)和備份節(jié)點(diǎn)的剩余能量閾值,判斷是否存在能量不足的轉(zhuǎn)發(fā)節(jié)點(diǎn),如果存在,將轉(zhuǎn)發(fā)父節(jié)點(diǎn)替換成備份節(jié)點(diǎn)。如果備份節(jié)點(diǎn)能量也不足,則根據(jù)能量不足的父節(jié)點(diǎn)和備份父節(jié)點(diǎn)的數(shù)量以及rank值,判斷是否需要重構(gòu)RPL和組播樹(shù)。
轉(zhuǎn)發(fā)節(jié)點(diǎn)組播信息如表3所示。
表3 轉(zhuǎn)發(fā)節(jié)點(diǎn)組播信息表
在RPL組播簇內(nèi),各節(jié)點(diǎn)都有可能是本組播樹(shù)的成員節(jié)點(diǎn)和轉(zhuǎn)發(fā)父節(jié)點(diǎn),同時(shí)也可能是其他組播樹(shù)的父節(jié)點(diǎn)。因?yàn)殡x簇首越近,rank值越小,負(fù)責(zé)的轉(zhuǎn)發(fā)量也就越大。當(dāng)這些rank值小的轉(zhuǎn)發(fā)節(jié)點(diǎn)能量低于能量剩余閾值時(shí),首先進(jìn)行備份節(jié)點(diǎn)替換,但是往往這些節(jié)點(diǎn)也會(huì)是其他組播樹(shù)的父節(jié)點(diǎn)。本研究主要根據(jù)能量剩余不足的節(jié)點(diǎn)數(shù)和對(duì)應(yīng)的rank值判斷是否要重構(gòu)組播樹(shù),主要依據(jù)為相同rank值的節(jié)點(diǎn)能量不足占比是否大于指定值,若大于則重構(gòu)RPL,并對(duì)能量不足的節(jié)點(diǎn)進(jìn)行標(biāo)記,再將它的rank值設(shè)置到最大值,促使這些節(jié)點(diǎn)暫時(shí)不會(huì)成為父節(jié)點(diǎn)。
首先,針對(duì)DAO消息格式進(jìn)行改進(jìn)。節(jié)點(diǎn)根據(jù)RPL路由算法通過(guò)發(fā)送組網(wǎng)消息來(lái)構(gòu)建DODAG組播樹(shù),DAO消息中包含有組播編號(hào)、組播組地址、剩余能量閾值、父節(jié)點(diǎn)地址、備份父節(jié)點(diǎn)地址、簇首地址等信息。RPL-CMRA組播消息DAO選項(xiàng)如表4所示。當(dāng)RPL建立DODAG時(shí),DAO消息攜帶了本節(jié)點(diǎn)的編號(hào)、剩余能量閾值、所屬組編號(hào)以及該節(jié)點(diǎn)在DODAG中的類(lèi)型。RPL組播樹(shù)構(gòu)建完成后,組播消息負(fù)責(zé)傳送采集信息,并上報(bào)剩余能量情況。
表4 RPL-CMRA組播DAO選項(xiàng)
其次,設(shè)計(jì)PL組播樹(shù)重構(gòu)算法。當(dāng)DODAG組播構(gòu)建完成后,組播分組就會(huì)根據(jù)簇首指令發(fā)送數(shù)據(jù),并上報(bào)節(jié)點(diǎn)的剩余能量。當(dāng)簇首發(fā)現(xiàn)同一個(gè)子節(jié)點(diǎn)的父節(jié)點(diǎn)和備份父節(jié)點(diǎn)都出現(xiàn)剩余能量不足時(shí)(小于閾值),發(fā)送通告該子節(jié)點(diǎn)下次轉(zhuǎn)發(fā)數(shù)據(jù)到該父節(jié)點(diǎn)時(shí),直接與簇首節(jié)點(diǎn)通信。簇首統(tǒng)計(jì)所有剩余能量不足節(jié)點(diǎn)數(shù)量為P。當(dāng)P達(dá)到簇內(nèi)總節(jié)點(diǎn)一半時(shí),將這些節(jié)點(diǎn)rank值設(shè)置為最大值,并進(jìn)行RPL重構(gòu)組播樹(shù)。重構(gòu)RPL組播樹(shù)如式(1)-式(3)所示。
(1)
P=crad(F)
(2)
(3)
RPL-CMRA算法要求簇首根據(jù)簇內(nèi)各節(jié)點(diǎn)的剩余能量S確定重構(gòu)組播樹(shù)的時(shí)間,S的取值直接決定RPL組播樹(shù)的生存時(shí)間,根據(jù)多次仿真實(shí)驗(yàn)的數(shù)據(jù),簇內(nèi)節(jié)點(diǎn)數(shù)n、分組長(zhǎng)度L、節(jié)點(diǎn)射頻傳輸距離r、節(jié)點(diǎn)密度ρ直接決定網(wǎng)絡(luò)的生存時(shí)間。根據(jù)這些參數(shù)可以計(jì)算節(jié)點(diǎn)收發(fā)一次組播分組的能耗Z,前期已經(jīng)完成此項(xiàng)研究[9],因此剩余能量閾值可以通過(guò)式(4)和式(5)得出:
Z=L(2E+Kr2)
(4)
S=Sc-Zn
(5)
式(4)和式(5)中,Sc表示傳感器節(jié)點(diǎn)的初始能量。
在仿真實(shí)驗(yàn)中,通過(guò)計(jì)算不同節(jié)點(diǎn)數(shù)和密度的情況,發(fā)現(xiàn)節(jié)點(diǎn)收發(fā)次數(shù)等于節(jié)點(diǎn)數(shù)時(shí),此時(shí)的剩余能量值為閾值,剛好可以維持到第二次網(wǎng)絡(luò)重構(gòu)。
針對(duì)基于NB-IoT基站模式RPL組播路由算法的研究,發(fā)現(xiàn)已有的RPL組播路由算法在大規(guī)模無(wú)線傳感網(wǎng)中的應(yīng)用中還存在很多問(wèn)題。為了能不使用定位系統(tǒng)來(lái)降低能耗,利用新型的NB-IoT基站技術(shù),可以充分發(fā)揮無(wú)源節(jié)點(diǎn)高接入和低消耗的優(yōu)勢(shì)。NB-IoT基站替換傳統(tǒng)無(wú)線傳感器簇首,可以大幅降低復(fù)雜環(huán)境的節(jié)點(diǎn)安裝問(wèn)題。另外,通過(guò)在簇首完成大量的剩余能量替換和網(wǎng)絡(luò)重構(gòu)計(jì)算,可以降低其他節(jié)點(diǎn)因計(jì)算帶來(lái)的能耗,有利于延長(zhǎng)網(wǎng)絡(luò)生存周期。但該算法還存在其他問(wèn)題,比如復(fù)雜環(huán)境下簇首位置的選擇、傳感器信號(hào)傳輸?shù)取R虼?該算法在后期研究中還需要進(jìn)一步地改進(jìn)和完善。
黑龍江工業(yè)學(xué)院學(xué)報(bào)(綜合版)2024年1期