OSPF路由器不能成為DR/BDR唯一的方法:DR優(yōu)先級(jí)=0
很多小伙伴學(xué)習(xí)完OSPF中的DR/BDR選取規(guī)則以后,感覺很簡(jiǎn)單,不過在做實(shí)驗(yàn)的時(shí)候,會(huì)發(fā)現(xiàn)有的時(shí)候選取的DR/BDR并不是自己預(yù)期的,又會(huì)感覺很迷惑:難道是自己學(xué)習(xí)的選取規(guī)則有問題嗎?
其實(shí)不是的,DR/BDR的選取,還有一個(gè)重要的知識(shí)點(diǎn):DR/BDR是不可搶占的!不過在學(xué)習(xí)新知識(shí)點(diǎn)之前,我們先來復(fù)習(xí)一下DR/BDR的選擇規(guī)則!
DR/BDR的選舉規(guī)則
我們都知道DR/BDR是一個(gè)路由器接口的屬性,它只能表示某個(gè)路由器在某個(gè)網(wǎng)段上是什么角色,并不能代表整個(gè)路由器,所以DR/BDR的選取是針對(duì)某個(gè)網(wǎng)段的。
例如在下面的多點(diǎn)接入拓?fù)渲校兴呐_(tái)路由器在同一個(gè)網(wǎng)段10.1.1.0/24里,在這個(gè)網(wǎng)段上會(huì)選取DR、BDR。

