隨著物聯網技術[1]的快速發展,被廣泛應用于多種領域。其中節點能量受限[2],節點內存大小受限,無線鏈路不穩定的低功耗有損網絡(low power and lossy networks,LLN)[3]成為當下的研究熱點。國際互聯網工程任務組(internet engineering task force,IETF)針對LLN網絡為其制定了一種基于IPv6的LLN路由協議(routing protocol for LLN,RPL)[4]。當前,對RPL路由協議的研究主要集中在網絡負載均衡[5]及網絡擁塞檢測與控制[7]等。近年來針對RPL路由協議組網的相關問題,已經進行了一定的研究。文獻[9]中對RPL路由協議進行了仿真實驗,文獻指出在RPL路由協議在組網時,網絡中存在大量的控制消息且控制開銷較大的原因是由于網絡中DAO控制消息以及DAO-ACK控制消息的數目較多,文獻[10]針對RPL路由協議在組網時下行路由構建中存在大量目的地通告對象(Destination Advertisement Object, DAO)控制消息的現象,提出了一種聚合DAO控制消息機制,但該方案增加了組網時延。文獻[11]針對RPL路由協議在非存儲模式下大量通告對象消息聚積, 導致網絡擁塞, 并且轉發過程中占用節點緩沖區的問題,提出了一種Delay DAO定時器的新算法。通過向子節點發送后向壓力消息及時調整Delay DAO定時器的值, 從而控制中間節點對消息的轉發,但該方案本質上是一種擁塞緩解策略,并未減少RPL路由協議中控制開銷的數目。
本文針對RPL組網中目的地通告對象確認消息(Destination Advertisement Object Acknowledgement,DAO-ACK)消息數目較多的問題,提出了一種RPL中精簡DAO-ACK控制消息的算法,并通過仿真實驗對所提的算法進行了驗證。
RPL協議構建網絡拓撲的過程如圖1所示。在LLN中構建面向目的地有向無環圖(Destination Oriented Directed Acyclic Graph, DODAG)的過程中主要用到以下4種控制消息:

圖1 現有網絡拓撲構建過程
(1)DODAG信息對象(DODAG Information Object, DIO);DIO消息主要用于構建上行路由和路由維護,由細流計時器控制發送,網絡拓撲構建由根節點發起。根節點在構建DODAG時,首先廣播DIO消息。鄰居節點接收到DIO消息后決定是否加入到該DODAG中。如果鄰居節點選擇加入到該DODAG中,則根據DIO消息中的目標函數(Objective Function,OF)選擇最優父節點,并且計算自身Rank值,在自身入網完成后將相關信息添加至DIO消息中,繼續廣播發送DIO消息;
(2)DAO:DAO消息主要用于構建下行路由,由每個新加入DODAG中的節點向其父節點發送攜帶自身及其子節點的路由前綴信息的DAO消息。子節點對DAO消息進行轉發,直至所有的DAO消息在根節點處匯聚。在存儲模式中,除葉子節點外,DODAG中其余所有節點均會存儲其子節點發回的DAO消息中的路由前綴信息,從而建立下行路由表。在非存儲模式中,只有根節點存儲DODAG中所有節點發回的DAO消息中的路由前綴信息,從而建立下行路由表;
(3)DODAG信息請求(DODAG Information Solicitation, DIS);DIS消息主要用于節點主動加入DODAG中時發送的請求加入信息。當節點長時間未接收到DIO消息時,節點廣播DIS消息,其鄰居節點接收到DIS消息后,均會向其回復一個DIO消息,從而根據接收到的DIO消息選擇父節點,節點加入DODAG;
(4)目的地通告對象確認消息(Destination Advertisement Object Acknowledgement,DAO-ACK);DAO-ACK消息主要用于對DAO消息的回復確認,網絡中所有的DAO消息都被轉發匯聚到根節點,根節點會對每一個收到的DAO消息單播回復DAO-ACK確認消息,從而保證鏈路的可靠性。至此節點入網完成,已入網節點繼續廣播DIO消息直至所有節點入網。
聚合DAO-ACK消息的新算法的基本思路為:取消根節點對收到的每個DAO消息均單獨回復DAO-ACK消息的機制,由根節點在一定的時間周期內,對收到的所有DAO消息,統一回復一個包含了多個目的地址的DAOACK消息,具體過程如圖2所示。

圖2 新算法構建網絡拓撲過程
新算法的具體操作步驟如下:
步驟一:根節點廣播DIO消息,鄰居節點接收到該DIO消息后,選擇加入到該DODAG當中節點向根節點單播發送DAO消息,申請入網。
步驟二:根節點對接收到的多個來自鄰居節點的DAO消息,提取相關信息,建立路由表。同時將DAO消息的源地址寫入待發的DAO-ACK消息頭部的目的地址當中。
步驟三:根節點在定時器時間t到期后,將包含了多個目的地地址的DAO-ACK消息發送至多個子節點,定時器時間t的定義如下式所示:

