1. 为什么IS-IS需要拓展功能补充
1.1 基础IS-IS的能力边界
做网络的人,基本都绕不开IS-IS。核心网、城域网、大型数据中心,到处都有它的身影。但很多人对IS-IS的印象,停留在“邻居、LSP、SPF、收敛”这几个基础动作。用在小型网络里,默认配置确实够用;可一旦规模上来、业务复杂了,基础能力就明显不够用。
先说它到底缺什么。
默认IS-IS的收敛过程,是一个路由器收到新的LSP后,要重新跑一遍全量SPF计算,才能更新路由表。网络规模越大、路由条目越多,全量SPF的CPU开销就越大,这一轮收敛可能要几百毫秒甚至秒级。对于一些要求“故障后50毫秒内完成切换”的业务,这完全无法接受。所以需要增量SPF、PRC、FRR这类拓展机制,把收敛时间压下来。
再有,传统IS-IS描述网络拓扑时,IPv4和IPv6共用一套拓扑模型。如果组网里某些链路只有IPv4能力,另一些链路双栈,全网算出来的IPv6转发路径就会出现“走到一条不支持IPv6的链路上”的成环或黑洞风险。这个问题的解药,是多拓扑IS-IS(MT-ISIS)。
还有安全加固。IS-IS本身是开放式协议,默认不认证,任何能接入二层网络的设备,都能伪造Hello包挤进IS-IS域,甚至发送伪造的LSP污染全网路由表。电信级网络、政企专网,一定要把协议认证补上。
再往上层看,手工设置IS-IS的接口开销来做流量调优,在现代网络里明显太笨重。现在更常见的做法是管理标签和Segment Routing,在IS-IS这份IGP协议之上,构建完整的流量调度能力。
这些内容,规范文档里叫“协议扩展”,在实际运维中,就是你给IS-IS这台“老机器”做的拓展功能补充。本文以华为设备为例,把这些功能逐个拆开讲清楚,包括原理、配置命令、以及我实际踩过的坑。
1.2 华为设备支持哪些拓展方向
先给个总览,方便建立全局印象。华为设备的IS-IS实现,除了基础邻居、LSP、SPF之外,常见拓展功能大致可以分成五类:
| 拓展方向 | 解决的核心问题 | 典型功能 |
|---|---|---|
| 收敛加速 | 故障切换慢、CPU开销大 | 增量SPF、PRC、IPFRR、BFD联动、定时器调优 |
| 多业务承载 | IPv4/IPv6拓扑不一致 | 多拓扑MT-ISIS |
| 安全性增强 | 协议伪造、路由污染 | 接口/区域/域三级认证、HMAC-SHA256、Keychain |
| 策略与调度 | 选路不灵活、多出口引流 | 管理标签admin-tag、路由策略联动 |
| 可扩展性 | 路由条目多、流量工程难做 | LSP分片、Segment Routing结合 |
后文我会重点挑其中几个真正改变运维方式的功能展开:收敛优化、多拓扑、认证与管理标签、SR结合。这四个方向,是生产网络里出问题最多、也最能体现“拓展功能价值”的部分。
2. 收敛优化:从“秒级”向“毫秒级”靠拢
2.1 增量SPF和PRC到底是在干什么
先讲一个容易被忽略的事实:SPF计算是IS-IS最耗费CPU的操作。一个节点收到新LSP,如果变化的是叶子路由,却要把整棵最短路径树重算一遍,这显然浪费。
华为设备上默认的SPF计算,会把全网节点和路由都算一遍。网络规模大时,一个次要链路抖动,可能引发全网路由器CPU飙升,这叫“收敛风暴”。解决办法是增量SPF(iSPF)和PRC(部分路由计算)。
iSPF只对受影响节点的子树重新计算,不再全盘重算。PRC更彻底——它只在路由叶子节点发生变化时,直接更新相应路由前缀,完全不碰SPF树。日常工作里,90%的路由抖动都是叶子级别,iSPF+PRC能省下很大一部分计算量。
在华为设备上,这两类能力通常不需要手动开启,属于默认启用。但你要注意一个点:确认设备上LSP变化触发计算的方式,是“全量SPF”还是“增量SPF”。如果路由表特别大、CPU比例高,可以在IS-IS视图下使用一些与计算策略相关的命令,部分版本会提供类似timer spf等参数来调整计算间隔。
真正需要主动配置的,是下面这些定时器和快速检测机制。
2.2 定时器调优与BFD联动
IS-IS默认的收敛节奏偏保守。邻居Down需要等Hello超时,LSP泛洪有间隔,SPF计算也有延迟。华为设备上,建议在IS-IS进程视图做这样一套调优思路:
isis 1 is-name CORE-A timer lsp-generation 5 10 50 timer spf 5 10 40 timer lsp-refresh 900 bfd all-interfaces enable这里每个参数的含义,我展开说一下:
timer lsp-generation 5 10 50:表示首次收到触发变化后5毫秒生成LSP,后续如果持续变化,按10毫秒间隔,最长等待50毫秒。这样既保证快速通告,又避免频繁抖动导致LSP风暴。timer spf 5 10 40:SPF首次计算延迟5毫秒,后续最短间隔10毫秒,最大等待40毫秒。实际项目中,我会根据链路抖动频率调整“最大等待时间”,抖动频繁的链路可以适度调大,抑制CPU抖动。timer lsp-refresh 900:LSP定期刷新周期,默认是1200秒,可以调到600~900秒。刷新频率越高,全网LSP序号老化越早,但也增加一些网络泛洪负担。bfd all-interfaces enable:这个非常关键。单纯靠Hello超时检测故障,需要秒级。BFD可以在毫秒级检测出链路故障,再联动IS-IS快速收敛。生产环境中,BFD是IS-IS收敛加速的基础设施,强烈建议全使能。
提示:修改SPF定时器属于全局收敛行为,参数不要设得太激进。比如SPF首次计算延迟设成0毫秒,链路密集抖动时CPU反而被打满。我一般推荐“首跳快、后续稳”的参数组合。
2.3 IPFRR和自动FRR,给转发面“兜底”
收敛再快,也是秒到百毫秒级别。对某些承载语音、金融交易等场景的链路,要求故障切换在50毫秒内完成,这时就必须靠IPFRR。
华为设备上,IS-IS支持FRR(快速重路由),核心原理是预先计算好备份下一跳。主路径故障时,转发面直接切换到备份路径,不用等IGP重新收敛。这个思路跟“事先系好安全带”一样——等事故发生了再反应,永远不够快。
配置方法分两步。第一步,全局使能IS-IS FRR,指定备份路径的计算方式;第二步,在接口上按需排除不希望作为备份的链路。
isis 1 frr loop-free-alternate华为设备上常见的是loop-free-alternate(LFA)或更高级的remote-lfa(R-LFA)。区别在于:LFA要求备份下一跳必须是无环的邻居,拓扑简单时可用;R-LFA允许通过隧道的方式找到更远端的无环备份,复杂拓扑下覆盖更全。我建议除非网络特别简单,否则优先用remote-lfa。
FRR配置完成后,要用display isis frr查看备份路径是否正常生成。如果某些路由没有备份,通常是因为拓扑中不存在严格无环的备份下一跳,这个要靠调整链路开销或者多加一条冗余链路解决。
2.4 防微环:链路恢复瞬间的“隐形坑”
说完快速切换,很多人会忽略链路恢复时的微环问题。故障瞬间,FRR能兜住;但链路恢复时,各路由器收敛时序不一致,有的先行切换,有的还在走旧路径,就会形成临时环路,导致少量丢包甚至路由震荡。
华为设备在IS-IS里,有的版本会提供与防微环相关的策略或切换控制,另外在Segment Routing场景下,也可以通过显式路径规划规避。若你的设备不支持专门的防微环功能,最有效的经验做法是:在链路恢复前,先把相关接口的IS-IS开销临时调大,让SPF先计算稳定,再把开销恢复原值。虽然要人工干预,但在没有防微环机制的旧版本上,这招很管用。
实操心得:我维护过一张三千台设备的路由器网络,Core链路的闪断天天有。BFD联动IS-IS、配合FRR,故障切换基本无感;真正出问题的反而是链路恢复那几秒的微环。后来我在核心互联接口上启用了防微环功能,并且把SPF首次延迟调到了5毫秒左右,微环导致的丢包几乎消失。
3. 多拓扑MT:双栈网络不再“打架”
3.1 为什么标准IS-IS做双栈会出问题
标准IS-IS使用NLPID(网络层协议标识)来标识IPv4和IPv6,但拓扑描述用的是同一套LSP信息。这意味着,IPv4的邻接和IPv6的邻接,在协议层面共享一个拓扑视图。
实际组网中,经常会遇到这种局面:骨干链路全部双栈,但接入侧某段链路只通了IPv4,没通IPv6。标准IS-IS无法表达“这条链路只有IPv4路由可用”这个事实。IPv6路由计算完成后,可能把下一跳指向那条没有IPv6能力的链路上,导致转发黑洞。更麻烦的是,如果两条链路分别只有一种协议通,互相学习路由,还会形成依赖关系上的环路。
多拓扑IS-IS(MT-ISIS)就是为了解决这类问题。它给每个地址族分配独立的MT-ID,IPv4和IPv6各自建立拓扑、各自计算SPF。IPv4的链路状态不会影响IPv6的路径计算。链路层面“我只能通IPv4”,就只在IPv4拓扑里出现,IPv6流量根本不往那儿走。
3.2 华为设备上的MT配置步骤
华为设备开启MT-ISIS,关键点在于:进程下开启多拓扑,接口下使能IPv6并关联拓扑。以一个简单的双栈核心网为例:
isis 1 is-name MT-CORE ipv6 enable topology ipv6 network-entity 49.0001.0000.0000.0001.00 interface GigabitEthernet0/0/1 isis enable 1 isis circuit-type level-2-only ipv6 enable isis ipv6 enable topology ipv6命令的逻辑很清楚:
ipv6 enable topology ipv6是在IS-IS进程下,为IPv6创建一个独立拓扑实例。- 接口下
ipv6 enable是打开接口的IPv6能力,isis ipv6 enable topology ipv6是把该接口加入IPv6多拓扑。
全网所有路由器,只要参与IPv6承载,都需要保持一致配置。特别是在MT模式下只跑IPv4的接口,不要加IPv6拓扑;否则它会出现在IPv6拓扑里,导致其他路由器误以为这条链路支持IPv6。
还有个关键点:IS-IS的Level-1和Level-2都要使能MT。只在Level-2使能、Level-1未使能,跨区域的路由学习会出现MT-ID不一致,轻则路由不完整,重则邻居振荡。
3.3 MT配置最容易踩的三个坑
第一,MT-ID不一致导致邻居Down。IS-IS建立邻接时,会协商MT能力。一边启用了IPv6拓扑,另一边没启用,两边能力集不同,邻居直接起不来。排查时用display isis error或抓包看Hello报文里的MT TLV,能快速定位。
第二,MT模式下的默认拓扑不要删。多拓扑不代表你只保留IPv6拓扑,IPv4的默认拓扑(MT-ID 0)仍然是必须的。有些朋友为了让IPv4和IPv6完全隔离,想只用IPv6拓扑跑业务,结果默认拓扑被删了,IPv4路由直接全丢。
第三,多拓扑会成倍增加SPF计算开销。每个拓扑各自建立一棵SPF树,对CPU的消耗基本是翻倍的。我很早之前在一台中端设备上启用了MT,结果链路频繁抖动时CPU持续高位,后来把一些边缘链路的SPF定时器放宽,才稳定下来。启用MT前,请确认设备规格和路由规模是否匹配。
4. 认证与管理标签:安全加固和流量调度的基本功
4.1 IS-IS三级认证与HMAC-SHA256
IS-IS默认不加密任何报文。只要一台设备能接入你的二层网络,理论上它就可以伪装成邻居、发送Hello报文、伪造LSP。尤其是LSP,一旦被注入恶意路由,全网路由表都会被污染,这是非常严重的故障。所以,协议认证不是可选项,是必选项。
IS-IS的认证分为三个层面:
| 认证级别 | 保护对象 | 作用范围 |
|---|---|---|
| 接口认证(Hello) | Hello报文 | 阻止非法设备建立邻居 |
| 区域认证 | LSP、SNP | 保护Level-1区域内的路由信息 |
| 域认证 | LSP、SNP | 保护Level-2域内路由信息 |
实际配置中,区域和域认证要分开配置,因为它们各自的TLV不同。华为设备上推荐使用HMAC-SHA256而不是简单的明文密码或MD5,MD5在强度上已经不足以应对当前的安全审计。
配置示例:
isis 1 authentication-mode hmac-sha256 keychain isis-ks area-authentication-mode hmac-sha256 keychain isis-ks domain-authentication-mode hmac-sha256 keychain isis-ks keychain isis-ks mode periodic daily key-id 1 algorithm hmac-sha256 key-string cipher %^%#abc...%^%# send-time daily 00:00 23:59authentication-mode管的是接口Hello认证,area-authentication-mode管Level-1路由信息,domain-authentication-mode管Level-2路由信息。三者必须全网统一。否则,最常见的现象是:邻居能起来,但LSDB同步异常,或者LSP被静默丢弃。
4.2 Keychain的价值:密钥定期滚动
Keychain的价值在于定期更换密钥。你不可能每过一两个月,手工把所有设备的认证密码都改一遍。用Keychain,可以设定密钥生效时间段,旧密钥到期前自动切换到新密钥,设备之间通过时间槽位协同,做到“无缝换钥”。
这在实际运维中太重要了。我见过不少网络,认证配完之后,密码一直不换,安全性其实打了折扣。有了Keychain,安全审计要求“定期更换认证密钥”时,你只需要提前新加一个Key ID,到了生效时间自动切换。
配置Keychain时,有个容易忽视的细节:Send time和Receive time要提前重叠一小段时间。比如新密钥给一个提前量,确保新旧密钥交替时有重叠窗口,避免因为设备时间偏差导致认证失败。
4.3 管理标签admin-tag:流量调度的轻量方案
业务侧经常会有“这个网段走这条路径、那个网段走那条路径”的需求。以前只能用接口开销硬调,路径一多就很痛苦。现在华为设备IS-IS支持管理标签 admin-tag,给路由打标签,再配合路由策略,非常灵活。
配置思路很简单:
isis 1 admin-tag 100 tag 100 route-policy TAG-ROUTE或者更直接地,在IS-IS进程下给特定前缀设置标签,然后在路由策略里引用这个标签做优先级调整或引入到其它协议。比如,把视频业务网段打上tag100,再通过路由策略,强制它优先走某条出口链路。
使用时有两点经验:
- 管理标签只在IS-IS域内传递,不会带出到其他协议,跨协议(比如OSPF引入IS-IS)时,需要用路由策略重新打标。
- 标签不能代替链路开销计算。它更适合做“策略前缀”分流,而不是替代SPF本身。如果网络中所有路由都要打不同的标签做严格路径规划,那其实是SR的使用场景,别硬用admin-tag。
5. 可扩展性增强:LSP分片和Segment Routing
5.1 LSP分片,别让“大包”压垮网络
IS-IS的LSP有长度限制,默认通常不超过1400字节左右。当路由信息非常多、或者LSP承载了大量扩展TLV(比如各种SR信息、TE信息),单个LSP就可能不够用。
华为设备支持LSP分片配置,把同一路由器产生的LSP分成多个片(Fragment)发送。它可以控制Origin LSP和Additional LSP的生成节奏。
isis 1 lsp-length originate 512 receive 1024 fragment-level 1lsp-length originate控制本端生成的LSP最大长度,receive控制从远端接收时能接受的最大长度。这里有一个关键考量:分片并非越小越好。分片太多,LSDB里条目多、LSDB同步开销大;分片太大,又可能导致MPLS或组播环境下MTU不匹配。我一般在核心设备上,把Origin LSP长度控制在512字节左右,既能容纳SRGB和TE扩展,又不至于让LSP过分臃肿。
fragment-level 1是让Level-1和Level-2分别执行分片,避免两个Level共用分片号时产生LSDB混乱。
5.2 与Segment Routing结合:流量工程的更优解
如果说MT是双栈的进阶,那么Segment Routing(SR)就是IS-IS拓展功能里最重量级的一项。SR把路径编码成指令序列(Segment List),源节点决定整条路径,令网络中不再完全依赖逐跳SPF选路。
华为设备在IS-IS下使用SR,大致需要三个层面的配置:
mpls lsr-id 10.0.0.1 segment-routing mpls srgb 16000 23999 isis 1 segment-routing mpls prefix-sid index 1 interface GigabitEthernet0/0/1 segment-routing mpls adjacency-sid 15001这里每个配置的作用:
mpls lsr-id是MPLS节点标识,SR也需要基础MPLS能力。segment-routing mpls+srgb 16000 23999声明本节点的SRGB范围,为全局前缀段预留标签区间。- IS-IS进程下的
prefix-sid index 1为Loopback路由分配节点SID。 - 接口下的
adjacency-sid为邻接分配Adjacency SID,用于逐跳段。
启用SR后,默认SPF计算出的转发路径不会变,但你可以在边界路由器上用策略下发“Segment List”,实现显式路径。比如让流量绕开某段拥塞链路:
segment-routing mpls transit forwarding-policy PATH segment-list FORWARD index 5 sid 16102 index 10 sid 16205一个SR策略配置好后,转发面按Segment List压栈转发,路径完全可控,而且不依赖逐跳IGP视图。IS-IS在这里的角色,是充当SR的控制面,负责扩散SRGB、Prefix-SID、Adjacency-SID信息。
5.3 启用SR前后的检查清单
SR虽然强大,但配置前有些细节必须先把关:
- 全网SRGB规划一致。尤其是跨厂商设备,SRGB必须有全局共识,否则换算出的标签错位,流量直接断。
- Loopback地址作为稳定全局标识,必须通过IS-IS Level-2通告,且所有设备能学习到。如果存在双栈回退或区域边界,优先用IPv4 Loopback分配SID。
- 转发层面要确认支持SR MPLS。华为很多企业级产品支持,但老旧的板卡或特殊VXLAN场景,需要额外确认。
- 启用SR不会自动改变默认最短路径,这一点对于平滑升级非常友好。我从传统LDP网络迁移SR时,先启SR、再逐步把业务切到SR策略,整个过程无需割接窗口。
注意:SR和LDP可以共存,但同一条IGP路由同时携带LDP标签和SR标签时,转发表优先用SR标签。迁移时一定要先确认业务侧绑定的是哪套标签,避免流量中断。
6. 常见问题与排查技巧实录
6.1 邻居反复Up/Down
这个现象在IS-IS排障里最常见,拓展功能没配好,往往first point就在这里。
用display isis peer看邻居状态。如果邻居在Up和Down之间反复横跳,排查顺序:
- 先看MT能力是否一致。一边开了
ipv6 enable topology ipv6,另一边没开,Hello报文里的MT TLV不同,邻居起不来或反复重建。 - 再看认证是否匹配。尤其区分
authentication-mode、area-authentication-mode、domain-authentication-mode三层。有时接口Hello认证配错了,邻居根本起不来;区域认证配错了,可能Level-1邻居能起来但LSDB同步异常。 - 还要检查System ID是否重复。全网System ID重复,邻居会造成LSDB冲突,表现就是一会儿Up一会儿Down。
6.2 路由黑洞或路由不一致
双栈网络中,IPv6路由时有时无,多半是多拓扑没有全覆盖。排查方法是分别查看IPv4和IPv6的LSDB:
display isis lsdb display isis lsdb ipv6对比两个LSDB的拓扑视图。如果IPv6视图里缺少某个区域的节点,说明那台设备没有正确使能IPv6拓扑,或者Level-2区域的MT能力没打通。
还有一种情况:启用FRR后,备份路由显示正常,但实际切换丢包。大概率是备份路径只是一条“ICMP可达”链路,实际转发面没有打通,需要检查备份下一跳的MPLS或VRF配置。
6.3 认证配置了,还是被抓包看到明文报文
不少人在接口下只配了authentication-mode simple,这种是明文密码,抓包直接能看到。既然做安全加固,就上HMAC-SHA256。如果设备版本较老,至少要保证MD5且定期更换Keychain密钥。
另外要注意:SPT(SNP)也参与认证。很多网络接口认证做了,但IS-IS的CSNP/PSNP没做,攻击者照样可以通过伪造SNP干扰LSDB同步。华为设备上domain-authentication-mode和area-authentication-mode会把LSP和SNP一起保护,这层别漏。
6.4 排查命令速查表
| 用途 | 命令 |
|---|---|
| 邻居状态 | display isis peer |
| IS-IS摘要 | display isis brief |
| LSDB(IPv4/IPv6) | display isis lsdb/display isis lsdb ipv6 |
| 网管与故障统计 | display isis error |
| FRR备份路径 | display isis frr |
| 认证信息核查 | display isis authentication |
| SR配置核查 | display segment-routing mpls |
| LSP分片信息 | display isis spf-tree/display isis lsdb verbose |
提醒一点:不同版本的华为设备,命令细节略有差异。上线前务必在实验环境先跑一遍
display isis各命令的输出,确认兼容性,再落到生产设备上。
6.5 一些实战经验的补充分享
最后再聊几句我自己的习惯。
刚开始做IS-IS拓展功能时,我总是急着调参数,结果经常把简单网络搞复杂。后来我给自己定了三条规矩:
- 先看基础拓扑。领域划分、System ID规划、接口类型这些没做对,拓展功能配得再好也是白搭。
- 每个功能小步上线。比如先只做BFD联动,等一天看稳定;再做FRR,再看一天;最后才启SR。这样出问题能很快定位。
- 每次变更都要记录基线。IS-IS这种承载全网路由的协议,变更前备份配置只是基本操作,更重要的是记录当时的LSDB和路由表快照,出问题才能对比。
网络不是做加法,而是做平衡。IS-IS拓展功能都是为了解决具体问题而生的:快速收敛解决故障恢复,多拓扑解决双栈黑洞,认证解决安全风险,SR解决流量调度。用不用、用多狠,取决于你的网络规模和业务要求。小网络默认配置够用,不必硬堆拓展;大型网络每一步都要有依据,避免“为了功能而功能”。
我个人在实际维护中的体会是:把基础协议理解透,再上拓展功能,出问题时才能快速定位到底哪一环出了问题——多数“诡异故障”,最后都落在基础配置不一致上。系统性地把拓展功能逐个验证、逐步铺开,远比一次性全量上线稳妥得多。