四臺(tái)路由器在初始的情況下,都會(huì)認(rèn)為自己是DR/BDR, 在它們發(fā)送的報(bào)文中,也會(huì)把DR和BDR的標(biāo)記置位。
當(dāng)一臺(tái)路由器收到比自己DR優(yōu)先級(jí)更大的報(bào)文時(shí),就會(huì)停止申明自己的DR/BDR,轉(zhuǎn)為聲明DR優(yōu)先級(jí)更大的路由器為DR/BDR。
根據(jù)DR優(yōu)先級(jí)選取
如果一臺(tái)路由器收到的報(bào)文,DR優(yōu)先級(jí)是相同的,就會(huì)比較Router ID,如果對(duì)方的Router ID比自己更大,也會(huì)聲明對(duì)方是DR/BDR。
根據(jù)Router ID選取
上面就是DR/BDR的選擇規(guī)則:
- 先比較DR優(yōu)先級(jí),最大的路由器會(huì)被選取為DR/BDR;
- 如果DR優(yōu)先級(jí)相同,則會(huì)根據(jù)Router ID來選取DR/BDR;
DR/BDR選取的不可搶占性
如果事情都按照DR/BDR的選取規(guī)則來,則小伙伴就不會(huì)有疑問了,整個(gè)世界也就清靜了。不過在我們查看DR和BDR的角色時(shí),經(jīng)常會(huì)看到成為DR/BDR的路由器并不是我們期望的。例如下圖,有3個(gè)路由器,初始情況下,R3的DR優(yōu)先級(jí)為30,值最大的,所以它會(huì)被選擇為這個(gè)網(wǎng)段上的DR;R2的優(yōu)先級(jí)次之,它會(huì)選擇為這個(gè)網(wǎng)段上的BDR。
DR/BDR
此時(shí)如果在網(wǎng)絡(luò)上,再添加一臺(tái)路由器R2,DR優(yōu)先級(jí)是50,這時(shí)會(huì)有什么反應(yīng)呢?會(huì)不會(huì)R2成為新的DR,R3變成BDR呢?
新增一臺(tái)路由器R2
事實(shí)上這時(shí)時(shí)候,網(wǎng)絡(luò)上什么都不會(huì)變化,R3仍然作為DR存在,R1作為BDR存在!如果此時(shí)查看路由器的狀態(tài),你就會(huì)覺得DR/BDR的選擇規(guī)則是錯(cuò)誤的!
網(wǎng)絡(luò)沒有變化
其實(shí)上面所說的DR/BDR的選擇規(guī)則并沒有錯(cuò)誤,出現(xiàn)這種情況的原因是DR/BDR的選取還需要遵循另外一個(gè)規(guī)則:DR/BDR的選取是終身的,不會(huì)被搶占!
意思就是說,在一個(gè)網(wǎng)段上,選取出DR/BDR以后,那在它Fail之前,就會(huì)一直是DR/BDR,不會(huì)被后來的高優(yōu)先級(jí)的路由器取代!
為什么要這么做呢?OSPF的這種做法其實(shí)是符合實(shí)際網(wǎng)絡(luò)的使用要求:穩(wěn)定壓倒一切。
切換DR/BDR時(shí),需要重新通告LSA,網(wǎng)絡(luò)會(huì)有短暫的流量不通,這在實(shí)際工作中,是不允許的。如果有高優(yōu)先級(jí)的路由器加入網(wǎng)絡(luò),就切換DR/BDR,會(huì)有可能造成網(wǎng)絡(luò)的震蕩。比如新加入的OSPF路由器不穩(wěn)定,一會(huì)UP,一會(huì)Down,那整個(gè)網(wǎng)絡(luò)就沒有辦法使用了。
所以O(shè)SPF在設(shè)計(jì)的時(shí)候,就考慮到了這一點(diǎn),DR/BDR選取以后,就不會(huì)發(fā)生改變了!
我們?cè)趯?shí)驗(yàn)室遇到這種情況,不用擔(dān)心,直接把所有路由器的OSPF進(jìn)程清除,讓它們重新選取就可以了!但在實(shí)際網(wǎng)絡(luò)中,是不能隨便清除OSPF進(jìn)程的!
并且很多時(shí)候,我們遇到DR/BDR不是我們期望路由器的情況,是我們的敲命令的動(dòng)作慢了。初始情況下,一臺(tái)路由器會(huì)等待40秒(默認(rèn))的時(shí)間,才會(huì)選取DR/BDR。如果高DR優(yōu)先級(jí)的路由器在40秒以后才加入網(wǎng)絡(luò),就沒有機(jī)會(huì)成為DR/BDR了!
DR優(yōu)先級(jí)為0的路由器,不參與DR/BDR的選取
經(jīng)過上面的描述,小伙伴應(yīng)該能夠明白了,即使路由器的DR優(yōu)先級(jí)最大,也不一定能成為DR/BDR。而想讓一臺(tái)OSPF路由器永遠(yuǎn)的成某個(gè)為網(wǎng)段的DR/BDR,通過修改DR優(yōu)先級(jí)和Router ID是行不通的。其實(shí)想讓路由器永遠(yuǎn)成為DR,有且只有一種方法:將其它OSPF路由器的DR優(yōu)先級(jí)設(shè)置為0。
當(dāng)路由器的DR優(yōu)先級(jí)被設(shè)置為0以后,它就不會(huì)參與這個(gè)網(wǎng)段上DR/BDR的選取了,它的角色永遠(yuǎn)就是DR Other。
DR優(yōu)先級(jí)設(shè)置為0
當(dāng)然這種做法的風(fēng)險(xiǎn)就是如果DR路由器Fail以后,整個(gè)網(wǎng)絡(luò)就癱瘓了,沒有辦法轉(zhuǎn)發(fā)報(bào)文。因?yàn)镈R Other只能和DR交換路由信息,DR Other之間是不交換路由信息的。
總結(jié)
經(jīng)過上面的描述,各位小伙伴應(yīng)該對(duì)DR/BDR的選取機(jī)制和不可搶占的原因了解了吧?我在做一下簡(jiǎn)單的總結(jié):
- 在同一個(gè)網(wǎng)段上,會(huì)選擇DR優(yōu)先級(jí)最高的路由器作為DR;
- 如果DR優(yōu)先級(jí)相同,則會(huì)選取Router ID最大的路由器作為BDR;
- DR/BDR選取以后,就不能被搶占,永久生效,直到路由器Fail。