关键词: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 的邻接关系模型 - 图示

三、DR/BDR 选举规则

3.1 选举顺序

DR/BDR 选举严格按照以下顺序进行:

  1. 最高优先级胜出:Router Priority 值最大的路由器成为 DR
  2. 优先级相同时比较 Router ID:Router ID 最大的胜出
  3. 优先级为 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(或接口地址)

选举过程:

  1. 所有路由器发送 Hello,携带 Priority 和 Router ID
  2. 每台路由器比较收到的 Hello 中的 Priority 和 RID
  3. Wait Timer 超时后,基于收集到的信息确定 DR 和 BDR
  4. 选举结果在后续 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 超时):

  1. BDR 自动成为新的 DR
  2. 所有 DROther 路由器将新的 BDR(原 BDR)认作 DR
  3. 网络重新选举新的 BDR
  4. 所有邻接关系保持不变,不需要重新同步 LSDB

这是 BDR 存在的核心价值:DR 失效时实现无缝切换,无需重建邻接。

5.2 没有 BDR 的情况

如果网络中没有 BDR(BDR 字段为 0.0.0.0),当 DR 失效时:

  1. 所有路由器同时发现 DR 失效
  2. 触发新一轮 DR/BDR 选举
  3. 所有邻接关系中断,需要重新建立邻接和同步 LSDB
  4. 切换期间出现路由中断

建议:在生产网络中确保 BDR 正常选举,避免 DR 失效时的服务中断。

六、故障案例分析

6.1 案例一:不当的 DR 选举导致性能问题

故障现象:某汇聚交换机网段中,一台性能较低的接入交换机成为了 OSPF DR,导致 LSA 泛洪延迟和 SPF 计算瓶颈。

排查过程:

  1. 查看 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
  1. 查看各路由器的 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 频繁变化,导致网络路由周期性震荡。

排查过程:

  1. 查看 OSPF 事件记录:
[Switch] display ospf fault-record
 # 周期性显示DR变更事件
  1. 检查接口物理状态:
[Switch] display interface GigabitEthernet 0/0/1
 # 当前DR的接口存在频繁UP/DOWN
  1. 检查 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 选举仍被执行,增加了配置复杂度。

排查过程:

  1. 查看网络类型:
[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 角色分配给性能最强的路由器

思考

  1. OSPF 为什么采用非抢占的 DR 选举机制?如果允许抢占,会带来什么问题?
  2. 在一个有 5 台路由器的广播网络中,如果 DR 和 BDR 同时失效,网络需要多长时间才能恢复?恢复过程中会发生什么?
  3. 为什么 P2P 和 P2MP 网络类型不需要选举 DR/BDR?

下篇预告:第58篇:OSPF LSA 类型详解(Type1–Type7)——系统讲解 OSPF 七种 LSA 类型的作用、生成者和泛洪范围。