在ospf的drbdr選舉的過程中,dr的選舉依靠的是hello報文,在two-way之後,互動hello報文完成dr/bdr的選舉。
那麼在每台路由器根據收到的所有hello報文,會構建自己介面的資料結構,並按照一下演算法,計算出dr/bdr:
1、路由器介面資料結構中維持三個集合,分別是:
(1)dr集合:通過hello報文學習到的所有的dr路由器
(2)bdr集合:通過hello學習到的所有bdr路由器
(3)drother集合:沒有被選舉為dr/bdr的路由器,但優先順序不為0,因為一旦優先順序為0,則代表該路由器不參與選舉。
2、當選舉dr和bdr的演算法工作時,在dr集合中選擇最好的路由器,使其成為dr。在bdr集合中選擇最好的路由器,使其成為bdr。
首先,dr的選舉:
在dr的集合中應用以下規則:
如果dr集合為非空,則從中選擇最好的路由器成為dr;
如果dr集合為空,則把當前bdr提公升為dr;而如果bdr集合為空,則要先從drother集合中選出bdr,再將其提公升為dr。
bdr的選舉:
與dr類似,如果bdr集合為非空,則從中選擇最好的路由器為bdr;
如果bdr集合為空,則從drother集合中選擇最好的路由器成為bdr路由器。
由此可見,無論是dr還是bdr,除非他們本身在介面結構中的集合就包含所謂的dr、bdr,否則都要從下游的集合中以選舉的機制,來確認dr、bdr,那麼如何確保他們原本集合中就存在對應的dr呢?接下來我們來說一下關於dr/bdr的選舉過程。
dr/bdr的選舉過程:
ospf路由器在dr/bdr未選舉出來之前,hello報文中關於dr和bdr的字段全為0,即0.0.0.0。選舉完成後,dr和bdr的字段記錄一直的dr和bdr的routerid。
路由器介面根據偵聽到的hello報文,生成鄰居表並在介面維持三個集合:
dr集合{}
bdr集合{}
dother集合{}
具體過程如下:
(1)當ospf介面開啟後,在hello報文中設定dr/bdr欄位為全0,此時dr/bdr未知。同時,waittimer啟動,時長為4倍的hello間隔。
(2)如果收到的hello報文中dr及bdr欄位為非空,則wait計時器停止,接收當前dr/bdr的選擇。
(3)如果在wait計時器超時後,仍未學習到dr/bdr,則開始dr/bdr的選舉。
(4)如果bdr集合為空,則從drother集合選舉bdr;如果dr集合為空,則從bdr集合選舉dr。
(5)根據上述演算法,如果再沒有dr/bdr的網路上,wait計時器超時後,網路上的每台路由器都會先從drother集合選擇bdr,再把bdr提公升為dr;再重新從drother集合選擇bdr。至此,選舉結束,開始建立鄰接。
**:
this到底是誰
js中函式的4種呼叫方式 1.作為普通函式來呼叫 alert window.xx undefined function t t alert window.xx 333 解釋 作為普通函式來呼叫this時,this的值指向 windwo,準確的說,this為null,但被解釋成window,在ecma...
到底是誰害了誰?
到底是誰害了誰?和乙個獵頭朋友聊天,他說最近在找乙個軟體架構師的職務,年薪30萬。不知道朋友們對30w的年薪是什麼概念,但看了要求你就會更驚訝。如果真象jd裡面要求的那樣年薪30w實在是有點低了。他說乙個公司的做hr做的好的也不只這些,何況還有年終獎,績效什麼的。在中國做技術的其實是很慘的。從以前拼...
到底是誰害了誰?
到底是誰害了誰?和乙個獵頭朋友聊天,他說最近在找乙個軟體架構師的職務,年薪30萬。不知道朋友們對30w的年薪是什麼概念,但看了要求你就會更驚訝。如果真象jd裡面要求的那樣年薪30w實在是有點低了。他說乙個公司的做hr做的好的也不只這些,何況還有年終獎,績效什麼的。在中國做技術的其實是很慘的。從以前拼...