OSPF 和 BGP 都讲完了,还剩一个重量级的路由协议:IS-IS。它和 OSPF 同属链路状态协议,思路几乎一样,但骨子里有几个设计差异,导致运营商的大网几乎清一色用 IS-IS。

先说结论:IS-IS 和 OSPF 的核心差别只有一个——IS-IS 的区域边界画在链路上,OSPF 的区域边界画在路由器上。这一条差异推导出了后面所有的不同。

IS-IS 的出身:先有 CLNP,后有 IP

IS-IS 最早是 ISO 为 CLNP(无连接网络协议)设计的动态路由协议——那是 OSI 阵营打算取代 IP 的一套协议栈。后来 IP 赢了,ISO 在 RFC 1195 里对 IS-IS 做了扩展,让它能同时支持 CLNP 和 IP,这就是 Integrated IS-IS(集成 IS-IS,也叫 Dual IS-IS)。

这个出身留下了两个可见的痕迹:

IS-ISOSPF
支持的网络层协议CLNP + IPv4 + IPv6只支持 IP(v2/v3 分家)
封装数据链路层直接封装IP 报文(协议号 89)
地址NSAP / NETIP 地址 + Area ID
扩展性靠 TLV,加特性不动报文结构靠 LSA 类型,改协议版本

最后一条是 IS-IS 在运营商受欢迎的真正原因:TLV(Type-Length-Value)机制让它极其好扩展。IPv6 支持、SR(Segment Routing)、SRv6、Flex-Algo……都是加几个新 TLV 就完事,不用改协议。而 OSPF 为了支持 IPv6 得另起炉灶搞 OSPFv3。

NSAP 与 NET:IS-IS 的"地址"

IS-IS 路由器的身份标识不是 IP,而是一个 NET(Network Entity Title)。NET 本质上是 SEL 字段为 00 的 NSAP 地址。

NET 结构
  49.0001.0000.0000.0001.00
  └┬┘ └─┬┘ └──────┬──────┘└┬┘
   │    │         │        └── SEL(1 字节,固定 00)
   │    │         └─────────── System ID(6 字节 = 48 bit)
   │    └───────────────────── Area ID(区域号,变长 1~13 字节)
   └────────────────────────── AFI(地址族标识,49 = 私有地址)

规则拆解:
  · AFI 常用 49(本地管理,相当于私网);39 是 ISO 分配的
  · 区域号 + System ID + SEL = NET
  · System ID 必须【全网唯一】,长度固定 6 字节
  · 一个路由器最多配 3 个 NET,但 System ID 必须相同

常用做法:把 Loopback0 的 IP 补全成 12 位十进制当 System ID
  Loopback0 = 1.1.1.1  →  System ID = 0000.0000.0001
  完整 NET   = 49.0001.0000.0000.0001.00
  这样一看到 System ID 就知道它的 Loopback 地址,排障方便

注意:同一个区域内的所有路由器,Area ID 必须一致;而 L2 骨干区域不需要 Area ID 一致(L2 不看区域)。这是 IS-IS 一个容易搞混的点。

分层:L1、L2、L1-2

IS-IS 把网络分成两个层次,路由器的角色由它的 is-level 决定:

角色在哪维护什么 LSDB路由计算范围
Level-1(L1)非骨干区域只有 L1 LSDB(本区域)只能算区域内路由,出区域靠默认路由
Level-2(L2)骨干区域只有 L2 LSDB算区域间路由
Level-1-2(L1/2)区域边界两套 LSDB 都有同时算区域内外,相当于 OSPF 的 ABR
IS-IS 分层:Level-1 区域、Level-1-2 边界路由器与 Level-2 骨干
▲ IS-IS 的 L1 / L1-2 / L2 分层结构

和 OSPF 区域的根本差别

这是理解 IS-IS 的钥匙,画出来最清楚:

区域边界画在哪
OSPF:区域边界在【路由器】上
  ┌──────── Area 1 ────────┐┌──────── Area 0 ────────┐
  │   R1 ── R2 ── ABR ─────┼┼───── R3 ── R4          │
  └────────────────────────┘└────────────────────────┘
                     ↑
              ABR 这台路由器【一半属于 Area 1,一半属于 Area 0】
              不同区域跑在不同接口上

IS-IS:区域边界在【链路上】
  ┌──────── L1 区域 49.0001 ────────┐   ┌──── L2 骨干(无区域概念)────┐
  │   R1 ── R2 ── L1/2              │   │              L1/2 ── R3 ── R4 │
  └─────────────────────────────────┘   └───────────────────────────────┘
                        ↑
              L1/2 路由器的【所有接口都在同一区域】,
              但它的 L2 接口同时参与骨干

★ 结果:IS-IS 一台路由器只属于【一个区域】,加区域比 OSPF 灵活得多

