隨著物聯(lián)網(wǎng)技術(shù)[1]的快速發(fā)展,被廣泛應(yīng)用于多種領(lǐng)域。其中節(jié)點能量受限[2],節(jié)點內(nèi)存大小受限,無線鏈路不穩(wěn)定的低功耗有損網(wǎng)絡(luò)(low power and lossy networks,LLN)[3]成為當(dāng)下的研究熱點。國際互聯(lián)網(wǎng)工程任務(wù)組(internet engineering task force,IETF)針對LLN網(wǎng)絡(luò)為其制定了一種基于IPv6的LLN路由協(xié)議(routing protocol for LLN,RPL)[4]。當(dāng)前,對RPL路由協(xié)議的研究主要集中在網(wǎng)絡(luò)負(fù)載均衡[5]及網(wǎng)絡(luò)擁塞檢測與控制[7]等。近年來針對RPL路由協(xié)議組網(wǎng)的相關(guān)問題,已經(jīng)進(jìn)行了一定的研究。文獻(xiàn)[9]中對RPL路由協(xié)議進(jìn)行了仿真實驗,文獻(xiàn)指出在RPL路由協(xié)議在組網(wǎng)時,網(wǎng)絡(luò)中存在大量的控制消息且控制開銷較大的原因是由于網(wǎng)絡(luò)中DAO控制消息以及DAO-ACK控制消息的數(shù)目較多,文獻(xiàn)[10]針對RPL路由協(xié)議在組網(wǎng)時下行路由構(gòu)建中存在大量目的地通告對象(Destination Advertisement Object, DAO)控制消息的現(xiàn)象,提出了一種聚合DAO控制消息機(jī)制,但該方案增加了組網(wǎng)時延。文獻(xiàn)[11]針對RPL路由協(xié)議在非存儲模式下大量通告對象消息聚積, 導(dǎo)致網(wǎng)絡(luò)擁塞, 并且轉(zhuǎn)發(fā)過程中占用節(jié)點緩沖區(qū)的問題,提出了一種Delay DAO定時器的新算法。通過向子節(jié)點發(fā)送后向壓力消息及時調(diào)整Delay DAO定時器的值, 從而控制中間節(jié)點對消息的轉(zhuǎn)發(fā),但該方案本質(zhì)上是一種擁塞緩解策略,并未減少RPL路由協(xié)議中控制開銷的數(shù)目。
本文針對RPL組網(wǎng)中目的地通告對象確認(rèn)消息(Destination Advertisement Object Acknowledgement,DAO-ACK)消息數(shù)目較多的問題,提出了一種RPL中精簡DAO-ACK控制消息的算法,并通過仿真實驗對所提的算法進(jìn)行了驗證。
RPL協(xié)議構(gòu)建網(wǎng)絡(luò)拓?fù)涞倪^程如圖1所示。在LLN中構(gòu)建面向目的地有向無環(huán)圖(Destination Oriented Directed Acyclic Graph, DODAG)的過程中主要用到以下4種控制消息:
圖1 現(xiàn)有網(wǎng)絡(luò)拓?fù)錁?gòu)建過程
(1)DODAG信息對象(DODAG Information Object, DIO);DIO消息主要用于構(gòu)建上行路由和路由維護(hù),由細(xì)流計時器控制發(fā)送,網(wǎng)絡(luò)拓?fù)錁?gòu)建由根節(jié)點發(fā)起。根節(jié)點在構(gòu)建DODAG時,首先廣播DIO消息。鄰居節(jié)點接收到DIO消息后決定是否加入到該DODAG中。如果鄰居節(jié)點選擇加入到該DODAG中,則根據(jù)DIO消息中的目標(biāo)函數(shù)(Objective Function,OF)選擇最優(yōu)父節(jié)點,并且計算自身Rank值,在自身入網(wǎng)完成后將相關(guān)信息添加至DIO消息中,繼續(xù)廣播發(fā)送DIO消息;
(2)DAO:DAO消息主要用于構(gòu)建下行路由,由每個新加入DODAG中的節(jié)點向其父節(jié)點發(fā)送攜帶自身及其子節(jié)點的路由前綴信息的DAO消息。子節(jié)點對DAO消息進(jìn)行轉(zhuǎn)發(fā),直至所有的DAO消息在根節(jié)點處匯聚。在存儲模式中,除葉子節(jié)點外,DODAG中其余所有節(jié)點均會存儲其子節(jié)點發(fā)回的DAO消息中的路由前綴信息,從而建立下行路由表。在非存儲模式中,只有根節(jié)點存儲DODAG中所有節(jié)點發(fā)回的DAO消息中的路由前綴信息,從而建立下行路由表;
(3)DODAG信息請求(DODAG Information Solicitation, DIS);DIS消息主要用于節(jié)點主動加入DODAG中時發(fā)送的請求加入信息。當(dāng)節(jié)點長時間未接收到DIO消息時,節(jié)點廣播DIS消息,其鄰居節(jié)點接收到DIS消息后,均會向其回復(fù)一個DIO消息,從而根據(jù)接收到的DIO消息選擇父節(jié)點,節(jié)點加入DODAG;
(4)目的地通告對象確認(rèn)消息(Destination Advertisement Object Acknowledgement,DAO-ACK);DAO-ACK消息主要用于對DAO消息的回復(fù)確認(rèn),網(wǎng)絡(luò)中所有的DAO消息都被轉(zhuǎn)發(fā)匯聚到根節(jié)點,根節(jié)點會對每一個收到的DAO消息單播回復(fù)DAO-ACK確認(rèn)消息,從而保證鏈路的可靠性。至此節(jié)點入網(wǎng)完成,已入網(wǎng)節(jié)點繼續(xù)廣播DIO消息直至所有節(jié)點入網(wǎng)。
聚合DAO-ACK消息的新算法的基本思路為:取消根節(jié)點對收到的每個DAO消息均單獨回復(fù)DAO-ACK消息的機(jī)制,由根節(jié)點在一定的時間周期內(nèi),對收到的所有DAO消息,統(tǒng)一回復(fù)一個包含了多個目的地址的DAOACK消息,具體過程如圖2所示。
圖2 新算法構(gòu)建網(wǎng)絡(luò)拓?fù)溥^程
新算法的具體操作步驟如下:
步驟一:根節(jié)點廣播DIO消息,鄰居節(jié)點接收到該DIO消息后,選擇加入到該DODAG當(dāng)中節(jié)點向根節(jié)點單播發(fā)送DAO消息,申請入網(wǎng)。
步驟二:根節(jié)點對接收到的多個來自鄰居節(jié)點的DAO消息,提取相關(guān)信息,建立路由表。同時將DAO消息的源地址寫入待發(fā)的DAO-ACK消息頭部的目的地址當(dāng)中。
步驟三:根節(jié)點在定時器時間t到期后,將包含了多個目的地地址的DAO-ACK消息發(fā)送至多個子節(jié)點,定時器時間t的定義如下式所示:
式中T為網(wǎng)絡(luò)拓?fù)涞臉?gòu)建時間, 為節(jié)點對數(shù)據(jù)進(jìn)行處理所需的最大時間,為待入網(wǎng)節(jié)點到根節(jié)點的最大距離,本文用跳數(shù)(hop)來指代距離。
步驟四:節(jié)點接收到DAO-ACK消息后,查找其中的目的地地址字段,若包含自身地址,則DAO入網(wǎng)申請控制消息已經(jīng)成功至發(fā)送根節(jié)點,節(jié)點入網(wǎng)完成。節(jié)點繼續(xù)廣播發(fā)送添加了自身信息的DIO消息。
步驟五:若節(jié)點接收到DAO-ACK消息后,查找DAO-ACK消息的目的地地址字段后,未包含自身地址,則節(jié)點發(fā)送的DAO消息未被根節(jié)點成功接收,節(jié)點重發(fā)DAO消息,重新申請入網(wǎng)。
步驟六:若節(jié)點接收到的DAO-ACK消息中包含其下行鏈路中的節(jié)點則節(jié)點繼續(xù)將控制消息轉(zhuǎn)發(fā)至子節(jié)點處,否則節(jié)點刪除控制消息包。
步驟七:節(jié)點入網(wǎng)完成,添加相關(guān)信息發(fā)送自身的DIO廣播消息,子節(jié)點接收到該DIO消息后若選擇加入該DODAG則重復(fù)步驟二,三,四,五,否則丟棄該廣播包。
步驟八:所有節(jié)點入網(wǎng)完成,DODAG拓?fù)錁?gòu)建完成。
本文使用opnet modeler 14.5仿真軟件對所提出算法進(jìn)行仿真驗證。本文從控制開銷,DAO-ACK控制消息數(shù)目,根節(jié)點放置位置,數(shù)據(jù)包端到端傳輸時延以及數(shù)據(jù)包傳輸成功率對RPL路由協(xié)議原算法與新算法進(jìn)行了對比分析。
在為200×200的正方形區(qū)域中,設(shè)置4種網(wǎng)絡(luò)場景,4種網(wǎng)絡(luò)場景中節(jié)點數(shù)目分別為10,20,30,40。網(wǎng)絡(luò)中節(jié)點均為隨機(jī)均勻分布的固定節(jié)點,節(jié)點發(fā)射功率約為30 mW,最大通信半徑約為50 m,初始能量為5 J,數(shù)據(jù)分組設(shè)置為128 bit,每1 s發(fā)送一個數(shù)據(jù)包,仿真時間設(shè)置為100 s。
控制開銷數(shù)目指的是網(wǎng)絡(luò)中的DIO,DAO,DAOACK以及DIS這4種控制消息的總比特數(shù)。從0可以看出,隨著網(wǎng)絡(luò)中節(jié)點數(shù)的增加,RPL協(xié)議與新算法中的總比特數(shù)目均不斷增加。但新算法的增加速率要小于原RPL路由協(xié)議,這是由于需要中間節(jié)點進(jìn)行轉(zhuǎn)發(fā)的DAO-ACK數(shù)目不斷減小。新算法的控制開銷遠(yuǎn)小于原RPL路由協(xié)議,這是由于在控制開銷中DAO-ACK的比重較大,通過所提出的精簡DAO-ACK消息算法,極大地減少了網(wǎng)絡(luò)中的DAO-ACK消息的數(shù)目。如圖3所示。
圖3 控制開銷比較
如圖 4所示,兩種方案中所需發(fā)送的DAO-ACK消息數(shù)目。在原RPL路由協(xié)議中,除根節(jié)點外的所有節(jié)點都需通過來自根節(jié)點發(fā)送的DAO-ACK消息完成入網(wǎng)。即若網(wǎng)絡(luò)中節(jié)點數(shù)為10個,則需要根節(jié)點發(fā)送的DAOACK消息數(shù)目為9個,故如圖4所示DAO-ACK數(shù)目隨著網(wǎng)絡(luò)節(jié)點數(shù)增加。在新算法中,由于采用了一個DAOACK消息來回復(fù)多個DAO消息的思路,導(dǎo)致網(wǎng)絡(luò)中的DAO-ACK消息數(shù)目大幅減少。
如圖 5所示,根節(jié)點處于網(wǎng)絡(luò)邊緣部分時所需發(fā)送的DAO-ACK數(shù)目大于根節(jié)點處于網(wǎng)絡(luò)中心。這是由于根節(jié)點處于網(wǎng)絡(luò)邊緣時,在節(jié)點分布均勻的網(wǎng)絡(luò)中,以樹形拓?fù)涞慕M網(wǎng)方式中最終所有節(jié)點完成入網(wǎng)后的網(wǎng)絡(luò)深度應(yīng)高于當(dāng)節(jié)點處于中心位置組網(wǎng)完成后的節(jié)點的網(wǎng)絡(luò)深度。網(wǎng)絡(luò)深度越大根節(jié)點所需回復(fù)的DAO-ACK消息數(shù)目越多即總的DAOACK消息的數(shù)目與網(wǎng)絡(luò)深度相關(guān)。
圖5 根節(jié)點位于不同位置DAO-ACK數(shù)目對比
如圖6所示在RPL協(xié)議與新算法中,隨著網(wǎng)絡(luò)中網(wǎng)絡(luò)節(jié)點數(shù)量的增加,數(shù)據(jù)包傳輸?shù)钠骄说蕉藭r延均逐漸增長,這是由于隨著節(jié)點數(shù)目的增長,網(wǎng)絡(luò)規(guī)模越來越大,RPL路由協(xié)議在組網(wǎng)完成后形成的樹形拓?fù)渲械木W(wǎng)絡(luò)深度也在不斷增加。同時可以看出新算法的數(shù)據(jù)包的平均傳輸時延與RPL協(xié)議相比時延的差距均在0.3 ms范圍內(nèi),可見新算法法未對平均端到端時延造成較大影響。
圖6 數(shù)據(jù)包平均端到端時延對比
顯示了數(shù)據(jù)包傳送成功率的具體數(shù)值,從中可看出,隨著網(wǎng)絡(luò)節(jié)點數(shù)目的增加,RPL協(xié)議與新算法的數(shù)據(jù)包傳輸成功率均維持在1,可見新算法能夠在不改變網(wǎng)絡(luò)中其余性能的狀態(tài)下有效減少網(wǎng)絡(luò)中DAO-ACK控制消息的數(shù)目。
表1 數(shù)據(jù)包傳輸成功率對比
本文針對RPL路由協(xié)議在組網(wǎng)時,網(wǎng)絡(luò)中控制消息數(shù)目較多的問題,提出一種基于消息聚合精簡RPL中
DAO-ACK控制消息的新算法。新算法通過一個DAO-ACK消息回復(fù)多個DAO消息實現(xiàn)減少網(wǎng)絡(luò)中DAOACK消息的數(shù)目。仿真結(jié)果表明提出的新算法,能夠在不影響網(wǎng)絡(luò)其他性能的情況下有效減少網(wǎng)絡(luò)中的DAOACK消息帶來的控制開銷。