思科OSPF多路访问网络DR/BDR选举规则、配置与排障实战

发布时间:2026/10/27 12:19:59
思科OSPF多路访问网络DR/BDR选举规则、配置与排障实战 OSPF 跑在以太网这类多路访问网段上如果每台路由器都跟同网段的其他所有路由器建立完整邻接5 台设备就是 10 条邻接10 台就是 45 条LSA 泛洪会变成一场人人喊话的会议。DR 和 BDR 的选举机制就是把这个网状结构收敛成星型大家只跟主持人交换信息主持人再统一分发。我见过不少网络在扩容、割接之后出现路由黑洞、设备 CPU 飙高追到最后都是 DR 选举没提前规划——要么全网优先级都是默认的 1谁当 DR 全看 Router ID 大小要么改了优先级以为立刻生效结果老 DR 一直干到进程重启。这篇就把思科设备上多路访问网络的 DR/BDR 选举规则、配置命令、验证方法以及我实际踩过的坑一次讲清楚。刚接触 OSPF 的读者可以照着搭实验已经上手但被为什么改了优先级不切换困住的同学也能找到答案。1. 多路访问网络里为什么必须选DR和BDR1.1 从邻接关系的数量说开去先算笔账。一个广播网段里有 n 台路由器如果不做任何优化每台路由器都要跟其余 n-1 台建立 Full 邻接全网邻接总数是 n(n-1)/2。这个增长是平方级的5 台设备 10 条10 台设备 45 条20 台设备就是 190 条。每一条邻接背后都是一整套开销Hello 保活、数据库描述报文交换、LSR/LSU 请求与更新、重传队列、邻居状态机维护。设备数量一上去接口带宽和 CPU 都会被这些内部沟通吃掉。更要命的是泛洪逻辑。网段里任何一台路由器收到一条新 LSA都要向它的所有邻居各复制一份。邻接关系越多同一条 LSA 在同一个网段里的副本数量就越多收敛时间也跟着拉长。OSPF 的设计者在这个点上做了一个很务实的取舍既然大家的信息最终都要同步那就选一个汇总人让所有人只跟汇总人同步再由汇总人统一广播出去。这就是 DRDesignated Router指定路由器的由来BDRBackup Designated Router备份指定路由器则是它的热备。提示这里的选举不是投票制没有多数票的概念。它是每台路由器根据 Hello 报文里的接口优先级和 Router ID 自行比较、自行收敛的结果理解这一点对后面排查问题非常关键。1.2 DR和BDR到底各干什么活DR 的核心职责有两个。第一它代表这个广播网段生成 Type 2 的 Network LSA这条 LSA 里列出了该网段上所有路由器的 Router ID 和 DR 自己的接口地址让区域内的其他路由器知道这个网段上挂着哪些人。第二它作为该网段的泛洪中心把收到的更新以组播 224.0.0.5 发给网段内所有 OSPF 路由器。BDR 的职责容易被误解成什么都不干等着接班。实际上 BDR 必须跟网段内所有 DROTHER 建立 Full 邻接同步完整的链路状态数据库。它监听 224.0.0.6 这个 AllDRouters 组播地址把 DR 收到的每一条更新都收下来。正因为数据库是热的DR 一旦失效BDR 能在 Dead Timer 到期后立刻接管不需要重新同步数据库收敛时间被压到最短。如果 BDR 平时不同步切换时就得从头来一遍那这个备份就形同虚设了。DROTHER 之间的状态是 2-Way不是 Full这点新手经常看错。它们互相能收到对方的 Hello知道对方存在但不交换数据库描述报文。所有 DROTHER 只跟 DR 和 BDR 建立 Full 邻接。数据层面的组播地址分工也很清晰DROTHER 发更新用 224.0.0.6只有 DR 和 BDR 收DR 发更新用 224.0.0.5所有人都收。1.3 哪些网络类型参与选举哪些压根不投票不是所有 OSPF 网络类型都会选 DR。搞混这一点会在排查时绕很大弯路。下面这张表是我自己整理的对照日常查起来比翻文档快。网络类型是否选DR/BDRHello/Dead 默认值典型场景Broadcast是10 秒 / 40 秒以太网、VLAN 内、EtherChannelNon-BroadcastNBMA是30 秒 / 120 秒帧中继物理接口、不支持组播的共享介质Point-to-Point否10 秒 / 40 秒PPP/HDLC 串口、点到点子接口Point-to-Multipoint否30 秒 / 120 秒Hub-Spoke 结构把共享网段当多条点对点Point-to-Multipoint Non-Broadcast否30 秒 / 120 秒同上但需要手动指定邻居Loopback否不发送用作 Router ID 或 /32 主机路由点到点网络不选举的理由很直白只有两端没有第三方星型收敛没有意义直接建 Full 邻接最简单也最快。点到多点则是把一条物理链路在逻辑上拆成多条点对点每对邻居单独建邻接同样不需要 DR。真正容易出问题的是网络类型配置不一致。一端配成 broadcast另一端配成 point-to-pointHello 和 Dead 定时器对不上邻居根本起不来。我在一个割接项目里遇到过两端都是串口一边沿用了老模板配了 ip ospf network point-to-point另一边是默认的 non-broadcast结果邻居卡在 INIT 一直不动查了快两个小时才发现是网络类型不匹配。2. 选举规则拆解优先级、Router ID与不可抢占2.1 两轮比较先看接口优先级再看Router IDDR 的选举就两轮比较逻辑非常干脆。第一轮比接口优先级这是接口级参数取值范围 0 到 255默认值是 1通过ip ospf priority配置。优先级最高的那台成为 DR第二高的成为 BDR。第二轮是在优先级相同时比 Router ID数值大的胜出。Router ID 是路由器级参数取值来源有优先级顺序手工配置的router-id最高优先其次是 Loopback 接口里 IP 最大的那个最后才是物理接口里 IP 最大的那个。举个具体例子。四台路由器在同一网段R1 优先级 200、RID 1.1.1.1R2 优先级 100、RID 2.2.2.2R3 和 R4 优先级都是默认 1RID 分别是 3.3.3.3 和 4.4.4.4。结果就是 R1 当 DRR2 当 BDRR3 和 R4 是 DROTHER。假如 R1 和 R2 优先级都配成 100那 R2 因为 RID 更大2.2.2.2 1.1.1.1反而会成为 DRR1 降为 BDR。这个细节在做指定主备的时候经常被忽略光配了相同优先级以为先配的先赢实际是 RID 说了算。还有一层容易混淆Router ID 是整个 OSPF 进程内唯一的但 DR/BDR 的身份是接口级的。同一台路由器G0/1 接口上可能是 DRG0/2 接口上可能是 DROTHER两者互不影响。每个广播网段独立进行一轮选举各选各的。2.2 Wait Timer与选举时机改完配置为什么没反应这是 DR 选举里最容易让人抓狂的部分也是我被问得最多的一个问题。核心结论OSPF 的 DR/BDR 选举是不可抢占的。具体过程是这样的。一台路由器在广播接口上启动 OSPF 后会进入一个 Wait Timer默认等于 Dead Timer也就是 40 秒。在这 40 秒里它持续发 Hello、收 Hello但不急着宣布自己是 DR。如果 40 秒内没有收到任何声称自己是 DR 的 Hello它就认为这个网段还没有 DR自己顶上。这 40 秒的等待就是防止设备重启后造成不必要的选举震荡。一旦选举完成格局就固化了。此时新加入一台优先级更高的路由器它会在 Hello 里宣告自己的优先级现有 DR 也能看到但大家都不会主动让位。只有现有的 DR 失效——Dead Timer 到期、接口 down、或者进程重启——才会触发新一轮选举这时候新来的高优先级设备才有机会上位。注意这就是改了优先级不生效的根本原因。配置本身是立即写进 Hello 报文的但选举结果要等下一次选举事件才会改变。不要以为是配置没敲对反复敲命令是没用的。这个设计的好处在稳定性坏处是变更不直观。所以规划阶段就要把 DR 的位置定好别指望上线后随时调。我的习惯是在设计文档里直接写明每个广播网段的 DR 应该是谁对应的优先级和 RID 一起写清楚施工时一次性配到位。2.3 优先级0的真实语义和几个高频误解ip ospf priority 0的含义是这台路由器永远不参与 DR/BDR 选举它会被强制固定在 DROTHER 角色。这个配置在实际工作中很有用比如某些只作为接入的路由器不需要承担泛洪中心的职责就可以把优先级设成 0把 DR 的位置留给核心设备。关于这个 0有几个高频误解值得单独说。第一个误解是优先级 0 表示最低优先级还是有可能被选上。不是的0 是硬性排除不是排序里的最小值数学上是退出竞选。第二个误解是优先级设得很高比如 255就一定能抢到 DR。在已经收敛的网段里高优先级同样抢不了还是受不可抢占规则约束。第三个误解是优先级 0 的路由器还能当 BDR。也不行DR 和 BDR 是从同一个候选池里选出来的优先级 0 直接出局。还有一个更隐蔽的认知偏差有人以为 DR 是路由计算中心所有 SPF 都由 DR 算好了再分发。完全不是。每一台路由器都会独立运行 SPF 算法、独立维护 LSDBDR 只影响 LSA 的泛洪拓扑结构不参与路由计算的分工。搞清这一点就不会在 DR 切换后看到路由需要重算时觉得奇怪了——重算是必然的因为 Type 2 LSA 换了生成者。3. 配置实操搭一个能看清楚选举过程的小实验3.1 拓扑与地址规划想看明白选举过程至少需要三台路由器因为两台设备的场景下必定一主一备看不出 DROTHER 之间的 2-Way 状态。我用四台路由器接同一台二层交换机来搭这个结构最接近实际的企业网接入层。地址规划如下R1 的 G0/1 配 10.1.1.1/24Loopback0 配 1.1.1.1/32R2 的 G0/1 配 10.1.1.2/24Loopback0 配 2.2.2.2/32R3 的 G0/1 配 10.1.1.3/24Loopback0 配 3.3.3.3/32R4 的 G0/1 配 10.1.1.4/24Loopback0 配 4.4.4.4/32。四台设备都在 Area 0。实验的目标分三步走第一步全用默认配置看选举结果是不是按 RID 大小排第二步手工调优先级验证不抢占这个特性第三步人为让 DR 失效观察 BDR 接管和高优先级设备上位的过程。这三步走完选举机制的每个细节都能亲眼看到。3.2 接口优先级与OSPF进程的命令清单先看 R1 的完整配置其他三台照抄改地址即可。R1(config)# interface Loopback0 R1(config-if)# ip address 1.1.1.1 255.255.255.255 R1(config-if)# exit R1(config)# interface GigabitEthernet0/1 R1(config-if)# ip address 10.1.1.1 255.255.255.0 R1(config-if)# no shutdown R1(config-if)# ip ospf priority 200 R1(config-if)# exit R1(config)# router ospf 1 R1(config-router)# router-id 1.1.1.1 R1(config-router)# network 10.1.1.0 0.0.0.255 area 0 R1(config-router)# network 1.1.1.1 0.0.0.0 area 0ip ospf priority是接口下的命令配在哪个接口就影响哪个网段的选举这点要记牢。有人在全局配了一遍发现没效果就是找错了位置。router-id建议养成手工指定的习惯这一点我要重点强调。不手工指定 RID 的隐患在于OSPF 选择 RID 的顺序是先看有没有手工配置没有就选 Loopback 里最大的 IP再没有就选物理接口里最大的 IP。如果 RID 是靠物理接口选出来的某个接口 down 掉RID 可能就变了。RID 一变这台路由器在邻居眼里的身份就变了所有邻居关系会被重置LSDB 重新同步网段上还可能触发一轮新的 DR 选举。生产环境里这种莫名其妙断一下的事故不少都是 RID 不稳定造成的。另外提一句多数 IOS 版本里配置router-id之后需要重启 OSPF 进程才真正生效敲完命令用show ip ospf看一眼当前 RID 是不是你配的那个别想当然。3.3 用show命令把选举结果读明白配置完成后在 R1 上执行接口状态查看命令输出的关键几行是这样R1# show ip ospf interface GigabitEthernet0/1 GigabitEthernet0/1 is up, line protocol is up Internet Address 10.1.1.1/24, Area 0 Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1 Transmit Delay is 1 sec, State DR, Priority 200 Designated Router (ID) 1.1.1.1, Interface address 10.1.1.1 Backup Designated Router (ID) 2.2.2.2, Interface address 10.1.1.2 Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5 Neighbor Count is 3, Adjacent neighbor count is 3 Adjacent with neighbor 2.2.2.2 (Backup Designated Router) Adjacent with neighbor 3.3.3.3 Adjacent with neighbor 4.4.4.4读这段输出要抓几个点。State DR说明本接口角色Priority 200是当前接口优先级。Designated Router和Backup Designated Router两行显示的是当前网段公认的结果注意这里显示的 ID 是 Router ID后面的 Interface address 才是接口 IP。Hello 10, Dead 40, Wait 40三个定时器里Wait 等于 Dead正是前面讲的等待期。Adjacent neighbor count is 3表示有三条邻接达到 Full括号标注的那条是 BDR。再看 R2 的邻居表这里的对比信息最有价值R2# show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 1.1.1.1 200 FULL/DR 00:00:32 10.1.1.1 GigabitEthernet0/1 3.3.3.3 1 FULL/DROTHER 00:00:37 10.1.1.3 GigabitEthernet0/1 4.4.4.4 1 2WAY/DROTHER 00:00:39 10.1.1.4 GigabitEthernet0/1R2 自己是 BDR所以它跟 DRR1是 Full跟 R3 是 Full跟 R4 是 2WAY。R3 和 R4 都是 DROTHER互相之间只有 2WAY。这一段经常被误判成故障其实完全正常。判断标准很简单只要每个 DROTHER 跟 DR 和 BDR 都是 Full整体就是健康的。想看 Type 2 LSA 是谁生成的执行show ip ospf database network能看到 Link ID 是 DR 的接口地址10.1.1.1Advertising Router 是 DR 的 RID1.1.1.1LSA 正文里挂着四台路由器的 RID。DR 一旦切换这条 LSA 的 Link ID 和 Advertising Router 都会跟着变SPF 也会重算一次。3.4 让选举立刻生效的几种做法与各自代价如果确实需要马上把 DR 换掉可选的手段不多每一种都有代价得权衡。第一种clear ip ospf process。敲完会提示确认R1# clear ip ospf process Reset ALL OSPF processes? [no]: yes这个命令重置的是整台设备的 OSPF 进程该设备上所有 OSPF 接口、所有区域的邻居关系全部重建。如果这台设备是多区域边界影响面会很大路由会抖动几秒到几十秒。除非在维护窗口我不建议在网络高峰期这么干。第二种接口 shutdown 再 no shutdown。影响范围只限这个接口比清进程温和得多代价是这个网段的邻居会短暂中断并且会触发一次本网段的重新选举。第三种让老 DR 的优先级降下来然后等。听起来很优雅实际不解决问题——降优先级同样不触发抢占还得等老 DR 失效。所以这个方案只在下次选举时不想让它再当选这个场景下有意义。第四种在下游做流量牵引或者干脆接受现状、把变更排到维护窗口。我个人的做法是后者DR 切换虽然影响不算大但会引起全网段 SPF 重算在大型网络里还是可能造成短暂的路由黑洞值得谨慎。提示真正正确的做法是事前规划。DR 的位置在设计阶段就定死配置模板里把优先级和 RID 一起固化别让它上线后随机漂移。4. 特殊网段NBMA、点对多点与共享介质上的选举差异4.1 NBMA网络手动指定邻居让Hub坐稳DR位非广播多路访问网络NBMA不支持下组播和广播OSPF 报文得靠单播发所以邻居必须手工指定。在 router ospf 进程下用neighbor命令还可以顺便指定对方的优先级R1(config)# router ospf 1 R1(config-router)# neighbor 10.1.1.2 priority 10 R1(config-router)# neighbor 10.1.1.3 priority 5这里有个容易被忽略的关键点在 Hub-Spoke 结构里Hub 必须是 DR。原因是 OSPF 把 NBMA 当成一个广播网段来看待SPF 计算时会认为所有 Spoke 之间是直连的下一跳直接指向对端接口地址。但实际物理拓扑里 Spoke 之间没有直连链路流量必须经过 Hub 中转。如果 DR 选到了某个 Spoke 上Type 2 LSA 由它生成其他 Spoke 拿到的下一跳信息可能就不对直接表现就是部分 Spoke 之间通、部分不通或者时通时不通。解决办法就是在 Hub 上把接口优先级调高确保它稳定当选。同时别忘了 NBMA 的 Hello 是 30 秒、Dead 是 120 秒Wait 也是 120 秒比广播网络慢得多割接后要有耐心等它收敛。4.2 点对多点与点对多点非广播压根不选把接口网络类型改成 point-to-multipoint选举就彻底不发生了R1(config)# interface Serial0/0 R1(config-if)# ip ospf network point-to-multipoint这种模式下OSPF 把共享网段逻辑上拆成一堆点对点链路每条链路单独建邻接每台邻居生成一条 /32 的主机路由。好处是配置简单、不需要全互联、不需要操心 DR 位置代价是路由表条目变多LSA 数量增加在大规模网络里对设备资源有一定压力。如果链路本身不支持组播还得改成 point-to-multipoint non-broadcast配合手工neighbor命令。这种类型同样不选举。4.3 交换机堆叠/级联环境下的隐蔽问题最后说说二层环境带来的干扰。广播域是由交换机划定的同一个 VLAN 内的所有端口共享一个广播域也就共享一次 DR 选举不同 VLAN 属于不同网段各自独立选举。这个道理简单但实际操作里有几个坑。一是子接口。路由器如果通过 trunk 接交换机、划了多个子接口每个子接口是独立的广播网段各自有一轮选举。有人只在主接口上配了优先级以为子接口会继承实际不会子接口得单独配。二是二层收敛。如果交换机之间的级联链路不稳定、STP 反复收敛Hello 报文会丢。丢几个 Hello 不致命但连续丢满 Dead Timer默认 40 秒邻居就会被判定失效触发 DR 重新选举。等链路恢复原来的 DR 变回 DROTHERType 2 LSA 换人生成全网段 SPF 再算一遍。这种周期性抖动极难排查因为从三层看就是毫无规律的邻接中断。查的时候一定要往二层看看接口有没有 CRC 错误、有没有 STP 拓扑变更记录。三是 MTU 不一致。同网段内各接口 MTU 不同数据库描述报文交换会卡在 EXSTART 或者 EXCHANGE 状态邻接建不起来选举结果自然也不对。这类问题在跨厂商设备混接的环境里比较常见建议在接口上统一 MTU或者干脆用ip ospf mtu-ignore临时绕过。5. 排障实录DR/BDR相关故障与速查表5.1 双DR、无DR、邻接卡2-Way分别意味着什么双 DR 基本不可能出现在同一个广播域里OSPF 的收敛机制保证了任一时刻一个网段只有一个 DR。如果你同时看到两个接口都显示 State DR先确认它们是不是同一个网段——十有八九是地址规划错了两台设备配了不同子网压根不在一个广播域。要么就是划在了不同 OSPF 进程里进程之间互不感知各选各的。无 DR 是真实存在的故障。典型现象是show ip ospf interface里状态长期停在 DROTHER或者显示等待中网段内一条 Type 2 LSA 都没有。最常见的原因是所有参与设备的接口优先级都被设成了 0——可能是照抄了某个接入层模板结果整段都没人能当 DR。这种情况下该网段的路由收敛会出问题直连网段的路由还在但经过该网段转发的路径可能算不出来。排查方法很直接逐台看接口优先级。邻接卡在 2-Way 要分情况。如果网段里有三台以上路由器DROTHER 之间 2-Way 是设计如此不用管。但如果只有两台路由器状态还是 2-Way那就有问题——正常情况应该是互为 DR/BDR、状态 Full。这时候先查优先级是不是有一方配了 0再查双方网络类型是不是一致。5.2 优先级不生效的五种可能第一种也是最多的不可抢占。改完优先级不切换是正常行为不是配置错误。要让它生效必须等下一次选举事件。第二种配错了接口。在有子接口的环境里优先级要配在真正承载 OSPF 的那个子接口上配在物理主接口上不生效。第三种Router ID 冲突。两台设备手工配了相同的 router-id邻居关系会反复建立又断开选举结果一片混乱。这种情况在show ip ospf neighbor里能看到邻居状态不断跳变日志里会有明确的 RID 冲突提示。第四种比错了对象。优先级和对方一样时比的是 RID。配了 100对方也是 100但对方 RID 更大那对方当选你看到的现象就是我优先级明明调高了却没当上 DR。第五种网络类型不是广播。接口如果是 point-to-point 或 point-to-multipoint压根不选举配多少优先级都是摆设。先用show ip ospf interface看一眼 Network Type 那一行。5.3 故障速查表与我的避坑清单现象最可能的原因先查什么处理方式改了优先级不切换选举不可抢占show ip ospf interface看当前角色等下次选举或维护窗口重启进程网段内长期没有 DR所有设备优先级为 0或 Hello 不通逐台看接口优先级看邻居表是否为空至少给一台设备配非 0 优先级DROTHER 之间 2-Way正常现象三台以上看是否每台都与 DR/BDR 为 Full无需处理仅两台设备却卡 2-Way一方优先级为 0或网络类型不一致看双方 Network Type 和 Priority统一网络类型调整优先级邻居反复建立又断开Router ID 冲突或 MTU 不一致看日志、看双方 router-id改 RID统一 MTUNBMA 下部分 Spoke 不通DR 不在 Hub 上看 Hub 接口优先级Hub 优先级调高确保当选周期性邻接中断二层链路抖动、STP 收敛看接口错误计数、STP 变更记录修二层问题必要时调 Dead 定时器最后分享几条我自己总结的避坑要点。第一永远手工指定 Router ID别让它依赖接口状态自动选出来这是所有诡异问题的源头之一。第二DR 的位置在规划阶段就写进配置模板别指望上线后现场调因为调不动。第三NBMA 和 Hub-Spoke 结构里Hub 的优先级一定要显式配高靠 RID 大小碰运气是最不稳的做法。第四变更前先想清楚影响面clear ip ospf process会重置整台设备的所有 OSPF 邻居不是只影响一个网段这条命令在高峰期用过一次就长记性了。我在实际项目里最看重的一点是DR 选举这块看起来是个小配置但它牵动的是整个网段的 LSA 泛洪拓扑一旦 ER 位置漂移全网段的 SPF 都要重算。所以与其事后补救不如在开局就把优先级和 RID 一起固化进模板让它从一开始就待在该待的位置上后面几年都不用再操心这件事。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询