注:IS-IS 主题前面已经梳理过一些,但不同的博主有不同的知识点构建逻辑。本文为 51CTO xuanbo 博主 2009 年撰写的关于 IS-IS 路由协议的系列详细解读,和多个博主的相关文章的重排合辑。
IS-IS 路由协议(一)
xuanbo 2009-09-13 21:20:27
1. 前言
IS-IS (Intermediate System to Intermediate System,中间系统到中间系统 )路由协议与 OSPF 路由协议都是链路状态路由协议,它们不但适合应用于 LAN 的环境,而且更多使用在城域网的环境中,目前城域网技术的发展有三个主流方向,即 IP 城域网技术、城域以太网技术、光城域网技术。在 IP 城域网中关键技术包括路由技术、端到端的 QoS 管理、接入网技术和用户 / 业务管理。在路由技术中最常用的就是 BGP、OSPF 和 IS-IS 三种路由协议。如果想了解城域网的知识,所以需要先学习 IS-IS 路由协议。
2. OSI 与 CLNS 概述
OSI(Open System Interconnect)参考模型是一个国际化标准,用于增强不同厂商设备之间的互操作性。它定义了一个 7 层的模型,并且详细规定了各层的功能,同时也确定了计算机网络的标准。
制定 OSI 七层参考模型的是 ISO(International Organization for Standardization,国际标准化组织)。对于数据通信和信息技术的发展来说,OSI 参考模型起到了重要的作用。它提供了开放式的标准架构,使不同厂商生产的通信设备之间可以进行互联和互操作。ISO 七层模型的每一层都定义了单一的功能,可以将相关功能组合成功能层,从而简化和方便了协议的设计。
OSI 参考模型中的网络服务规范定义了网络设备之间使用无连接通信的功能,也就是 CLNS(Connectionless Network Service,无连接网络服务)。顾名思义,使用 CLNS,无需在发送数据之间建立端到端的路径。下图中展示的是 CLNS 中所包括的协议组件,这些协议组件都由 ISO 所定义。
正如上图所示,CLNP(Connectionless Network Protocol,无连接网络协议)、IS-IS、**ES-IS(End System—Intermediate System,终端系统 — 中间系统)**都是 ISO 定义的独立的 OSI 第三层(网络层)的协议,这些协议分别在不同的 ISO 标准中定义:
-
CLNP:在 ISO 8473 中定义,定义了 CLNS 所使用的协议。
-
IS-IS:在 ISO 10589 中定义,定义了在使用 CLNP 的网络中,中间系统与中间系统间进行路由信息的交换方式。
-
ES-IS:在 ISO 9542 中定义,定义在使用 CLNP 的网络中,终端系统与中间系统间进行路由信息交换的方式。
CLNP 这个名词可能很多人都比较陌生,它是一个 OSI 网络层协议。打个比方来说,它就相当于我们所熟悉的 IP 协议,而 IP 定义为用来为 TCP/IP 协议栈提供网络层服务。与 IP 一样,CLNP 也是一个无连接的协议,不提供可靠的数据连接,而且也独立于下层(数据链路层)协议。我们都知道,IP 是 TCP/IP 协议栈中唯一的网络层协议,高层的协议和数据全都封装在 IP 数据包中进行传输。这不同于 CLNS 网络环境,在 CLNS 中,CLNP、IS-IS、ES-IS 都是独立的网络层协议,它们都直接被封装到数据链路层的帧中进行传输。
如同 IP 一样,CLNP 也有一套自己的寻址体系,我们称之为 CLNP 地址。CLNP 地址的结构和寻址方式与我们熟悉的 IP 地址有着很大的差别。
在 OSI 术语中,主机(例如 PC)被称为 ES(终端系统),路由器被称为 IS(中间系统)。ES-IS 可以说是一种终端系统和路由器之间的 “语言” 或路由协议。它用来使同一网段或链路的终端系统和路由器之间可以彼此发现对方,并可以让 ES 能够获悉其网络层地址。总结来说,ES-IS 主要有以下几种功能:
-
使 ES 获悉其所在的区域,即区域前缀
-
在 ES 与 IS 之间建立邻接关系
-
建立数据链路层地址到网络层地址(CLNP 地址)的映射
可以看出,ES-IS 在 CLNS 网络环境中的作用就好像 IP 网络中的 ICMP、ARP 与 DHCP 协议的协同工作。
在 ES-IS 工作过程中,终端系统通过发送 ESH(ES Hello)报文到特定的地址,目的是向路由器通告自己的存在。路由器通过监听 ESH 报文,以发现网络中存在的 ES,以便后续将到达特定 ES 地址的数据包转发给 ES。
在 ES-IS 中,路由器通过发送 ISH(IS Hello)报文到特定地址,也向 ES 通告其自身的存在。ES 也监听 ISH,如果收到多个 IS 发送的 ISH,ES 将随即进行选择,并将所有数据都发送给这个 IS。
需要注意的是,通常我们的终端系统,例如 PC,都不使用 ES-IS,因为这些 PC 都运行的是 TCP/IP 协议栈,类似 ES-IS 的工作都由 TCP/IP 协议栈中的 ARP、ICMP、DHCP 协议来完成。
下图所示为 CLNS 中 ES-IS 的工作机制:
IS-IS 是 CLNS 中一个重要的组成部分,它是一个用来在 CLNS 网络环境中使路由器与路由器(IS 与 IS)之间动态的交换路由信息的协议,IS-IS 在 ISO 10589 中进行了定义。IS 与 IS,即路由器与路由器之间的通信使用 IIH(IS-IS Hello)报文。IS-IS 的设计主要是为了满足 CLNS 网络中的如下需求:
-
在路由域内执行路由选择协议功能
-
为网络提供最佳路由
-
当网络出现故障后,能够快速的收敛
-
提供无环路的网络
-
提供网络的稳定性
-
提供网络的可扩展性
-
合理利用网络资源
为了满足如上需求,IS-IS 被设计成一种链路状态路由协议,并且使用 SPF 最短路径优先算法以实现快速的收敛和无环路网络。
之前所提到的 IS-IS,它仅支持 CLNS 网络环境,而不支持 IP 网络环境中的路由信息交换。后来,IETF 在 RFC 1195 中对 IS-IS 进行了修改和扩展,称之为集成 IS-IS(Integrated IS-IS)或双重 IS-IS(Dual IS-IS)。集成 IS-IS 的制定是为了使其能够同时应用在 TCP/IP 网络和 OSI 网络中,使其能够为 IP 网络提供动态的路由信息交换。
集成 IS-IS 是一个能够同时处理多个网络层协议(例如 IP 和 CLNP)的路由选择协议。相反,OSPF 只支持 IP 一种网络层协议,即 OSPF 仅支持 IP 路由。而集成 IS-IS 可以支持纯 CLNP 网络或纯 IP 网络,或者同时支持 CLNP 和 IP 两种网络环境,并为其提供路由功能。集成 IS-IS 协议经过多年的发展,已经成为一个可扩展的、功能强大的、易用的 IGP 路由选择协议,并且在运营商网络中得到了更多的应用和部署,主要用来实现域内的 IP 路由选择。
3. OSI 路由选择
OSI 规范中定义了四种路由选择级别,分别为 L0、L1、L2 和 L3。
L0 路由选择
L0 路由选择是发生在 ES 与 IS 之间的,它通过使用 ES-IS 进行路由信息的交换。正如之前介绍 ES-IS 那样,ES 通过侦听 IS 发送的 ISH 报文来获知 IS 的存在。当 ES 要向其他 ES 发送信息是,它将把数据包发送到 IS。同样,IS 也侦听 ES 发送的 ESH 报文以获知 ES 的存在,当有数据包要发送个某个 ES 时,它便根据通过 ESH 获取到的信息发送个特定的 ES。这个过程就称为 L0 路由选择。
L1 路由选择
从图中可以看出,L1 路由选择发生在同一区域内的 IS 之间。所谓区域是指在 CLNP 地址中拥有相同区域前缀的一组 ES 和 IS。这里的区域概念与 OSPF 中的区域非常相似。同一个区域中的 IS 之间通过交换路由信息后,便得知了本区域内的所有路径。当 IS 收到一个到目标地址是本区域内地址的数据包后,通过查看数据包的目的地址以将数据包发往正确的链路或目的地。可以看到,L1 路由也就是区域内的路由选择。
L2 路由选择
当 IS 收到一个目的地址不是本区域的数据包时,数据包将被转发到其他区域的 IS,其他区域的 IS 再将其转发到正确的目的地或者将数据包中继到其他区域,以便由其他区域的 IS 转发到正确的目的地。这样的路由被称作 L2 路由选择,可以看到,L2 路由选择是发生在区域之间的,所以也称作区域间路由。
L3 路由选择
了解了 L0、L1、L2 路由选择后,我们已经可以猜测出 L3 路由选择的作用了,L3 路由选择就是域间的路由。L3 路由选择类似与 IP 路由中的 BGP(Border Gateway Protocol,边界网关协议),它的目的是在不同的路由域或自治系统(AS,Autonomous System)间交换路由信息,并将去往其他自治系统的数据包转发到正确的自治系统以便到达最终目的地。这些自治系统之间可能拥有不同的路由拓扑,所以不能直接进行路由信息的交换。通常 L3 路由选择都是由 IRDP(Inter-Domain Routing Protocol,域间路由选择协议)来完成的,IRDP 的功能类似于 IP 路由中的 BGP 路由协议。
4. IS-IS 路由选择
IS-IS 所完成的路由功能就是 L1 和 L2 路由选择,也就是说 IS-IS 用来在同一个路由域内进行区域内和区域间的路由选择。
IS-IS 路由选择分为两个等级,即 L1 和 L2。IS-IS 区域中的 L1 路由选择负责路由到区域内的终端系统(ES)和 IS。在同一个路由选择区域中,所有设备的区域地址都相同。区域内的路由选择是通过查看地址中的系统 ID 后,然后选择最短的路径来完成的。
L2 路由选择是在 IS-IS 区域之间进行的。路由器通过 L2 路由选择获悉 L1 路由选择区域的位置信息,并建立一个到达其他区域的路由表。当路由器收到数据包后,通过查看数据包的目标区域地址(非本区域的区域地址),选择一条最短的路径来路由数据包。
由于 IS-IS 负责 L1 和 L2 等级的路由,IS-IS 路由器等级(或称 IS-IS 路由器类型)可以分为三种:L1 路由器(Level 1)、L2 路由器(Level 2)和 L1/2(Level 1/2)路由器。
L1 路由器
属于同一个区域并参与 Level 1 路由选择的路由器称为 L1 路由器。L1 路由器类似于 OSPF 中的非骨干内部路由器。在 CLNP 网络环境中,L1 路由选择负责收集本区域内所有主机和路由器的信息,可以说 L1 路由器只关心本区域的拓扑结构。L1 路由器将去往其他区域的数据包发送到最近的 L1/2 路由器上。
L2 路由器
属于不同区域的路由器通过实现 Level 2 路由选择来交换路由信息,这些路由器成为 L2 路由器或骨干路由器。L2 路由器类似于 OSPF 中的骨干路由器。在 CLNP 网络环境中,L2 路由器与其他 L2 或 L1/2 路由器交换区域前缀信息。对于 IP 网络环境,在 L1 路由选择中,仅在区域内交换 IP 前缀信息,而不同区域的 IP 前缀信息由连接到骨干区域的执行 L2 路由选择的路由器交换。
L1/2 路由器
同时执行 L1 和 L2 路由选择功能的路由器为 L1/2 路由器,L1/2 路由器类似于 OSPF 中的 ABR(区域边界路由器),它的主要职责是搜集本区域内的路由信息,然后将其发送给其他区域的 L1/2 路由器或 L2 路由器;同样,它也负责接收从其他区域的 L2 路由器或 L1/2 路由器发来的区域外信息。可以说所有 L1/2 路由器与 L2 路由器组成了整个网络的骨干(Backbone)。
此外,需要注意的是,对于 IS-IS 来说,骨干必须是连续的,也就是说具有 L2 路由选择功能的路由器(L1 路由器或 L1/2 路由器)必须是物理上相连的。
总结这三种类型的路由器的作用,可以归纳为:
-
L1 路由器负责收集区域内的路径信息
-
L2 路由器负责收集区域间的路径信息
-
L1/2 路由器负责收集区域内和区域间的路径信息,这类似与 OSPF 中的 ABR
5. IS-IS 与 OSPF 对比
1、IS-IS 与 OSPF 的相同点
从 IS-IS 与 OSPF 的功能上讲,它们之间存在着这么大的相似之处,虽然它们在结构上有着差异:
-
IS-IS 与 OSPF 同属于链路状态路由协议。作为链路状态路由协议,IS-IS 与 OSPF 都是为了满足加快网络的收敛速度、提高网络的稳定性、灵活性、扩展性等这些需求而开发出来的高性能的路由选择协议。
-
IS-IS 与 OSPF 都使用链路状态数据库收集网络中的链路状态信息,链路状态数据库存放的是网络的拓扑结构图,而且区域中的所有路由器都共享一个完全一致的链路状态数据库。
-
IS-IS 与 OSPF 都使用泛洪(flooding)的机制来扩散路由器的链路状态信息。
-
IS-IS 与 OSPF 都使用相同的报文(OSPF 中的 LSA 与 IS-IS 中的 LSP)来承载链路状态信息。
-
IS-IS 与 OSPF 都分别定义了不同的网络类型,而且在广播网络中都使用指定路由器(OSPF 中的 DR,IS-IS 中的 DIS)来控制和管理广播介质中的链路状态信息的泛洪。
-
IS-IS 与 OSPF 同样都是采用 SPF 算法(Dijkstra 算法)来根据链路状态数据库计算最佳路径。
-
IS-IS 与 OSPF 同样都采用了分层了区域结构来描述整个路由域,即骨干区域和非骨干区域。
-
基于两层的分级区域结构,所有非骨干区域见的数据流都要通过骨干区域进行传输。
-
IS-IS 与 OSPF 都是支持 VLSM(Variable Length Subnet Mask,可变长子网掩码)和 CIDR(Classless Inter-Domain Routing,无类域间路由)的 IP 无类别路由选择协议。
-
IS-IS 与 OSPF 都是标准协议。
2、IS-IS 与 OSPF 的不同点
区域设计
OSPF 的骨干区域就是区域 0(Area 0),是一个实际的区域。IS-IS 与 OSPF 最大的区别就是 IS-IS 的区域边界位于链路上,OSPF 的区域边界位于路由器上,也就是 ABR 上。ABR 负责维护与其相连的每一个区域各自的数据库,也就是 Area 0 骨干区域数据库和 Area 1 非骨干区域数据库。如下图所示
IS-IS 的骨干区域是由所有的具有 L2 路由选择功能的路由器(L2 路由器或 L1/2 路由器)组成的,而且必须是物理上连续的,可以说 IS-IS 的骨干区域是一个虚拟的区域。这点与 OSPF 不同,虽然 IS-IS 中的 L1/2 路由器的功能相似于 OSPF 中的 ABR,但是对于 L1/2 路由器来说,它只属于某一个区域中,并且同时维护一个 L1 的链路状态数据库和一个 L2 链路状态数据库,而且 L1/2 路由器不像 OSPF 中的的 ABR,可以同时属于多个区域中。与 OSPF 相同的是,IS-IS 区域间的通信都必须经过 L2 区域(或者骨干区域),以便防止区域间路由选择的环路,这与 OSPF 非骨干区域间的流量都要经过骨干区域(Area 0)的操作是一样的。
通过上图所示的 IS-IS 区域可以看出,由于 IS-IS 的骨干区域是虚拟的,所以更加利于扩展,灵活性更强。当需要扩展骨干时,只需添加 L1/2 路由器或 L2 路由器即可,这比 OSPF 要灵活的多。
我们在设计 IS-IS 区域和路由器类型时,可以遵循以下原则:
-
不与骨干相连的路由器可以配置为 L1 路由器
-
与骨干相连的路由器必须配置为 L2 路由器或 L1/2 路由器
-
不与 L1 路由器相连的骨干路由器可以配置为 L2 路由器
纵观 IS-IS 与 OSPF 大体的功能,包括邻接关系、路由结构、链路状态操作、使用的算法等都存在着许多相似之处。但在这些相似点之中,或者说在这些基础上,IS-IS 与 OSPF 也是存在着很多的不同点。下表中从各个方面列出了 IS-IS 与 OSPF 之间的区别。
IS-IS | OSPF |
---|---|
IS-IS 可以支持 CLNP 和 IP 两种网络环境 | OSPF 仅支持 IP 网络环境 |
IS-IS 所使用的数据包被直接封装到数据链路层帧中 | OSPF 数据包被封装在 IP 报文中 |
IS-IS 是 ISO CLNS 中的一个网络层协议 | OSPF 不是网络层协议,它运行在 IP 之上 |
IS-IS 使用 LSP 承载所有的路由选择信息 | OSPF 使用不同类型的 LSA 承载路由选择信息 |
IS-IS 利用 TLV 可以灵活的对协议进行扩展 | OSPF 很难进行扩展 |
IS-IS 可以忽略不支持的 TLV | 网络中所有路由器都必须能够识别所有 LSA |
IS-IS PDU 可以承载多个 TLV 字段,只有一个报头,节省带宽 | 1 类、2 类 LSA 可以承载多个 IP 前缀;3 类、4 类、5 类 LSA 只能承载单个 IP 前缀,如果需要发送多个 IP 前缀信息,需要多个 LSA |
IS-IS 仅支持广播类型链路与点到点类型链路 | OSPF 可以支持多种网络类型:广播、点到点、NBMA、点到多点和按需电路(Demand Circuit) |
IS-IS 邻接关系建立过程简单,仅 3 步 | OSPF 需要通过多种状态建立邻接关系 |
数据库同步在建立邻接关系之后 | 数据库同步在邻接关系建立之前 |
IS-IS 路由器只属于一个区域,基于节点分配区域 | OSPF 路由器可以属于多个区域,典型的是 ABR,OSPF 基于接口分配区域 |
IS-IS 的区域边界在链路上 | OSPF 的区域边界在路由器上 |
IS-IS 的 L1 区域(非骨干区域)为末节(stub)区域,除非使用路由泄漏(Route Leaking)机制 | 默认情况下,OSPF 非骨干区域不是 stub 区域,但可以配置为 stub 区域 |
IS-IS 仅在点到点链路上的扩散是可靠的,在广播链路中通过 DIS 周期性的发送 CSNP 来实现可靠性 | OSPF 在所有链路上的扩散都是可靠的 |
IS-IS 中没有备份 DIS | OSPF 中要选举 BDR,以接替 DR 的角色 |
IS-IS 中的 DIS 可以被抢占 | OSPF 中的 DR 不能被抢占 |
DIS 以 3 倍的频率发送 Hello PDU | DR 以正常的频率发送 Hello 报文 |
默认情况下,IS-IS 的 LSP 最大生存时间为 1200s,刷新间隔为 900s,而且定时器的值可调 | OSPF 的 LSA 的老化时间为 3600s,刷新间隔为 1800s,而且是固定值 |
默认情况下,IS-IS 的接口 cost 值为 10 | 默认情况下,OSPF 的接口 cost 值根据带宽进行计算 |
默认情况下,IS-IS 保持时间(holding-time)为 30s,而且在建立邻接关系时不需要双方的保持时间匹配 | 默认情况下,OSPF 的保持时间(dead-interval)为 40s,而且为了建立邻接关系,必须使双方的保持时间一致 |
IS-IS 通过将 Hello PDU 的大小填充至接口 MTU 大小来检查双方的 MTU 是否匹配 | OSPF 通过在 DBD 报文中嵌入接口 MTU 字段来检查双方的 MTU 是否匹配 |
6. IS-IS 寻址
虽然 IS-IS(集成 IS-IS)可以用来交换 IP 路由选择信息,但是对于一个运行 IS-IS 协议的路由器来说,它必须拥有一个 CLNP 地址,就算只使用 IS-IS 进行 IP 路由选择信息的交换也需要这样做。因为 IS-IS 在交换 IP 路由信息时,使用的还是 ISO 数据包,IP 路由选择信息承载在 ISO 数据包中,并且使用 CLNP 地址来标识路由器并建立拓扑表和链路状态数据库。
CLNP 地址与我们熟悉的 IP 地址有着很大的区别。首先,CLNP 地址是一种基于节点的编址方案,也就是说一个节点(路由器)只需要一个 CLNP 地址,而 IP 地址是一种基于链路或者说是基于接口的编址方案,路由器中每一个接口都需要一个 IP 地址以进行不同子网间的数据包路由。其次,在地址结构上,CLNP 地址与 IP 地址也有着很大的差别。
NSAP 地址
IS-IS 将 CLNP 地址称作网络服务访问点(NSAP,Network Service Access Point),也就是常用的 CLNP 地址。在 OSI 参考模型中,每一层为高层提供特定的服务。NSAP 定义了适当的服务接口,类似于 IP 路由器为 TCP 和 UDP 定义的协议类型。
在 ISO 术语中,数据链路层地址(例如 LAN MAC 地址、Frame-Relay DLCI 等)常被称为子网连接点(SNPA,Subnetwork Point of Attachments)。由于一个网络设备可能连接多个链路,所以需要有多个 SNPA 地址,但是只需要一个 CLNP 地址。正如之前介绍 ES-IS 那样,ES-IS 的主要功能之一就是为节点提供 NSAP 地址到 SNPA 地址的映射。
NSAP 地址主要包含两个内容:
-
节点的 CLNP 地址
-
高层进程
NSAP 地址相当于 IP 报头中的 IP 地址和上层协议。NSAP 地址最长为 20 字节,这要比长度为固定 4 字节的 IP 地址要长的多。下图所示为一个 NSAP 地址的地址格式,其中包括很多域:
NSAP 地址由两个主要部分组成,IDP(Initial Domain Part,初始域部分)和 DSP(Domain-Specific Part,特定域部分)。
-
IDP 又分为 AFI(Authority and Format Identifier,机构和格式标识符)和 IDI(Initial Domain Identifier,初始域标识符):
-
AFI 字段是一个取值范围为 0~99 的十进制数,它指定该地址的格式和分配给该地址的机构。AFI 字段标识与 NSAP 相关的高层寻址域和 DSP 部分的语法。下表中列出了一些有效的 AFI 值。
-
如下表中所示,AFI 值为 49 时表示此地址为私有地址。这类似于 RFC 1918 中规定的私有 IP 地址范围。IS-IS 可以对这些地址进行路由,但不应该将这些地址通告给其他 CLNP 网络。其他使用 AFI 值为 49 的网络可能采用了不同的编址方案,两种不同的编址方案一起使用可能会产生编址问题。
-
IDI 用来标识 AFI 下的子域。例如 ISO 6523 ICD 地址域有一个 4 位格式,而 ISO DCC 用 3 为格式标识数据国家代码。美国政府使用的 ISO 6523 ICD 子域的 IDI 值为 0005 和 0006,即 47.0005 分配给美国政府的公民组织,47.0006 分配给美国国防部。
AFI | 地址域 |
---|---|
37 | X.121 |
39 | ISO 数据国家代码(DCC) |
41 | F.69 |
43 | E.163 |
45 | E.164 |
47 | ISO 6523 国际代码指示符(ICD) |
49 | 本地管理(私有) |
DSP 由 HODSP(High Order DSP,高序 DSP)、ID 和 SEL(选择符)组成:
-
HODSP 将域划分为多个区域。HODSP 大致相当于 IP 子网。
-
ID 表示系统 ID(SysID),SysID 用来唯一标识 OSI 设备。
-
SEL 表示 NSAP 选择符号(NSEL),用来标识设备中的进程,它大致相当于 IP 中的端口或套接字。在 IS-IS 路由选择过程中,没有使用 NSEL,所以 NSEL 始终保持为 00。
如下所示为一个完成的 20 字节的 NSAP 地址:
在 NSAP 地址格式中介绍过,NSAP 地址中包含了很多不同的字段,看起来有些复杂。可以将 NSAP 地址进行简化,其中各种字段可以归类为 3 个部分:区域 ID、SysID 和 NSEL。这样解释 NSAP 格式就显得清晰得多了,这样的结构也称为简化的 NSAP 格式,如下图所示。
如上图所示,简化的 NSAP 地址格式中的区域 ID 字段包括 AFI(第一个字节)和 ID(SysID)前面的字段,组成了可变长度的区域地址。虽然 SysID 长度为 1~8 个字节,但是目前实现的 IS-IS 中,都采用了定长的 6 字节表示 SysID。SEL(NSEL)为 1 字节。简化的 NSAP 地址最长也为 20 字节。
由于 SysID 为 6 字节,NSEL 为 1 字节,那么区域地址部分可为 1~13 字节不等。由于 1 字节足够用于定义区域 ID,所以在大多数的 IS-IS 实现中 NSAP 地址最小长度为 8 字节。
对于 IP 应用程序而言,在 NSAP 地址中,1 字节定义 AFI,最少 2 字节定义实际的区域信息,6 字节定义 SysID,1 字节定义 NSEL,所以 NSAP 地址最少为 10 字节。NSAP 使用 16 进制格式进行配置,以 AFI(十进制数值)字节开始,NSEL 字节(00)结束,用点进行分隔。AFI 和 NSEL 之间的每隔字段是 4 个数字(16 进制中的 2 字节)组,用点进行分隔。相反,IP 地址使用点分十进制表示法。
如下所示为在路由器中配置的 NSAP 地址:
NET 地址
在 IS-IS 路由选择过程中,没有使用 NSAP 地址中的 NSEL,所以 NSEL 始终保持为 00。当 NSEL 为 00 时,我们就称这个 NSAP 地址为 NET(Network Entity Titile,网络实体名)地址,NET 地址用来唯一地表示 IS-IS 路由选择域中的 OSI 主机。路由器使用 NET 地址来标识自己。
路由器在发送的链路状态数据包(LSP)中用 NET 来标识自己,这类似于 OSPF 发送的 LSA 中的路由器 ID(Router ID)。
在 NET 地址中,还有三个与其相关的术语:SNPA、电路 ID(Circuit ID)和链路。之前已经提到过,在 ISO 术语中,数据链路层地址常被称为子网连接点(SNPA,Subnetwork Point of Attachments)。
SNPA((SubNetwork Point of Attachment,子网连接点) 通常为:
-
LAN 接口的 MAC 地址。
-
X.25、或 ATM 的虚电路(VC)ID,或 Frame-Relay 中的 DLCI(Data Link Connection Identifier ,数据链路标识符)。
-
对于 HDLC(High - level Data Link Control,高级数据链路控制)接口,SNPA 被设置为 “HDLC”。
术语电路相当于接口。由于 NET 地址用来标识整个设备(路由器),所以 Circuit ID 用来表示不同的接口。路由器按照如下方式为接口指定 1 字节的 Circuit ID。
-
对于点到点接口,SNPA 是电路的唯一标识符。例如在 HDLC 点到点链路上,电路 ID 为 0x00。
-
对于 LAN 接口,将 1 字节的电路 ID 附加到 6 字节的指定中间系统(DIS)的 SysID 的后面,例如 aabb.ccdd.eeff.01。
术语链路是位于两个 IS(路由器)之间的路径,当两个相邻的 SNPA 可以通信是,链路就处于 UP 状态。
系统 ID ( SysID )
已经了解到 SysID 是 NSAP 地址的三个重要组成部分之一,另外两个部分是区域地址和 NSEL。根据 ISO 10589 中的规定,SysID 长度可以为 1~8 个字节。但是目前实现的 IS-IS 中,都遵循 GOSIP2.0 标准采用了定长的 6 字节表示 SysID。6 字节的长度也与 LAN MAC 地址的长度一致。所以在配置路由器的 NET 地址时,可以使用路由器上某个 LAN 接口的 MAC 地址作为 SysID,也就是在三层的 NSAP 地址中嵌入一个二层的 MAC 地址。但 SysID 也可以不为 MAC 地址,也可以取其他的任意值,但要满足 6 个字节的长度。
定义 SysID 注意事项:
-
IS-IS 路由域中的每个节点的 SysID 必须唯一。
-
IS-IS 路由域的所有节点的 SysID 长度必须一致,通常都为 6 个字节。
-
在同一区域中的每个节点的 SysID 必须唯一。
如果两台路由器属于不同的区域,并且都没有参与到 L2 的路由选择中,那么就不需要 SysID 唯一。但如果这两台路由器都连接到 L2 骨干区域中,即参与 L2 路由选择,那么就需要保持 SysID 唯一。但是推荐按照第一条中描述的,保证 IS-IS 路由域中的每个节点的 SysID 都唯一。以免产生路由信息计算问题。
在配置路由器 NET 地址中的 SysID 时,有几种方法可行。
-
第一就是使用 LAN 接口的 MAC 地址作为 SysID,由于 MAC 地址是唯一的,所以这样设置可以保证 SysID 在整个域中都唯一。
-
第二种方法就是将 IP 地址转化成 SysID,使用这种方式时通常都使用 Loopback 接口的地址。具体方法是将带 0 的淀粉十进制环回 IP 地址转换成 12 字符的地址,然后吧 12 个字符 4 个数字为一组,分为 3 组,以点隔开,以十六进制形式表示 6 字节的 SysID。以下是一个将 IP 地址转换为 SysID 的例子。
假设路由器有一个 Loopback 接口,IP 地址为 192.168.1.11,转换步骤如下:
对于点分十进制环回 IP 地址的每一个字节不够 3 为数字的,使用 0 在前面进行填充,以补足 3 为,也就是将 192.168.1.11 转换为 192.168.001.011。
此时 IP 地址变为了 12 个数字,然后按照每 4 个数字一组分为 3 组,192.168.001.011 转换为 1921.6800.1011。
1921.6800.1011 就作为 NET 地址中的 SysID 字段,再加上区域地址和 NSEL(00)后便形成了 NET 地址。
假设区域地址为 49.0001,那么使用 IP 地址转换为 SysID 的完整 NET 地址就为:
49.0001.1921.6800.1011.00
由于同一区域内的所有路由器的区域地址是相同的,NSEL 为 00 也是相同的,所以 SysID 成为区别路由器间不同 NET 地址的关键,也就是必须要保证 SysID 唯一。
使用多个 NET 地址
在 ISO 10589 中规定,一个节点最多可以拥有 3 个 NSAP 地址,但每个地址的 SysID 必须一致,不同的是区域地址。当一个运行 IS-IS 的路由器上具有多个 NET 地址时,被称为多宿主(Multihoming)。需要注意的是,多宿主并不代表路由器连接到多个区域,而是在一台路由器上配置多个具有不同区域地址的 NET 地址,这主要用于区域合、区域分离、重编址。
区域合并
使用多宿主功能,可以将不同区域合并到一个区域。一台 L1 路由器只在本区域内扩散链路状态信息,如果这台路由器连接了两个区域,那么可以实现在多个区域内扩散链路状态信息,使用这个机制,可以有效的完成区域的合并。
如下图所示,R1 与 R2 都为 L1/2 路由器。R1 与 R2 分别属于不同的区域 49.0001 和 49.0002,之间建立了 L2 邻接关系,R1 与 R2 都向 L2 骨干区域通告链路状态信息。现在需要将这两个区域合并为一个区域。这时可以为 R1 赋予两个 NET 地址,这两个 NET 地址包含不同的区域地址,分别为 49.0001 和 49.0002,但是 SysID 是相同的。由于 R1 也具有了区域地址为 49.0002 的 NET 地址,与 R2 的区域地址相同,这时根据 IS-IS 建立邻接关系的规则,R1 与 R2 之间也建立了一个 L1 邻接关系,并且拥有一个合并的 L1 链路数据库。最后可以将 R1 原先的 49.0001 的 NET 地址删除,这样就完成了区域的合并。
区域分离
区域分离的操作与区域合并的正好相反。区域分离可以将原有的一个区域分离为两个不同的区域。如下图所示,R1 与 R2 都为 L1/2 路由器。起初 R1 和 R2 属于同一个区域中,都拥有相同的区域地址 49.0001,之间形成了 L1 和 L2 邻接关系,共享相同的 L1 和 L2 链路状态数据库。现在需要将这两个区域分离开。与区域合并一样,可以先赋予 R2 两个 NET 地址,区域地址分别为 49.0001 和 49.0002。之后再将 R2 原先区域地址为 49.0001 的 NET 地址删除,这时由于 R1 和 R2 处于不同的区域,L1 邻接关系将不存在,但 L2 邻接关系和 L2 链路状态数据将保留,此时便完成了区域分离。
重编址
重编址过程与区域合并、区域分离相似,重编址可能需要清除一些或者全部路由器的区域前缀,用新的区域前缀代替。如下图所示,现在希望将原先的 49.0001 区域迁移到 49.0002 区域,这就需要更改路由器上的区域地址。R1 和 R2 属于同一个区域 49.0001 中,要将 R1 和 R2 迁移到 49.0002 区域中,可以为 R1 和 R2 都赋予两个 NET 地址,两个 NET 地址包含不同的区域地址,49.0001 和 49.0002,然后依次删除 R1 和 R2 的包含 49.0001 区域地址的 NET 地址,这样就实现了路由器新的 NSAP 地址的无缝、无冲突的重新配置。
注意,IS-IS 多宿主与 IP 中的辅助地址(secondanary IP)是不同的,辅助地址可以在同一条链路上创建多个隔离的逻辑子网。另外,辅助 IP 地址是在一条链路上配置多个子网。
NSEL
NSEL 定义了网络层服务的用户,路由层是特殊的网络层服务用户,它的 NSEL 值为 0。之前多次提到,在 IS-IS 路由器上配置的 NSAP 地址采用 00 作为 NSEL,这时 NSAP 地址被称为 NET。NSEL 的值与 IP 报头中的协议类型或 TCP/UDP 报头中的 TCP、UDP 端口号类似,NSEL 帮助网络层把数据发送到适当的应用程序或服务。在 OSI 分层模型中,网络层服务的是传输层。目标不是路由进程的 CLNP 数据包具有非 0 的 NSEL 值的 NSAP 地址,表示节点需要将数据发送到传输层。我们在使用 IS-IS 进行 IP 路由选择中,只要记住始终保持 NSEL 为 00 即可。
IS-IS 路由协议(二)
原创 xuanbo 2009-09-14 23:31:24
1. IS-IS 报文结构
与 OSPF 一样,运行 IS-IS 路由选择协议的路由器也是通过收集其他路由器泛洪的链路状态信息来构建自己的链路状态数据库。在 OSPF 中,OSPF 路由器通告链路状态信息是通过 LSA(Link State Advertisment),在 IS-IS 中,与 LSA 具有同样功能的包含链路状态信息的报文称为 LSP(Link State Packets,链路状态数据包)。LSP 包含了由 IS-IS 路由器产生的描述其周围环境的路由选择信息。
在 IS-IS 中,路由协议使用的三大类报文:Hello 报文、链路状态数据包(LSP)和序列号数据包(SNP),Hello 报文用来建立和维持 IS-IS 路由器之间的邻接关系;LSP 用来承载和泛洪路由器的链路状态信息,并且 LSP(确切的说应该是链路状态数据库)是路由器进行 SPF 计算的依据;SNP 用来进行链路状态数据库的同步,并且用来对 LSP 进行请求和确认。
下面所示为 IS-IS 中所使用的 PDU 数据包类型,使用这些数据包,IS-IS 可以完成从邻接关系的建立、链路状态信息的扩散和链路状态数据库的同步的操作。每种 PDU 都有一个特定的类型号,在 IS-IS 的 PDU 报文头中,有一个 PDU 类型字段,此字段中所包含的信息就是 PDU 的类型号,路由器就是通过类型号来识别所收到的 PDU 报文类型。
Hello 数据包分为三种类型:
-
L1 LAN IS-IS Hello PDU(类型号 15)
-
L2 LAN IS-IS Hello PDU(类型号 16)
-
点到点 IS-IS Hello PDU(类型号 17)
链路状态数据包 LSP 分为两种类型:
-
L1 LSP(类型号 18)
-
L2 LSP(类型号 20)
序列号数据包 SNP 分为四种类型:
-
L1 完全序列号数据包(CSNP,Complete SNP)(类型号 24)
-
L2 完全序列号数据包(CSNP)(类型号 25)
-
L1 部分序列号数据包(PSNP,Partial SNP)(类型号 26)
-
L2 部分序列号数据包(PSNP)(类型号 27)
a) IS-IS PDU 报头格式
在所有 IS-IS PDU 起始的 8 个字节都是该数据包的头部字段,并且对于所有的 PDU 数据包类型(包括 Hello 报文、LSP 和 SNP)都是公用的、相同的。
下图所示为 IS-IS PDU 数据包起始的 8 个字节:
Figure . IS-IS header fields
-Intradomain Routing Protocol Discriminator : 域内路由选择协议鉴别符。这是 ISO 9577 分配给 IS-IS 的一个固定的值,用于标识网络层 PDU 的类型,对于 IS-IS PDU,该字段的值永远都为 0x83。
-Length Indicator : 长度标识符。标识该固定头部字段的长度。
-Version/Protocol ID Extension : 版本 / 协议 ID 扩展。当前始终为 1。
-ID Length : ID 长度。用于表示源 ID(SysID)的长度。值为 0 表示长度为 6 字节;值为 255 表示长度为 0,即为空;1~8 的整数,表示 SysID 具有相同长度的字节数。
-PDU Type : PDU 类型。这是一个 5bit 的字段,用于标识 IS-IS 数据包的类型。值为 15 表示 L1 LAN IIH;值为 16 表示 L2 LAN IIH;值为 18 表示 L1 LSP;值为 20 表示 L2 LSP;值为 24 表示 L1 CSNP;值为 25 表示 L2 CSNP;值为 26 表示 L1 PSNP;值为 27 表示 L2 CSNP。
-Version : 版本。当前为 1。
-Reserved : 保留位。没有使用的 bit 位,始终为 0。
-Maximum Area Addresses : 最多区域地址。表示我们可以为一个路由器配置多少个不同的区域前缀。值为 0 表示最多支持 3 个区域地址数,默认情况下值为 0。
-Additional Header Fields : 附加报头字段。至此字段之前的 8 个字节对于所有的 IS-IS PDU 都是相同的。附加报头字段将根据不同的 PDU 类型而不同。
-TLV Fields : TLV 字段。用于承载 IS-IS TLV。
如下图采集到 PDU 报头。
b) IS-IS Hello PDU 格式
对于 L1 LAN IIH PDU 和 L2 LAN IIH PDU,它们有着相同的报文格式和功能:
*Figure 3-5. IS-IS LAN Hello (PDU Types 15, 16).*
-Reserved : 保留的 6bit 位。当前没有使用,始终为 0。
-Circuit Type : 电路类型。01 表示 L1 路由器,10 表示 L2 路由器,11 表示 L1/2 路由器。
-Source ID : 源 ID。发送该 PDU 的路由器的 SysID。
-Holding Time : 保持时间。用来通知它的邻居路由器在认为这台路由器失效之前应该等该的时间。如果在保持时间内收到邻居发送的 Hello PDU,将认为邻居依然处于存活状态。这个保持时间就相当于 OSPF 中的 dead interval(死亡间隔)。在 IS-IS 中,默认情况下保持时间是发送 Hello PDU 间隔的 3 倍,但是在配置保持时间时,是通过指定一个 Hello 报文乘数(hello-multiplier)进行配置的。例如,如果 Hello PDU 的间隔为 10s,Hello 报文乘数为 3,那么保持时间就是 30s(10s x 3)。
-PDU Length : PDU 长度。整个 PDU 报文的长度。包括固定报头和 TLV 字段。
-Priority : 优先级。接口的 DIS 优先级,用来在广播 LAN 中选举 DIS。优先级数值越高,路由器成为 DIS 的可能性越大。
-LAN ID : 局域网 ID。由 DIS 的 SysID 与 1 字节的伪节点 ID 组成,LAN ID 用来区分同一台 DIS 上的不同 LAN。
如下图采集到的报文格式。
下图所示为点到点 IIH PDU 的报文格式:
从点到点 IIH PDU 的格式可以看出,大部分字段与 L1/L2 LAN IIH PDU 的报文格式相同。但是在点到点 IIH PDU 中没有 “Priority” 字段,因为在点到点网络上不需要选举 DIS。而且使用 “Local Circuit ID” 代替了 LAN IIH PDU 中的 “LAN ID” 字段。
Local Circuit ID(本地电路 ID)由发送 Hello PDU 的路由器分配给这条电路的标识,并且在路由器的接口上是唯一的。在点到点链路的另一端,Hello 报文中的本地电路 ID 可能或也可能不为同样的值。
*Figure 3-4. Point-to-Point Hello Packet (PDU Type 17).*
c) IS-IS LSP PDU 格式
LSP PDU 分为 L1 LSP 和 L2 LSP。L1 LSP 和 L2 LSP 各自承载了 IS-IS 不同层次的路由选择信息,但是它们有着相同的报文格式。
*Figure. LSP format*
每个 LSP 都包含着这些重要的信息:LSP ID、LSP 序列号、LSP 校验和、剩余时间、区域关联状态、超载状态以及区域划分。
-PDU Length : PDU 长度。整个 PDU 报文的长度。包括固定报头和 TLV 字段。
-Remaining Lifetime : 剩余时间。此 LSP 到期前的生存时间。当生存时间为 0 时,LSP 将被从链路状态数据库中清除。
-LSP ID : LSP 标识符。用来标识不同的 LSP 和生成 LSP 的源路由器。LSP ID 包括三个部分:SysID、伪节点标识符(Pseudonode ID)和 LSP 编号。
-Sequence Number : 序列号。LSP 序列号主要用于使路由器能够识别一个 LSP 的新旧版本,这也与 OSPF 的 LSA 中携带的序列号是相同的作用。
-Checksum : 校验和。校验和主要用于检查被破坏的 LSP 或者还没有从网络中清除的过期 LSP。当一台路由器收到一个 LSP,在将该 LSP 放入到本地链路数据库和将其再泛洪给其他邻接路由器之前,会重新计算 LSP 的校验和,如果校验和与 LSP 中携带的校验和不一致,则说明此 LSP 传输过程中已经被破坏。
-P : Partition,分区。表示区域划分或者分段区域的修复位。当 P 位被设置为 1 时,表明始发路由器支持自动修复区域的分段情况。
-ATT : Attached,区域关联。L1/L2 路由器在其生成的 L1 LSP 中设置该字段以通知同一区域中的 L1 路由器自己与其他区域相连。通常来说就是 L2 骨干区域相连。当 L1 区域中的路由器收到 L1/2 路由器发送的 ATT 位被置位的 L1 LSP 后,它将创建一条指向 L1/2 路由器的默认路由,以便数据可以被路由到其他区域。虽然 ATT 位同时在 L1 LSP 和 L2 LSP 中进行了定义,但是它只会在 L1 LSP 中被置位,并且只有 L1/2 路由器会设置这个字段。
-OL : Overload,超载。表示路由器的资源状态。如果该 bit 被置位,就表示路由器发生了超载。超载是指路由器没有足够的系统资源(CPU 资源和内存资源)用来处理路由选择交换信息。被设置了超载位的 LSP 不会在网络中进行泛洪,并且当其他路由器收到设置了超载位的 LSP 后,在计算路径信息时不会考虑此 LSP,因此最终计算出来的到达目的地的路径将绕过超载的路由器。设置超载位还可以使数据的传输路径绕过某个特定的路由器。
-IS Type : 中间系统类型。该字段表示了此 LSP 是来自 L1 路由器还是 L2 路由器。这也表示了收到此 LSP 的路由器将把这个 LSP 放到 L1 链路状态数据库还是 L2 链路状态数据库。01 表示 L1,11 表示 L2,00 与 10 未使用。
下图是采集到报文。
d) IS-IS SNP PDU 格式
SNP PDU 分为 CSNP 和 PSNP。其中 CSNP 包含 L1 CSNP 和 L2 CSNP;PSNP 包含 L1 PSNP 和 L2 PSNP。CSNP 与 PSNP 都包含了路由器本地链路状态数据库中 LSP 的摘要信息。其中 CSNP 包含的是所有 LSP 的摘要信息,PSNP 包含的是部分 LSP 的摘要信息。下图所示为 CSNP 的报文格式。
Level 1/2 Complete Sequence Numbers PDU
-PDU Length : PDU 长度。整个 PDU 报文的长度。包括固定报头和 TLV 字段。
-Source ID :源 ID 。发送该 PDU 的路由器的 SysID 。
-Start LSP ID :起始 LSP ID 。表示 TLV 字段中描述的 LSP 范围的第一个 LSP ID 。
-End LSP ID :结束 LSP ID 。表示 TLV 字段中描述的 LSP 范围的最后一个 LSP ID 。
如下图所示,是采集到的报文。
下图所示为 PSNP 的报文格式。
Level 1/2 Partial Sequence Numbers PDU
通过上图可以看出,PSNP 报文的格式与 CSNP 的相似,只不过没有 Start LSP ID 和 End LSP ID 两个字段。由于 PSNP 携带的只是部分 LSP 的摘要信息,所以不需要起始和结束字段。
如下图是采集到的报文。
e) IS-IS TLV
根据不同的 IS-IS PDU 类型和特定的网络环境,紧跟在各种类型 IS-IS PDU 之后的是 TLV(Type/Length/Value)字段,PDU 报头与 TLV 字段构成了一个完整的 IS-IS PDU。在 ISO10589 和 RFC1195 这二种当前 IS-IS 标准中,使用代码(code)这个词,而不是类型(type),但由于 TLV 用于其他协议标准中,故 TLV 比 CLV 在网络文献中使用的多,在这里我们也使用 TVL 代替 CLV。在 IS-IS PDU 所使用的各种 TLV 中,既有 ISO 10589 中定义的,也有 RFC 1195 中定义的。ISO 中定义的 TLV 用于 CLNP 网络环境,但是其中的大多数也用于 IP 网络环境。RFC 中定义的 TLV 只用于 IP 环境。对于一个 IS-IS PDU,后面既可以携带支持 CLNP 协议的 TLV,又可以携带支持 IP 协议的 TLV。如果一个路由器不能识别一个 TLV,那么将忽略它。
Encoding of Variable Length Fields
如上图中所示,TLV 中包括 Type、Length 和 Value 三个字段:
-Code ( Type ): 表示 TLV 的类型,不同的 TLV 使用不同的类型号来区别,Type 长度为 1 字节。
-Length : 表示 TLV 中 Value 字段的长度,长度为 1 字节,所以这意味着 Value 字段长度的最大值为 255 字节。
-Value : 表示实际承载的值,长度是可变的,最大为 255 字节。
下表中列出了 IS-IS 中所使用的各种 TLV,以及这种 TLV 由哪种标准进行定义:
类型 | TLV | ISO 10589 | RFC 1195 |
---|---|---|---|
1 | 区域地址 | X | |
2 | 中间系统邻居(LSP) | X | |
3 | 终端系统邻居 | X | |
4 | 区域分段指定 L2 中间系统 | X | |
5 | 前缀邻居 | X | |
6 | 中间系统邻居(Hello) | X | |
8 | 填充 | X | |
9 | LSP 条目 | X | |
10 | 验证信息 | X | |
14 | LSP 缓存 | X | |
128 | IP 内部可达性信息 | X | |
129 | 支持的协议 | X | |
130 | IP 外部可达性信息 | X | |
131 | 域间路由选择协议信息 | X | |
132 | IP 接口地址 | X | |
133 | 验证信息 | X |
对于 TLV 4,它用于之前我们介绍的区域修复功能;TLV 133 是 IETF 为 IP 验证而定义的 TLV,但是大多数实现中都使用 TLV 10 来支持验证。
使用 TLV 的最大优点就是增强了协议的扩展性,当需要扩展协议的功能时,只需要定义新的 TLV 就可以。下表中列出了部分 IETF 为增强 IS-IS 协议的功能所定义的一些新的 TLV。
类型 | TLV | RFC | 作用 |
---|---|---|---|
12 | 可选的校验和 | 3358 | 为 SNP 增加校验和 |
22 | 扩展的 IS 可达性 | 3784 | 增加流量工程特性,替代 TLV 2 |
134 | 流量工程路由器 ID | 3784 | 增加流量工程特性 |
135 | 扩展的 IP 可达性 | 3784 | 增加流量工程特性和扩展度量,替代 TLV 128 和 TLV 130 |
137 | 动态主机名 | 2763 | 增加节点标识能力,使用主机名代替 SysID 的显示 |
211 | 温和重启动 | 3847 | 增加温和重启动(Graceful Restart)的特性 |
每种 IS-IS PDU 都使用特定的 TLV,但是有一些 TLV 也被多种类型的 IS-IS PDU 所共享,下表中列出了各种 IS-IS PDU 所使用的 TLV:
TLV 类型 | L1 LAN IIH | L2 LAN IIH | 点到点 IIH | L1 LSP | L2 LSP | L1 CSNP | L2 CSNP | L1 PSNP | L2 PSNP |
---|---|---|---|---|---|---|---|---|---|
1 | X | X | X | X | X | ||||
2 | X | X | |||||||
3 | X | ||||||||
4 | X | ||||||||
5 | X | ||||||||
6 | X | X | |||||||
8 | X | X | X | ||||||
9 | X | X | X | X | |||||
10 | X | X | X | X | X | X | X | X | X |
128 | X | X | |||||||
129 | X | X | X | X | X | ||||
130 | X | X | |||||||
131 | X | ||||||||
132 | X | X | X | X | X |
从上表可以看出,唯一一个被所有 IS-IS 都使用的是 TLV 10,验证信息。下面我们将对这些 TLV 中一些常用的和重要的 TLV 进行介绍,关于其他的 TLV 和扩展的 TLV 可以参见相应的标准文档。
1. 区域地址 TLV ( TLV 1 )
区域地址 TLV 列出了始发路由器上配置的区域地址。它只出现在非伪节点 LSP 中。当一台路由器配置了多个区域前缀时,此 TLV 将携带多个区域地址。
-
类型 ——1
-
长度 ——1 字节
-
值 ——nx(1 字节的地址长度 + 可变的区域地址)
如下图所示:从采集到数据的代码中可以看到其值为十六进制 01,如红框中所示。
2. 中间系统邻居 TLV ( LSP )( TLV 2 )
中间系统邻居 TLV(LSP)用于 LSP PDU 中,它列出了始发路由器的 IS-IS 邻居(包括伪节点)和到达每个邻居的链路的度量值。
-
类型 ——2
-
长度 ——1 字节
-
值 ——1 字节
3. 终端系统邻居 TLV ( TLV 3 )
终端系统邻居 TLV 只用于 L1 LSP 中,它列出邻接的 L1 路由器和 ES。例如通过 ES-IS 协议发现运行 CLNP 协议的工作站。
-
类型 ——3
-
长度 ——1 字节
-
值 —— 可变
4. 中间系统邻居 TLV ( Hello )( TLV 6 )
中间系统邻居 TLV 用于 Hello PDU 中,它列出了本地路由器所有邻居的 SysID。与 OSPF 中 Hello 报文中的邻居列表一样,当 IS-IS 路由器收到其他路由器的 Hello PDU 后,便将其 SysID 加入到自己发送的 Hello PDU 中。在点到点 Hello PDU 中不使用此 TLV,因为在点到点链路中不需要选举 DIS。在 L1 LAN IIH 中只列出 L1 邻居,同样在 L2 LAN IIH 中也只列出 L2 邻居。
-
类型 ——6
-
长度 ——1 字节
-
值 —— 可变
5. 填充 TLV ( TLV 8 )
填充 TLV 用于所有 Hello PDU 中。为了建立邻接关系,IS-IS 协议与 OSPF 协议一样都需要双方具有同样的接口 MTU(Maximum Transmission Unit,最大传输单元)。这种保持两个邻接的路由器具有同样的 MTU 的机制是必需的。这样就不会产生由于双方的 MTU 值不匹配而导致一方不能接收另一方发送的报文。OSPF 与 IS-IS 使用了不同的机制来检查 MTU 不匹配的情况。在 OSPF 中,通过在 DBD 报文中嵌入接口 MTU 字段使路由器检查 MTU 是否匹配。在 IS-IS 中,路由器将 Hello PDU 的大小填充至接口 MTU 的大小。由于一个 TLV 的长度最长为 255 字节,所以通常会使用多个填充 TLV。
-
类型 ——8
-
长度 ——1 字节
-
值 —— 可变
6. LSP 条目 TLV ( TLV 9 )
LSP 条目 TLV 只用于 CSNP 和 PSNP 报文中。它列出了每个 LSP 的 LSP ID、剩余时间、序列号和校验和。这些字段可以唯一的标识出一个 LSP 的实例。
-
类型 ——9
-
长度 ——1 字节
-
值 —— 可变