资讯动态

IS-IS DIS选举机制:与OSPF DR差异及现网排障实践

发布时间:2026/10/20 3:15:11 来源:尧图企业网站定制
做网络这行尤其是天天跟IGP打交道的应该有这种感觉IS-IS和OSPF虽然都是链路状态协议但细节上的差异往往比想象中大多了。其中最容易让人先入为主踩坑的就是DIS这个角色。不少朋友一看到DIS脑子里直接映射成OSPF的DR不就是指定路由器嘛一个意思。可真在现网里遇到DIS抢占引发的LSP风暴或者看到广播网里非DIS路由器之间邻居状态卡在Init不往上走才意识到这俩机制骨子里就不一样。这个IS-IS系列聊到第八篇前面把Hello、LSP、邻居状态机这些基础都过了一遍。这次我把DIS选举机制单独拎出来结合这些年项目里实际遇到的场景把选举规则、与DR的本质差异、伪节点LSP的运作方式、还有配置和排障里的细节全部拆开说清楚。内容适合正在学IS-IS的工程师、准备认证考试的兄弟以及现网里需要割接、优化IGP收敛的运维朋友。1. 先跳出惯性思维DIS不是DR的“IS-IS版”1.1 广播网上为什么必须有DIS先回答一个基本问题以太网这种广播型多路访问网络拓扑是天然的Full Mesh。假设一个网段里接了10台路由器按照链路状态协议的基本逻辑每台路由器都要知道其他9台的存在如果两两建立完全邻接关系那就是45个邻接。这还不算最麻烦的真正麻烦的是LSP的泛洪一台路由器的LSP要发给9个邻居每台邻居收到后还要再泛洪给其他8台数据包在同一个二层网段里反复横跳LSP的老化和确认开销全部被放大。所以IS-IS和OSPF都想到同一个解法在这张复杂的Full Mesh网络上指定一个代表性节点。OSPF叫指定路由器DRIS-IS叫指定中间系统DIS。DIS做的事情是代表整个广播网生成一条伪节点信息把原本需要互相描述的三角形网格变成一个虚拟的星型结构。像开会一样如果10个人都互相私下沟通信息一定是杂乱的效率也低但选出一个主持人大家统一和主持人对话主持人再把消息分发给所有人整个沟通效率立刻就不一样了。1.2 同一个思路两个完全不同的实现这就是最关键的点了。虽然目标类似但IS-IS的DIS和OSPF的DR在实现上有几个非常本质的差别我在下面这张表里把核心差异列出来大家可以对着看。对比项OSPF的DR/BDRIS-IS的DIS备份角色有BDRDR故障后BDR接替没有备份DISDIS挂了直接重新选举抢占行为不抢占新设备即使Router ID更大也只能等抢占式参数更优的新设备会直接把DIS顶掉比较依据接口DR优先级相同则比Router ID大者优接口DIS优先级相同则比接口MAC地址大者优邻接关系所有路由器与DR/BDR建立FullDRother之间只到2-Way非DIS路由器只与DIS建立Up邻接其他路由器之间无法完全Up伪节点表达DR生成Network LSA描述网段内路由器DIS生成伪节点LSP描述网段内路由器Hello间隔DR与其他路由器相同DIS发Hello更勤快通常为常规间隔的1/3选举范围每个广播网段一个DRL1和L2各自独立选举DIS为什么会有这么大差异我觉得核心原因在于两者的设计哲学不同。OSPF的DR/BDR机制追求的是稳定优先DR选出来就不换了即使后来出现了Router ID更大的设备也必须在DR故障后才有机会上位。这样网络拓扑变化频率被降到最低工业界对这种特性有明确的需求场景。但IS-IS从设计上更看重简单直接每一台设备在收到Hello时都会看一眼当前的DIS是谁如果自己接口上的DIS优先级比现有DIS高或者优先级相同但MAC地址更大它就可以直接宣称自己是DIS现有DIS收到之后也只能默认这个事实。说白了就是“能者上、强者居之”没有保护和备份的概念挂了就重选反正选得也快。2. 选举机制核心规则拆解优先级、MAC与Level的独立性2.1 DIS优先级和MAC地址的精确比较过程很多资料提到DIS选举会说“优先比DIS优先级相同则比较MAC地址大者当选”但实际运行中还有几个容易被忽略的细节。先说优先级IS-IS的DIS优先级范围是0到127默认值是64数值越大越优先。这里和OSPF的DR优先级取值范围0到255不一样IS-IS用0到127是因为DIS被抢占本身就是设计允许的所以不需要那么大的数值空间。比较流程是这样的当一个广播网段内有多台路由器时每台路由器都会在接口上通过Hello报文通告自己的DIS优先级。如果某台路由器收到的Hello中对方的DIS优先级比自己高那就认可对方作为DIS。如果优先级一样就比较双方接口的MAC地址MAC地址大的那台路由器胜出。注意这里比的是物理接口的MAC地址不是System ID。为什么不用System ID因为System ID是设备级的全局标识而同一台设备的不同接口可能接入多个广播网每个接口都有自己的MAC地址用接口MAC做比较更贴合“接口级别选举”的语义。而且MAC地址在二层是唯一的天然不会出现并列第一的情况。还需要注意一个容易理解错的地方IS-IS的DIS选举是拉网线后立即发生的而且只要有新设备接入就可能触发重新选举。比如一个网段里已经有DIS了它每10秒发一次Hello实际DIS发Hello的频率会更快后面单独说新设备接入后发出第一个Hello里面宣称自己是DIS。旧DIS收到这个Hello后发现对方优先级更高或者MAC更大就会接受这个事实。整个过程是在几个Hello周期内完成的效率很高。这也是IS-IS不设计BDR的原因反正抢占机制在重新选举的过程很迅速没有太大必要维护一个备胎。2.2 Level-1和Level-2必须分开选举这一点在实际排障中特别容易踩坑。同一个物理接口上如果IS-IS同时使能了Level-1和Level-2那么这个广播网段上会分别选举出一个Level-1 DIS和一个Level-2 DIS。这两个角色是完全独立的可以A设备是L1的DISB设备是L2的DIS。每次想查看或调整DIS时都得先明确自己在说的是哪一个Level。这样设计的逻辑也不难理解。IS-IS的L1和L2本身就是两套独立的链路状态数据库L1的LSP只在L1区域内泛洪L2的LSP只在L2区域内泛洪。广播网只是这两种流量共用的一个物理载体。如果只选举一个DIS那它既要负责L1的CSNP发送又要负责L2的CSNP发送无论是负载还是故障影响面都会集中在一个点上这并不符合IS-IS那种“把机制拆简单”的思路。所以在配置优先级时用level-1或level-2关键字分别指定日常查看时也要分别确认。2.3 一个很容易被忽略的Hello细节DIS的Hello间隔还有一个在现网优化中很关键的细节就是DIS发送Hello报文的间隔比普通路由器要短。默认情况下广播网中普通路由器是每10秒发一个HelloHold时间为30秒。但DIS为了让自己能更快被感知故障它的Hello间隔默认只有约3.3秒也就是正常间隔的三分之一。这意味着DIS会消耗更多的CPU和带宽资源去维护邻接关系如果DIS设备本身性能弱或者接口报文队列拥塞反而可能出现其他路由器长时间收不到DIS的Hello从而提前触发邻居Down的情况。我确实遇到过因为DIS设备控制平面繁忙导致其他路由器上的邻居状态反复横跳的故障那个场景后面专门展开讲。3. DIS在网段里的真实权力伪节点LSP与LSP同步3.1 伪节点LSP到底是什么在广播网里DIS最重要的产出物就是伪节点LSP。先看它的LSP IDLSP ID由三部分组成System ID加伪节点ID加分片号。普通路由器生成的LSP伪节点ID是0。DIS为广播网生成的伪节点LSP它的System ID就是DIS自己的System ID伪节点ID是DIS接口上那个非零的Circuit ID。所以在LSDB里看到一条带.01或.02这种非零伪节点ID、名字又是某台DIS设备System ID的LSP那就是伪节点LSP。伪节点LSP的内容很纯粹它列出了连接在这个广播网上的所有路由器。每台路由器自己的LSP中只会描述自己与这个伪节点的连接关系而不是直接列举和同段内每台其他路由器的连接。打个比方没有伪节点时三台路由器之间的拓扑是三角形每台路由器的LSP都要写“我和另外两台直接相连”有伪节点后拓扑变成了星型每台路由器的LSP只需要写“我连着伪节点”伪节点LSP再写“我连着A、B、C”。SPF计算时把这个伪节点当做一个虚节点参与计算路径结果上等价于三角形但LSP的规模和泛洪的效率都得到了优化。3.2 CSNP/PSNP机制DIS是广播网的“目录管理员”DIS的另一个核心职责是周期性发送CSNP报文。CSNP全称是Complete Sequence Numbers PDU里面携带的是DIS上全部的LSP摘要信息相当于这个广播网段LSP数据库的完整目录。普通路由器通过接收CSNP就能快速比对出自己缺哪些LSP。如果发现自己缺少某条LSP就发送PSNP报文向DIS请求DIS收到后会把对应的完整LSP单播给请求者。这个机制与OSPF的DD报文交换有相似之处但又不完全一样。OSPF在邻接建立时通过主从关系交换DD描述IS-IS的广播网则更依赖DIS周期性的CSNP广播来持续维护一致性。新路由器接入广播网时它会先与DIS建立邻接关系然后通过CSNP去“对齐”LSP数据库。所以如果DIS的CSNP因为某种原因没有被其他路由器正常收到新接入的路由器就可能一直无法同步LSDB导致路由黑洞。这也是为什么IS-IS要求广播网里的接口MTU必须一致如果MTU不一致CSNP可能被分片或丢弃同步就会出问题。3.3 非DIS路由器之间的邻接状态在广播网中IS-IS的邻居状态机只有Down、Init、Up三种状态。但有一个细节要在实践中注意非DIS路由器之间其实也会通过组播Hello报文发现对方但它们的邻居关系只会到Init状态不会完全进入Up状态。只有与DIS之间的邻接关系才会完整变成Up。这一点和OSPF不同OSPF的DRother之间会保持在2-Way状态但IS-IS中非DIS之间的状态表现更简单它们不需要互相同步LSP一切LSP同步都通过DIS中转。我在现网里遇到过同事拿着命令输出问“为什么这两台路由器的邻居状态是Init是不是有问题”。其实只要确认它们都不是DIS而且和DIS之间的邻居是Up这个Init状态就是正常的。IS-IS之所以这样做就是为了彻底杜绝非DIS路由器之间直接进行LSP泛洪减小广播网内的重复报文数量。这里有句实在话广播网中的LSP交换是严格以DIS为中心的星型模型理解了这个IS-IS的广播网行为基本就掌握了一半。4. 实操配置与验证怎么控制和干预DIS的选举4.1 调整DIS优先级的命令与使用时机我以常见设备的命令行风格为例实际厂商的命令风格略有差异但思路基本一致。在接口视图下配置IS-IS的DIS优先级命令大致是这样interface GigabitEthernet0/0/0 isis dis-priority 127 level-1 isis dis-priority 100 level-2如果要让某台设备尽快成为DIS可以把优先级调成127这是最大可配置值。但请慎重我给你一个非常典型的反面案例早期我在一个项目里为了摸清某台新设备上线的路由走向直接把它的DIS优先级拉到了127结果它一上线就把原有DIS顶掉了全网LSP重新泛洪了一次核心设备CPU直接顶到了70%以上。后来我学乖了调整DIS优先级之前必须先评估影响窗口尽量在业务低峰期操作。反过来如果你希望某台设备永远不当DIS可以把它接口的DIS优先级调低但注意IS-IS的优先级0没有OSPF那种“放弃选举”的特殊含义即使优先级是0如果网段里其他设备优先级也是0而且它的MAC地址更大它依然会当选。这一点不少刚接触IS-IS的兄弟会误解以为0就代表拒绝当选实际上并不是这样。4.2 如何查看当前的DIS与伪节点LSP配置完成之后验证部分是关键。我常用的验证思路分两步。第一步查看接口上的DIS信息。命令类似display isis interface GigabitEthernet0/0/0输出里会看到Circuit ID、邻居状态还有DIS信息。注意区分Level-1和Level-2同一个接口可能L1的DIS和L2的DIS不同。如果输出里DIS的System ID加伪节点ID看起来像“0000.0000.0001.01”那.01就是伪节点标识。第二步在LSDB里找伪节点LSP。命令类似display isis lsdb正常应该能看到一条System ID为某台设备、伪节点ID非0的LSP它的LSP ID末尾不是“-00”而可能是“.01-00”这种形态。确认伪节点LSP存在且由预期的DIS生成说明DIS选举正常。如果LSDB里伪节点LSP异常老化或者没有产生就要排查CSNP发送、接口MTU、邻居状态这些环节了。4.3 计时器对DIS的影响与调整策略广播网中可以在接口视图下调整Hello计时器和CSNP计时器。比如interface GigabitEthernet0/0/0 isis timer hello 10 level-1 isis timer csnp 10 level-2但要注意Hello计时器改了之后DIS发送Hello的间隔仍然是配置值的三分之一。比如把Hello间隔改成30秒DIS的Hello间隔就变成10秒。这个自动缩放的逻辑是协议行为而不是配置漏洞。有些工程师把Hello间隔调大是为了减少设备CPU开销但忘了考虑DIS会以更快的频率发Hello结果DIS设备反而更忙了。关于CSNP计时器我的建议是不要轻易改动默认值。广播网中DIS默认每10秒发送一次CSNP这个周期足以支撑新接入路由器的快速同步。如果把CSNP间隔调得太大新设备接入后同步LSP数据库的时延就会变长用户感知就是网络黑洞时间变长。如果调得太小广播网里的CSNP报文密度会变大对CPU和带宽都是额外负担。只有遇到DIS的CSNP处理导致CPU过高且有明确证据的情况下才考虑适当调大同时评估新设备上线时的同步时延是否可接受。4.4 给运行维护者的优先级规划建议在实际网络设计中我不建议所有设备都保持默认的DIS优先级64。虽然从机制上没问题但默认情况下“谁MAC大谁就是DIS”这种随机性在割接和扩容时就是一种不确定性。比较稳妥的做法是针对广播网段做一个简单的角色规划选一台设备性能强、位置核心、上行带宽充足的设备作为首要DIS把它的接口DIS优先级设置为127另一台备份设备设置为126其余设备保持默认或调低。这样即使首要DIS出现故障重新选举时备份设备也能迅速顶上而且不会出现边缘设备偶然成为DIS的情况。这里额外提醒一个细节IS-IS的DIS抢占是没有回退保护的。假设首要DIS的优先级是127但由于它重启备份DIS接替了DIS角色等首要DIS恢复起来它的优先级还是127那么它恢复后马上会把DIS抢回来。这个过程中LSP会经历两轮刷新全网收敛两次。如果这个广播网的设备很多这种抢占式切换带来的震荡会很明显。所以在线运行中不要随便重启DIS设备重启前最好先把它的优先级临时调低等恢复稳定后再调回来这个习惯能帮你省掉不少麻烦。5. 常见故障与排障思路围绕DIS的那些坑5.1 现象一新设备一上线全网路由振荡几秒这是DIS抢占最典型的现象。假设网段内原有DIS的MAC地址是00:e0:fc:00:00:01新接入的设备接口MAC地址是00:e0:fc:00:00:ff且两者DIS优先级相同默认都是64那么新设备就因为MAC更大直接成为新的DIS。原DIS降级之后两台设备都得重新生成LSP伪节点LSP的所有者变了全网每台路由器都要执行一次SPF重算表现出来就是几秒钟的路由振荡、CPU冲高。排障思路很简单发现全网振荡与新增设备时间高度相关时第一时间查看这个广播网段里谁是DIS。如果发现新接入设备确实成了DIS就基本确认是抢占导致的。解决方法是把原有DIS的优先级调高或者把新设备的优先级调低。注意即使你把原DIS优先级调高了抢先效应也不会立刻让DIS切换回来因为原DIS已经是DIS了新设备发现原DIS优先级更高就退出了。所以不需要额外操作等新的选举稳定下来即可。5.2 现象二DIS频繁重启整网LSP风暴不停歇我之前遇到过一台作为DIS的路由器因为控制平面负载过高导致它发送Hello的间隔抖动其他路由器频繁认为DIS Down触发重新选举、快速重建邻接然后DIS又恢复了又开始抢占如此反复。最可怕的是每一次DIS切换都会引发全网LSP重新泛洪整个网络几乎一直在收敛中业务时断时续。排查这类问题时第一步是从设备日志和接口事件里确认DIS是否真的发生了多次切换。其次要查DIS设备的CPU和内存看是不是因为CPU繁忙导致Hello报文处理延迟。如果是解决思路就不是调协议参数而是先解决DIS设备本身的性能瓶颈比如削弱它上面的其他业务负载或者干脆把DIS角色切换到另一台更空闲的设备上。还有一个容易被忽略的小坑如果广播网上有设备的接口MTU设置不一致DIS发出的CSNP可能太大而被丢弃。这不会直接导致DIS切换但会导致某些路由器LSDB长期不完整表现为部分路由缺失但邻居状态正常。排查时把全网相关接口的MTU拉出来对比IS-IS要求广播网内所有接口MTU一致这个原则在开局规划时就要定好。5.3 故障排障速查表故障现象可能原因排查命令与动作新设备上线后全网路由振荡新设备抢占DIS查看DIS变化调整优先级邻居状态反复JumpDIS设备Hello超时检查DIS的CPU确认物理链路部分路由器LSDB不完整MTU不一致CSNP被丢弃统一接口MTU伪节点LSP缺失DIS异常、CSNP发送异常确认DIS是否仍在检查LSP老化路由回切时再次振荡DIS抢占无回退保护重启关键DIS前先临时调低优先级6. 聊聊我的实际体会写到这里我分享一个每次做IS-IS网络优化时都会提醒自己的一句话DIS不是用来当“备份”的它是广播网里所有LSP同步的核心节点。很多故障看似是路由振荡本质上是DIS没有按照预期稳定运行。与其在问题发生后再去调参数不如在开局设计阶段就把DIS的角色分配好明确哪台设备是L1的DIS哪台是L2的DIS优先级是多少出现故障时谁接替这些都要落到文档里。另外我在用了很长时间IS-IS之后还是想强调那个观点能不用广播网就不用广播网。在现网中如果是两台路由器之间直连建议直接把链路类型设为点到点这样可以绕过DIS选举走更简洁的两端同步机制收敛更快故障面也更小。只有在真正有多台设备共享同一个二层网段的场景下才需要认真对待DIS选举的细节。希望这篇IS-IS DIS选举机制的梳理能帮你少踩几个坑下次在现网里再遇到DIS相关的怪现象时能快速定位到根因。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