11、BGP鄰居震盪抑制

博雅塔之客發表於2024-04-15

BGP鄰居震盪抑制

BGP鄰居震盪抑制功能是一種震盪抑制方式,開啟該功能後,可以達到抑制BGP鄰居震盪的目的。

產生原因

BGP鄰居震盪是指BGP對等體建立後很快斷開,又很快建立,如此反覆。在鏈路不穩定或承載BGP業務的介面狀態不穩定等諸多情況下,會引起鄰居頻繁震盪。BGP對等體建立後BGP鄰居之間交換整個BGP路由表,BGP對等體斷開後BGP會刪除從鄰居學習到的所有路由。由於BGP路由數量巨大,在這種鄰居狀態頻繁震盪的情況下往往伴隨著大量的路由變化和資料處理,會佔用大量資源,導致CPU佔用率升高。為了解決這個問題,裝置實現了BGP鄰居震盪抑制功能,即在BGP鄰居頻繁震盪時啟動震盪抑制,實現對BGP對等體的建立進行抑制處理。

相關概念

ConnectFlaps:鄰居震盪計數,BGP鄰居震盪時增加鄰居震盪計數。

鄰居震盪抑制時間:根據鄰居震盪計數調整震盪抑制時間。

Idle hold timer:對等體建連等待時間,即當超過Idle hold timer時,BGP對等體重新建連。

半衰期:鄰居震盪計數變化時啟動鄰居震盪計數調整定時器,當該定時器超時(超過1800s)時,鄰居震盪計數便會減少一半,這段時間稱為半衰期。

實現原理

震盪抑制

圖1所示,當震盪計數達到一定值(大於5次)時,透過Idle hold timer來實現對BGP對等體建連的抑制。Idle hold timer計算方式如下:

Idle hold timer=初始值+鄰居震盪抑制時間。

其中,初始值為10s,但是當配置了連線重傳時間間隔connect-retry-time,則初始值為配置的connect-retry-time值。

鄰居震盪抑制時間處理規則為:ConnectFlaps在1~5次時,不進行抑制;6~10次時,ConnectFlaps每增1次則鄰居震盪抑制時間增加10s;11~15次,ConnectFlaps每增1次則鄰居震盪抑制時間增加20s,後續每隔5次在前一輪基礎上抑制時間加倍,以此類推。直至Idle hold timer到達600s後鄰居震盪抑制時間便不再增加,防止BGP協議由於長時間抑制而無法協商,待本次抑制結束後ConnectFlaps清零。

圖1 初始值為10s時對等體建連等待時間與震盪次數的關係

鄰居震盪計數變化時啟動鄰居震盪計數調整定時器,當該定時器超時(超過1800s)時,鄰居震盪計數減半,一個半衰期結束,此時若鄰居震盪計數不為0,則下一個半衰期開始,直至鄰居震盪計數清0。以鄰居震盪計數為10次為例,經歷4個半衰期後,鄰居震盪計數清0,如圖2所示。

圖2 半衰期

退出震盪抑制

退出震盪抑制有以下幾種方式:

  • 復位BGP程序或BGP對等體,直接退出震盪抑制。
  • 使用者透過命令列強制退出震盪抑制狀態,直接退出震盪抑制。

相關文章