1. 为什么IS-IS值得单独拎出来啃透
很多人准备HCIP-Routing & Switching V2.5的时候,会把大量精力砸在OSPF上,觉得OSPF是IGP里的绝对主角,IS-IS随便翻翻就行。我一开始也是这个心态,结果第一次做综合实验,OSPF部分配得行云流水,一到IS-IS区域边界就卡壳——邻居起不来、路由进不了表、Level-1和Level-2之间像隔了一堵墙。那次之后我才意识到,IS-IS在运营商和大型园区网络里的地位,远比想象中重要,而且它的设计逻辑和OSPF是两套完全不同的思路。
这篇内容就是围绕HCIP-R&S V2.5里IS-IS这个模块展开的。我会把IS-IS的核心机制、配置实操、和OSPF的对比、以及考试和实战里最容易踩的坑,一条一条拆开讲清楚。不管你是正在备考HCIP,还是工作中突然接到一个跑IS-IS的网络要维护,这篇都能帮你把这块硬骨头啃下来。关键词就三个:IS-IS、HCIP、路由交换,全文围绕它们转。
先说清楚IS-IS到底是个什么东西。它是Intermediate System to Intermediate System的缩写,中文叫中间系统到中间系统,是一种链路状态路由协议。它最早是为OSI的CLNS(无连接网络服务)设计的,后来通过集成化(Integrated IS-IS)扩展出了对IP的支持。现在我们在IP网络里用的,基本都是集成IS-IS。它和OSPF一样,靠SPF算法算最短路径,靠LSP(链路状态PDU)泛洪拓扑信息,但它的报文结构、区域划分、路由器角色命名,全都带着浓浓的OSI味道,这也是很多人觉得它别扭的根源。
为什么HCIP要考它?因为在中大型网络,尤其是运营商骨干和金融、能源这类对稳定性要求极高的行业网络里,IS-IS的部署比例非常高。它扩展性好、收敛快、对IPv6天然友好,而且运行在数据链路层之上,不像OSPF那样依赖IP层,抗攻击能力更强。这些特性决定了它不是"选修课",而是必须拿下的"必修课"。
2. IS-IS和OSPF的底层差异,别用OSPF的脑子去理解它
2.1 区域划分逻辑:一个在路由器上,一个在链路上
OSPF的区域边界画在接口上,一台路由器可以同时属于多个区域,比如ABR就是跨区域的。但IS-IS不一样,它的区域边界画在路由器上,一台IS-IS路由器整体属于某一个区域,区域地址配置在NET(网络实体标题)里。这就导致一个很关键的区别:IS-IS里没有"ABR"这个概念,取而代之的是Level-1-2路由器,它同时维护Level-1和Level-2的链路状态数据库,但它的区域归属是明确的。
这个差异带来的直接影响是:OSPF里你可以很灵活地在一台路由器上做区域划分,而IS-IS里你要规划好每台路由器的角色。Level-1路由器只在区域内活动,Level-2路由器负责骨干,Level-1-2路由器是两者之间的桥梁。我第一次配IS-IS的时候,就是没搞清楚这个逻辑,把一台本该做Level-1-2的路由器配成了纯Level-1,结果它死活学不到其他区域的路由。
2.2 路由器角色命名:别被这些术语绕晕
IS-IS的术语确实劝退,我整理了一张对照表,你先把这些对应关系记牢,后面看配置和排错会顺很多。
| IS-IS术语 | 对应OSPF概念 | 说明 |
|---|---|---|
| IS(Intermediate System) | 路由器 | 中间系统就是路由器 |
| ES(End System) | 主机 | 终端系统就是主机 |
| Level-1 | 区域内 | 相当于OSPF的非骨干区域 |
| Level-2 | 骨干区域 | 相当于OSPF的Area 0 |
| Level-1-2 | ABR | 同时参与L1和L2 |
| NET | Router ID + Area ID | 网络实体标题,标识路由器和区域 |
| LSP | LSA | 链路状态PDU |
| DIS | DR | 指定中间系统,类似OSPF的DR |
| PSNP | LSU/ACK | 部分序列号PDU,用于确认和请求 |
| CSNP | DBD | 完整序列号PDU,用于数据库同步 |
这张表建议你抄下来贴在显示器边上,配的时候随时对照。尤其是NET和Router ID的关系,很多人第一次配IS-IS,NET写错了,邻居直接起不来。
2.3 NET地址的构成:一个字母都不能错
NET是IS-IS里最基础也最容易出错的地方。它的格式是这样的:
NET = Area ID + System ID + NSEL举个例子:49.0001.0000.0000.0001.00
49.0001是Area ID,49是私有地址段,0001是区域号0000.0000.0001是System ID,相当于Router ID,必须全局唯一,通常是6字节00是NSEL,相当于协议选择符,在IS-IS里固定为00
这里有几个坑我必须提前说:
第一,System ID的长度必须是6字节,写成0000.0000.0001是12个十六进制字符,刚好6字节。如果你写成0000.0001,只有4字节,设备会报错或者自动补齐,导致和你预期的不一样。
第二,Area ID的格式要统一。同一个区域内的路由器,Area ID必须完全一致,包括前面的49和后面的区域号。我见过有人一台写49.0001,另一台写49.00001,看着差不多,实际上区域号不一样,邻居关系直接卡在Init。
第三,NSEL必须是00。这个字段在集成IS-IS里固定为00,表示这是路由器本身,不是其他什么实体。写错了邻居也起不来。
提示:配置NET的时候,建议先用
display isis lsdb确认一下本地NET是否正确生成,再去检查邻居。很多邻居问题根源都在NET上。
3. IS-IS邻居建立与链路状态数据库同步的完整链路
3.1 邻居建立的三个阶段:IIH、LSP、SNP
IS-IS邻居建立不像OSPF那样有明确的7个状态,它主要靠三种PDU来完成交互:IIH(IS-IS Hello)、LSP(链路状态PDU)、SNP(序列号PDU)。整个过程可以拆成三个阶段。
第一阶段是Hello交互。IS-IS路由器周期性地发送IIH报文,Level-1和Level-2的Hello是分开的。如果两台路由器的Level-1 Hello参数匹配,就会建立Level-1邻居;Level-2同理。这里的关键参数包括:区域地址、认证信息、Hello间隔、保持时间。任何一个不匹配,邻居都起不来。
第二阶段是链路状态数据库同步。邻居建立后,双方通过CSNP(完整序列号PDU)交换数据库摘要,然后通过PSNP(部分序列号PDU)请求缺失的LSP。这个过程和OSPF的DBD+LSU+ACK很像,但IS-IS的CSNP是周期性的,DIS会定期发送CSNP来同步整个广播网段的数据库。
第三阶段是SPF计算。数据库同步完成后,每台路由器独立运行SPF算法,算出最短路径树,生成路由表。Level-1和Level-2是分开计算的,Level-1-2路由器会分别计算两个层级的SPF。
3.2 DIS选举:和OSPF的DR有什么不同
IS-IS在广播网段上会选举DIS(Designated Intermediate System),功能类似OSPF的DR。但选举规则和DR有几个关键区别:
- 优先级范围不同:IS-IS的DIS优先级是0-127,OSPF的DR优先级是0-255。
- 抢占机制不同:IS-IS的DIS是可抢占的,新加入的路由器如果优先级更高,会立刻成为新的DIS;OSPF的DR是不抢占的,除非DR挂了。
- 选举范围不同:IS-IS的Level-1和Level-2各自选举DIS,一个网段上可能有两个DIS;OSPF一个网段只有一个DR。
- 没有BDR:IS-IS没有备份指定中间系统,DIS挂了重新选就行。
这个可抢占特性在实际网络里要特别注意。如果你调整了某台路由器的DIS优先级,它会立刻抢走DIS角色,导致网段上的LSP泛洪和CSNP发送出现短暂震荡。生产环境调整优先级,建议在维护窗口做。
3.3 配置实操:一个三区域IS-IS网络的完整搭建
下面我用一个典型的三区域拓扑来演示IS-IS的配置。拓扑是这样的:R1和R2在Area 49.0001,R2和R3在Area 49.0002,R2是Level-1-2路由器,R1是Level-1,R3是Level-2。
先配R1:
sysname R1 isis 1 network-entity 49.0001.0000.0000.0001.00 is-level level-1 interface GigabitEthernet0/0/0 ip address 10.0.12.1 255.255.255.0 isis enable 1再配R2,它是Level-1-2:
sysname R2 isis 1 network-entity 49.0001.0000.0000.0002.00 is-level level-1-2 interface GigabitEthernet0/0/0 ip address 10.0.12.2 255.255.255.0 isis enable 1 interface GigabitEthernet0/0/1 ip address 10.0.23.2 255.255.255.0 isis enable 1最后配R3:
sysname R3 isis 1 network-entity 49.0002.0000.0000.0003.00 is-level level-2 interface GigabitEthernet0/0/1 ip address 10.0.23.3 255.255.255.0 isis enable 1配完之后,用display isis peer检查邻居。R1应该只看到R2的Level-1邻居,R3应该只看到R2的Level-2邻居,R2应该同时看到R1的Level-1和R3的Level-2。
这里有个细节:R2的NET里Area ID写的是49.0001,但它同时参与Level-2。这是允许的,Level-1-2路由器的NET只需要一个Area ID,它用这个Area ID标识自己的Level-1区域归属,Level-2的骨干区域不需要单独的Area ID。这一点和OSPF的ABR必须有一个接口在Area 0不一样,IS-IS的Level-2是逻辑上的骨干,不依赖物理接口的区域归属。
3.4 路由泄露:Level-1路由器怎么访问外部区域
默认情况下,Level-1路由器只有默认路由指向最近的Level-1-2路由器,它不知道其他区域的明细路由。如果你想让Level-1路由器学到其他区域的明细路由,需要在Level-1-2路由器上做路由泄露(Route Leaking)。
配置命令是在IS-IS视图下:
isis 1 import-route isis level-2 into level-1这条命令的意思是,把Level-2的路由引入到Level-1的LSP里,让Level-1路由器能学到。但要注意,这会导致Level-1路由器的路由表变大,如果网络规模很大,要谨慎使用,或者配合路由策略做过滤。
我实测下来,路由泄露在小型网络里很方便,但在大型网络里容易引起次优路径。因为Level-1路由器学到明细路由后,可能会选择一条经过其他Level-1-2路由器的路径,而不是最近的出口。所以生产环境用路由泄露,一定要配合filter-policy做精细控制。
4. IS-IS在HCIP考试和实战里的高频踩坑点
4.1 邻居起不来的五大原因排查顺序
IS-IS邻居起不来,排查要有顺序,不要东一榔头西一棒子。我总结了一个排查链路,按这个顺序走,基本能定位到问题。
第一步,检查NET。两台路由器的Area ID是否一致(Level-1邻居要求Area ID一致,Level-2不要求),System ID是否唯一,NSEL是否为00。用display isis lsdb看本地LSP有没有生成。
第二步,检查Level类型。如果一台是Level-1,另一台是Level-2,它们永远建不起邻居。用display isis interface确认接口的Level类型。
第三步,检查认证。IS-IS支持接口认证和区域认证,认证方式有明文和MD5。如果一端配了认证,另一端没配,或者密码不一致,邻居会卡在Init。用display isis interface verbose看认证配置。
第四步,检查Hello参数。Hello间隔和保持时间必须匹配。IS-IS默认的Hello间隔是10秒,保持时间是30秒。如果一端改成了3秒,另一端还是10秒,邻居会反复震荡。
第五步,检查二层连通性。如果以上都没问题,ping一下直连地址,确认链路层没问题。有时候是VLAN或者端口配置的问题,和IS-IS本身无关。
4.2 LSP分片与ATT比特:两个容易被忽略的细节
LSP分片是IS-IS的一个特性。当一个LSP太大,超过MTU限制时,IS-IS会把LSP分片成多个。每个分片有独立的LSP ID,接收方需要把所有分片收齐才能还原完整的链路状态信息。如果某个分片丢失,SPF计算会出问题。
在HCIP考试里,LSP分片经常和MTU一起考。如果接口MTU太小,LSP频繁分片,会导致数据库同步变慢,甚至邻居震荡。建议在IS-IS接口上把MTU调到至少1500,如果跑的是Jumbo Frame,可以调到9000。
ATT比特是Level-1 LSP里的一个标志位。当Level-1-2路由器通过Level-2学到其他区域的路由时,它会在自己产生的Level-1 LSP里把ATT比特置1,告诉Level-1路由器"我这里有出口,可以走我"。Level-1路由器收到ATT比特为1的LSP后,会自动生成一条默认路由指向这台Level-1-2路由器。
这个机制很巧妙,但有个坑:如果网络里有多个Level-1-2路由器,每个都会置ATT比特,Level-1路由器会生成多条默认路由,可能导致负载不均或者次优路径。解决办法是在Level-1-2路由器上做路由策略,只让特定的路由器置ATT比特,或者用attached-bit avoid-learning命令让Level-1路由器忽略ATT比特,手动配默认路由。
4.3 路由渗透与过滤:别让不该进的路由进来
IS-IS的路由渗透(Route Leaking)和路由过滤是考试和实战的重点。路由渗透前面说了,是把Level-2路由引入Level-1。路由过滤则是在引入的时候做策略,只放行需要的路由。
配置示例:
isis 1 import-route isis level-2 into level-1 filter-policy 2000 acl number 2000 rule 5 permit source 192.168.0.0 0.0.255.255 rule 10 deny这段配置的意思是,只把192.168.0.0/16网段的路由从Level-2引入Level-1,其他路由全部拒绝。这样做的好处是控制Level-1路由器的路由表规模,避免不必要的路由泄露。
我踩过的一个坑是:filter-policy的方向搞反了。在IS-IS里,import-route isis level-2 into level-1后面的filter-policy是对引入的路由做过滤,而不是对本地产生的路由做过滤。如果你写反了,会发现过滤不生效,或者把不该过滤的路由过滤掉了。
4.4 收敛速度优化:哪些参数可以调,哪些不能乱动
IS-IS的收敛速度比OSPF快,这是它的优势之一。但在实际网络里,默认参数不一定最优。以下几个参数可以调优:
- Hello间隔和保持时间:默认10秒/30秒,可以调小到3秒/10秒,加快邻居故障检测。但调太小会增加协议报文开销,建议在稳定链路上调,不稳定链路保持默认。
- LSP生成间隔:默认是30秒,可以调小到10秒,加快拓扑变化后的LSP泛洪。但调太小会导致LSP频繁刷新,增加CPU负担。
- SPF计算间隔:默认是10秒,可以调小到5秒,加快路由收敛。但调太小会导致SPF频繁计算,同样增加CPU负担。
这里有个经验:不要同时把所有参数都调到最小。我见过有人为了追求极致收敛,把Hello调到1秒,LSP生成调到1秒,SPF调到1秒,结果网络一有波动就震荡,CPU直接跑满。调优要循序渐进,先调Hello,观察一段时间,再调LSP,再调SPF,每次只调一个参数,确认稳定后再调下一个。
5. IS-IS与OSPF的选型对比:什么时候用哪个
5.1 从网络规模看选型
小型网络(路由器数量少于50台),OSPF和IS-IS都能胜任。OSPF的配置更直观,区域划分更灵活,学习成本更低。IS-IS的NET配置和Level概念对新手不太友好,没必要为了用而用。
中型网络(50-200台),两者都可以,但IS-IS的扩展性开始体现优势。IS-IS的LSP泛洪机制比OSPF的LSA更高效,数据库同步更快,收敛速度更有优势。
大型网络(200台以上),尤其是运营商骨干,IS-IS是更常见的选择。它的Level-2骨干设计比OSPF的Area 0更灵活,不需要所有骨干路由器都有接口在Area 0,扩展性更好。而且IS-IS对IPv6的支持是原生的,不需要像OSPFv3那样重新设计协议。
5.2 从运维复杂度看选型
OSPF的运维工具和排错资料更丰富,遇到问题更容易找到答案。IS-IS的排错相对复杂,尤其是LSP分片、ATT比特、DIS选举这些特性,不熟悉的话很容易懵。
但从另一个角度看,IS-IS的协议报文更简单,没有OSPF那么多LSA类型,数据库更小,长期运维的负担反而可能更低。我维护过一个跑IS-IS的园区网,运行了三年,除了几次硬件故障,协议本身没出过问题,稳定性确实好。
5.3 从厂商生态看选型
不同厂商对IS-IS的支持程度不一样。主流厂商的设备都支持IS-IS,但命令语法和默认参数可能有差异。如果你在一个多厂商环境里,建议先确认各厂商的IS-IS实现是否兼容,尤其是认证方式和LSP分片处理。
HCIP-R&S V2.5的IS-IS部分,主要考察华为设备的配置和排错。考试里会涉及NET配置、Level类型、DIS选举、路由泄露、路由过滤这些知识点。实操题里经常出现的是:给一个拓扑,要求配置IS-IS实现全网互通,然后做路由过滤或者路由泄露。这类题的关键是先把邻居建起来,再调路由策略,顺序不能乱。
6. 几个让我印象深刻的实操案例
6.1 案例一:NET配错导致邻居卡在Init
有一次帮朋友看一个实验环境,两台路由器直连,IS-IS邻居死活起不来,display isis peer显示Init状态。我让他把两边的NET发过来,一看就发现问题了:一台写的是49.0001.0000.0000.0001.00,另一台写的是49.0001.0000.0000.0002.00。System ID不一样,这没问题,但Area ID都是49.0001,也没问题。再仔细看,第一台的NET里0000.0000.0001是12个字符,第二台的0000.0000.0002也是12个字符,长度没问题。
那问题在哪?我让他display isis interface verbose,发现接口的Level类型一个是Level-1,另一个是Level-2。Level-1和Level-2的Hello报文不匹配,邻居当然起不来。改成都是Level-1-2之后,邻居立刻起来了。
这个案例说明,排查邻居问题,一定要把NET、Level类型、认证、Hello参数都过一遍,不要只盯着一个地方看。
6.2 案例二:路由泄露引起的次优路径
另一个案例是一个三区域网络,R1在Area 1,R2是Level-1-2,R3在Area 2,R4也是Level-1-2。R1要访问Area 2的路由,本来应该走R2,但实际走了R4,路径绕了一圈。
排查发现,R2和R4都做了路由泄露,把Level-2的路由引入Level-1。R1学到了两条明细路由,一条来自R2,一条来自R4。由于R4的Level-1 LSP里也带了Area 2的路由,R1的SPF计算选择了R4作为下一跳,因为R4的链路开销更小。但实际上R4到Area 2的路径比R2远,这就造成了次优路径。
解决办法是在R4上做路由过滤,只泄露部分路由,或者调整链路开销,让R1优先选R2。这个案例告诉我们,路由泄露不是配了就完事,一定要验证路径是否最优。
6.3 案例三:DIS抢占导致的短暂震荡
有一次在生产环境调整DIS优先级,想把一台新上架的路由器设为DIS。配置改完,网段上的IS-IS邻居立刻重新选举,新路由器抢到DIS角色,然后开始发送CSNP同步数据库。这个过程持续了大约5秒,期间网段上的路由出现短暂震荡。
虽然影响不大,但如果是核心网段,这5秒的震荡可能引起业务抖动。后来我学乖了,调整DIS优先级之前,先确认新路由器的数据库已经同步完成,然后在维护窗口操作,并且提前通知相关方。
7. 备考HCIP的IS-IS模块,我的复习路径
如果你正在备考HCIP-R&S V2.5,IS-IS这块我建议按这个顺序复习:
第一轮,理解概念。把NET、Level-1/2、DIS、LSP、SNP这些基础概念搞清楚,能画出IS-IS邻居建立和数据库同步的流程图。不用急着配命令,先把逻辑理顺。
第二轮,动手配置。搭一个三到四台路由器的拓扑,把Level-1、Level-2、Level-1-2都配一遍,验证邻居和路由。然后做路由泄露和路由过滤,观察路由表的变化。
第三轮,排错练习。故意配错NET、Level类型、认证、Hello参数,然后自己排查,记录每种故障的现象和排查步骤。这一步最花时间,但效果最好。
第四轮,对比总结。把IS-IS和OSPF的异同整理成表格,尤其是区域划分、路由器角色、数据库同步、收敛机制这几个维度。考试里经常考对比题,整理一遍能加深记忆。
第五轮,真题模拟。找一些IS-IS的实操题,限时完成,模拟考试环境。重点练路由泄露和路由过滤的配置,这两块在考试里出现频率很高。
我自己的经验是,IS-IS的配置命令不算多,但概念和机制比较绕,死记硬背没用,一定要动手配、动手排错。配过三遍以上,那些Level、NET、DIS的概念自然就刻在脑子里了。
最后分享一个我常用的验证命令组合,配完IS-IS之后,按这个顺序检查一遍,基本能覆盖大部分问题:
display isis peer display isis interface display isis lsdb display isis route display ip routing-table protocol isisdisplay isis peer看邻居状态,display isis interface看接口Level和DIS信息,display isis lsdb看链路状态数据库,display isis route看IS-IS路由表,display ip routing-table protocol isis看IS-IS路由有没有进全局路由表。这五条命令走一遍,邻居、数据库、路由三个层面都覆盖到了,排错效率会高很多。