关键词:OSPF DR、BDR、DR选举、Router Priority、Router ID、邻接关系优化、DR切换
第57篇:DR/BDR 选举机制与影响
一、引言
在第56篇中,我们了解到 OSPF 在广播(Broadcast)和 NBMA 网络中需要选举 DR(Designated Router,指定路由器)和 BDR(Backup Designated Router,备份指定路由器)。DR/BDR 机制是 OSPF 在共享介质上优化邻接关系数量的核心设计。
想象一个有 10 台路由器的以太网段:如果每台路由器都与其他 9 台建立 Full 邻接,将产生 45 条邻接关系(n*(n-1)/2)。这不仅浪费资源,还导致 LSA 泛洪时的报文风暴。DR/BDR 机制将邻接关系从 45 条缩减到 10 条——每台路由器只与 DR 和 BDR 建立 Full 邻接。
本文将深入解析 DR/BDR 的选举规则、选举过程、选举后的邻接关系模型,以及 DR 切换带来的影响和应对措施。
二、DR/BDR 的作用与价值
2.1 邻接关系数量对比
| 场景 | 路由器数量 | 无DR/BDR邻接数 | 有DR/BDR邻接数 | 缩减比例 |
|---|---|---|---|---|
| 小型网段 | 4 | 6 | 4 | 33% |
| 中型网段 | 10 | 45 | 10 | 78% |
| 大型网段 | 20 | 190 | 20 | 89% |
邻接关系公式:无 DR = n*(n-1)/2,有 DR = n(每台路由器与 DR/BDR 建立邻接)
2.2 DR/BDR 的核心职责
| 路由器角色 | 职责 | 邻接关系 |
|---|---|---|
| DR | 代表网络生成 Type2 Network LSA;所有 LSA 泛洪先发给 DR | 与所有路由器建立 Full 邻接 |
| BDR | 监听 DR 状态,DR 失效时接管 | 与所有路由器建立 Full 邻接 |
| DROther | 仅与 DR 和 BDR 建立 Full 邻接,DROther 之间仅维持 2-Way | 与 DR/BDR 建立 Full,与其他 DROther 保持 2-Way |
2.3 DR/BDR 的邻接关系模型

三、DR/BDR 选举规则
3.1 选举顺序
DR/BDR 选举严格按照以下顺序进行:
- 最高优先级胜出:Router Priority 值最大的路由器成为 DR
- 优先级相同时比较 Router ID:Router ID 最大的胜出
- 优先级为 0 的路由器永不参选:Router Priority = 0 表示放弃参选
3.2 选举流程

