☰
IS-IS在华为设备上的配置与排障实战:从邻居建立到路由优化
2026/10/17 4:27:41 网站建设 项目流程

说句实在话,路由协议折腾多了以后,IS-IS是少数让我觉得“越用越顺手”的协议。这套源自OSI时代的链路状态协议,在现网和实验环境里经常和BGP、OSPF搭配出现,尤其是在华为设备上,IS-IS的命令风格清晰,调试工具也齐全,很适合作为骨干网络的IGP选择。这篇总结笔记,就是把我从第一次配IS-IS到后来做调优、做排障过程中沉淀下来的心得整理出来,覆盖核心机制、华为设备上的配置步骤,以及几个特别容易被忽略的坑。如果你正在学数通方向的认证,或者需要维护一张以IS-IS为IGP骨干的网络,这篇文章应该能帮你省掉不少试错的时间。

1. 认清楚IS-IS在华为设备里到底是个什么角色

1.1 IS-IS和OSPF最核心的区别

很多人第一次接触IS-IS时,都会下意识拿它跟OSPF对比。两者确实是“表兄弟”,都是链路状态协议,都要跑SPF算法,都有区域和分层设计。但如果只看表象不看本质,后面配置和理解就容易拧巴。

IS-IS最初是ISO为OSI网络设计的,后来才被扩展成同时支持IP路由。而OSPF从一开始就是纯IP世界里的协议。这个出身直接决定了两者在设计哲学上的差异:OSPF对IP网络做了大量定制,比如Router-ID、DR/BDR选举、Type1到Type5的LSA分类;IS-IS则保留了很多OSI风格的概念,比如NET地址、System ID、伪节点LSP,甚至连区域边界都不在路由器上划分,而是在链路上划分。

我整理过一个简单的对比表,方便你快速抓住重点:

对比项IS-ISOSPF
协议出身OSI,后来扩展支持IP纯IP环境设计
路由器标识System ID + NET地址Router-ID
区域边界链路级别,L1/L2路由器可跨区域接口级别,ABR划分区域
广播网络角色DIS,可抢占,无BDRDR/BDR,不可抢占
度量值默认窄度量,手工或策略调整居多默认按带宽参考值计算
扩展方式TLV非常灵活,容易增加新能力LSA类型扩展相对规范但封闭

在华为设备上,IS-IS默认支持IPv4和IPv6双栈配置,地址族的概念也和BGP类似,配置思路清楚以后很好上手。

为什么骨干网和企业网核心经常选IS-IS而不是OSPF?我个人的感受是:IS-IS的L1区域设计对LSDB规模的约束更自然,一个特大区域也可以稳定运行;再加上TLV扩展机制足够灵活,后续要加新特性(比如SR、SFC)时不用改动协议框架本身。对于需要长期演进、频繁调整的网络来说,这是很现实的考量。

1.2 理解NET地址、区域和Level

配置IS-IS绕不开NET地址。很多新手第一关就卡在这里,因为NET地址长得很奇怪,一串十六进制数字中间隔着小圆点。其实它并不复杂,核心就三部分:Area Address + System ID + SEL。

举个例子,某个路由器的NET地址是:

49.0001.0100.0000.0001.00

拆开看就是:

  • 49.0001是区域地址,49是私网编址的AFI,0001是区域号,类比OSPF里的Area ID;
  • 0100.0000.0001是System ID,必须是6个字节,通常用设备的路由ID转换过来,作用类似OSPF的Router-ID,全网必须唯一;
  • 末端.00是SEL,类似OSI的N-SEL,IS-IS配置里固定写00。

配置命令也很直观:

[Huawei] isis 1 [Huawei-isis-1] network-entity 49.0001.0100.0000.0001.00

我见过不少人在NET地址上栽跟头,最常见的就是System ID写不够6个字节。这里有个土办法:把IPv4地址转换成十六进制后补零,比如路由器的Loopback地址是10.0.0.1,转成0100.0000.0001,一眼就能看出规律。后面排查的时候,用display isis lsdb看到一堆System ID,也能快速对应到是哪台设备。

