關於卷一中DR/BDR選舉過程解釋

 

爲什麼MA網絡上需要進行DR和BDR的選舉?如果每個路由器都發送自己的LSDB數據庫的話,網絡中會有大量LSA流量,而且這些lsa中很大一部分都是重複的.所以爲了減少LSA數據包占用的帶寬,選舉DR和BDR來代表大家發送LSA.  
1426421122983

從上圖可以很容易的看出來,如果所有路由器形成鄰接關係之後,那麼需要25條LSA通告全網.

選舉DR之後,DR負責的任務是:

  • 代表該MA網絡,以及MA網絡中其他attach上的路由器.

  • 管理廣播流量

簡單來說,DR及背後的網段可以看做一個僞節點,從attach到該僞節點的路由器到僞節點的出向cost爲正常的接口cost,但是從僞節點到所attach的路由器的cost爲0.(沒太理解這段話啥意思.)  
DR代表一個特定網段的僞節點,DR和BDR都是接口的概念而不是路由器的概念.    
1426422546245

從上圖可以看出來所有路由器都是與DR建立鄰接關係.相互之間並不是常規的鄰接.

上面的設計有個問題,如果DR掛了,那麼就需要重新選舉DR,這個過程中網絡是不可達的.所以,爲了避免單點故障,ospf的設計是,啓用一個BDR.所有路由器同時與DR和BDR建立鄰接關係.而且DR和BDR之間也有完全的鄰接關係.這樣DR掛的時候,可以迅速切換到BDR上去,防止出現網絡不可用的情況.

DR/BDR選舉的必要條件:

  • 使用一個8bit的priority. 思科默認的priority爲1,並且可以通過接口命令ip ospf priority來修改.0代表不參與選舉

  • hello數據包中帶有priority及自己認爲的DR和BDR的接口地址的字段.

  • 一個接口在MA網絡中激活時,初始化DR和BDR字段爲0.0.0.0,並且設置一個與dead timer相同長度的wait timer

  • DR和BDR的信息會被記錄到接口表中.

DR和BDR的選舉過程:(注意!!!這裏不是腦殘的簡單翻譯!!!!)

step1.After two-way communication has been established with one or more neighbors, examine the Priority, DR, and BDR fields of each neighbor’s Hello. List all routers eligible for election (that is, routers with priority greater than 0 and whose neighbor state is at least two-way); all routers declaring themselves to be the DR (their own interface address is in the DR field of the Hello packet); and all routers declaring themselves to be the BDR (their own interface address is in the BDR field of the Hello packet). The calculating router will include itself on this list unless it is ineligible.

在廣播鏈路上,ospf路由器之間進入到2-way狀態之後,開始進行DR/BDR的選舉.首先,爲什麼是2-way狀態開始進行選舉,因爲在2-way狀態下,所有路由器的鄰居ID字段裏都已經有了所有其他路由器的RID,保證了選舉的公平.    
在初始化選舉的時候(注意,是初始化選舉),所有具有選舉條件的路由器都將自己的RID寫入hello包的DR和BDR字段中.

step2.From the list of eligible routers, create a subset of all routers not claiming to be the DR (routers declaring themselves to be the DR cannot be elected BDR).

第二步很讓人困惑,因爲第一步中所有路由器都已經將自己的RID寫入DR字段,那麼不生成自己是DR的子集一定爲空.這一步看上去是與step1衝突的.這裏要注意的是,選舉的過程是在ospf進程啓動後一直存在的,也就是說這個過程是一直有效的,不僅僅是用於初始化的選舉.    
換句話說,這個子集裏的所有路由器的DR字段裏寫的不是自己的RID,所以,這一步其實是在爲BDR做準備.      
再來分析一下,現在有很多說法是ospf實際是先選舉BDR再將BDR推舉爲DR,個人認爲這種說法是錯誤的.從下面的步驟中我們可以看到,在初始化的狀態下,所有路由器都聲稱自己是DR和BDR,step2中的子集爲空,應該跳轉到step5中進行DR的選舉.DR選舉出來之後,所有路由器的DR字段寫的是DR的RID而非自己的RID,這時候就符合進入該子集的條件了.除DR外所有路由器都會進入該子集,開始進行BDR的選舉.

step3.If one or more neighbors in this subset include its own interface address in the BDR field, the neighbor with the highest priority will be declared the BDR. In a tie, the neighbor with the highest Router ID will be chosen.

step3比較明確,初始化的過程中所有路由器BDR寫的都是自己,在選舉完成後,只有BDR寫的是自己.其他都寫的是BDR的RID.

step4.If no router in the subset claims to be the BDR, the neighbor with the highest priority will become the BDR. In a tie, the neighbor with the highest Router ID will be chosen.

step4說的是,如果沒人聲稱自己是BDR,那麼就意味着BDR死了,那麼BDR將會重新選舉.(死人是不會說話的,同理可得,死掉的BDR也不會說話…所以,BDR不說自己是BDR了,那麼就意味着BDR掛了.)

step5.If one or more of the eligible routers include their own address in the DR field, the neighbor with the highest priority will be declared the DR. In a tie, the neighbor with the highest Router ID will be chosen.

這一步是DR的選舉.如果很多人說自己是DR,那麼優先級大的選作DR,優先級一樣,RID大的是DR.(如果RID一樣呢,那麼你想多了,鄰居關係都起不來)

step6.If no router has declared itself the DR, the newly elected BDR will become the DR.

這一步和step4的概念差不多,主要就是如何判定DR掛了.DR不說話了就以爲着DR掛了.這時候BDR自動成爲DR.如果這時候DR還沒有選舉出來,那麼會先進行BDR的選舉,爲什麼呢,因爲大家的DR字段裏還是寫的那個掛掉的DR,不符合step5的條件,所以step5沒有辦法執行.

step7.If the router performing the calculation is the newly elected DR or BDR, or if it is no longer the DR or BDR, repeat steps 2 through 6.

step7印證了一個問題,這個過程不是僅僅給初始化的時候用的.

這裏有幾個問題需要注意:

  • 選舉是路由器內部的一個過程,所以抓包是看不到太多信息的.

  • DR和BDR一旦決定,在新路由器加入的時候不會有變化,那麼這種非搶佔特性是如何實現的?一個新上線的路由器不會知道自己到底是處在一個新啓動的網絡環境還是已經有了DR/BDR的環境.所以,正常情況應該是一視同仁.但是,注意,選舉過程引入了一個wait time,一個新上線的路由器並不是立即開始選舉過程,而是先等待一個wait time,這個時間的引入是爲了學習已有DR和BDR.這個時間DR和BDR字段全部爲0.

  • 關於DR和BDR到底誰是先選舉,網絡上現在很多人說是BDR先選舉出來.之後發現沒有DR,BDR自動當選DR.個人感覺這是對RFC文檔的誤解讀.RFC給出的過程並不是一個嚴格的順序化過程,而應該是一個狀態的觸發機制.從debug吐出來的時間來看,兩者是同時的.但是很有可能是因爲debug時間的粒度遠小於實際處理時間間隔.    
    1426437482439      
    1426437554274      
    從抓包來看,感覺是符合文檔描述,先選舉DR的.(糾結這個問題好像沒有太大意義,廠商的具體實現並不一定完全遵循RFC文檔)

 

 

參考資料:http://blog.sina.com.cn/s/blog_995092640101b4zx.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章