DR和BDR
MA網絡中的問題
在OSPF章節中最後一塊就是關于DR和BDR的選舉和作用,我們在之前已經說過了,在OSPF中會有一個MA網絡,可能是NBMA,或者是BMA,也就是廣播多路通路網絡,對于MA網絡中會存在一些問題,我們來看看存在的問題。
- N ×(N - 1)/ 2 個鄰接關系,管理複雜。
- 重複的LSA泛洪,造成資源浪費。
MA網絡中一般來說是兩個路由器,或者是兩個三層交換機都可以。
假如這裡有兩個三層交換機, 在這裡是做了一個直連,是以一台鍊路上就隻有兩台裝置,相當于是一個點對點的連接配接。
但是有的時候可能中間會接入一個二層的交換機,然後下方還有路由器,這個時候4台裝置都連接配接在一個二層的交換機上,它們處于同一個網絡中,此時這四台三層裝置都可以互相去建立鄰居關系。
建立鄰居關系的話有可能我們還可以去互相傳播路由資訊,此時就會有N ×(N - 1)/ 2 個鄰接關系,它的管理會變得非常的複雜。
我們可以看到圖中,就相當于這個邏輯拓撲了,我的RTA要和RTC、RTD、RTB建立鄰居關系和鄰接關系,這個時候就要去傳播我們相應的Hello封包和相應的LSA的封包,這裡就是傳播LSU封包,當然還要去傳播DD封包、LSR封包等。這個時候就會造成重複的泛洪,以及資源的浪費!
DR與BDR的作用
我們如何去節省這個資源呢?
- 減少鄰接關系。
- 降低OSPF協定流量。
我們在這裡可以選舉出一個DR,這個DR就相當于一個組長。
我的其他路由器,相對于RTB、RTC和RTD來說,加入他們都是非DR,而RTA作為一個DR。
那麼此時這三個路由器就跟我們的RTA去建立鄰接關系,需要什麼消息從RTA這裡拿,我有什麼路由消息也會統一去通報給RTA,由RTA作為一個收集者去收集網段中的路由資訊然後再統一分發給各個路由器。
這樣就能減少鄰接關系,也能降低OSPF的協定流量。
這裡有一個思考題就是關于DR的單點故障怎麼解決?
因為我們發現DR是一個很重要的裝置,是以我們不會隻單單去選舉出一個DR,我們還會有一個BDR。
這裡就是作為一個DR的備份,如果DR Down了之後,BDR就會補上DR的工作來保證我們資料是可持續性傳輸的。
DR與BDR選舉
DR和BDR是怎麼選舉的?
選舉規則:DR/BDR的選舉是基于接口的。
- 接口的DR優先級越大越優先。
- 接口的DR優先級相等時,Router ID越大越優先。
首先,它的選舉規則是基于接口的,與其說它是基于接口的,不如說它是基于網段的
假如說我在RTB上再來一個RTE,此時我在這裡要選舉多少個DR?
我在這裡是要選舉兩個的,每個網段都需要有一個DR。
對于10.1.1.0網段,也要選舉出一個DR,另外對于RTE和RTB這個網段,我們肯定還有一個網段。
假如是一個以太網,或者是一個幀中繼的網絡,總之,隻要是MA網絡的話,我們就要去選舉一個DR,如果是PPP網絡,就不用去選舉一個DR了。
因為PPP網絡和P2MP網絡都是不用去選舉DR的。
按照我們這種情況,假如說現在都是以太網的話,我們是要去選舉出兩個DR的,是以就說明DR的選舉是基于接口的。
接口的DR優先級越大越優先,當接口的優先級相等的時候,我們會去選舉Router-id越大者越優先。
這個是前提規則,但是我們來看一下實際的情況,我們可以看到對于4台裝置,RTA【DR】它的優先級是100,RTC【BDR】的優先級是95,RTB優先級是0,RTD的優先級是200,結果我們發現這個時候RTA作為DR,RTD作為一個DRother,這裡是為什麼呢?
我們先來看一下關于優先級是0的一個注解,如果優先級是0的話,在這裡是不參與選舉的,這個時候優先級為0不參與選舉,那麼一定就是一個Dother。
另外一點我們可以看到,Router Priority最大的不一定是DR/BDR,為什麼會這樣呢?
我們前面講到Router id的時候有提到一個原則:
即穩定大于一切。對于DR的選舉也是一樣的,即穩定大于一切。
假設我們去配置的時候我們首先配置的是RTA,此時RTA在這個網絡中RTB、RTC、RTD都沒有配置OSPF:
現在在10網段中我的RTA隻有一台路由器,此時RTA配置OSPF開始進行選舉,RTA認為這個網段隻有我自己,那麼我就是老大,我就是DR,它會選舉自己成為DR。
然後配置RTB,RTB不參與選舉我們就會跳過,接着配置RTC和RTD,那麼配置RTD的時候,優先級是200。
我此時的RTD能不能去搶占DR的位置呢?
在這裡是不可以的,因為我們的RTA已經成為了DR,我們可以看到RTB和RTC去學習路由的時候,都是和RTA去學習的,我的鄰接關系都已經建立好了。
如果說RTD開始去搶占我原有DR的位置,那麼這個時候鄰接關系又會改變,我從RTC和RTB的話需要去和RTD建立鄰接關系,這個時候RTA就有可能是一個DRother的角色了。
這個時候我們的網絡相應的路由就會改變,網絡可能會出現震蕩。
為了保證OSPF網絡的穩定性的話。一旦RTA這個路由器成為了DR,我們其他的路由器這個時候去加入的時候,不論優先級是多少,我們都不會去搶占原有DR的地位。
這個就是穩定大于一切的原則。
假如我們現在就是要讓RTD成為DR,我認為RTD的裝置性能會更好一點,這裡也是有辦法的:
- 我們可以在這4台路由器上面同時去重新開機OSPF程序【reset ospf process】。
- 或者将路由器重新開機也可以。
這個時候我們讓它們重新去選舉,那麼RTD就可以成為DR了。
注意:
我們建議需要哪一個路由器稱為DR,那麼就優先配置該路由器。
eg:我想讓RTD優先成為DR,那麼就最先配置RTD即可。
鄰居與鄰接關系
這個就是DR和BDR的選舉,對于裝置來說,現在我們剛選舉出DR和BDR之後,我們可以看到:
網絡類型 | 是否和鄰居建立鄰接關系 |
P2P | 是 |
Broadcast NBMA | DR與BDR、DRother建立鄰接關系 BDR與DR、DRother建立鄰接關系 DRother之間隻建立鄰居關系 |
P2MP | 是 |
針對DR和BDR,我們先看到在Broadcast網絡中:
- DR和BDR以及DRother之間是建立了一個鄰接關系的。
- 同樣的,BDR和其他的路由器也是建立了鄰接關系的。
它們都是full狀态,而DRother之間隻是建立了一個鄰居關系。
- 是以DRother之間隻有2-way狀态。
即我們去檢視鄰居狀态的時候【display ospf peer】的時候,我們就會發現我的鄰居關系為什麼會卡在2-way,這裡并不一定是我配置錯誤,因為DRother之間卡在了鄰居狀态是比較正常的,我們不用去理會。
對于點對點和點到多點,它們都是可以直接去建立鄰接關系,去學習我們相應的路由的。不會去選舉DR和BDR。
注意:
我們之前有提到過224.0.0.5和224.0.0.6這兩個多點傳播封包:
- 對于224.0.0.6隻有DR和BDR才會去接收224.0.0.6的封包資訊。
- 224.0.0.5是OSPF的所有路由器都能夠去接收.5的封包資訊。
- 224.0.0.6是隻有DR和BDR才能夠去接收的。我們的DRohter向外發送路由消息的時候,DROther的目的位址肯定是224.0.0.6。
這裡隻能被DR和BDR接收到。
- 如果DR向外發送封包,去和DRohter、BDR也好,去共享我們的目的資訊的時候,我的目的位址是224.0.0.5。
我是發送給我的廣播多路通路網絡區域中的這個網段的所有路由器的,是以我的多點傳播位址是224.0.0.5。
這個就是它的兩個多點傳播位址的作用,224.0.0.5是作為所有的OSPF的路由器,224.0.0.6是隻有DR和BDR才能夠去接收的。