Level则是IS-IS的分层逻辑,一共三种角色:

  • Level-1路由器只在同一个区域内工作,维护本区域的LSDB和路由,类似OSPF的Internal Router;
  • Level-2路由器负责区域之间的路由交换,维护的LSDB覆盖整个Level-2域,类似OSPF的Backbone Router;
  • Level-1-2路由器同时属于两种角色,通常部署在区域边界,承担“桥梁”职责,类似OSPF的ABR,但行为细节上并不一样。

理解了Level,后面看LSDB和路由表时,你就知道为什么有些路由只在部分设备上出现,不至于对着display isis route的输出一头雾水。

2. 华为IS-IS配置实操:从邻居建立到路由互通

2.1 基础配置五步走

华为设备上启动IS-IS非常快,最精简的配置其实就那么几行。以两台直连设备为例,先看最小配置:

[Huawei] isis 1 [Huawei-isis-1] is-level level-1-2 [Huawei-isis-1] network-entity 49.0001.0010.0100.1001.00 [Huawei-isis-1] quit [Huawei] interface GigabitEthernet0/0/0 [Huawei-GigabitEthernet0/0/0] isis enable 1 [Huawei-GigabitEthernet0/0/0] quit

对端设备只需要把NET地址里的System ID换成自己的,然后同样在互联接口上执行isis enable 1,两端就能建立邻居。配置完成后,用display isis peer查看邻居状态,正常会显示Up。

这个最小配置里有几个点需要解释:

  1. 进程号1只在本地有意义,两台设备进程号不一致也没关系,只要接口使能了同一个本地进程即可;
  2. is-level决定设备角色,默认是Level-1-2。如果明确知道设备角色,建议显式写清楚,避免后续排查时误判;
  3. NET地址一旦配置就无法直接修改,必须先删除旧的再配置新的,这在现网操作时要格外小心。

为什么这么简单的配置就能跑起来?因为IS-IS的Hello机制和OSPF不太一样,它不要求先选Router-ID,也不需要你指定接口的Area,区域信息直接写在NET地址里,通过Hello报文交互时自然携带。这个设计让初配成本变得很低,但也意味着一旦NET地址写错,排查起来比OSPF更隐蔽。

2.2 广播网络中的DIS选举

以太网接口默认是广播网络类型,广播链路上需要选举一个DIS(Designated Intermediate System)。

DIS的职责有两个:一个是在广播链路上代表整个网段生成伪节点LSP,避免所有路由器两两之间都建立邻居,减少LSP数量;另一个是周期性发送CSNP,相当于给全网段发一份LSP摘要目录,让其他路由器能核对缺了哪些LSP。

DIS选举的规则是:接口上IS-IS优先级数值越大越优先,范围是0到127,华为设备默认值是64;数值相同的情况下,System ID大的优先。跟OSPF的DR选举相比,IS-IS的DIS有一个非常关键的区别:它可以被抢占。也就是说,一台优先级更高的设备上线后,可以立刻顶掉原来的DIS,不会像OSPF那样保持已选举的DR不变化。

这个特性既是优点也是坑。优点是你可以主动控制核心设备成为DIS;坑是如果多台设备优先级没有规划,DIS可能会在几台设备之间跳来跳去,导致CSNP频繁变化,影响网络稳定性。

华为设备上的调整命令在接口视图下:

[Huawei-GigabitEthernet0/0/0] isis dis-priority 120 [Huawei-GigabitEthernet0/0/0] isis dis-priority 120 level-2

第一条同时影响Level-1和Level-2,第二条只影响Level-2。我个人的习惯是,把汇聚层或核心层的稳定设备优先级设成120,同时保留另一台高规格设备作为备用,人为控制DIS角色,避免默认值下随机竞争。

2.3 区域互通与路由泄露

IS-IS区域设计和OSPF有个明显区别:OSPF的普通区域里,ABR会主动下发Type3 LSA,把区域间路由整理后注入进来;而IS-IS的Level-1路由器默认只知道本区域内的事,对区域外的路由只有一个缺省路由,指向最近的Level-1-2路由器。

这个设计的初衷是控制LSDB规模和SPF计算量。想象一下:如果一个大型区域里有几千台Level-1路由器,每个区域间路由细节都注入进来,那Level-1区域就失去了分层意义,所有路由器都得维护全网的链路状态信息。

所以IS-IS引入了路由泄露机制,方向是从Level-2向Level-1注入。当你确实需要Level-1路由器了解区域外的具体网段,以便做更精确的选路时,可以在Level-1-2路由器上打开注入:

