一、 网络拓扑认知与 IS-IS 简介
1. 两种网络拓扑认知
- IP 认知(TCP/IP): 以 Link(链路) 为中心组建网络。例如 OSPF 划分区域时,是以路由器作为分割点;IPv4 地址用于标识接口和链路。
- OSI 认知: 以 Node(节点) 为中心组建网络。划分区域时分割的是链路,依靠
Interface-ID(本地电路 ID)来标识链路,通过接口实现节点互联。
2. ES-IS 与 IS-IS 协议
- ES-IS (End System to Intermediate System): 终端到路由器的发现协议(类似于 TCP/IP 中的 ARP/ICMP 发现)。客户端(ES)与路由器(IS)相连运行 ES-IS,让客户端数据到达路由器,对应 Level-0。
- IS-IS (Intermediate System to Intermediate System): 路由器到路由器的最短路径路由协议(基于 OSI 七层模型框架)。
3. IS-IS 的分类
- Pure IS-IS(纯 ISIS): 仅支持 OSI 协议栈,只能与 ES-IS 配合。
- Integrated IS-IS(集成 ISIS): (当前主流学习方向) 既支持 OSI 协议栈,又支持 TCP/IP 协议栈。
二、 节点标识:NSAP 地址
IS-IS 使用 NSAP(Network Service Access Point) 地址来唯一标识一个节点(Node),最大长度为 20 字节(160 bit)。
1. NSAP 结构划分
- Area ID(区域 ID): 长度可变(1-13 字节)。
- System ID(系统 ID): 固定 6 字节,用于在区域内唯一标识一台路由器。
- SEL(服务选择符): 固定 1 字节。对于路由设备,SEL 必须固定为
00(此时的地址也称为 NET 地址)。
2. 逆向阅读解析法
由于 Area ID 长度可变,解析时必须由后往前读取:
示例:
49.0045.0100.0100.4004.00
-
最后 1 字节
00是 SEL。 -
倒数第 2~7 字节
0100.0100.4004是 System ID(固定 6 字节)。 -
剔除以上 7 字节后,前面的
49.0045即为 Area ID。
3. System ID 设计与配置
- 设计规划: 可使用 MAC 地址充当,或使用 Loopback 0 接口地址进行转换。
* 转换示例: 10.1.1.1补足三位 010.001.001.001 每 4 位一组 0100.0100.1001。
- 基础使能配置:
isis 1
network-entity 49.0045.0100.0100.4004.00
int g0/0
isis enable
三、 第一步:IS-IS 建立邻居
IS-IS 路由器的 Level 角色(Level-1/Level-2/Level-1-2)通过手工配置实现,默认是 Level-1-2。邻居关系的建立分为 P2P 和 MA 两种网络类型。
1. P2P(点对点)网络邻居建立
P2P 支持两种握手机制,默认向后兼容。
① 2-Way 握手(古老且不推荐)
- 状态转移:
DownUp - 流程: A 给 B 发送 Hello,B 收到后状态直接变为
Up;B 给 A 回 Hello,A 收到后也直接变为Up。 - 缺点: 存在单通链路隐患(A 能发给 B,B 发不出给 A ),会导致路由计算出错,浪费资源。
② 3-Way 握手(现代网络推荐)
- 状态转移:
DownInitUp - 流程:
1. Down 状态下 A 发送 Hello。
2. B 收到 A 的 Hello,发现其中没有包含自己的 System ID,B 状态变为 Init,并发送携带 TLV 240(点对点邻接状态) 的 Hello 报文,明文标识“我看到了 A”。
3. A 收到 B 的报文,发现里面包含了自身的 System ID,A 的状态变为 Up。B 再次收到 A 的确认后状态也变为 Up。
- 强制 3-Way 配置:
interface GigabitEthernet0/0
isis ppp-negotiation 3-way only
2. MA(广播多路访问)网络邻居建立
- 握手机制: 采用 3-Way 机制,但其建立时使用 TLV 6 包含邻居的 MAC 地址来进行双向确认。
- 选举 DIS(指定中间系统):
* 作用: 类似于 OSPF 的 DR,但 IS-IS 没有 BDR。
* 选举规则:
1. 比较接口优先级(Priority),默认 64,最大 127。
2. 若优先级相同,比较接口的 MAC 地址,大者优先。
* 特性: DIS 具有抢占性。且当接口优先级配置为 0 时,依然有资格参与并被选举为 DIS(这与 OSPF DR 优先级为 0 退出选举的特性完全不同)。
四、 第二步:同步数据库(LSDB)
IS-IS 的三张表为:邻居表(Peer) 、链路状态数据库(LSDB) 和 路由表(RIB) 。
1. 核心报文(PDU)分类
- IIH (IS-IS Hello): 用于建立和维持邻居。包含 P2P Hello 和 LAN Hello(分为 L1 LAN Hello 和 L2 LAN Hello)。
- LSP (Link State PDU): 链路状态 PDU,封装 TLV 传递真实的拓扑与路由信息(类似于 OSPF 的 LSU)。
- SNP (Sequence Number PDU): 序列号 PDU,用于数据库同步(类似于 OSPF 的 DD/LSR/LSAck 组合)。
* CSNP (Complete SNP): 完全序列号 PDU,包含 LSDB 中所有 LSP 的摘要信息。
* PSNP (Partial SNP): 部分序列号 PDU,用于请求缺失的 LSP,或者在 P2P 网络中作为确认。
2. 同步数据库流程
① P2P 网络的同步流程(稳定可靠)
- 邻居建立后,两端设备都会主动发送 CSNP 互相交换各自的数据库摘要。
- 对端比对后,若发现自己缺失了某段 LSP,则发送 PSNP(充当请求)索取该 LSP。
- 本端收到 PSNP 请求后,发送完整的 LSP 进行回应。
- 对端收到 LSP 后,必须回应一个 PSNP(充当确认)表示接收成功。
现实场景优化:一般将直连链路的接口网络类型强制改为 P2P 并启用 3-Way,这样既能保证同步过程可靠,又避免了 MA 网络中周期性发送 CSNP 的性能开销。
② MA 网络的同步流程(依赖 DIS)
- 新加入的路由器直接向多播地址发送自己的 LSP。
- MA 网络内各路由器接收并更新,但 无需回复确认。
- 由 DIS 每隔 10 秒周期性组播发送 CSNP 完整目录,全网路由器根据 DIS 的 CSNP 查漏补缺:
* 如果发现自己缺失,则发送 PSNP 请求,DIS 随后会回应具体的 LSP。
* 如果发现自己有更新的 LSP,则直接发送 LSP 更新整个 MA 网络。
为什么 MA 不需要 PSNP 确认?因为 MA 内路由器众多,若每台都回复确认会充斥大量确认报文。利用 DIS 周期性广播 CSNP 的机制实现了全网隐式同步。
3. LSDB 更新与老化机制
当收到一条 LSP 时,通过以下顺序比对判定是否更新入库:
- 比较 Sequence Number(序列号): 序列号越大越新。
- 比较 Remain Life-Time(剩余存活时间): * 倒计时从
1200s减少到0。如果变成0则代表老化该路由(类似于 OSPF Age 3600)。
* 正常情况下,ISIS 每 900s 会自动刷新一次 LSP。
- 比较 Checksum(校验和): 若序列号相同且不为 0,校验和越大越新;相同则忽略。
五、 第三、四步:SPF 算法与 RC 算法(路由计算)
- 构建拓扑: LSDB 同步完成后,各路由器获取全网的 LSP 信息。
- 运行 SPF 算法: 拓扑与路由分离。IS-IS 首先利用拓扑类 TLV 计算出一棵以自身为根、最短无环的“全网节点拓扑树”。
- 运行 RC(Routing Computation)算法: 在拓扑树的基础之上,将 IP 路由信息作为“叶子”挂载到对应的节点上,计算出具体的 IS-IS 路由,最后提交给 RIB(路由核心表) 。
六、 强大的技术基石:TLV 扩展性
IS-IS 没有像 OSPF 那样定义各种错综复杂的 LSA 类型,而是完全基于 TLV (Type-Length-Value) 结构进行功能扩展。
1. TLV 的拆解示例
若传输数据为:01 04 AA BB CC DD
- Type (1 字节):
01—— 代表区域地址。 - Length (1 字节):
04—— 限制了 Value 最大不超过 255 字节。 - Value (4 字节):
AA BB CC DD
向下兼容特性: 如果新厂商增加了
Type=236(IPv6) 的新积木,老设备虽然不识别该 Type,但通过读取Length即可知道其字节大小,从而安全跳过,老设备不会死机。
2. 核心 TLV 盘点
3. Cost 宽度与窄带限制
- 窄带(Narrow): 使用 TLV 2 和 TLV 128。接口开销仅分配了 6 个 bit(最大值 64),路径总开销最大 1023。
- 宽带(Wide): 使用 TLV 22 和 TLV 135。接口开销扩大到了 24 bit,路径总开销扩大到 32 bit。
- 注意:不同 Cost 类型(宽带/窄带)对接时,由于 TLV 无法互相识别,将无法正常计算出路由。
七、 实验 LSDB 信息结构拆解说明
在查看 display isis lsdb verbose 时,LSPID 的命名格式为:System-ID.PN-id(伪节点 ID)-fragment-id(分片 ID)。
- 伪节点 ID (PN-ID): * 若为
00(如0100.0100.4004.00-00),代表该 LSP 是由真实路由器产生的。
* 若不为 00(如 0100.0010.3003.01-00),代表该 LSP 是由 DIS 产生的伪节点 LSP,用以通告广播网拓扑。
- 分片 ID (Fragment-ID): 当路由信息过多(例如大量
import-route引入外部路由导致单条 LSP 超过 255 字节限制)时,LSP 会产生分片,分片 ID 会递增(如-01,-02)。
ISIS 域间防环依靠什么?是否与 OSPF 一致?
不一致。OSPF 域间防环强制依靠 骨干区域(Area 0)星型拓扑 架构,非骨干必须连着骨干。而 IS-IS 的骨干区域非常抽象,它不是一个具体的 Area ID,而是 由所有 Level-2 路由器(包括 L1-2)连续互联构成的逻辑骨干连续体。IS-IS 域间防环依靠 Level 级别的一级向下渗透规则:路由默认只能从小往大传(L1 L2),L2 的路由默认不会传回 L1(除非配置了路由渗透 Route-Leaking),且 L1-2 路由器在发往 L1 区域的 LSP 中会将 ATT 挂载位置 1,指引 L1 产生指向自己的默认路由。这种严密的级别层级和单向控制链确保了域间绝无环路。