OSPF DR/BDR 的民主選舉
廣播網路中的民主選舉:路由器如何選出指定路由器和備份指定路由器
🎭 故事
場景:廣播網路的城鎮大會
想像一個乙太網網段裡有 5 台路由器:Router A、B、C、D、E。它們都成為了 Neighbor,互相認識了。
但現在有個問題:如果這 5 台路由器兩兩之間都要交換完整的路由信息,那工作量太大了——會有 5×5 = 25 條連線,資訊氾濫,效率極低。
某個聰明的路由器(比如 Router A)想到了一個辦法:「不如我們選一個代表,由他來收集大家的信息,然後分發給所有人。這樣效率會高得多!」其他路由器一致同意:「好主意!」
觸發:選舉的開始
OSPF 協議決定舉行「民主選舉」。第一輪投票:看誰的 Priority 最高:
- Router A:Priority 128(預設值)
- Router B:Priority 128
- Router C:Priority 200(被管理員提高了優先級)
- Router D:Priority 0(被管理員禁用,明確表示「我不參選」)
- Router E:Priority 128
第一輪結果:Router C 的 Priority 最高(200),當選為 DR(Designated Router)——「資訊樞紐」。
流程:選舉的細節
選 BDR:既然 Router C 當選 DR,大家決定選一個備胎。Router D 的 Priority = 0,明確不參選。剩下 Router A、B、E 的 Priority 都是 128——打成平手了!
此時,OSPF 啟動「破平手」規則:看誰的 Router ID 最大。
- Router A:Router ID
1.1.1.1 - Router B:Router ID
2.2.2.2 - Router E:Router ID
5.5.5.5← 最大!
Router E 當選 BDR(Backup Designated Router)。選舉結果:DR = Router C、BDR = Router E、DROther = Router A、B、D。
新的工作模式
選舉完成後,網路的信息交換方式完全改變。之前 5 台路由器兩兩互連需要 10 條連線;現在所有路由器只和 DR(Router C)交換信息,BDR(Router E)監督 DR 並隨時準備接手。
整個網路從 O(n²) 降低到 O(n)。每台路由器只有和 DR/BDR 才會進一步升級到 ExStart → Exchange → Loading → Full;其他路由器之間的關係停留在 2-Way——「點頭之交」,不做深度信息交換。
📍 技術摘要
DR/BDR 選舉規則
| 順位 | 條件 |
|---|---|
| 1️⃣ 第一 | Priority 最高者當選 DR |
| 2️⃣ 第二 | Priority 次高者為 BDR |
| 3️⃣ 平手 | 比較 Router ID(最大者優先) |
| ❌ 排除 | Priority = 0 的路由器不參選 |
Priority 預設值為 128,範圍 1–255。修改指令:ip ospf priority [0-255]
⚠️ 選舉是非搶占式的——在選舉過程結束後才提高 Priority,不會觸發重新選舉。只有當前 DR 或 BDR 下線才會重新選舉。
Adjacency 模式
| 角色 | Full State 對象 | 說明 |
|---|---|---|
| DR | 與所有路由器 | 資訊樞紐,交換所有路由信息 |
| BDR | 與所有路由器 | 備份樞紐,隨時監督 |
| DROther | 只與 DR/BDR | 停留在 2-Way,不做深度同步 |
⚠️ 常見誤解
❌ Priority 高就一定能當 DR
✅ Priority 必須在選舉開始前就設定好。選舉結束後才提高 Priority,現有的 DR/BDR 不會重新選舉(非搶占式)。
❌ DR 就是最快的路由器
✅ DR 是廣播網路中被選出來的「信息樞紐」,選舉條件是 Priority 和 Router ID,與速度或 CPU 性能完全無關。
❌ BDR 掛線時 DR 自動變成 BDR
✅ BDR 掛線會觸發新 BDR 的選舉,DR 保持不變。只有 DR 掛線時,BDR 才自動升格為 DR,然後重新選舉新的 BDR。