[Huawei-isis-1] address-family ipv4 [Huawei-isis-af-ipv4] import-route isis level-2 into level-1

这条命令执行后,Level-1区域内的路由器就能学到区域外的明细路由,而不只是依赖缺省路由。

这里一定要把握好尺度。如果你只是希望Level-1路由器能访问外部网络,缺省路由完全够用;如果区域内有多个出口,需要Level-1路由器根据目的网段选择最优出口,才需要配置路由泄露。我见过一些网络把路由泄露无条件打开,结果Level-1区域的LSDB膨胀得很厉害,完全破坏了分层设计带来的扩展性优势。

3. 我记录的几个关键机制:LSP泛洪、SPF与度量值

3.1 LSP的生成和泛洪

链路状态协议的核心是链路状态数据库,而构成这个数据库的要素就是LSP。IS-IS的LSP可以理解成一张“公告单”:某台路由器发现自己的接口状态变化、邻居关系变化、路由前缀变化时,会重新生成LSP,然后向所有直连邻居扩散,邻居收到后再继续扩散,直到全网每一台路由器都收到这份LSP。

为了防止LSP在网络里无限循环,IS-IS给每个LSP都编了序列号。一台路由器生成的LSP每次更新时序列号加一,收到LSP的路由器如果发现序列号比自己数据库里的更新,就存储并继续泛洪;如果发现序列号更旧,就不会再转发。这个机制很像朋友圈里的“版本号”,大家只认最新版本,旧版本自然被淘汰。

在广播网络里,DIS会周期性地发送CSNP,CSNP有点像一本“目录册”,列了当前数据库里所有LSP的摘要。其他路由器收到CSNP后,拿自己的数据库对照,发现自己缺了哪条LSP,就通过PSNP向DIS请求缺失的部分。而在P2P链路上,没有DIS,邻居关系建立时通过PSNP直接请求全量LSP,简单直接。

华为设备上可以这样查看LSP数据库:

display isis lsdb

输出会列出Level-1和Level-2的LSP摘要,包括LSPID、序列号、Checksum和剩余生命期。排障时如果发现某台设备的路由学不到,先对比两端设备的display isis lsdb,看是不是有一侧缺少某条LSP,这是最快缩小范围的方法。

3.2 SPF计算和Cost度量

有了全网的LSP之后,每台路由器都会把LSDB里的信息拼成一张带权有向图,然后以自己为根,运行SPF算法算出一棵最短路径树,再把这棵树转成路由表。这个过程和OSPF没有本质区别,所以IS-IS同样是无环的。

关键在于度量值。华为设备的IS-IS默认使用窄度量(narrow),接口开销值范围只有1到63,而且默认所有接口开销都是10。也就是说,如果你不手动配置,IS-IS并不会像OSPF那样根据接口带宽去自动计算开销。这在低速链路和高速链路混跑的现网里,经常导致流量没有按预期路径走。

解决办法有两种:一是手动给不同带宽的接口配置不同的isis cost值;二是把度量类型切换成宽度量(wide),这样开销范围能到16777215,配合策略路由和流量工程时更灵活。

[Huawei-isis-1] cost-style wide

在接口视图下的手动配置则是:

[Huawei-GigabitEthernet0/0/0] isis cost 100

有一点需要特别注意:两端设备如果一边用窄度量,另一边用宽度量,就算邻居能建立,路由计算也可能出现不一致。华为设备的cost-style除了narrow、wide,还有narrow-compatible、wide-compatible这类兼容模式,用于过渡场景。我建议新项目直接统一用wide,避免后续扩展时还要做全网度量类型切换。

SPF计算完成后,如果有多条等价路径,IS-IS默认可以同时使用,实现负载分担。在华为设备上,等价路径的默认条数上限是8条,大家常见的光纤环网、双上联场景都能直接受益。

3.3 定时器和收敛优化

IS-IS的收敛速度可以通过调整定时器来优化。先列几个常用的:

  • Hello定时器:控制邻居Hello报文发送间隔,默认10秒,Hold时间默认是Hello的三倍,也就是30秒;
  • LSP刷新时间:默认900秒,IS-IS路由器周期性重新生成LSP;
  • LSP最大生命期:默认1200秒,超时后LSP会被删除;
  • SPF计算调度:收到LSP触发SPF重算时,不会立刻执行,而是稍作延迟,以便合并多次网络变化。

