在一個運行中的網路中,設備常常出現一些不穩定的現象,原因可能是設備本身的bug,也可能是在搭建網路的時候很多地方遺留下了後患·
介紹,序言,基本信息,存在問題,解決辦法,套用地方,
介紹
(翻動路由)懲罰-Route Flap Dampening
序言
那么面對這些不穩定的現象,廠家應該如何來面對呢? 顯然為了把他們的設備賣的更好,他們必須替客戶考慮的更多…,於是他們必須在他們的設備中加入一些預防性的措施,比如route flap dampening.
基本信息
為什麼需要dampening ?如何實現route flapping dampening ?
現在我們來考慮一種現象:由於我們的線纜的問題,我們的網路中某一個連線埠經常性的up---down , 這種情況出現的頻率很高,會導致什麼樣的結果呢?結果是某些路由在設備的路由表裡面會消失---出現---消失---出現---消失---,出現了我們稱之為 route flapping的現象.這樣網路中的很多設備就會因此不斷的刷新自己的路由表,白白的消耗大量的處理器時間片.
這種浪費必須最大程度的避免,如何來避免呢? 先來分析一下這種現象的因果關係:原因是連線埠不穩定,結果是導致了路由表的刷新,浪費了處理器時間。這個是必然的因果關係嗎? 答案是否!當我們不採取任何措施的時候的確是這樣,但是如果我們採取有效的措施呢?
現在讓我們反過來思考一下,我們在避免什麼?我們在避免設備浪費資源,而不是避免連線埠出現不穩定的情況(很多時候我們只能減少這樣的事情發生,而不能杜絕這種情況),所以我們要做的是:即使連線埠在 flapping,我們的路由表也不要不停的去刷新!!這就是dampening所要實現的功能!所謂dampening就是指當某個連線埠在flapping的時候,網路設備會自動的抑制這個連線埠,直到網路設備確定連線埠恢復正常才啟用這個連線埠。
存在問題
在這個dampening過程中,存在著幾個問題需要我們去解決:
1. 當這個連線埠處在什麼狀態時,網路設備應該認為它處在flapping狀態?
2. 網路設備如何確定這個連線埠已經恢復了正常?然後如何來啟用它?
3. 如果這個連線埠一直不穩定,網路設備應該永久性的抑制它嗎?
解決了以上的問題,我們就實現了dampening的功能。
解決辦法
(針對以上每一個問題):
1. 每當連線埠flap一次之後,就懲罰它一次,用一個值來表示處懲罰的概念。比如說開始當連線埠穩定的時候,這個連線埠的懲罰值為0,當它flap一次後,我們就給它加1000的懲罰值,再flap一次就再加1000;並且我們設定一個dampening的門限值,比如為2500,那么可以計算出,當這個連線埠flap三次,它的懲罰值為3000>2500,於是它被dampening了!
2. 接著引用上面的例子,如果當連線埠flap三次後一直都不在flap了,那么網路設備是否應該一直抑制它呢(由於3000>2500,所以如果不採取其他措施,這個連線埠肯定一直會被抑制)?顯然這不是我們想要的結果!它穩定了,我們就應該再用它,於是我們需要想辦法讓它啟用,辦法就是讓懲罰值隨著時間的推移自動的減少,引用元素衰減中半衰期的概念(當過了一段時間後,元素的質量會衰減到初始的一半,這兒引申為過了一定的時間後(比如10分鐘),懲罰值會衰減到當初的一半)。並且設定一個啟用的門限值(比如1800),設定當連線埠的懲罰值衰減到這個以下那么連線埠就會被重新啟用。於是10分鐘後,懲罰值變成3000/2=1500<1800,連線埠重新被啟用了。
3. 很明顯,我們用了某個連線埠,必然是有用處的,所以我們不能一直的抑制它,必須要設定一個最大的抑制時間(比如40分鐘);如圖1
注意:
抑制值<最大懲罰值 的條件必須滿足!
否則dampening的功能自動關閉!
比如
dampening 30 500 2500 60 無效
解決了上面的三個問題後,我們完全的實現了dempening的功能;
實現的語句為(引用 上面的例子):
dempening 10m 1800 2500 40m
半衰期 啟用值 抑制值 最大抑制時間
套用地方
Route flap dampening主要套用在兩個地方,一個比較典型的套用在BGP中,另一個是套用在IGP中。兩個套用的差別在於抑制的時間不同,bgp dampening中半衰期為1-45分鐘,最大抑制時間為255分鐘;而IGP中半衰期為1-30秒,最大抑制時間為255秒。當然兩個套用的命令也有差異,這個查看相關的命令文檔就可以了。
四.懲罰值是如何衰減的?(Route Flap Dampening 的算法)
如圖2