1. 程式人生 > 其它 >BATMAN.adv系列07 過度泛洪的遏制策略與網路重組

BATMAN.adv系列07 過度泛洪的遏制策略與網路重組

純遵從BATMAN.adv系列0中的機制進行轉發會導致大量無效轉發引起通道資源浪費。本文介紹了過度泛洪的遏制策略和網路重組。

在BATMAN.adv系列01中介紹了BATMAN的OGM包轉發機制,但是單純遵從01中的機制進行轉發會導致大量無效轉發引起通道資源浪費,為此協議存在過度泛洪的遏制策略

過度泛洪的遏制策略

系列01提及OGM包資料幀中存在Sequence Number部分,其為OGM包的滑窗計數值,最大128。若所收到的OGM包序列號小於滑窗左側,則該OGM包將被丟棄;若所收到的OGM包處於滑窗範圍內,OGM序列號加一;若收到的OGM包序列號大於滑窗右側,則視窗右側值更新為該序列號值。圖1為滑窗機制示意圖。

圖1 滑動視窗示意圖

節點在接收到OGM包後將進行相應的檢查,滿足以下條件的OGM包將不會被轉發:

  1. 所收到的OGM包中,協議版本號與程式正在執行的協議版本不同,丟棄該OGM包。
  2. 所收到的OGM包中,傳送方MAC地址為乙太網多播地址,或者OGM包的目的地址為MAC單播地址,丟棄該OGM包。
  3. 所收到的OGM包中,原節點MAC地址為自身,表明其為迴環OGM包,不轉發但用於計算EQ。
  4. OGM包傳送者的MAC地址已存在於節點路由表中,且OGM包序列號小於滑窗序列號,則此OGM包已過時,丟棄該OGM包。
  5. OGM包轉發自非最佳下一跳節點:設產生OGM包的源節點為o,OGM包經由b發往cc轉發並最終被d收到。若c需要傳送資料給o時不選擇b作為最佳下一跳,則d會丟棄所收到的這一OGM包。

網路重組

BATMAN.adv協議基於OGM的泛洪對整個鏈路的傳輸質量進行評估,但TQpath

計算需要的統計平均值以及OGM包轉發中存在的泛洪抑制,導致網路重組較為遲緩。

(1)節點加入時的網路重組

協議中存在位寬為BATADV_TQ_LOCAL_WINDOW_SIZE(預設:64)的計數器,這些計數器用於記錄最近64個數據包是否成功接收,據此計算EQRQ。這一計數器使得EQRQ的變化較為平穩。因此,當一個節點b加入網路後,周邊節點統計關於節點b的鏈路TQpath將平穩上升,來自節點b的OMG包中TQOGM也將平穩上升,直至新鏈路的TQOGM值高於其它鏈路時,資料包的轉發路徑才發生變化。因此新節點加入後網路重組需要一定時間。

(2)節點斷開時的網路重組

統計EQRQ的計數器預設長達64位,統計最近64個OGM包的情況,如果節點斷開與加入採用相同的網路重組方式,將導致某一關鍵節點斷開後網路長時間中斷。

BATMAN.adv協議中,由同一節點產生的一個OGM包會被不同節點複製並且轉發,這意味著其它節點將反覆收到周邊節點對這一OGM包的複製。如圖2節點o發出一個OGM包後,e節點收到bcd轉發的OGM包副本。e的鄰居節點bcd對於OGM包的轉發呈競爭關係。當一個鄰居節點連續n次(預設為5)轉發過慢,則該節點的相關資訊會被釋放。如果所釋放的節點為最佳下一跳節點,則節點e會迅速更換其它節點作為最佳下一跳。當從鄰居節點接收到一OGM包後,會將TQOGM值記錄於佇列,並在同列寫入0作為標記。圖2的例子中,e從鄰居節點bcd中成功接收節點o產生的OGM包,而後記錄TQOGM於一長度為5的佇列中。圖中,鄰居節點d連續5次沒能在bc節點之前將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包傳播路徑