现网中,如果骨干链路对故障感知要求很高,可以把Hello间隔调小,比如:

[Huawei-GigabitEthernet0/0/0] isis timer hello 3

这个操作能明显加快故障发现速度,因为Hold时间会自动跟着变成原来的三倍,也就是9秒左右。但不要盲目调到1秒,如果设备CPU压力大或者链路质量差,频繁丢Hello反而容易产生误判,造成邻居关系震荡。我自己的习惯是,核心链路用3到5秒,接入侧保持默认10秒,已经在很多项目里验证过稳定性。

SPF调度这里,如果你不想从默认开始摸索,可以这样理解:把调度延迟调低,会让网络变化后的收敛更快,但同时会消耗更多CPU资源。设备性能足够时,把SPF重算延迟调到几十毫秒级别是完全可行的;设备老、路由器数量多的情况下,建议保留默认,避免CPU繁忙时出现“路由表一会儿有、一会儿没有”的抖动现象。

4. 排障实录:IS-IS邻居和路由的常见坑

4.1 邻居一直停留在Init状态

这是IS-IS排障里出现频率最高的问题。邻居状态卡在Init,说明对端收到了你的Hello,并且同意参数协商,但最终没有完成双向邻居建立。

常见原因有四个:

  • 网络类型不匹配,比如一端是广播网络,另一端手工改成了P2P;
  • Level不匹配,Level-1和Level-2的Hello不会互相协商成功;
  • 区域地址不一致,两端的NET地址里Area Address对不上;
  • 接口MTU不一致,大尺寸Hello或LSP被对端丢弃。

排查这类问题时,我的套路很固定:先看display isis interface,确认两端接口的Level、网络类型、MTU是否一致;再看两端的NET地址,逐段核对Area Address;最后才是抓包看Hello报文。

这里特别提醒一下MTU问题。IS-IS的Hello报文里会携带接口MTU信息,但某些老旧设备不支持自动协商,两端MTU不一样时,虽然小报文能通,但包含完整TLV的Hello可能直接被丢弃。华为设备上有个比较实用的命令,可以让接口发送小Hello避免这种情况:

[Huawei-GigabitEthernet0/0/0] isis small-hello

现网中如果遇到邻居反复处于Init状态、又确认配置无误,可以试试这个方案。

4.2 路由学不到或路径不对

邻居正常Up了,但路由表里没有预期网段,这类问题多半出在Level设计和区域边界上。

最常见的场景是Level-1路由器看不到区域外的具体路由。如果只想让Level-1路由器能访问外部网络,检查Level-1-2边界路由器是否下发缺省路由给Level-1区域;如果业务要求Level-1路由器能选择最优出口,那就需要配置之前提到的路由泄露。

还有一种情况是路由泄露已配置,但Level-1路由器依然看不到,那就要检查边界路由器的地址族视图配置是否正确。我之前就踩过这个坑:在IS-IS视图直接敲import-route isis level-2 into level-1,系统提示命令不存在,后来才反应过来华为设备的IS-IS导入策略是在IPv4地址族视图下配的。

路径不对的问题则和Cost相关。比如两台设备通过GE链路和100GE链路同时互联,但两条接口都没配Cost,IS-IS会默认认为开销相同,结果流量在低速链路上也同时跑。处理方式就是前面说的,要么手动分配Cost,要么调整度量类型并显式配置接口开销。

4.3 DIS频繁切换和网络震荡

广播链路上DIS频繁变化,本质上是选举条件反复被打破。最常见的原因是接口物理震荡,一旦某台设备接口频繁Up/Down,它参与DIS选举的行为就会不断触发重置。但还有一种更隐蔽的情况:多台设备都使用默认优先级64,System ID又彼此接近,导致系统架构上“谁当DIS”很不稳定。

遇到DIS震荡,处理思路是先稳住物理层,再稳住协议层。排查物理层用display interface看错包率和Up/Down次数;协议层直接给核心设备配置一个明确的高优先级,比如:

[Huawei-GigabitEthernet0/0/0] isis dis-priority 127 level-2

