DR與BDR的選舉,在運(yùn)行OSPF路由協(xié)議的廣播多路訪問網(wǎng)絡(luò)中,所有的路由器被連接在同一個(gè)網(wǎng)段,它們兩兩之間如果建立完全的鄰居關(guān)系,則會(huì)有n×(n-1)/2個(gè)鄰居關(guān)系。
在大型的網(wǎng)絡(luò)中,存在著大量的路由器,在一個(gè)網(wǎng)段里有如此多的鄰居,維持鄰居關(guān)系的Hello包及鄰居間的鏈路狀態(tài)通告會(huì)消耗很多帶寬。尤其是當(dāng)網(wǎng)絡(luò)中突發(fā)大面積故障時(shí),同時(shí)發(fā)生的大量的鏈路更新可能會(huì)使路由器不斷地重新計(jì)算路由,而無法正常提供路由服務(wù)。
解決該問題的辦法是從這些路由器中選舉出指定的路由器DR,并且把這個(gè)路由器作為廣播網(wǎng)絡(luò)里每一臺路由器的鄰居路由器,如圖1所示。
圖1 DR與BDR的操作
所有非DR的路由器把自己的鏈路狀態(tài)信息以多點(diǎn)廣播的形式發(fā)送給DR,該多點(diǎn)廣播的地址為224.0.0.6(多點(diǎn)廣播的知識在CCNP的交換部分會(huì)講到)。然后DR再以多點(diǎn)廣播的形式將這些信息發(fā)送給網(wǎng)段中所有的路由器,該多點(diǎn)廣播的地址為224.0.0.5。這樣的操作使眾多的鏈路狀態(tài)信息只使用一個(gè)廣播包就可以傳遞到所有的路由器,節(jié)省了網(wǎng)絡(luò)資源。
圖2、圖3和圖4舉例說明了DR的操作。
圖2 路由器B向DR通告網(wǎng)絡(luò)故障
圖3 DR向非DR發(fā)送鏈路狀態(tài)更新
圖4 路由器C轉(zhuǎn)發(fā)鏈路狀態(tài)更新
從圖2中我們看到,當(dāng)路由器B發(fā)現(xiàn)一個(gè)網(wǎng)段出現(xiàn)故障后,它會(huì)向DR發(fā)出LSU,通告該網(wǎng)絡(luò)故障。
然后,DR會(huì)向網(wǎng)絡(luò)中所有的非DR路由器發(fā)送LSU,通告該故障,如圖3所示。
路由器C在接收到該通告后,除了要改動(dòng)自己的拓?fù)浔怼⒅匦掠?jì)算路由以外,還要向其他路由器轉(zhuǎn)發(fā)該通告,如圖4所示。
從以上例子中我們可以看出,事實(shí)上,DR成為了廣播多路訪問網(wǎng)絡(luò)中鏈路信息會(huì)聚的點(diǎn),它同時(shí)也是廣播多路訪問網(wǎng)絡(luò)中鏈路信息發(fā)散的點(diǎn)。為了防止DR故障影響整個(gè)網(wǎng)絡(luò)鏈路信息的傳遞,我們還要從這些路由器中選舉出備份的DR,即BDR。
DR與BDR的選舉,在廣播多路訪問網(wǎng)絡(luò)中是自動(dòng)的。
在運(yùn)行OSPF路由協(xié)議的廣播多路訪問網(wǎng)絡(luò)中,路由器互相比較它們的優(yōu)先級,優(yōu)先級高的作為DR,優(yōu)先級第二高的作為BDR。
但是在默認(rèn)情況下,路由器的優(yōu)先級是一樣的,這時(shí),路由器依靠比較路由器的標(biāo)識來決定誰是DR。標(biāo)識最大的路由器作為DR,標(biāo)識第二大的路由器作為BDR。
一旦DR發(fā)生故障而離線,BDR會(huì)升級為DR,同時(shí)引發(fā)新一輪的選舉,從非DR中選舉出一臺BDR。當(dāng)發(fā)生故障的原DR重新在線時(shí),無論它的優(yōu)先級多高,或者路由器標(biāo)識多大,它都不能得到原來的DR地位,只能成為普通的非DR路由器。只有等到下一次DR的選舉,它才可能成為BDR或者DR。
優(yōu)先級是0的路由器永遠(yuǎn)不能成為DR或者BDR。