骨干区域的定义也不一样:OSPF 的骨干是 Area 0;IS-IS 的骨干是所有 L2 和 L1/2 路由器构成的拓扑,没有"区域号"的概念。

ATT 位与默认路由

L1 路由器怎么出去?靠 L1/2 路由器在 L1 LSP 里置位的 ATT(Attachment)位。

这就是 display isis route 里看到 0.0.0.0/0 的来源。

网络类型与 DIS 选举

IS-IS 只认两种网络类型:广播(Broadcast)和点对点(P2P)。以太网默认是广播。

DIS:为什么不叫 DR

广播网络上同样需要选一个"代表"来减少邻接数。IS-IS 叫它 DIS(Designated Intermediate System,指定中间系统),和 OSPF 的 DR 有三个关键差别:

OSPF 的 DRIS-IS 的 DIS
有备份吗有 BDR没有备份,DIS 挂了重新选
能抢占吗非抢占(除非 DR 失效或重启进程)可抢占——来了个优先级更高的,立刻换
选举依据优先级(默认 1)→ Router ID 大者胜优先级(默认 64,范围 0~127)→ MAC 大者胜
邻接关系DROther 之间停在 2-Way所有路由器之间都建邻接,都到 Up

为什么 IS-IS 不需要 BDR?因为所有路由器之间都是全互联的邻接——DIS 只负责周期性发 CSNP 做数据库同步,泛洪还是大家互相做。DIS 挂了,其他路由器照样能同步,只是少了那个"定期对账"的角色,重选一下就行。

huawei · DIS 优先级
interface GigabitEthernet0/0/1
 isis dis-priority 100        # 默认 64,范围 0~127,0 表示不参与
 isis dis-name CORE_SW1       # 给 DIS 起个名字(可选,方便看)

display isis interface verbose   # 看谁是 DIS

P2P 的三次握手

IS-IS 在 P2P 链路上有两种握手模式:

四种报文与 TLV

IS-IS 的报文比 OSPF 少得多,只有四类:

报文全称作用类比 OSPF
IIHIS-IS Hello发现和维护邻居。
分 LAN IIH(L1/L2 各一种)和 P2P IIH
Hello
LSPLink State PDU携带链路状态信息,分 L1 LSP / L2 LSPLSU(装 LSA)
CSNPComplete SNP完整的 LSDB 摘要。DIS 每 10 秒在广播网上发一次DBD
PSNPPartial SNP部分摘要。用于确认收到 LSP、请求缺失的 LSPLSR / LSAck

SNP(Sequence Number PDU)是 IS-IS 特有的一类,本质是"LSP 头部的清单",用来做数据库同步。

LSP 头部关键字段

LSP ID 的构成
LSP ID = System ID(6) + 伪节点ID(1) + 分片号(1)
  0000.0000.0001.00-00
  └─── System ID ──┘ └┬┘└┬┘
                      │  └── 分片号:LSP 太大就分片,最多 256 片
                      └───── 伪节点 ID:00 = 真实节点;非 0 = DIS 产生的伪节点

其他关键字段:
  · Sequence Number  —— 从 0x00000001 开始递增,越大越新
  · Remaining Lifetime —— 剩余存活时间,初始 1200 秒(20 分钟)
  · ATT 位  —— L1/2 有 L2 邻居时置 1(L1 LSP 里)
  · OL 位   —— Overload,过载位。置 1 表示"别拿我当转发路径"(内存不足时自动置位)
  · IS Type —— 01 = L1,11 = L2

★ LSP 刷新周期 900 秒(15 分钟),最大存活 1200 秒(20 分钟)

TLV:IS-IS 的扩展方式

LSP 的内容全是 TLV 拼起来的。TLV = Type(1 字节)+ Length(1 字节)+ Value。常见的:

TLV名称内容
1Area Addresses本路由器的区域地址
6IS Neighbors邻居的 System ID(+ 伪节点 ID)
10Authentication认证信息
22Extended IS Reachability宽度量的邻居信息(含 TE 参数)
128IP Internal Reachability区域内的 IP 前缀
130IP External Reachability引入的外部 IP 前缀
132IP Interface Address接口的 IP 地址
135Extended IP Reachability32 位度量的 IP 前缀(宽度量必用)

度量:窄度量 vs 宽度量

IS-IS 的开销有新旧两套,混用会出问题:

窄度量 Narrow宽度量 Wide
取值范围1~63(6 bit)1~16777215(24 bit)
默认接口开销10(与带宽无关)可手工指定,也可自动按带宽算
TLV128 / 13022 / 135
能否承载 TE不能能(MPLS TE 必须用宽度量)

所以跑 MPLS TE 或 SR 的网络必须配 cost-style wide。华为默认是 narrow,做实验时经常忘了改。

huawei · 全局改宽度量
isis 1
 cost-style wide
 # 或者:
 cost-style compatible    # 收发都兼容两种(过渡期用)