式中T為網絡拓撲的構建時間, 為節點對數據進行處理所需的最大時間,為待入網節點到根節點的最大距離,本文用跳數(hop)來指代距離。
步驟四:節點接收到DAO-ACK消息后,查找其中的目的地地址字段,若包含自身地址,則DAO入網申請控制消息已經成功至發送根節點,節點入網完成。節點繼續廣播發送添加了自身信息的DIO消息。
步驟五:若節點接收到DAO-ACK消息后,查找DAO-ACK消息的目的地地址字段后,未包含自身地址,則節點發送的DAO消息未被根節點成功接收,節點重發DAO消息,重新申請入網。
步驟六:若節點接收到的DAO-ACK消息中包含其下行鏈路中的節點則節點繼續將控制消息轉發至子節點處,否則節點刪除控制消息包。
步驟七:節點入網完成,添加相關信息發送自身的DIO廣播消息,子節點接收到該DIO消息后若選擇加入該DODAG則重復步驟二,三,四,五,否則丟棄該廣播包。
步驟八:所有節點入網完成,DODAG拓撲構建完成。
本文使用opnet modeler 14.5仿真軟件對所提出算法進行仿真驗證。本文從控制開銷,DAO-ACK控制消息數目,根節點放置位置,數據包端到端傳輸時延以及數據包傳輸成功率對RPL路由協議原算法與新算法進行了對比分析。
在為200×200的正方形區域中,設置4種網絡場景,4種網絡場景中節點數目分別為10,20,30,40。網絡中節點均為隨機均勻分布的固定節點,節點發射功率約為30 mW,最大通信半徑約為50 m,初始能量為5 J,數據分組設置為128 bit,每1 s發送一個數據包,仿真時間設置為100 s。
控制開銷數目指的是網絡中的DIO,DAO,DAOACK以及DIS這4種控制消息的總比特數。從0可以看出,隨著網絡中節點數的增加,RPL協議與新算法中的總比特數目均不斷增加。但新算法的增加速率要小于原RPL路由協議,這是由于需要中間節點進行轉發的DAO-ACK數目不斷減小。新算法的控制開銷遠小于原RPL路由協議,這是由于在控制開銷中DAO-ACK的比重較大,通過所提出的精簡DAO-ACK消息算法,極大地減少了網絡中的DAO-ACK消息的數目。如圖3所示。

圖3 控制開銷比較
如圖 4所示,兩種方案中所需發送的DAO-ACK消息數目。在原RPL路由協議中,除根節點外的所有節點都需通過來自根節點發送的DAO-ACK消息完成入網。即若網絡中節點數為10個,則需要根節點發送的DAOACK消息數目為9個,故如圖4所示DAO-ACK數目隨著網絡節點數增加。在新算法中,由于采用了一個DAOACK消息來回復多個DAO消息的思路,導致網絡中的DAO-ACK消息數目大幅減少。
如圖 5所示,根節點處于網絡邊緣部分時所需發送的DAO-ACK數目大于根節點處于網絡中心。這是由于根節點處于網絡邊緣時,在節點分布均勻的網絡中,以樹形拓撲的組網方式中最終所有節點完成入網后的網絡深度應高于當節點處于中心位置組網完成后的節點的網絡深度。網絡深度越大根節點所需回復的DAO-ACK消息數目越多即總的DAOACK消息的數目與網絡深度相關。

圖5 根節點位于不同位置DAO-ACK數目對比
如圖6所示在RPL協議與新算法中,隨著網絡中網絡節點數量的增加,數據包傳輸的平均端到端時延均逐漸增長,這是由于隨著節點數目的增長,網絡規模越來越大,RPL路由協議在組網完成后形成的樹形拓撲中的網絡深度也在不斷增加。同時可以看出新算法的數據包的平均傳輸時延與RPL協議相比時延的差距均在0.3 ms范圍內,可見新算法法未對平均端到端時延造成較大影響。

圖6 數據包平均端到端時延對比
顯示了數據包傳送成功率的具體數值,從中可看出,隨著網絡節點數目的增加,RPL協議與新算法的數據包傳輸成功率均維持在1,可見新算法能夠在不改變網絡中其余性能的狀態下有效減少網絡中DAO-ACK控制消息的數目。

表1 數據包傳輸成功率對比
本文針對RPL路由協議在組網時,網絡中控制消息數目較多的問題,提出一種基于消息聚合精簡RPL中
DAO-ACK控制消息的新算法。新算法通過一個DAO-ACK消息回復多個DAO消息實現減少網絡中DAOACK消息的數目。仿真結果表明提出的新算法,能夠在不影響網絡其他性能的情況下有效減少網絡中的DAOACK消息帶來的控制開銷。