BATMAN.adv系列07 過度泛洪的遏制策略與網路重組
在BATMAN.adv系列01中介紹了BATMAN的OGM包轉發機制,但是單純遵從01中的機制進行轉發會導致大量無效轉發引起通道資源浪費,為此協議存在過度泛洪的遏制策略
過度泛洪的遏制策略
系列01提及OGM包資料幀中存在Sequence Number部分,其為OGM包的滑窗計數值,最大128。若所收到的OGM包序列號小於滑窗左側,則該OGM包將被丟棄;若所收到的OGM包處於滑窗範圍內,OGM序列號加一;若收到的OGM包序列號大於滑窗右側,則視窗右側值更新為該序列號值。圖1為滑窗機制示意圖。
圖1 滑動視窗示意圖
節點在接收到OGM包後將進行相應的檢查,滿足以下條件的OGM包將不會被轉發:
- 所收到的OGM包中,協議版本號與程式正在執行的協議版本不同,丟棄該OGM包。
- 所收到的OGM包中,傳送方MAC地址為乙太網多播地址,或者OGM包的目的地址為MAC單播地址,丟棄該OGM包。
- 所收到的OGM包中,原節點MAC地址為自身,表明其為迴環OGM包,不轉發但用於計算EQ。
- OGM包傳送者的MAC地址已存在於節點路由表中,且OGM包序列號小於滑窗序列號,則此OGM包已過時,丟棄該OGM包。
- OGM包轉發自非最佳下一跳節點:設產生OGM包的源節點為o,OGM包經由b發往c,c轉發並最終被d收到。若c需要傳送資料給o時不選擇b作為最佳下一跳,則d會丟棄所收到的這一OGM包。
網路重組
BATMAN.adv協議基於OGM的泛洪對整個鏈路的傳輸質量進行評估,但TQpath
(1)節點加入時的網路重組
協議中存在位寬為BATADV_TQ_LOCAL_WINDOW_SIZE(預設:64)的計數器,這些計數器用於記錄最近64個數據包是否成功接收,據此計算EQ與RQ。這一計數器使得EQ與RQ的變化較為平穩。因此,當一個節點b加入網路後,周邊節點統計關於節點b的鏈路TQpath將平穩上升,來自節點b的OMG包中TQOGM也將平穩上升,直至新鏈路的TQOGM值高於其它鏈路時,資料包的轉發路徑才發生變化。因此新節點加入後網路重組需要一定時間。
(2)節點斷開時的網路重組
統計EQ與RQ的計數器預設長達64位,統計最近64個OGM包的情況,如果節點斷開與加入採用相同的網路重組方式,將導致某一關鍵節點斷開後網路長時間中斷。
BATMAN.adv協議中,由同一節點產生的一個OGM包會被不同節點複製並且轉發,這意味著其它節點將反覆收到周邊節點對這一OGM包的複製。如圖2節點o發出一個OGM包後,e節點收到b、c和d轉發的OGM包副本。e的鄰居節點b、c和d對於OGM包的轉發呈競爭關係。當一個鄰居節點連續n次(預設為5)轉發過慢,則該節點的相關資訊會被釋放。如果所釋放的節點為最佳下一跳節點,則節點e會迅速更換其它節點作為最佳下一跳。當從鄰居節點接收到一OGM包後,會將TQOGM值記錄於佇列,並在同列寫入0作為標記。圖2的例子中,e從鄰居節點b、c和d中成功接收節點o產生的OGM包,而後記錄TQOGM於一長度為5的佇列中。圖中,鄰居節點d連續5次沒能在b和c節點之前將OGM包轉發至節點e,其原因可能是d節點網路質量欠佳或是d節點丟失。此時鄰居節點d的相關資訊被釋放,源節點列表也隨之更改。
圖2 節點斷開時的網路重組示意圖
(3)複雜網路重組
OGM包過度泛洪抑制中的OGM包,導致網路在需要進行復雜拓撲結構變化時將依次進行。圖3中,擾動發生前後,節點h向節點o傳輸資料的最佳路徑有重大區別。在擾動發生前,節點d的最佳下一跳為b,所以節點d接受來自節點c的OGM包。但是d所轉發來自c的OGM包會被其它節點丟棄。在擾動發生後dc路徑上的TQpath增加引起來自節點c的OGM包中TQOMG緩慢增加。直到節點d以節點c為最佳下一跳,此時節點d轉發來自節點c的OGM包才會被其它節點接受,而後節點f和節點h依次重複上述步驟。換而言之,在複雜的網路重組中,最佳下一跳的變化隨著OGM包的傳播路線依次緩慢進行。
圖3 擾動後最佳下一跳隨著OGM包傳播路徑