路由渗透:解决 L1 的次优路径

默认情况下,L1 路由器只有本区域的路由 + 一条指向 L1/2 的默认路由。这会导致一个问题:

次优路径怎么产生的
            ┌─── L1 区域 ───┐         ┌── L2 骨干 ──┐
   R1(L1) ── R2(L1/2) ════════════ R3(L1/2) ── R4(L2)
      │                                 ↑
      └──────────── 另一条链路 ──────────┘

问题:R1 要去 R4,但 R1 只有默认路由指向 R2(最近的 L1/2)
      → R1 把包丢给 R2 → R2 查 L2 路由发现要绕回 R3
      → 实际路径:R1 → R2 → R3 → R4(绕远)
      而物理上 R1 → R3 → R4 更近

原因:L1 路由器【不知道】区域外的具体路由,只能"盲猜"最近的出口

解法:路由渗透(Route Leaking)——在 L1/2 路由器上,
      把 L2 学到的部分路由【泄露】到 L1 区域里,让 L1 路由器也能看到
huawei · 路由渗透配置
# 在 L1/2 路由器(如 R2)上做
isis 1
 import-route isis level-2 into level-1 filter-policy ip-prefix LEAK

# 先定义要泄露哪些路由
ip ip-prefix LEAK index 10 permit 10.1.0.0 16 less-equal 32

★ 注意方向:level-2 into level-1(把 L2 的泄露给 L1)
  不能反过来做,否则 L1 的路由会污染骨干

★ 另一个用途:用路由渗透可以【只泄露需要的路由】,
  而不是让 L1 路由器拿到全部 L2 路由(那样 LSDB 又会变大)

IS-IS 与 OSPF 全面对比

维度IS-ISOSPF
协议出身ISO / CLNPIETF / IP
区域边界在链路上(一台路由器只属于一个区域)在路由器上(ABR 跨区域)
骨干定义L2 + L1/2 组成的拓扑Area 0
网络类型只有广播 / P2P广播 / NBMA / P2MP / P2P
代表者DIS(可抢占、无备份)DR/BDR(非抢占、有备份)
邻接关系广播网上全部 UpDROther 之间停在 2-Way
报文封装链路层直接封装IP 协议号 89
报文数4 种(IIH / LSP / CSNP / PSNP)5 种(Hello / DBD / LSR / LSU / LSAck)
扩展方式TLV(加特性不动结构)新增 LSA 类型 / 协议版本
资源占用较低(单播更新、报文少)较高
典型战场运营商骨干、大型 DC企业网、园区

配置:两台路由器跑 IS-IS

huawei · 全局 + 接口
# R1
isis 1
 is-level level-1-2
 network-entity 49.0001.0000.0000.0001.00
 cost-style wide
#
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255
 isis enable 1
#
interface GigabitEthernet0/0/1
 ip address 10.0.0.1 255.255.255.0
 isis enable 1
 isis circuit-type p2p          # 点对点(可选,广播口默认 broadcast)
 isis cost 10                   # 手工指定开销
 isis circuit-level level-2     # 该接口只跑 L2

# 认证(可选)
isis 1
 area-authentication-mode md5 cipher Huawei@123
 domain-authentication-mode md5 cipher Huawei@123

几个配置要点:

验证与排错

huawei
display isis peer                    # ★ 邻居列表:System ID、状态、层次、接口
display isis interface verbose       # 接口层次、DIS 是谁、开销
display isis lsdb                    # LSDB(L1/L2 分开看)
display isis lsdb local               # 本机产生的 LSP
display isis route                   # ★ IS-IS 算出的路由(看 ATT 默认路由)
display isis route level-1            # 只看 L1
display isis brief                   # 进程概览:NET、is-level、cost-style
display isis statistics              # 报文收发统计
display isis error                   # 报文级错误(排错用)

reset isis all                       # 重置 IS-IS(慎用)
# 重置某个邻居
reset isis peer 0000.0000.0002

四个高频问题:

一句话总结:IS-IS 是"用 TLV 拼出来的 OSPF",区域边界画在链路上、DIS 可抢占无备份、广播网上全员邻接、扩展靠加 TLV。它比 OSPF 更省资源、更好扩展,代价是地址体系(NSAP)更绕、L1 的默认路由机制容易造成次优——后者要靠路由渗透来补。

📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)

合并了原始笔记中「Is-is背景 / isis级别 / ISIS网络类型 / ISIS 报头 / ISIS开销 / ISIS工作流程 / ISIS与OSPF对比 / ISIs路由渗透及问题 / NET」九页。
原笔记里的层次对比表与 LSP 头部截图 OCR 损耗严重(IS-IS 被识别成「丐」),本文按 RFC 1195 与华为 VRP 实现重新校对,并补齐了 TLV 清单与路由渗透的推导过程。
配置命令保留华为 VRP 原样。