这里有个小细节:优先级的范围是0到127,如果你想让某台设备绝对稳定地当DIS,直接给127,因为IS-IS的DIS是可以抢占的,只要它在线,其他设备即使优先级相同也竞争不过它。一旦这台设备故障,另一台优先级第二高的设备会自动顶上,不会影响网络运行。

4.4 认证与跨厂商对接细节

IS-IS支持接口认证、区域认证和域认证,华为设备上的配置命令分得很细。常见写法是:

[Huawei-isis-1] area-authentication-mode md5 cipher Aa@123 [Huawei-isis-1] domain-authentication-mode md5 cipher Aa@123

区域认证作用于Level-1,域认证作用于Level-2。配置完认证后,邻居之间所有相关报文都会携带认证信息,对端不配或密码不一致都会导致邻居建立失败。

排查认证问题时,用display isis peer看到邻居状态起不来,先确认两端配置的是不是同一个认证模式,再确认密码密文是否正确,最后看是不是只配了区域认证但忽略了对端的域认证。

跨厂商设备对接IS-IS时,还有一个容易被忽略的点:动态主机名映射。很多主流厂商都支持用主机名替代System ID显示,但不同实现方式不同,老版本设备可能无法识别这些TLV。和较老的第三方设备对接时,如果邻居能建立但路由抖动,可以先考虑关闭动态主机名这类增强特性,让基础IS-IS特性跑稳。

下面是一个简化版的速查表,适合下次排障时直接对照:

现象可能原因检查方法
邻居卡在InitArea地址不一致display isis interface,核对NET
邻居反复震荡接口MTU不一致两端统一MTU,必要时 small-hello
Level-1学不到外部路由未配置路由泄露配置 import-route isis level-2 into level-1
路径与预期不符Cost未按带宽配置display isis route,检查接口cost
DIS频繁切换优先级未规划设置 isis dis-priority
邻居认证失败模式或密码不一致核对 area/domain authentication-mode

5. 看完笔记之后,我更推荐你这样上手实践

5.1 用模拟器搭一个最小实验环境

纸上谈兵永远不如动手折腾一遍。我建议你在华为网络模拟器里搭一个三台设备的拓扑:一台核心设备、一台汇聚设备、一台接入设备,然后在接入设备上只启用Level-1,核心和汇聚启用Level-1-2,形成一个最简单的两区域结构。

操作步骤可以这样安排:

  1. 先完成基础配置,确认三台设备邻居全部Up;
  2. 故意把接入设备的NET地址区域号写错,观察邻居状态变化,然后改回来;
  3. 给其中一段链路配置不同的接口Cost,观察路由偏好;
  4. 在核心设备上配置路由泄露,对比Level-1设备的路由表变化;
  5. 最后再打开认证,确认密码不匹配时邻居状态如何。

这么一套流程走下来,你对Level、Cost、路由泄露、认证这几个关键点的理解,会比背十遍文档都牢固。模拟环境的优势就是可以随便造故障,不用担心影响现网业务。

5.2 常用查看命令背诵版

排障时不要指望每次都靠翻文档,我整理几个高频命令,建议直接背下来:

命令作用
display isis peer查看IS-IS邻居状态
display isis lsdb查看LSP数据库摘要
display isis route查看IS-IS路由表
display isis interface查看接口层面配置和邻居参数
display isis spn查看SPF计算记录

其中display isis interface是我用得最多的,因为它能一次性看到接口的网络类型、Level、Circuit ID、Hello定时器、DIS优先级,大部分邻居问题在这里就能定位一半。display isis lsdb则是看区域设计和LSP泛洪是否正常的关键,配合System ID能快速判断是哪台设备在持续生成异常LSP。

我个人折腾下来最深的体会是:IS-IS的配置本身并不复杂,绝大多数问题都出在“没理解它当年为什么这么设计”。比如NET地址为什么长这样,Level-1为什么要靠缺省路由访问外部,路由泄露为什么不能被滥开,这些底层逻辑想通了,华为设备上的命令反而变成了很自然的事情。如果你正准备做数通相关认证,或者手头正在维护一张IS-IS骨干网络,不妨按这个思路重新梳理一遍自己的笔记,把重点放在“为什么”上,会比单纯记忆命令有用得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询