技術小故事

OSPF DR/BDR 的民主選舉

廣播網路中的民主選舉:路由器如何選出指定路由器和備份指定路由器

2026-04-23 · 5 min read
OSPF DR BDR Election

🎭 故事

場景:廣播網路的城鎮大會

想像一個乙太網網段裡有 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。