RPL(6):RFC6550翻譯(6)---Sequence Counter

7、Sequence Counters(序列計數器)
本章介紹RPL中序列計數器的自舉和運行總體方案,如DIO報文中的DODAGVersionNumber,DAO報文中的DAOSequence和傳送信息選項中的Path Sequence。

7.1  序列計數器概覽
本規範利用三種不同的序列號來驗證協議信息的新鮮度和同步性:
DODAGVersionNumber :
此序列計數器存在於DIO Base中,指示DODAG形成時的版本。爲重新驗證完整性和允許全局修復的發生,每次根決定形成一個新的DODAG版時,都會單調遞增其DODAGVersionNumber。當路由器加入新的DODAG版本時,DODAGVersionNumber都會沿DODAG向下無變化傳播。DODAGVersionNumber作爲DODAG的全局標誌指示DODAG版本在哪一個路由器下運行。一旦接收節點已經遷移至較新的DODAG版本,較舊(小)的值表示始發路由並未遷移至新的DODAG版本且不能作爲雙親使用。
DAOSequence:
此序列計數器存在於DAO Base中,將DAO報文和DAO ACK報文關聯。DAOSequence號爲發送DAO報文節點的本地標誌,用於自身檢測丟失的DAO報文,以便進行重試。
Path Sequence:
此序列計數器存在於DAO報文中的傳送信息選項之中。此計數器存在的目的是:在一個路由冗餘場景中,同一目的地存在多條並行線路,當新路由取代舊路由時,用於區分不同的移動路徑。Path Sequence在DODAG中爲全局標誌,用於指示路由對於相關目標的新鮮度。從始發路由那接收到的更舊(小)的值表示始發路由狀態已過期,且不再被考慮作爲目標的潛在下一跳。Path Sequence由公告目標的節點計算,該節點是Target本身或代表主機公告Target的路由器,並且Path Sequence作爲DAO內容通過雙親路由器向根進行傳播時不會改變。如果主機未向它的路由器傳遞計數器,那麼路由器將代表主機負責計算Path Sequence,而主機因此僅能註冊到一個路由器。如果包含相同Target的DAO報文由於路由冗餘在給定時間點向多個雙親發佈時,那麼所有具有相同目標的DAO報文中的Path Sequence相同。

7.2  序列計數器的運行
RPL序列計數器以“lollipop(棒棒糖)”方式細分[Perlman83],其中大於等於128的值作爲線性序列用於表示計數器的重啓和自舉。小於128的值用於大小爲128的循環序列號碼空間[RFC1982]。請注意從線性範圍到循環範圍轉換時的運行模式。最後,當運行於循環模式時,如果檢測到序列號之間相差過大,那麼它們不進行比較,詳述如下。

基於2^N配置的比較窗口中,SEQUENCE_WINDOW=16,本規範中N值爲4。
對於一個給定的序列計數器:
1、序列計數器將被初始化爲一個運行時定義的值,大於等於128。推薦值爲240(256-SEQUENCE_WINDOW)。

2、當序列計數器的增長超過它的最大值,它必須迴歸爲0。當使用大於等於128的序列計數器時,最大值爲255。當使用小於128的計數器時,最大值爲127。

3、當對比兩個序列計數器時,必須使用如下規則:
(1)  當第一個序列計數器A的區間爲[128 .. 255],第二個序列計數器B區間爲[0 .. 127]時:
① 如果(256 + B - A)小於等於SEQUENCE_WINDOW,則B大於A,A小於B,且兩者不相等。
② 如果(256 + B - A)大於SEQUENCE_WINDOW,則A大於B,B小於A,且兩者不相等。
例如,如果A=140,B=5,那麼(256 + 5 - 240)= 21。21大於SEQUENCE_WINDOW(16)。因此240大於5。另一例子,A=250,B=5,那麼(256 + 5 - 250)= 11。11小於SEQUENCE_WINDOW(16)。因此250小於5。

(2) 當兩個進行對比的序列計數器都小於127,或它們都大於等於128時:
① 如果兩個序列計數器之間差的絕對值小於等於SEQUENCE_WINDOW,那麼這種比較如[RFC1982]所言,用於決定大於、小於、等於關係。
②當兩個序列計數器之間差的絕對值大於SEQUENCE_WINDOW時,表明發生了不同步,兩序列號不可比較。

4、如果兩個序列號被確定爲不可比較,也就是比較的結果未定義,那麼應按以下方式進行處理:將優先權給予最近觀察到有增加的序列號。如果這樣做失敗了,則應儘量減少節點對自身狀態的最終改變。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章