0. 课件来源
IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是与 OSPF 齐名的链路状态 IGP。它最初服务于 OSI 协议栈(CLNP),后来被扩展以同时承载 IP(集成 IS-IS)。本节讲解 IS-IS 的地址结构、路由器分类、报文类型、邻居建立与 LSDB 同步,并与 OSPF 进行横向对比。
1. IS-IS 的由来与定位
| 协议栈 | 终端↔网关 | 网关↔网关(IGP) | 说明 |
|---|---|---|---|
| OSI | ES-IS | IS-IS | ISO 为民用网络设计的协议栈 |
| TCP/IP | ARP / DHCP | OSPFv2 | 互联网事实标准 |
OSI 协议栈
┌─────────────────────────────────────────────┐
│ ES-IS (终端系统↔中间系统,类似 ARP/网关) │
│ IS-IS (中间系统↔中间系统,类似 OSPF) │ ← 本节主角
└─────────────────────────────────────────────┘💡 一句话记忆
IS-IS 是"OSI 协议栈的 OSPF",集成 IS-IS(Integrated IS-IS)让它也能通告 IP 路由,于是与 OSPF 并列为两大链路状态 IGP。
2. IS-IS 的层级与路由器分类
2.1 两级分层
IS-IS 只有两级层次,比 OSPF 的区域设计更简洁:
| 层级 | 角色 | 说明 |
|---|---|---|
| Level-1 | 区域内(本地区) | 同一区域内路由,维护 Level-1 LSDB |
| Level-2 | 骨干(区域间) | 连接不同区域,维护 Level-2 LSDB(骨干) |
⚠️ Level-1 优先级高于 Level-2
去往同一目标,如果 Level-1(区域内)能学到,一定优先于 Level-2(区域间)。这是 IS-IS 选路的硬规则。
2.2 三种路由器角色
| 路由器类型 | Level-1 邻居 | Level-2 邻居 | LSDB | 对应 OSPF |
|---|---|---|---|---|
| Level-1 IS | ✅ | ❌ | 仅 Level-1 LSDB | 域内路由器 |
| Level-2 IS | ❌ | ✅ | 仅 Level-2 LSDB | 骨干路由器 |
| Level-1-2 IS | ✅ | ✅ | Level-1 + Level-2 两套 | ABR |
区域 49.0001 骨干(Level-2) 区域 49.0003
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
│ AR1(L1)──AR2(L1-2)═══════AR4(L1-2)═══════AR5(L1-2)──AR6(L1)│
│ L1 邻居 │ L2邻居 │ L2 邻居 │ L2邻居 │ L1 邻居 │
└───────────────────┘ └───────────────────┘ └───────────────────┘
═══ = Level-2 骨干链路 └── Level-1-2 路由器承担 ABR 角色 ──┘3. NSAP / NET 地址
OSI 没有 IP 地址,它用 NSAP(Network Service Access Point) 标识节点。NSAP 最小 8 字节、最大 20 字节,结构如下:
`49`=私有
3.1 地址各部分
| 字段 | 长度 | 说明 |
|---|---|---|
| AFI | 1 字节 | 49 代表私有地址(类似 IP 的 192.168) |
| 区域 ID | 1~13 字节 | 标识区域,同一区域设备区域 ID 必须相同 |
| System ID | 6 字节 | 标识设备(类似 OSPF 的 Router-ID),区域内唯一 |
| NSEL | 1 字节 | 类似端口号;当 NSEL=00 时,NSAP 即为 NET |
3.2 System ID 的三种生成方式
为保证直连设备 System ID 不冲突,常用以下三种方式生成 6 字节 System ID:
| 方式 | 示例 | 说明 |
|---|---|---|
| 数字直接编号 | 0000.0000.0001 | 简单,适合实验环境 |
| MAC 地址 | 0100.5e00.0000 | 直接用接口 MAC |
| IP 转换 | 1921.6800.0001 | 现网最常用,由 Loopback IP 转换 |
💡 IP → System ID 转换示例
将 192.168.0.1 每 4 位一组转为 System ID:
192.168.0.1 → 192.168.000.001 → 1921.6800.0001
每段补足 3 位 每 4 位拼成一段所以 192.168.0.1 对应 NET 地址可写为 49.0001.1921.6800.0001.00。
3.3 基础配置
isis 1 # 进程号,默认 1
network-entity 49.0001.0000.0000.0001.00 # 配置 NET 地址
is-name AR1 # 可选:动态主机名(TLV 137,便于显示)
#
interface loopback 0
isis enable 1 # 接口使能 IS-IS
#
interface GigabitEthernet0/0/0
isis enable 14. IS-IS 的三张表
IS-IS 与 OSPF 一样维护三张核心表:
| 表 | 内容 |
|---|---|
| Peer 表 | 邻居表(邻居 System ID、状态、类型) |
| LSDB | Level-1 LSDB + Level-2 LSDB(两套链路库) |
| RIB | IS-IS 路由表(计算出的最优路由) |
<AR1> dis isis peer
Peer information for ISIS(1)
System Id Interface Circuit Id State HoldTime Type PRI
-------------------------------------------------------------------------------
0000.0000.0002 GE0/0/0 0000.0000.0001.01 Up 27s L1-2 645. 报文类型(PDU)
IS-IS 的协议报文统称 PDU(Protocol Data Unit),直接封装在二层帧头后面(不依赖 IP)。共有三大类:
5.1 Hello 包(IIH)
还有 ES-ISH(终端↔路由器),用于 ES-IS,本文不展开。
5.2 LSP 与 TLV
LSP 是 IS-IS 的"链路状态通告",其核心内容用 TLV(Type-Length-Value) 结构承载:
类型标识
长度标识
实际数据内容
5.3 SNP(序列号 PDU)
6. 邻居建立与 LSDB 同步
6.1 Hello 包携带的关键参数
电路类型(L1 / L2 / L1-2,默认 L1-2)
本端 6 字节 System ID
收不到 Hello 的最大等待时间(默认 hello×3)
接口 ID
以及一组 TLV:
区域地址(Area Address)
接口 IP 地址
协议支持(IPv4 =
0xCC)P2P 邻居状态(3-way)
6.2 邻居建立的必要条件
⚠️ IS-IS 建邻核心条件
- 同一层级:双方 circuit-type 必须有交集(如都含 L1 才能建 L1 邻居)
- 同一区域(仅 Level-1):L1 邻居要求区域 ID 相同;L2 邻居不要求同区域
- System ID 唯一:本区域内 System ID 不能冲突
- 网络类型一致:P2P 与 MA 不能混接
- cost-style 兼容:一端 wide 一端 narrow 会"有邻居无路由"
注意:IS-IS 邻居建立不检查 Hello 间隔(与 OSPF 不同),只要 hold 时间未超时即可。
6.3 LSDB 同步流程
P2P 网络同步(两次握手 / 三次握手):
<div></div><div style="background: #e3f2fd; border: 1px solid #2196f3; border-radius: 4px; padding: 6px 10px; text-align: center;">Hello(Down) →</div><div></div>
<div></div><div style="background: #f3e5f5; border: 1px solid #6f42c1; border-radius: 4px; padding: 6px 10px; text-align: center;">← Hello(Init)</div><div></div>
<div></div><div style="background: #d4edda; border: 1px solid #28a745; border-radius: 4px; padding: 6px 10px; text-align: center;">Hello(Up) → <strong>邻居 Up</strong></div><div></div>
<div></div><div style="height: 1px; background: #ddd; margin: 4px 0;"></div><div></div>
<div></div><div style="background: #fff8e1; border: 1px solid #ffc107; border-radius: 4px; padding: 6px 10px; text-align: center;">CSNP(我有的 LSP 列表)→</div><div></div>
<div></div><div style="background: #fff3e0; border: 1px solid #fd7e14; border-radius: 4px; padding: 6px 10px; text-align: center;">← PSNP(请求缺失的 LSP)</div><div></div>
<div></div><div style="background: #d4edda; border: 1px solid #28a745; border-radius: 4px; padding: 6px 10px; text-align: center;">LSP(发送对方缺的 LSP)→</div><div></div>
<div></div><div style="background: #d1ecf1; border: 1px solid #17a2b8; border-radius: 4px; padding: 6px 10px; text-align: center;">← PSNP(确认收到) <strong>同步完成</strong></div><div></div>
MA(广播)网络同步: 由 DIS(类似 OSPF 的 DR)周期性发送 CSNP,其余设备用 PSNP 请求/确认。
7. DIS 选举(广播网)
广播网中 IS-IS 选举 DIS(Designated Intermediate System),作用类似 OSPF 的 DR:
| 对比项 | IS-IS DIS | OSPF DR |
|---|---|---|
| 选举依据 | 接口优先级 → MAC/System ID(值大优先) | 优先级 → Router-ID(值大优先) |
| 备份 | 无 BDIS | 有 BDR |
| 抢占 | 支持抢占(优先级变化立即重选) | 不支持抢占 |
| 选举范围 | L1、L2 各自独立选举 DIS | 一个网段一个 DR/BDR |
⚠️ DIS 与 DR 的关键差异
- DIS 没有备份(无 BDIS),DIS 故障需重新选举
- DIS 支持抢占,与 OSPF DR 恰好相反
- L1 和 L2 各自选举自己的 DIS(一个广播网可能有 2 个 DIS)
8. cost-style(窄带 vs 宽带)
IS-IS 有两种开销计算方式,决定了它使用哪一套 TLV:
| cost-style | 接口 cost 空间 | 路径 cost 空间 | 拓扑 TLV | 叶子 TLV | 默认 |
|---|---|---|---|---|---|
| narrow(窄带) | 6 bit(1-63) | 10 bit(1-1023) | TLV 2 | TLV 128/130 | ✅ |
| wide(宽带) | 24 bit | 32 bit | TLV 22 | TLV 135 |
8.1 窄带 TLV 结构
8.3 ⚠️ 窄带/宽带不一致的故障
🚨 经典故障:有邻居无路由
若一端 narrow、一端 wide,双方邻居能建立,但:
- 窄带用 TLV 2 / 128-130 描述拓扑
- 宽带用 TLV 22 / 135 描述拓扑
- 互相无法识别对方的 TLV → 拓扑画不出来 → 路由无法计算
排查口诀:IS-IS 有邻居无路由,第一时间怀疑 cost-style 不一致。
配置建议(现网统一宽带):
isis 1
network-entity 49.0001.1921.6800.0001.00
cost-style wide # 统一使用宽带
is-name AR1 # TLV 137 动态主机名9. 路由计算对比(P2P vs 广播)
| 网络类型 | 非伪节点 LSP(每台设备) | 伪节点 LSP(DIS 产生) |
|---|---|---|
| P2P | TLV 2/22:我连你 + 你连我(拓扑完整) | 无伪节点 |
| 广播 | TLV 2/22:我连 DIS | TLV 2/22:DIS 连所有设备 |
我连DIS,你连DIS,他连DIS
⚠️ 广播网必须是全互联
IS-IS 广播网(MA)默认只支持全互联 MA 网络。若物理是 Hub-Spoke 部分互联(如 Frame-Relay),会导致部分分支学不到彼此路由。 解决方案:将接口改为 P2P 网络类型 isis circuit-type p2p(IS-IS 不支持 P2MP)。
10. IS-IS 与 OSPF 对照表
| 对比项 | IS-IS | OSPF |
|---|---|---|
| 协议栈 | OSI(扩展支持 IP) | TCP/IP |
| 层级 | Level-1 / Level-2 两级 | 多区域(Area 0 骨干) |
| 区域归属 | **按节点(路由器)**划分区域 | **按链路(接口)**划分区域 |
| 地址 | NSAP / NET | IP + Router-ID |
| 报文 | Hello / LSP / CSNP / PSNP | Hello / DD / LSR / LSU / LSACK |
| 链路状态载体 | TLV(可扩展) | LSA(类型固定) |
| DR/DIS | DIS(无备份、可抢占、L1/L2各选) | DR + BDR(有备份、不抢占) |
| 网络类型 | P2P / 广播(不支持 NBMA/P2MP) | P2P / 广播 / NBMA / P2MP |
| 区域间选路 | L1 默认通过 L1-2 出区域( ATT 位) | 非骨干必须经过 Area 0 |
| 封装 | 直接封装于二层 | 封装于 IP(协议号 89) |
💡 区域归属的本质差异
- OSPF:IP 把网络看成"路"(link),区域划分落在链路上 → 一条链路两端必须同区域
- IS-IS:OSI 把网络看成"节点",区域划分落在路由器上 → 整台路由器属于某区域(一台设备可配多个区域 ID)
11. 易混淆点与考前速记
| 对比项 | 结论 |
|---|---|
| IS-IS 协议栈 | 源自 OSI,集成 IS-IS 可同时通告 IP |
| 两级层次 | Level-1(区域)/ Level-2(骨干),L1 优先于 L2 |
| 三种路由器 | L1 IS / L2 IS / L1-2 IS(= ABR) |
| NET 地址 | NSAP 当 NSEL=00 时即为 NET,最小 8 字节 |
| System ID 长度 | 6 字节(华为/思科) |
| 报文三类 | Hello(IIH) / LSP / SNP(CSNP+PSNP) |
| CSNP / PSNP 对应 | CSNP≈DD;PSNP≈LSR+LSACK |
| DIS vs DR | DIS 无备份、可抢占、L1/L2 各选 |
| 窄带/宽带默认 | narrow 为默认,现网建议 wide |
| 窄带 TLV | 拓扑 TLV 2,叶子 TLV 128/130 |
| 宽带 TLV | 拓扑 TLV 22,叶子 TLV 135 |
| L1 邻居要求 | 必须同区域;L2 邻居不要求同区域 |
| 建邻不检查 | Hello 间隔(与 OSPF 不同) |
| 经典故障 | 一端 wide 一端 narrow → 有邻居无路由 |
考前速记 10 条:
IS-IS 源自 OSI 协议栈,集成 IS-IS 可通告 IP两级:Level-1 区域内、Level-2 骨干,L1 优先于 L2三种角色:L1 IS / L2 IS / L1-2 IS(=ABR)NET = NSAP(NSEL=00),最小 8 字节;System ID 6 字节IP 转 System ID:192.168.0.1 → 1921.6800.0001报文:Hello / LSP / CSNP+PSNP;CSNP≈DD,PSNP≈LSR+LSACKDIS 无备份、可抢占,L1/L2 各自独立选举区域归属按节点(路由器),不是按链路窄带默认,TLV 2/128/130;宽带 TLV 22/135,现网建议 wide有邻居无路由 → 第一时间怀疑 cost-style 不一致
🤖 AI 伴学
想把 IS-IS 与 OSPF 的区别记得更牢?可以让 AI 用类比帮你强化:
"请把 IS-IS 和 OSPF 想象成两家快递公司:OSPF 是'按路段划分片区'(区域落在链路上,一条路两端必须同片区),而 IS-IS 是'按站点划分片区'(区域落在路由器节点上,整站属于某片区)。再对比它们的'值班经理':OSPF 的 DR 像正式任命的经理,有副手 BDR 扛着、一旦上任不轻易换(不抢占);IS-IS 的 DIS 像临时值班的组长,没有副手、谁能力强(优先级/MAC 大)谁就上(可抢占)。最后说明为什么 IS-IS 用 TLV 而不是 LSA:TLV 像'乐高积木'可以无限拼装扩展(支持 IPv6、流量工程),LSA 像'固定模具'类型是写死的。"