3.3 关键约束:非抢占机制
OSPF DR/BDR 选举是非抢占(Non-Preemptive)的。这意味着:
- 一旦 DR 选举完成,即使后续有更高优先级的路由器加入,也不会触发重新选举
- 只有当当前 DR 失效(Dead Timer 超时)后,才会重新选举
- BDR 在 DR 失效后自动接管成为新的 DR
这一设计避免了频繁的 DR 切换带来的 LSDB 重同步开销。
3.4 Router Priority 配置
| 参数 | 范围 | 默认值 | 说明 |
|---|---|---|---|
| Router Priority | 0~255 | 1 | 0 表示不参与 DR/BDR 选举 |
| Wait Timer | - | MaxDelayDeadline(20秒) | 等待所有邻居到达后再选举 |
# 设置路由器优先级
interface GigabitEthernet 0/0/0
ospf dr-priority 100
# 设置永不成为DR/BDR
interface GigabitEthernet 0/0/0
ospf dr-priority 0
# 设置为最高优先级确保成为DR
interface GigabitEthernet 0/0/0
ospf dr-priority 254
四、DR/BDR 选举的报文交互
4.1 Hello 报文中的 DR/BDR 字段
每台路由器在 Hello 报文中携带自己认知的 DR 和 BDR:
| 字段 | 说明 |
|---|---|
| Designated Router | 本端认知的 DR 的 Router ID(或接口地址) |
| Backup Designated Router | 本端认知的 BDR 的 Router ID(或接口地址) |
选举过程:
- 所有路由器发送 Hello,携带 Priority 和 Router ID
- 每台路由器比较收到的 Hello 中的 Priority 和 RID
- Wait Timer 超时后,基于收集到的信息确定 DR 和 BDR
- 选举结果在后续 Hello 中传播,所有路由器达成一致
4.2 报文目的地址变化
DR/BDR 选举完成后,LSA 泛洪的目的地址发生变化:
| 发送者 | 接收者 | 目的 IP 地址 | 说明 |
|---|---|---|---|
| 任意路由器 | DR | 224.0.0.6(AllDR) | 更新类报文发给 DR |
| DR/BDR | 所有路由器 | 224.0.0.5(AllSPF) | DR/BDR 泛洪给所有人 |
| DROther 之间 | - | 无 | 不建立 Full 邻接 |
五、DR 切换的影响与应对
5.1 DR 失效后的切换过程
当 DR 失效时(Dead Timer 超时):
- BDR 自动成为新的 DR
- 所有 DROther 路由器将新的 BDR(原 BDR)认作 DR
- 网络重新选举新的 BDR
- 所有邻接关系保持不变,不需要重新同步 LSDB
这是 BDR 存在的核心价值:DR 失效时实现无缝切换,无需重建邻接。
5.2 没有 BDR 的情况
如果网络中没有 BDR(BDR 字段为 0.0.0.0),当 DR 失效时:
- 所有路由器同时发现 DR 失效
- 触发新一轮 DR/BDR 选举
- 所有邻接关系中断,需要重新建立邻接和同步 LSDB
- 切换期间出现路由中断
建议:在生产网络中确保 BDR 正常选举,避免 DR 失效时的服务中断。
六、故障案例分析
6.1 案例一:不当的 DR 选举导致性能问题
故障现象:某汇聚交换机网段中,一台性能较低的接入交换机成为了 OSPF DR,导致 LSA 泛洪延迟和 SPF 计算瓶颈。
排查过程:
- 查看 DR 选举结果:
[Switch] display ospf interface GigabitEthernet 0/0/1
Network Type: Broadcast
Designated Router: 10.1.1.10 (接入交换机)
Backup Designated Router: 10.1.1.20
- 查看各路由器的 Priority:
# 接入交换机(当前DR)
[Access-SW] display ospf interface
Router Priority: 1 (默认值)
# 汇聚交换机
[Core-SW] display ospf interface
Router Priority: 1 (默认值)
根因分析:所有路由器使用默认的 Priority 1,选举完全依赖 Router ID。接入交换机的 Router ID 恰好最大,因此成为了 DR。
解决方案:
# 步骤1:在高性能路由器上设置高优先级
[Core-SW] interface GigabitEthernet 0/0/1
[Core-SW-GigabitEthernet0/0/1] ospf dr-priority 100
# 步骤2:在接入交换机上设置低优先级
[Access-SW] interface GigabitEthernet 0/0/1
[Access-SW-GigabitEthernet0/0/1] ospf dr-priority 10
# 步骤3:等待DR超时后重新选举,或重启OSPF进程触发选举
[Access-SW] reset ospf process
注意:由于非抢占机制,修改优先级后需要等待当前 DR 失效才能重新选举。生产环境中建议在维护窗口操作。
6.2 案例二:DR 频繁切换导致路由震荡
故障现象:某以太网的 OSPF DR 频繁变化,导致网络路由周期性震荡。
排查过程:
- 查看 OSPF 事件记录:
[Switch] display ospf fault-record
# 周期性显示DR变更事件
- 检查接口物理状态:
[Switch] display interface GigabitEthernet 0/0/1
# 当前DR的接口存在频繁UP/DOWN
- 检查 STP 状态:
[Switch] display stp brief
# 发现STP正在计算,导致接口周期性Block/Forward
根因分析:生成树协议(STP)的拓扑变化导致当前 DR 的接口周期性 DOWN,DR 失效后触发重新选举。BDR 接管后同样遭遇 STP Block,形成震荡。
解决方案:
# 方案1:在OSPF接口所在的VLAN上关闭STP
[Switch] vlan 100
[Switch-vlan100] stp disable
# 方案2:确保DR和BDR的接口不受STP影响
[Switch] interface GigabitEthernet 0/0/1
[Switch-GigabitEthernet0/0/1] stp edgedisk enable
# 方案3:调整STP的优先级,确保核心交换机为根桥
[Switch] stp root primary
6.3 案例三:修改网络类型避免不必要的 DR 选举
故障现象:两台路由器通过直连以太网连接,但 DR 选举仍被执行,增加了配置复杂度。
排查过程:
- 查看网络类型:
[R1] display ospf interface GigabitEthernet 0/0/0
Network Type: Broadcast
# 即使只有两台路由器,仍执行DR选举
解决方案:
# 对于两台路由器直连的场景,无需DR/BDR,改为P2P
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ospf network-type p2mp
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ospf network-type p2mp
七、总结
| 核心要点 | 说明 |
|---|---|
| DR/BDR 作用 | 减少广播/NBMA 网络中的邻接关系数量 |
| 选举规则 | 优先级最高 → Router ID 最大;优先级 0 不参选 |
| 非抢占 | DR 一旦选举完成不会因更高优先级加入而变更 |
| BDR 价值 | DR 失效时 BDR 无缝接管,邻接关系不变 |
| Hello 携带 | Hello 报文中携带 DR/BDR 字段用于选举和传播 |
| 报文地址 | 224.0.0.5(AllSPF)给所有路由器,224.0.0.6(AllDR)仅给 DR/BDR |
| 优化建议 | 将 DR/BDR 角色分配给性能最强的路由器 |
思考
- OSPF 为什么采用非抢占的 DR 选举机制?如果允许抢占,会带来什么问题?
- 在一个有 5 台路由器的广播网络中,如果 DR 和 BDR 同时失效,网络需要多长时间才能恢复?恢复过程中会发生什么?
- 为什么 P2P 和 P2MP 网络类型不需要选举 DR/BDR?
下篇预告:第58篇:OSPF LSA 类型详解(Type1–Type7)——系统讲解 OSPF 七种 LSA 类型的作用、生成者和泛洪范围。