IS-IS 路由协议详解 | 实验

注: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 层的模型,并且详细规定了各层的功能,同时也确定了计算机网络的标准。

IS-IS 路由协议(一)_职场

制定 OSI 七层参考模型的是 ISO(International Organization for Standardization,国际标准化组织)。对于数据通信和信息技术的发展来说,OSI 参考模型起到了重要的作用。它提供了开放式的标准架构,使不同厂商生产的通信设备之间可以进行互联和互操作。ISO 七层模型的每一层都定义了单一的功能,可以将相关功能组合成功能层,从而简化和方便了协议的设计。

OSI 参考模型中的网络服务规范定义了网络设备之间使用无连接通信的功能,也就是 CLNS(Connectionless Network Service,无连接网络服务)。顾名思义,使用 CLNS,无需在发送数据之间建立端到端的路径。下图中展示的是 CLNS 中所包括的协议组件,这些协议组件都由 ISO 所定义。

02

正如上图所示,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 的工作机制:

03

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。

04

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 非骨干区域数据库。如下图所示

05

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)的操作是一样的。

06

通过上图所示的 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-ISOSPF
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 中没有备份 DISOSPF 中要选举 BDR,以接替 DR 的角色
IS-IS 中的 DIS 可以被抢占OSPF 中的 DR 不能被抢占
DIS 以 3 倍的频率发送 Hello PDUDR 以正常的频率发送 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 地址的地址格式,其中包括很多域:

07

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地址域
37X.121
39ISO 数据国家代码(DCC)
41F.69
43E.163
45E.164
47ISO 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 地址:

08

在 NSAP 地址格式中介绍过,NSAP 地址中包含了很多不同的字段,看起来有些复杂。可以将 NSAP 地址进行简化,其中各种字段可以归类为 3 个部分:区域 ID、SysID 和 NSEL。这样解释 NSAP 格式就显得清晰得多了,这样的结构也称为简化的 NSAP 格式,如下图所示。

09

如上图所示,简化的 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 地址:

10

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)。

IS-IS 路由协议(一)_11

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 个字节的长度。

12

定义 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 地址删除,这样就完成了区域的合并。

13

区域分离

区域分离的操作与区域合并的正好相反。区域分离可以将原有的一个区域分离为两个不同的区域。如下图所示,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 链路状态数据将保留,此时便完成了区域分离。

IS-IS 路由协议(一)_14

重编址

重编址过程与区域合并、区域分离相似,重编址可能需要清除一些或者全部路由器的区域前缀,用新的区域前缀代替。如下图所示,现在希望将原先的 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 地址是在一条链路上配置多个子网。

15

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 路由协议(一)_16


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 报头。

02

b) IS-IS Hello PDU 格式

对于 L1 LAN IIH PDU 和 L2 LAN IIH PDU,它们有着相同的报文格式和功能:

03

*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。

如下图采集到的报文格式。

04

下图所示为点到点 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 可能或也可能不为同样的值。

05

*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 不同层次的路由选择信息,但是它们有着相同的报文格式。

06

*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 未使用。

下图是采集到报文。

07

_08

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 的报文格式。

09

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 。

如下图所示,是采集到的报文。

10

下图所示为 PSNP 的报文格式。

11

Level 1/2 Partial Sequence Numbers PDU

通过上图可以看出,PSNP 报文的格式与 CSNP 的相似,只不过没有 Start LSP ID 和 End LSP ID 两个字段。由于 PSNP 携带的只是部分 LSP 的摘要信息,所以不需要起始和结束字段。

如下图是采集到的报文。

12

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,那么将忽略它。

_13

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 由哪种标准进行定义:

类型TLVISO 10589RFC 1195
1区域地址X
2中间系统邻居(LSP)X
3终端系统邻居X
4区域分段指定 L2 中间系统X
5前缀邻居X
6中间系统邻居(Hello)X
8填充X
9LSP 条目X
10验证信息X
14LSP 缓存X
128IP 内部可达性信息X
129支持的协议X
130IP 外部可达性信息X
131域间路由选择协议信息X
132IP 接口地址X
133验证信息X

对于 TLV 4,它用于之前我们介绍的区域修复功能;TLV 133 是 IETF 为 IP 验证而定义的 TLV,但是大多数实现中都使用 TLV 10 来支持验证。

使用 TLV 的最大优点就是增强了协议的扩展性,当需要扩展协议的功能时,只需要定义新的 TLV 就可以。下表中列出了部分 IETF 为增强 IS-IS 协议的功能所定义的一些新的 TLV。

类型TLVRFC作用
12可选的校验和3358为 SNP 增加校验和
22扩展的 IS 可达性3784增加流量工程特性,替代 TLV 2
134流量工程路由器 ID3784增加流量工程特性
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 IIHL2 LAN IIH点到点 IIHL1 LSPL2 LSPL1 CSNPL2 CSNPL1 PSNPL2 PSNP
1XXXXX
2XX
3X
4X
5X
6XX
8XXX
9XXXX
10XXXXXXXXX
128XX
129XXXXX
130XX
131X
132XXXXX

从上表可以看出,唯一一个被所有 IS-IS 都使用的是 TLV 10,验证信息。下面我们将对这些 TLV 中一些常用的和重要的 TLV 进行介绍,关于其他的 TLV 和扩展的 TLV 可以参见相应的标准文档。

1. 区域地址 TLV ( TLV 1 )

区域地址 TLV 列出了始发路由器上配置的区域地址。它只出现在非伪节点 LSP 中。当一台路由器配置了多个区域前缀时,此 TLV 将携带多个区域地址。

  • 类型 ——1

  • 长度 ——1 字节

  • 值 ——nx(1 字节的地址长度 + 可变的区域地址)

如下图所示:从采集到数据的代码中可以看到其值为十六进制 01,如红框中所示。

14

2. 中间系统邻居 TLV ( LSP )( TLV 2 )

中间系统邻居 TLV(LSP)用于 LSP PDU 中,它列出了始发路由器的 IS-IS 邻居(包括伪节点)和到达每个邻居的链路的度量值。

  • 类型 ——2

  • 长度 ——1 字节

  • 值 ——1 字节

15

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 字节

  • 值 —— 可变

16

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 字节

  • 值 —— 可变

17

7. 验证信息 TLV ( TLV 10 )

验证信息 TLV 是唯一一个用于所有 IS-IS PDU 的 TLV。验证信息 TLV 只有在配置了验证时才会使用。路由器通过将密码或者密文插入到 IS-IS 的 PDU 中实现路由选择信息交互的安全性。

  • 类型 ——10

  • 长度 ——1 字节

  • 值 —— 可变

18

8. IP 内部可达性信息 TLV ( TLV 128 )

IP 内部可达性信息 TLV 用于 LSP PDU 中。它列出了与始发 LSP 的路由器相直连的 IP 地址及掩码信息。每个 IP 前缀都被分配了一个度量值,这个度量值表示该 IP 前缀对应的链路度量值。该 TLV 不会出现在伪节点 LSP 中。

_19

9. 支持的协议 TLV ( TLV 129 )

支持的协议 TLV 用来标识始发路由器所支持的第三层网络层协议,例如仅支持 CLNP、仅支持 IP 或同时支持 CLNP 和 IP。

20

10. IP 外部可达性信息 TLV ( TLV 130 )

与 IP 内部可达性信息 TLV 一样,这类 TLV 也只用于 LSP PDU 中。它列出了 IS-IS 路由选择域外部的 IP 地址和掩码信息。这类路由信息通常都是通过路由重分发引入到 IS-IS 路由域中的外部路由信息。

11. 域间路由选择协议信息 TLV ( TLV 131 )

域间路由选择协议(IRDP)信息 TLV 只用于 L2 LSP 中。IETF 定义此 TLV 用于支持在 IS-IS 路由域边界上与其他域间路由选择协议的交互,用来透传来自外部路由选择协议的信息。

12. IP 接口地址 TLV ( TLV 132 )

IP 接口地址 TLV 用于列出始发 IS-IS PDU 的接口的地址(IP 地址)。

_21

13. 扩展的 IS 可达性 TLV ( TLV 22 )

IETF 后来定义扩展的 IS 可达性 TLV 用来代替类型 2 的中间系统邻居 TLV(LSP)。不使用 IS-IS 扩展度量(使用窄度量)时,只有 6bit(0~63)可以用来表示度量值;当使用 IS-IS 扩展度量(或称作宽度量)时,这个 TLV 就用来代替类型 2 的 TLV。扩展的 IS 可达性 TLV 使用 24bit 表示度量值,扩大了度量的取值范围。

14. 扩展的 IP 可达性 TLV ( TLV 135 )

与扩展的 IS 可达性 TLV 一样,IETF 定义扩展的 IP 可达性 TLV 用来代替类型 128(IP 内部可达性 TLV)和类型 130(IP 外部可达性 TLV)的 TLV。当使用 IS-IS 扩展度量(宽度量)时,这个 TLV 就用来代替类型 128 和类型 130 的 TLV。扩展的 IP 可达性 TLV 使用 32bit 表示度量值。


IS-IS 路由协议(三)

原创 xuanbo 2009-09-15 21:42:18

1. 链路状态数据库(LSDB)

IS-IS 路由器在区域内交换 LSP 的过程成为链路状态扩散或链路状态泛洪(flooding)。泛洪是网络中实现链路状态数据库复制与分发的操作方式,它是链路状态路由选择协议所表现的一种重要现象。IS-IS 路由器生成本地的 LSP,该 LSP 通过启用了 IS-IS 协议的接口发送到所有的邻接路由器。同样,这台路由器也接收并处理其他路由器生成的 LSP。如果一台路由器从邻接路由器中收到一个 LSP,它将在本地链路状态数据库中保留一份该 LSP 的备份。之后它再把收到的这个 LSP 从除接收接口之外的其他运行 IS-IS 协议的接口泛洪出去,以便其他接口上的邻居可以收到这个 LSP。在 IS-IS 中,点到点链路的 LSP 扩散与广播网络中的是不同的。

IS-IS 支持两个层次的分层路由选择,层 1(Level 1)路由选择和层 2(Level 2)路由选择。对于这两个层次的路由选择,分别维护着不同的链路状态数据库。Level 1 链路状态数据库支持对区域内的路由,Level 2 链路状态数据库支持对区域间的路由。可以说,Level 1 链路状态数据库是区域内所有路由器泛洪的 L1 LSP 的集合,Level 2 链路状态数据库是整个路由域中所有 L1/2 路由器和 L2 路由器扩散到骨干区域的 L2 LSP 的集合。如下图所示

协议

在一个典型的多区域 IS-IS 路由域中,同时存在着 Level 1 链路状态数据库和 Level 2 链路状态数据库。区域内的 L1 路由器维护着各自区域的 Level 1 链路状态数据库,Level 2 链路状态数据库由具有 L2 路由选择功能的路由器(L2 路由器和 L1/2 路由器)进行维护,而且所有具有 L2 路由选择功能的路由器都拥有一个相同的 Level 2 链路状态数据库。对于 L1/2 路由器,它同时维护着两个链路状态数据库,Level 1 链路状态数据库和 Level 2 链路状态数据库。Level 1 链路状态数据库中存放的是它所连接的非骨干区域的链路状态信息的集合,Level 2 链路状态数据库中存放的是骨干区域的链路状态信息的集合。下图所示为一个典型的 IS-IS 多区域的拓扑中的链路状态数据库:

02

从上图中可以看出 L1 路由器只维护着一个 Level 1 链路状态数据库,L1/2 路由器维护着两个(Level 1 和 Level 2)链路状态数据库。默认情况下路由器同时支持 L1 路由选择和 L2 路由选择,即 L1/2 类型的路由器。如果某台路由器无需参与到骨干区域的路由选择时,可以将其设置为 L1 路由器,这样可以节省路由器的 CPU 与内存资源。

当路由域中只需要采用非层次化结构就可以满足网络需求时,可以将所有路由器都部署在一个单一的区域中,这样将无需采用骨干区域以对区域间的数据流进行中转。如下图所示为采用单一 L1 区域的拓扑:

03

从上图中可以看出,单个 L1 区域中的路由器都只维护一个 Level 1 链路状态数据库,但这前提是这些路由器都是 L1 类型的路由器。如果按照默认情况的 L1/2 路由器,这些路由器之间还将建立 L2 邻接,并同时维护一个 Level 2 链路状态数据库。对于这种不需要骨干区域的拓扑,为了节省路由器的 CPU 和内存资源,可以将其都设置为 L1 路由器。

对于之前的单区域拓扑,我们也可以将所有路由器设置为 L2 路由器,这样所有路由器之间将建立 L2 邻接关系,并只维护相同的 Level 2 链路状态数据库。这时所有的路由器将组成了一个仅存在骨干区域的但区域拓扑。这种拓扑的优点主要是利于后续的网络扩展,很多运营商的单区域网络中都使用了全 L2 路由器的拓扑,以便后续区域的添加和骨干区域的扩充。如下图所示为采用单一 L2 骨干区域的拓扑:

04

运行 IS-IS 的路由器通过泛洪和接收链路状态数据包(LSP)进行路由选择信息的扩散和链路状态数据库的构建。LSP 也是 IS-IS 所使用的三种报文类型之一。LSP 包括两种类型,L1 LSP 与 L2 LSP。L1 LSP 用于承载区域内路由器(L1 路由器)的链路状态信息,L2 LSP 用于承载区域间(骨干区域)的链路状态信息。L1 LSP 只会在单个区域内进行扩散,L2 LSP 将在 L2 骨干区域中进行扩散。

虽然 L1 LSP 和 L2 LSP 各自承载了 IS-IS 不同层次的路由选择信息,但是它们之间有着相似的数据包格式和功能。对于 L1 LSP 和 L2 LSP,PDU 类型分别为 18 和 20。如下图所示。

05

06

在 PDU 长度(PDU Length)之前的字段,对于所有 IS-IS PDU 都是相同的,PDU 长度之后的字段是 LSP 数据包所特有的。跟随在 LSP 报文后面的 TLV 字段,用来通告各种不同的路由选择信息。每个 LSP 都包含着如下重要的信息:LSP ID、LSP 序列号、LSP 校验和、剩余时间、区域关联状态、超载状态以及区域划分。如下图所示,在路由器使用 show isis database 命令获得的详细信息。

07

1. LSP 剩余时间( Remaining Lifetime )

对于运行 IS-IS 的路由器发送的每个 LSP,都有一个定时器用来跟踪 LSP 的生存时间。这样可以保证链路状态数据库及时的清除旧的或无效的链路状态信息。这与 OSPF 中的操作机制是一样的。在 OSPF 中,每个 LSA 也都有一个老化时间(age-time),默认情况下为 3600s。如果一个 LSA 在链路状态数据库中保留的时间超过了 3600s,那么此 LSA 将被从链路状态数据库中清除。

每个 LSP 都有一个最大生存时间,它是每个 LSP 在被从链路状态数据库中删除前可以保留的最长时间。ISO 10589 中定义 LSP 的最大生存时间为 1200s(20 分钟)。当路由器一生成 LSP 时,便将剩余时间设置为最大生存时间,然后泛洪到所有的邻接路由器,并在本区域内进行扩散。LSP 的剩余时间随着时间的推移而减少。

在 IS-IS 中,还存在另外一个定时器,就是 LSP 刷新间隔定时器。当路由器生成一个 LSP 后,便启动这个定时器。当刷新间隔定时器到期后,路由器将重新生成(刷新)这个 LSP,并泛洪到本区域内的所有路由器。每当路由器重新生成新的 LSP 后,便将 LSP 的剩余时间重置为最大生存时间。如果某条 LSP 的剩余时间达到 0 时还没有收到生成这个 LSP 的路由器的刷新 LSP 后,这个 LSP 将被从链路状态数据库中清除。ISO 10589 中定义 LSP 刷新间隔为 900s(15 分钟)。

可以通过调整 LSP 的最大生存时间和刷新间隔来影响 LSP 的泛洪。更大的 LSP 生存时间意味着路由器在其链路状态数据库中将保留 LSP 更长的时间,但这可能会造成过于陈旧的路由选择信息被保留更长的时间。调整 LSP 的最大生存时间时,也要根据实际情况相应的调整 LSP 刷新间隔。如果 LSP 刷新间隔过长,那么可能也会增加其他路由器保留陈旧路由信息的时间,但是增大 LSP 刷新间隔可以减少网络资源的开销。如果 LSP 刷新间隔过短,将增大网络资源的利用率,而且增加了路由器系统资源的开销。此外,在调整这两个定时器时,要保证 LSP 最大生存时间大于 LSP 刷新间隔,以便让路由器在将 LSP 清除出链路状态数据库之前有足够的时间可以接收到其他路由器重新生成的 LSP。对于这两个定时器的值,推荐使用其默认值,如果不是特殊需求,可以不对其进行修改。只有在非常稳定的网络环境中才推荐使用比默认值大的 LSP 刷新间隔。在 OSPF 中,这两个定时器的值为 3600s 和 1800s。但这里 IS-IS 与 OSPF 有一点不同的是,对于剩余时间(OSPF 中的 age-time),IS-IS 的定时器是从最大生存时间(1200s)递减至 0,而 OSPF 而是从 0 递加到最大生存时间(3600s),两个定时器在计数方法上略有不同。

2. LSP 标识符( LSP ID )

路由器生成的每个 LSP 都有一个 LSP 标识符(LSP ID),LSP 主要用来标识不同的 LSP 和生成 LSP 的源路由器。就像 OSPF 中一样,每个 LSA 都使用通告路由器(通告此 LSA 的路由器的 Router ID)进行标识。每个 LSP ID 都包括三个部分:

l SysID

l 伪节点标识符(Pseudonode ID)

l LSP 编号(LSP number)

08

其中 SysID 为路由器的系统 ID,6 字节长,用于标识生成此 LSP 的源路由器,与 OSPF 中的 Router ID 相似。

Pseudonode ID 长度为 1 字节,用于标识此 LSP 是否是由网络中的指定中间系统(DIS,Designated Intermediate System)为网络产生的伪节点 LSP。当 LSP ID 的 Pseudonode ID 不为 0 时,则表示此 LSP 是由 DIS 为网络产生的伪节点 LSP,如果 Pseudonode ID 为 0,则表示这是路由器产生的一个常规 LSP。

LSP 编号长度也为 1 字节,用于标识此 LSP 是否被分片。在 OSPF 中,使用了多种类型的 LSA 来通告路由信息,而在 IS-IS 中,路由器并不是用多种类型的 LSP 来通告路由信息,而是将所有路由信息都封装到一个 LSP 中进行传输。当 LSP 多大时,也就是包含的路由信息过多时,数据包将被进行分段,这与我们熟悉的 IP 分段是一样的。对于任何的分片操作,都是由路由器的 CPU 进行处理的,也就是执行进程交换,如果有过多的报文需要进行分片,那么将消耗大量的 CPU 资源,影响路由器的正常运行。对于分片的重组也是一样,也是要通过 CPU 进行处理,这样也会对接收分片的路由器造成严重的后果。IS-IS 为了避免这样的问题产生,采取了一种对 LSP 预分段的操作机制。路由器将较大的 LSP 预先拆分成很多更小的 LSP 后再扩散出去,而无需路由器在底层对其进行分片,这样可以降低由于分片产生的负面影响。当 LSP 编号为 0 时,表示这是 LSP 的一个分段,编号为 1 时,表示这是 LSP 的第二个分段,以此类推。

09

1 图是常规 LSP 的伪节点 ID 为 0,并且这是 LSP 的第一个分段,或者未分段。2 图是伪节点 LSP 的伪节点 ID 不为 0。3 图 LSP ID 的伪节点 ID 为 0,并且 LSP 编号为 1,表示这是一个常规 LSP 的第二个分段。如下图所示:

10

11

3. LSP 序列号( Sequence Number )

LSP 序列号是一个用 4 字节(32bit)进行表示的无符号整数。它的取值从 0 开始,每次递增 1,所以取值范围为 0~4294967295。当一台运行 IS-IS 的路由器接入到网络中后,它产生的第一个 LSP 的序号为 1。当网络环境发生变化时,路由器将重新生成 LSP,并将 LSP 序列号加 1。同样,当到达 LSP 的刷新间隔后,路由器将刷新此 LSP 并扩散到网络中,这时 LSP 序列号也同样加 1。可以看出,LSP 序列号主要用于使路由器能够识别一个 LSP 的新旧版本,这也与 OSPF 的 LSA 中携带的序列号是相同的作用。

当一个路由器从故障中恢复并重新接入到了网络中,这时它也将生成一个序列号为 1 的 LSP 报文。这时区域内的其他路由器将收到这个序列号为 1 的 LSP。如果其他路由器还未将链路状态数据库中之前由故障路由器产生的序列号较大的 LSP 清除,并且 LSP 中的内容都是相同的,这时它将认为本地链路数据库中的 LSP 具有更新的版本,便将扩散这个序列号较大的 LSP。当恢复故障的路由器收到这个 LSP 后,发现自己的 LSP 与收到的 LSP 的序列号不匹配,那么它将产生一个比收到的 LSP 的序列号大 1 的 LSP 的副本,这样可以是 LSP 序列号接近于出故障前的 LSP 序列号的值。

4. LSP 校验和( Checksum )

当路由器生成一个 LSP 后,为了保证 LSP 中信息的完整性,它将对 LSP 进行校验和计算,然后封装进 LSP 的 LSP 校验和字段(checksum)。校验和的计算包括从 LSP 中的剩余时间字段之后的字段一直到数据包的末尾,由于剩余时间是一个不断变化的字段,所以校验和计算将不包括这部分内容。校验和主要用于检查被破坏的 LSP 或者还没有从网络中清除的过期 LSP。当一台路由器收到一个 LSP,在将该 LSP 放入到本地链路数据库和将其再泛洪给其他邻接路由器之前,会重新计算 LSP 的校验和,如果校验和与 LSP 中携带的校验和不一致,则说明此 LSP 传输过程中已经被破坏。

当路由器收到了一个被破坏的 LSP 后,会采取一个清除的操作。它将该 LSP 的剩余时间设置为 0 然后再泛洪到网络中。当网络中的其他路由器收到这个剩余时间被置为 0 的 LSP 后,会将其本地链路状态数据库中相应的 LSP 清除。当产生这个被破坏的 LSP 的源路由器收到这个剩余时间被置为 0 的 LSP 并发现这个 LSP 是自己生成的后,会重新生成一个正确的 LSP 然后泛洪到网络中。

IS-IS 的这种 LSP 清除操作虽然可以有效的清除网络中被破坏的 LSP,给运行 IS-IS 路由协议的网络提供了一种自动修复的能力,但是它也带来了一种负面的影响。如果网络中的介质存在问题,就有可能产生 LSP 被连续破坏的现象。这些被破坏的 LSP 会被路由器不断的清除,同时源路由器也会不断的重新生成新的 LSP,这种现象被称为 LSP 破坏风暴。LSP 破坏风暴将消耗大量的网络资源。我们可以对路由器进行配置,使其在收到被破坏的 LSP 后忽略它,即丢弃被破坏的 LSP,从而启动清除操作。在后续 IS-IS 配置章节中将介绍具体的配置方法。

5. 区域修复( Partition )

在 LSP 报头中最后一个字节的 P(Partition)位占 1bit,表示区域划分或者分段区域的修复位。当 P 位被设置为 1 时,表明始发路由器支持自动修复区域的分段情况。ISO10589 中描述了如何通过建立一条穿过 L2 骨干网的 L1 路由来修复一个被隔离的 L1 区域。这种方式利用了每个区域与骨干网之间的连通性以及骨干网的连接性在骨干网中重新连接区域从而建立一条修复路径。这主要通过在每个区域中选举出一个具有 L2 路由功能的路由器作为区域指定的 L2 中间系统并在区域间建立一个被称作虚链路或虚连接的特殊邻接关系来实现。虚链路实现了穿过骨干网的 L1 修复路径。但是目前大多数的实现都不支持此区域修复功能。

12

如上图所示,区域 2 中,由于最下方的两个 L1 路由器间的链路故障,导致了整个 L1 区域被分离,使得路由信息不能正常交换。通过在骨干区域(Backbone)区域中建立一条虚链路(粗线表示)来连接两个被分离的 L1 区域,逻辑上修复了被分离的 L1 区域,使得区域内信息可以正常交换。

6. 区域关联( Attached )

在 LSP 报头中最后一个字节的 ATT(Attached)位占 4bit,表示区域关联位。L1/2 路由器在其生成的 L1 LSP 中设置该字段以通知同一区域中的 L1 路由器自己与其他区域相连。通常来说,这就意味着这个路由器与 L2 骨干区域相连。ATT 位中的 4bit 用来表明相连的区域是使用哪一种度量方式。如下图所示。

13

  • 第 4 位:默认度量

  • 第 5 位:延迟度量

  • 第 6 位:开销度量

  • 第 7 位:差错度量

在 IS-IS 与 OSPF 中,将骨干区域的路由(OSPF 中的 Area 0,IS-IS 中的 L2 区域)通告到非骨干区域(OSPF 中的非 Area 0 区域,IS-IS 中的 L1 区域)的方式是不同。在 OSPF 中,连接 Area 0 和非骨干区域的 ABR 通过 3 类 LSA(Network Sumary LSA,网络汇总 LSA)将路由器从骨干区域通告到非骨干区域。但对于 IS-IS 来说,L1/2 路由器从来不会将路由从 L2 骨干区域通告到 L1 区域。如果是这样,那 L1 区域中的路由器是如何得知区域外的路由器信息?如何将数据发送到其他区域?

在 ISO 10589 中,定义 IS-IS 的非骨干区域为末节区域(Stub Area),我们可以把 IS-IS 的 L1 区域想象成 OSPF 中的完全末节区域。OSPF 的完全末节区域不允许区域外路由和外部路由(来自其他路由域)的进入,完全末节区域中的路由器通过 ABR 通告的一条默认路由作为外出区域的路径。同样,IS-IS 的 L1 区域中的路由也是通过一条指向 L1/2 路由器的默认路由将数据路由到其他区域。当 L1 区域中的路由器收到 L1/2 路由器发送的 ATT 位被置位的 L1 LSP 后,便知道生成此 LSP 的路由器与其他区域(L2 骨干区域)相连,即一个 L1/2 路由器,这时它将创建一条指向 L1/2 路由器的默认路由,以便数据可以被路由到其他区域。

对于上述的这种操作方式,非骨干区域中的路由器对区域外的拓扑一无所知,只是单纯的依靠默认路由将数据转发到其他区域,在通向区域外有多个出口时,这可能会产生次优路径的选择。在 RFC 2966 中定义了一种可以将 L2 路由通告到 L1 区域的操作方式,术语称之为 “路由泄漏(Route Leaking)”。使用路由泄漏机制,可以使 L1/2 路由器以受控的方式将特定的 L2 路由通告到 L1 区域中,以避免次优路径的选择。

虽然 ATT 位同时在 L1 LSP 和 L2 LSP 中进行了定义,但是它只会在 L1 LSP 中被置位,并且只有 L1/2 路由器会设置这个字段。

7. 超载( Overload )

在 LSP 报头中最后一个字节的 OL(Overload)位占 1bit,表示超载位。此位用来表示路由器的资源状态。如果该 bit 被置位,就表示路由器发生了超载。超载是指路由器没有足够的系统资源(CPU 资源和内存资源)用来处理路由选择交换信息。被设置了超载位的 LSP 不会在网络中进行泛洪,并且当其他路由器收到设置了超载位的 LSP 后,在计算路径信息时不会考虑此 LSP,因此最终计算出来的到达目的地的路径将绕过超载的路由器。设置超载位还可以使数据的传输路径绕过某个特定的路由器。

当路由器的系统资源不足时将会自动在发送的 LSP 中设置超载位,或者可以通过特定的命令可以手工设置超载位。

8. 中间系统类型( IS Type )

在 LSP 报头中最后一个字节的中间系统类型(IS Type)位占 2bit,路由器的类型。该字段表示了此 LSP 是来自 L1 路由器还是 L2 路由器。这也表示了收到此 LSP 的路由器将把这个 LSP 放到 L1 链路状态数据库还是 L2 链路状态数据库。该 2bit 中 01 表示 L1;11 表示 L2;00 与 10 未使用。

2. DIS 和伪节点

LSP ID 中包括一部分称为伪节点标识符(Pseudonode ID),用来标识此 LSP 是否是由网络中的指定中间系统(DIS,Designated Intermediate System)为网络产生的伪节点 LSP。

在广播类型的网络(LAN)中,IS-IS 需要为每个网段选择一个指定中间系统 DIS,这里的指定中间系统 DIS 的作用与 OSPF 中的指定路由器 DR 的非常相似。在 OSPF 网络中,DR 用来负责将链路状态信息泛洪到每个非 DR 路由器,并且帮助其进行链路状态数据库的同步。在 IS-IS 中也是如此,为了使链路状态信息更加准确和实时的同步给网络中的所有路由器,并且要减小带宽的利用率和路由器的处理开销,IS-IS 也要在广播网络中选举出一个路由器(DIS)来达到这个目的。

在 IS-IS 中选举 DIS 的过程也是非常简单的。每个运行 IS-IS 协议的路由器的接口都拥有一个优先级(Priority),默认的优先级为 64,同样也可以通过命令手工修改默认的优先级。路由器之间发送的 Hello PDU 中将携带接口的优先级信息。每个路由器收到网络中其他路由器发送的 Hello PDU 后,通过比较优先级来进行 DIS 的选举。优先级数值越大的路由器将被选举为此网段的 DIS。这里与 OSPF 不同的是,在 OSPF 中,如果接口的优先级为 0,那么这台路由器将被认为没有资格成为此网段的 DR。在 IS-IS 中,如果接口的优先级为 0,这仅仅表示最低的优先级,但是此路由器还拥有成为 DIS 的资格。当两台路由器的接口优先级相同时,那么拥有更大的 SNPA(在 LAN 中通常为 MAC 地址)的接口的路由器将成为 DIS。在 OSPF 中如果优先级相同将比较 Router ID 。

在 OSPF 中,选举完 DR 后,还将选举出一个备份 DR,BDR(Backup DR),以用来在原先 DR 出现故障时接替新的 DR 角色,并重新选举出 BDR。但在 IS-IS 中,将不进行备份 DIS 的选举。如果 DIS 出现故障了,其他路由器将会重新选举出一个 DIS。其次,在 OSPF 中,DR 和 BDR 的选举是非抢占模式的,也就是说当有更优优先级的路由器加入到现有网络中后,也不会抢占原先 DR 和 BDR 的角色。从某种意义上来讲,在 OSPF 网络中,第一台启动的路由器将成为网络的 DR,第二台启动的路由器将将成为 BDR。与 OSPF 相比,DIS 的选举是抢占的,即当有更优 DIS 资格路由器加入网络后,它会成为网络中新的 DIS。这样,每次 DIS 的变更必须泛洪一组新的 LSP。

默认情况下,运行 IS-IS 的路由器将以每 10s 的间隔发送 Hello PDU。但是对于一个 DIS 来说,由于它在网络中起到重要的作用,所以它发送 Hello PDU 的间隔的频率将是其他路由器的 3 倍,也就是说 DIS 以每 3.3s 的间隔发送 Hello PDU。这样其他路由器可以迅速检测出 DIS 出现故障并开始新的选举过程,增加了网络的收敛速度。

另外,在 OSPF 中,非 DR 和非 BDR(DROTHER)路由器只与 DR 与 BDR 建立邻接关系(FULL 关系)。但在 IS-IS 中,所有的路由器之间都会建立邻接关系,而不仅仅是 DIS。在 IS-IS 网络中,每一台路由器都已组播方式发送它们的 LSP 数据包给所有的邻居路由器。DIS 通过使用序列号数据包(SNP)来确保 LSP 泛洪的可靠性。关于序列号数据包的详细信息将在下面章节中进行介绍。

在 ISO 10589 中定义了 3 种类型的 DIS:

  • L1 DIS

  • L2 DIS

  • 部分指定的 L2 DIS

部分指定的 L2 DIS 用于区域修复中,由于多数实现不支持区域修复,所以不对部分指定的 L2 DIS 进行介绍。

对于 IS-IS 来说,需要在一个网络上分别为 L1 和 L2 选举出单独的 DIS,即 L1 DIS 和 L2 DIS。对于一个接口上的优先级也分为 L1 优先级与 L2 优先级,而且这两个优先级可以不同。网络中的 L1 DIS 和 L2 DIS 可以是相同的路由器也可以是不同的路由器,即某台路由器可能是 L1 的 DIS,但是它可能不是 L2 的 DIS。我们可以通过命令调整接口默认的 L1 优先级和 L2 优先级来影响 DIS 的选举结果。

L1 DIS 和 L2 DIS 需要为网络生成伪节点 LSP,向广播网络中的所有路由器通告链路状态信息。同时 L1 DIS 和 L2 DIS 也要负责网络中的链路状态数据库的同步工作,保证网络中所有路由器都拥有一致的链路状态数据库。

在 IS-IS 中,整个网络被视为一个伪节点,伪节点是一个虚拟的节点,由选举出的 DIS 代表。使用 DIS 主要是为了减少广播网络中需要管理许多邻接关系的复杂性,同时利用高效的 LSP 扩散最小化带宽占用。伪节点是一个虚拟的节点。DIS 作为伪节点的代表通过发送伪节点 LSP 会通告与之相连的所有路由器。伪节点 LSP 相当于 OSPF 中的 2 类 LSA(Network LSA,网络 LSA)。伪节点 LSP 中只包含关于邻接路由器的信息,用于建立网络拓扑图和 SPF 计算。

在 IS-IS 中,点到点类型的链路上上无需选举 DIS,因为链路两端只连接两个路由器。这也与 OSPF 中一样,对于 OSPF 的点到点链路,也无需选举 DR 和 BDR。

下表中所示为 IS-IS 在广播类型链路与点到点类型链路上之间操作的比较:

广播链路点到点链路
适用的网络类型LAN(Ethernet 等)、全互联 WANPPP、HDCL、部分互联 WAN
Hello PDU 定时器10s,DIS 为 3.3s10s
Hello PDU 类型L1 IIH、L2 IIH点到点 IIH
是否使用 DIS
邻接关系数n (n-1)/2n-1

3. 路由选择信息扩散

SNP 通过描述链路状态数据库中部分或全部的 LSP 信息来保证路由器之间链路状态数据库的同步。此外,SNP 还可以用来进行 LSP 的请求和确认。因此,SNP 也具有类似 OSPF 中的 LSR(Link State Request,链路状态请求)、LSAck(Link State Acknowledgement,链路状态确认)和 DBD(Database Description,数据库描述)报文的作用。

SNP 分为两种类型

  • 完全序列号数据包(CSNP,Complete Sequence Number Packets)

  • 部分序列号数据包(PSNP,Partial Sequence Number Packets)

CSNP 与 PSNP 具有相似的数据包格式,并且都携带了链路状态数据库中的 LSP 摘要信息。对于 CSNP,数据包中携带了路由器链路状态数据库中所有 LSP 的摘要信息,而 PSNP 顾名思义,只携带了一部分 LSP 的摘要信息,CSNP 和 PSNP 分别用于不同的操作机制中。路由器为 L1 和 L2 分别产生 CSNP 和 PSNP,其中 CSNP 包含 L1 CSNP 和 L2 CSNP,同样 PSNP 包含 L1 PSNP 和 L2 PSNP。例如,L1 CSNP 中包含路由器 L1 链路状态数据库中所有 LSP 的摘要信息,L2 CSNP 中则包含路由器 L2 链路状态数据库中所有 LSP 的摘要信息。

所谓 LSP 的摘要信息,并不是某个 LSP 的所有内容,摘要信息只是包含了能够唯一标识某个 LSP 的必要的信息,这些信息是从 LSP 报头中提取出来的。LSP 摘要信息包括:

  • LSP ID

  • 剩余时间

  • 序列号

  • 校验和

这些字段之前都已经在介绍 LSP 报文结构时进行了详细的介绍。使用这些字段,路由器就可以唯一的标识出一个 LSP。注意,LSP 摘要信息并不包括 LSP 承载的具体的地址、掩码等信息,这些信息都是由 TLV 字段进行承载。

在广播网络中,路由器使用 CSNP 来保证链路状态数据库的完整性,并且只有 DIS 才会发送 CSNP 报文,DIS 发送 CSNP 报文的间隔为 10s。CSNP 报文中描述了 DIS 的链路状态数据库中所有 LSP 的摘要信息。当其他路由器收到 DIS 发送的 CSNP 后,会使用 CSNP 中的 LSP 摘要信息与与本地的链路状态数据库中的 LSP 进行比较,进行比较的目的是确定本地链路状态数据库中的信息是否已经同步和完整。如果路由器发现本地数据库中缺少某个 LSP 条目,那么它将使用 PSNP 向 DIS 请求这个缺少的 LSP 条目。这个 PSNP 报文中包含就是请求的 LSP 条目的摘要信息。当 DIS 收到其他路由器发送的 PSNP 报文后,将会发送一个完整的 LSP 报文,这个 LSP 就是其他路由器所缺少的 LSP 条目。在广播网络中,DIS 使用周期性的 CSNP 报文向网络中发送同步链路状态数据库的信号,而其他路由器使用 PSNP 报文来请求缺少的 LSP 条目。

在 IS-IS 的点到点类型的网络中,链路状态数据库同步的操作与广播网络中略有不同,而且路由器发送 CSNP 与 PSNP 报文的方式和其作用也有一些差别。

在点到点网络中不存在 DIS,路由器不会周期性的发送 CSNP 报文,CSNP 报文只在链路链路被激活时发送一次,而且链路两端的路由器都会发送 CSNP 报文以描述本地链路状态数据库中所有 LSP 的摘要信息。当路由器发送对端发送的 CSNP 中含有本地缺少的 LSP 信息时,也会使用 PSNP 报文向对端请求 LSP。当对端收到 PSNP 报文后,将向请求方发送包含完整 LSP 信息的 LSP 报文,这点上与广播网络中的操作是相同的。但是在点到点链路上,收到 LSP 报文的路由器还会向对方再次发送一个 PSNP 报文以对之前收到的 LSP 进行确认。可以说,在点到点网络中的 LSP 交换是可靠的。这点与广播网络不同,在广播网络中路由器不使用 PSNP 报文对收到的 LSP 进行确认,而是通过 DIS 周期性地发送 CSNP 报文以弥补广播网络中不可靠的 LSP 交换。

在点到点链路上,路由器使用 PSNP 对收到的 LSP 报文进行确认,所以在点到点链路上是可靠的泛洪机制。

IS-IS 路由协议支持两种网络类型:广播链路和点到点链路。默认情况下,IS-IS 将广播网络和 NBMA 网络看作是广播类型。对于封装了 PPP 或 HDCL 等协议的链路看作是点到点类型。对于 NBMA 网络中的主接口和点到多点子接口,IS-IS 将其看作是广播类型;对于 NBMA 网络中的点到点子接口,将其看作是点到点类型。 IS-IS 不像 OSPF 那样,提供了对 NBMA 网络(例如 Frame-Relay、ATM)的专门支持。对于 NBMA 网络,IS-IS 认为其网络拓扑是 PVC 全互联(mesh)的,就是把它看作广播网络。但如果实际网络拓扑中并不是 PVC 全互联的结构时,例如部分互联的结构和 Hub-Spoke 结构,推荐使用点到点类型网络,即使用点到点子接口,以免造成 NBMA 网络中的链路状态数据库同步出现问题。

当我们使用点到点子接口将 NBMA 网络转化为点到点的链路时,整个 NBMA 网络将产生过多的 PVC 部分互联或全互联的网状结构,但这将产生一定的负面影响,会使网络中产生大量的 LSP 泛洪流量。我们都知道,运行 IS-IS 的路由器当接收到一个 LSP 报文后,会将此 LSP 从除接收接口以外的所有启用了 IS-IS 协议的接口泛洪出去,以使网络中的其他路由器都可以接收到此 LSP。但是这种泛洪机制对于存在大量部分互联或全互联的网络将产生过多冗余的 LSP 扩散。

所谓全互联或全网状网络拓扑,是指所有路由器都与其他路由器向连接(通常是点到点子接口)。在这样的一个网络中,当一台路由器从某接口收到邻居泛洪过来的 LSP 后,由于它并不知道这个 LSP 是否已经被其他邻居路由器收到,所以会再从其他接口泛洪出去,即使其他路由器的链路状态数据库中已经存在这个 LSP。如果网络中有 n 个路由器的话,那么网络中的每台路由器都会扩散 n-2 条冗余的 LSP,这样总共被泛洪的多余的 LSP 将为(n-1)x(n-2),条而这些 LSP 的扩散是多余。如果每台路由器都刷新一条 LSP 的话,那么这个数量还将会成倍数的增长,导致了大量带宽资源的浪费。

为了解这种在全互联或高度互联的网络中出现的 LSP 泛洪的冗余现象,IS-IS 提供了一种解决方案 ——IS-IS 全通组,也称作 Mesh 组。IS-IS 全通组在 RFC 2973 中进行了定义。所谓全通组,就是假设所有路由器之间都是完全互联的,每个路由器都会直接收到其他路由器泛洪的原始的 LSP 的拷贝。

14

可以将路由器的接口加入到某个全通组中,一个路由器上可以存在多个全通组,全通组内接口之间的 LSP 泛洪是受限制的,全通组之间的 LSP 泛洪是正常的操作,未加入全通组的接口与全通组之间也是正常的 LSP 泛洪操作。

以下为使用了 IS-IS 全通组后路由器对 LSP 的处理方式:

  • 如果路由器从一个接口收到 LSP 后,路由器将不会把它再从与接收接口属于同一个全通组的接口泛洪出去,但路由器将向其他全通组内的接口和其他不属于全通组的接口泛洪 LSP。

  • 如果接收接口不属于任何全通组,那路由器也将向其他全通组内的接口和其他不属于全通组的接口泛洪 LSP。

使用 IS-IS 全通组来解决高度互联的网络中的冗余 LSP 扩散的问题时需要注意一下几点:

  • 全通组只是一个路由器本地的概念,接口加入的全通组也只是本地有意义的,不同路由器的 mesh group 编号无需保持一致,但通常推荐的做法是为全互联的一组设备使用同一个 mesh group 编号。

  • 全通组的操作方式只是对于路由器收到的 LSP 有效,对于由路由器本地生成的 LSP 将按照正常的操作方式,被泛洪到所有启用了 IS-IS 协议的接口。

  • 通常全互联或高度互联的网络拓扑的设计的初衷是为了提供链路的冗余性,使得当某条链路出现故障时路由器仍然可以收到泛洪的 LSP。使用全通组会在一定程度上破坏了网络的健壮性,所以在部署全通组技术时应该慎重的设计全通组的结构。

4. IS-IS 度量与扩展度量

1. IS-IS 度量

每一种路由协议都使用度量值来衡量到达某个目的地所经路径的优劣。在 RIP 路由协议中,使用跳数(hop)作为路由的度量值,即到达目的地所经过的路由器的数目;在 OSPF 路由协议中,使用花费(cost)作为路由的度量值。而且在 OSPF 中,接口的花费值是通过接口的带宽计算出来的,接口带宽越大,花费值越小,也就是更有可能被选为最佳路径,OSPF 的花费值与带宽是成反比的。

在 IS-IS 标准中,定义了四种类型的度量值:

  • 默认度量 —— 默认的度量类型。

  • 延迟度量 —— 表示链路的传输延迟。

  • 开销度量 —— 表示链路的开销。

  • 差错度量 —— 表示链路的出错概率。

虽然 IS-IS 定义了四种类型的度量,可以通过多种不同的方式衡量链路的可靠性,但是多数实现中,包括在锐捷路由器中,只支持默认度量。默认度量就相当于 OSPF 中花费(cost)值。默认度量是域中所有路由器都必须支持的。延迟度量、开销度量和差错度量都是可选类型,它们主要是为支持 QoS(Quality of Service,服务质量)的路由选择而定义的。与 OSPF 的自动计算 cost 值不同(通过带宽进行计算),默认情况下,IS-IS 的所有接口的 cost 值都为 10,它不是通过带宽进行计算的。所以如果使用接口默认的 cost 值的话,IS-IS 的度量就相当于 RIP 中的条数,这在包含不同链路类型和链路速度的网络中会造成次优路径的选择。

在实际网络环境中,强烈推荐根据接口的带宽修改默认的接口 cost 值,以避免次优路径的选择。

2. IS-IS 扩展度量(宽度量)

默认情况下,IS-IS 接口的 cost 值为 10,而且在不使用扩展度量(或称窄度量)的情况下,接口的 cost 值的取值范围只能为 0~63,即在 TLV 字段中(TLV 类型 2 和 TLV 类型 128)只能够使用 6bit 来表示接口度量值。显然最大值为 63 的接口 cost 将带来很大的局限性。IETF 通过定义扩展的 TLV 类型(TLV 类型 22 和 TLV 类型 135)来增大度量值的取值范围。在 TLV 类型 22 中提供了 24bit 的度量值字段,TLV 类型 135 提供了 32bit 的度量值字段。


IS-IS 路由协议(四)

原创 xuanbo 2009-09-16 21:25:25

1. IS-IS 配置示例

a) 帧中继配置

如下图所示:

IS-IS 路由协议(四)_职场

R1#sh running-config
!
hostname R1
ip cef
!
clns routing
!
interface FastEthernet0/0
ip address 11.1.1.1 255.255.255.0
ip router isis 
duplex half
!
interface Serial1/0.1 multipoint
ip address 10.10.10.4 255.255.255.0
ip router isis 
frame-relay map clns 120 broadcast
frame-relay map clns 110 broadcast
frame-relay map ip 10.10.10.1 120 broadcast
frame-relay map ip 10.10.10.3 110 broadcast
frame-relay map ip 10.10.10.4 110 broadcast
clns router isis 
!
interface Serial1/0.2 point-to-point
ip address 10.10.20.1 255.255.255.0
ip router isis 
frame-relay interface-dlci 100
clns router isis 
!
router isis 
net 49.0001.4444.4444.4444.00
!
R2#show running-config
!
hostname R2
ip cef
!
clns routing
!
interface FastEthernet0/0
ip address 11.1.2.1 255.255.255.0
ip router isis 
duplex half
!
interface Serial1/0
no ip address
ip router isis 
encapsulation frame-relay
serial restart-delay 0
no dce-terminal-timing-enable
clns router isis 
!
interface Serial1/0.1 point-to-point
ip address 10.10.20.2 255.255.255.0
ip router isis 
frame-relay interface-dlci 200
clns router isis 
!
router isis 
net 49.0001.2222.2222.2222.00
is-type level-1
!
R3#sh running-config
!
hostname R3
ip cef
!
clns routing
!
interface FastEthernet0/0
ip address 11.1.3.1 255.255.255.0
ip router isis 
duplex half
!
interface Serial1/0
ip address 10.10.10.3 255.255.255.0
ip router isis 
encapsulation frame-relay
serial restart-delay 0
no dce-terminal-timing-enable
frame-relay map clns 300 broadcast
frame-relay map clns 210 broadcast
frame-relay map ip 10.10.10.1 300 broadcast
frame-relay map ip 10.10.10.4 210 broadcast
clns router isis 
!
router isis 
net 49.0001.3333.3333.3333.00
is-type level-1
!
R4#sh running-config
!
hostname R4
ip cef
!
clns routing
!
interface Loopback0
ip address 12.1.1.1 255.255.255.0
ip router isis 
clns router isis 
!
interface FastEthernet0/0
no ip address
shutdown
duplex half
!
interface Serial1/0
ip address 10.10.10.1 255.255.255.0
ip router isis 
encapsulation frame-relay
serial restart-delay 0
no dce-terminal-timing-enable
frame-relay map clns 310 broadcast
frame-relay map clns 220 broadcast
frame-relay map ip 10.10.10.3 310 broadcast
frame-relay map ip 10.10.10.4 220 broadcast
clns router isis 
!
router isis 
net 49.0001.1111.1111.1111.00
is-type level-1
!

配置完成后,可以使用 show 命令来查看状态。

R4#sh isis route
IS-IS Level-1 Routing Table - version 12
System Id Next-Hop Interface SNPA Metric State
R4 --
R2 R1 Se1/0 DLCI 220 20 Up
R3 R3 Se1/0 DLCI 310 10 Up
R1 R1 Se1/0 DLCI 220 10 Up
R4#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
10.0.0.0/24 is subnetted, 2 subnets
C 10.10.10.0 is directly connected, Serial1/0
i L1 10.10.20.0 [115/20] via 10.10.10.4, Serial1/0
11.0.0.0/24 is subnetted, 3 subnets
i L1 11.1.2.0 [115/30] via 10.10.10.4, Serial1/0
i L1 11.1.3.0 [115/20] via 10.10.10.3, Serial1/0
i L1 11.1.1.0 [115/20] via 10.10.10.4, Serial1/0
12.0.0.0/24 is subnetted, 1 subnets
C 12.1.1.0 is directly connected, Loopback0
R4#sh isis neighbors
System Id Type Interface IP Address State Holdtime Circuit Id
R3 L1 Se1/0 10.10.10.3 UP 21 R1.01
R1 L1 Se1/0 10.10.10.4 UP 7 R1.01
R4#sh clns neighbors
System Id Interface SNPA State Holdtime Type Protocol
R3 Se1/0 DLCI 310 Up 27 L1 IS-IS
R1 Se1/0 DLCI 220 Up 7 L1 IS-IS
R4#sh isis database
IS-IS Level-1 Link State Database:
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
R4.00-00 * 0x0000000C 0x11A8 918 0/0/0
R2.00-00 0x00000009 0xED7B 685 0/0/0
R2.01-00 0x00000006 0xFF46 480 0/0/0
R3.00-00 0x0000000D 0x47C5 525 0/0/0
R1.00-00 0x0000000A 0x9F7A 672 0/0/0
R1.01-00 0x00000009 0xC034 651 0/0/0
R4#sh isis database detail R1.00-00
IS-IS Level-1 LSP R1.00-00
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
R1.00-00 0x0000000A 0x9F7A 651 0/0/0
Area Address: 49.0001
NLPID: 0x81 0xCC 
Hostname: R1
IP Address: 10.10.20.1
Metric: 10 IP 11.1.1.0 255.255.255.0
Metric: 10 IP 10.10.10.0 255.255.255.0
Metric: 10 IP 10.10.20.0 255.255.255.0
Metric: 10 IS R1.01
Metric: 10 IS R2.00
Metric: 0 ES R1
R4#sh isis database detail R1.01-00
IS-IS Level-1 LSP R1.01-00
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
R1.01-00 0x00000009 0xC034 627 0/0/0
Metric: 0 IS R1.00
Metric: 0 IS R4.00
Metric: 0 IS R3.00

b) IS-IS 认证

1 . Interface Authentication

IS-IS 路由协议(四)_02
Router A

interface ethernet 0
ip address 10.3.3.1 255.255.255.0
ip router isis
isis password SECr3t
interface ethernet1
ip address 10.1.1.1 255.255.255.0
ip router isis
router isis
net 49.1234.1111.1111.1111.00

Router B

interface ethernet 0
ip address 10.3.3.2 255.255.255.0
ip router isis
isis password SECr3t
interface ethernet1
ip address 172.16.1.1 255.255.255.0
ip router isis
router isis
net 49.1234.2222.2222.2222.00
2.Area Authentication

IS-IS 路由协议(四)_03
Router A

interface ethernet 0
ip address 10.3.3.1 255.255.255.0
ip router isis
interface ethernet1
ip address 10.1.1.1 255.255.255.0
ip router isis
router isis
net 49.1234.1111.1111.1111.00

area-password tighter

Router B

interface ethernet 0
ip address 10.3.3.2 255.255.255.0
ip router isis
interface ethernet1
ip address 172.16.1.1 255.255.255.0
ip router isis
router isis
net 49.1234.2222.2222.2222.00

area-password tighter

Router C

interface ethernet1
ip address 172.16.1.2 255.255.255.0
ip router isis
interface ethernet0
ip address 192.168.50.1 255.255.255.0
ip router isis
router isis
net 49.1234.3333.3333.3333.00

area-password tighter

Router D

interface ethernet1
ip address 10.1.1.2 255.255.255.0
ip router isis
interface ethernet0
ip address 192.168.50.2 255.255.255.0
ip router isis
router isis
net 49.1234.4444.4444.4444.00

area-password tighter

3.Domain Authentication

IS-IS 路由协议(四)_04
Router A

interface ethernet 0
ip address 10.3.3.1 255.255.255.0
ip router isis
interface ethernet1
ip address 10.1.1.1 255.255.255.0
ip router isis
router isis
net 49.1234.1111.1111.1111.00

domain-password security
Router B

interface ethernet 0
ip address 10.3.3.2 255.255.255.0
ip router isis
interface ethernet1
ip address 172.16.1.1 255.255.255.0
ip router isis
router isis
net 49.1234.2222.2222.2222.00

domain-password security
Router C

interface ethernet1
ip address 172.16.1.2 255.255.255.0
ip router isis
interface ethernet0
ip address 192.168.50.1 255.255.255.0
ip router isis
router isis
net 49.5678.3333.3333.3333.00

domain-password security
Router D

interface ethernet1
ip address 10.1.1.2 255.255.255.0
ip router isis
interface ethernet0
ip address 192.168.50.2 255.255.255.0
ip router isis
router isis
net 49.9999.4444.4444.4444.00

domain-password security

4.Domain, Area, and Interface Authentication

IS-IS 路由协议(四)_05
domain-password seCurity


华为中间系统到中间系统(isis 协议)的详细介绍和原理,配置

RouterRanger 已于 2023-12-15 11:43:50 修改

华为中间系统到中间系统介绍

华为中间系统到中间系统(Intermediate System to Intermediate System,IS-IS)是一种内部网关协议(Interior Gateway Protocol,IGP),常用于大规模的企业网络和互联网服务提供商的网络中(Internet Service Provider,ISP)环境中实现路由功能。也是一种用于在自治系统(AS)之间进行路由信息传递的动态协议。IS-IS 由国际标准化组织 ISO(International Organization for Standardization)和国际电信联盟 ITU(International Telecommunication Union)共同制定,被广泛应用于各种网络设备和路由器中。

IS-IS 协议的原理

  1. 路由器间链路建立:IS-IS 协议使用链路状态路由算法,路由器之间通过 IS-IS 协议建立邻居关系,根据链路状态数据库(Link State Database)更新路由表。

  2. 路由信息广播:每个 IS-IS 路由器通过链路状态协议数据单位(Link State Protocol Data Units,简称 LSPDU)广播自己的链路状态信息。LSPDU 包含了路由器的邻居关系、链路的度量值、网络拓扑信息等。

  3. 路由计算和路径选择: IS-IS 路由器通过收集到的链路状态信息构建链路状态数据库,使用 Dijkstra 算法计算最短路径树,并根据最短路径选择最佳路径。

  4. 路由信息更新: 当网络状态发生变化时,IS-IS 路由器会更新链路状态数据库,并发送相应的 LSPDU 来通知其他路由器进行路由表更新。

IS-IS 协议采用链路状态路由(Link State Routing)的算法,其基本原理是通过路由器之间的链路状态信息(Link-State Information)来计算出最优的路由路径。IS-IS 协议使用两个层级来组织网络结构,即在区域内部的 Level 1 层级和跨区域的 Level 2 层级。Level 1 区域内的路由器只关心区域内的路由信息,而 Level 2 区域内的路由器则承担跨区域的路由信息分发。

华为 ISIS 协议和 ospf 协议的区别

华为中间系统到中间系统协议(Intermediate System to Intermediate System Protocol,IS-IS)和开放最短路径优先协议(Open Shortest Path First,OSPF)是两种常见的内部网关协议(Interior Gateway Protocol,IGP),用于在自治系统(AS)内传递路由信息。它们之间的区别主要体现在以下几个方面:

  1. 网络拓扑类型: IS-IS 协议可以适用于多种网络拓扑结构,包括点对点、点对多点和广播链路等。而 OSPF 协议主要适用于广播链路和点对点链路。

  2. 数据结构: IS-IS 协议使用链路状态数据库(Link State Database)来存储和传播路由信息,每个路由器都维护自己的链路状态数据库,并通过链路状态协议数据单位(Link State Protocol Data Units,LSPDU)广播信息。而 OSPF 协议使用链路状态数据库(Link State Database)和路由器链路状态(Router Link State)来存储和传播路由信息。

  3. 路由计算: IS-IS 协议使用 Dijkstra 算法进行路由计算,通过计算最短路径树来选择最佳路径。而 OSPF 协议使用 OSPF 算法进行路由计算,同样是通过计算最短路径树来选择最佳路径。

  4. 原理: IS-IS 协议是 ISO 制定的标准化协议,最初用于 ISO 的 OSI 参考模型中的第二层(数据链路层)和第三层(网络层)之间的路由。而 OSPF 协议是由 IETF 制定的开放标准协议,设计用于 IPv4 和 IPv6 网络中的路由。

  5. IS-IS 协议使用: IS-IS 包进行邻居之间的链路状态信息交换;OSPF 协议使用 Hello 包和 LSA(Link State Advertisement)进行邻居之间的交互。

等等。

华为 ISIS 常用配置命令


isis  1 //isis 的进程号为 1
network-entity 10.0000.0000.0001.00    // 区域为 10,名字 0000.0000.0001,后面两个 00 代表正在使用 ip 协议
isis dis-priority  120  level-1  //isis 的优先级为 120,默认为 64 ,优先级越高越优先级别为 level-1
is-level level-1   // 配置 ISIS 协议的 IS 级别为 1,,默认为 level1-2,1 和 2 都有
import-route  direct  // 路由器将会将直连路由(直接连接到路由器的网络)导入到系统的路由表中
import-route  isis level-2 into level-1  // 在边缘路由配置路由渗透,让 level-2 明显路由发给 level-1, 默认是不知道 level-2 的路由,只是走的是默认路由
summary 192.168.0.0 255.255.255.0 level-2   // 链路聚合让 192.168.0.0 这个地址汇总路由在 level-2,让 level-2 不要明细的显示目标 ip 地址
isis  enable  1  // 进入需要配置 isis 的接口,启动 isis 并把 isis 的进程号  1 配置给这个接口
isis circuit-type p2p   // 设置为点到点链接类型

华为 ISIS 查询常用命令


display isis route  // 查看关于 isis 协议的路由表
dis  isis  br   // 查看 isis 邻居信息
display isis peer    // 检查 IS-IS 邻居关系
dis ip ro pr isis     // 查看 ISIS 协议相关的 IP 路由信息
dis   isis  lsdb    // 查看 isis 的 lsdb 分析
dis isis lsdb 加在 dis   isis lsdb 里面查询出的 0000.0000.0001.00-00    加 virbose // 查看 isisdb 详细信息分析

实验案例环境

通过 6 台路由器和两台交换机和 pc 搭建成以下拓扑图:

img

首先给各个设备配置上相对应的 IP 地址,再在 AR1,AR2,AR3,AR4,AR5 上配置 isis 协议,在 AR5,AR6 上配置上 ospf 协议,在 AR6 上配置 dhcp 让 pc 以 dhcp 获取 IP 地址。

实验目的: 学习 isis 协议的基本配置,了解 ISIS 协议和 OSPF 协议要如何互连来建立通信。

接下来为 AR1,AR2,AR3,AR4,AR5,AR6 进行配置

AR1 配置 isis 协议,并设置 dis 的优先级


[AR1] isis 1   //isis 的进程号为 1
[AR1-isis-1] is-level level-1   // 配置 ISIS 类型为 1,默认为 level1-2
[AR1-isis-1] network-entity 10.0000.0000.0001.00   //10 代表 Areaid,systemid:0000.0000.0001,后面两个 00 代表正在使用 ip 协议
[AR1] int g0/0/0   // 进入到 g0/0/0 接口
[AR1-GigabitEthernet0/0/0] isis enable 1  // 启动 isis 并把 isis 的进程号 1 配置给这个接口
[AR1-GigabitEthernet0/0/0] isis dis-priority 100 level-1  // 设置 dis 的优先级为 100,默认为 64

AR2 配置 isis 协议,并让 level-2 明显路由发给 level-1


[AR2] isis 1
[AR2-isis-1] network-entity 10.0000.0000.0002.00
[AR2-isis-1] import-route isis level-2 into level-1   //// 让 level-2 明显路由发给 level-1, 默认是不知道 level-2 的路由,只是走的是默认路由
[AR2] interface GigabitEthernet0/0/1
[AR2-GigabitEthernet0/0/1] isis enable 1
[AR2] interface GigabitEthernet 0/0/0
[AR2-GigabitEthernet0/0/0] isis enable 1

AR3 配置 isis 协议,并让 level-2 明显路由发给 level-1


[AR3] isis 1
[AR3-isis-1] network-entity 10.0000.0000.0003.00
[AR3-isis-1] import-route isis level-2 into level-1   // 让 level-2 明显路由发给 level-1, 默认是不知道 level-2 的路由,只是走的是默认路由
[AR3] interface GigabitEthernet0/0/2
[AR3-GigabitEthernet0/0/2] isis enable 1
[AR3] interface Serial 1/0/0
[AR3-Serial1/0/0] isis enable 1

AR4 配置 isis 协议,并把修改为点到点链接类型


[AR4] isis 1
AR4-isis-1] network-entity 10.0000.0000.0004.00
AR4-isis-1] is-level level-2
[AR4] interface GigabitEthernet 0/0/0
[AR4-GigabitEthernet0/0/0] isis enable 1
[AR4] interface  Serial 1/0/0
[AR4-Serial1/0/0] isis enable 1
[AR4] interface GigabitEthernet 0/0/2
[AR4-GigabitEthernet0/0/2] isis enable 1
[AR4-GigabitEthernet0/0/2] isis circuit-type p2p    // 设置为点到点链接类型

AR5 配置 isis 和 ospf 协议,并使用重发布把 isis 和 ospf 路由注入让互连来建立通信

[AR5] isis 1
[AR5-isis-1] network-entity 10.0000.0000.0005.00
[AR5-isis-1] is-level level-2
[AR5-isis-1] import-route ospf 1 // 将 ospf1 路由注入到 isis 中
[AR5] interface GigabitEthernet 0/0/2
[AR5-GigabitEthernet0/0/2] isis enable 1
[AR5-GigabitEthernet0/0/2] isis circuit-type p2p
[AR5] interface  GigabitEthernet 0/0/0
[AR5-GigabitEthernet0/0/0] isis enable 1
[AR5] ospf 1
[AR5-ospf-1] area 0
[AR5-ospf-1-area-0.0.0.0] network 172.16.0.0 0.0.0.255
[AR5-ospf-1] import-route isis 1  / 将 isis1 路由注入到 ospf1 中

AR6 配置 isis 和 ospf 协议,并创建 dhcp 为 pc 分配 IP 地址

[AR6] dhcp enable  // 开启 dhcp
[AR6] ip pool huawei1   // 创建地址池名为 huawei1
[AR6-ip-pool-huawei1] network 192.168.100.0 mask 255.255.255.0   // 指定 IP 网段范围
[AR6-ip-pool-huawei1] gateway-list 192.168.100.254   // 配置网关
[AR6] interface GigabitEthernet 0/0/1
[AR6-GigabitEthernet0/0/1] dhcp select global  // 分配接口 IP
[AR6] ospf 1
[AR6-ospf-1] area 0
[AR6-ospf-1-area-0.0.0.0] network 192.168.100.0 0.0.0.255
[AR6-ospf-1-area-0.0.0.0] network 172.16.0.0 0.0.0.255

配置完后,在 AR1 使用以下命令查看关于 isis 协议的路由表

display isis route

img

在 AR1 的 isis 路由表可以看到每目的地地址,进行测试是否可以通信。

imgimg

通过 tracert 追踪到 pc 是可以到达的,而 pc 通过 tracert 追踪也是可以到达的,这就是通过 isis 协议配置来建立链接,并通过路由注入让 ospf 协议与 isis 协议建立互连来建立通信。

注意:本博客内容仅供参考,具体操作需根据实际情况进行调整。


ISIS 协议详解

把倒立的世界腾空 于 2020-06-06 18:32:29 发布

概述

IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统)路由协议最初是 ISO(国际标准化组织)为 CLNP(Connection Less Network Protocol,无连接网络协议)设计的一种动态路由协议,也是一种基于链路状态并使用最短路径优先算法(SPF)进行路由计算的一种 IGP 协议。

协议优先级:15   metric(度量值) : cost

原理

IS-IS 是一种链路状态路由协议,每一台路由器都会生成一个 LSP,它是该路由器所有使能 IS-IS 协议接口的链路状态信息的集合。通过跟相邻设备建立 IS-IS 邻接关系,互相更新本地的 LSDB,使 LSDB 与整个 IS-IS 网络其他设备的 LSDB 同步,然后根据 LSDB 运用 SPF 算法计算出 IS-IS 路由。如果此 IS-IS 路由是到目的地址的最优路由,则此路由会记录到 IP 路由表中,并指导报文的转发。

网络类型

  • 点对点(P2P)网络类型

  • 广播型(MA)网络类型

拓扑结构

IS-IS 在自治系统内采用骨干区域与非骨干区域两级的分层结构。

一般来说,将 Level-1 路由器部署在非骨干区域,将 Level-2 路由器部署在骨干区域,每一个非骨干区域都通过 Level-1-2 路由器与骨干区域相连

*IS-IS 的一个路由器的所有接口肯定在同一个区域,如图

image-20200606140610478

路由器类型

  1. Level-1 路由器

Level-1 路由器负责区域内的路由,它只与属于同一区域的 Level-1 和 Level-1-2 路由器形成邻居关系,属于不同区域的 Level-1 路由器不能形成邻居关系。Level-1 路由器只负责维护 Level-1 的链路状态数据库 LSDB(Link State Database),该 LSDB 包含本区域的路由信息,到本区域外的报文转发给最近的 Level-1-2 路由器。

  1. Level-2 路由器

Level-2 路由器负责区域间的路由,它可以与同一或者不同区域的 Level-2 路由器或者其它区域的 Level-1-2 路由器形成邻居关系。Level-2 路由器维护一个 Level-2 的 LSDB,该 LSDB 包含区域间的路由信息。

所有 Level-2 级别(即形成 Level-2 邻居关系)的路由器组成路由域的骨干网,负责在不同区域间通信。路由域中 Level-2 级别的路由器必须是物理连续的,以保证骨干网的连续性。只有 Level-2 级别的路由器才能直接与区域外的路由器交换数据报文或路由信息。

  1. Level-1-2 路由器

同时属于 Level-1 和 Level-2 的路由器称为 Level-1-2 路由器,它可以与同一区域的 Level-1 和 Level-1-2 路由器形成 Level-1 邻居关系,也可以与其他区域的 Level-2 和 Level-1-2 路由器形成 Level-2 的邻居关系。Level-1 路由器必须通过 Level-1-2 路由器才能连接至其他区域。

Level-1-2 路由器维护两个 LSDB,Level-1 的 LSDB 用于区域内路由,Level-2 的 LSDB 用于区域间路由。

image-20200606141137860

九种报文

  • Hello:用于建立和维持邻居关系,也称为 IIH(IS-to-IS Hello PDUs)hello 时间为 10s,hold 时间 为 30s,DIS 路由器发送 hello 时间为 3.3s,hold 时间依然为 30s
  1. Broadcast L1-Hello 用于建立 Level-1 的邻居关系 ,使用组播方式发送,地址:0180.C200.0014

  2. Broadcast L2-Hello 用于建立 Level-2 的邻居关系 ,使用组播方式发送,地址:0180.C200.0015

  3. P2P Hello:点到点网络的 hello 报文

  • LSP(链路状态 PDU)类似于 OSPF 的 LSU,分为 Level-1、Level-2,用于交换链路状态信息,触发更新或 15 分钟周期更新

  • CSNP(完全序列号数据包)类似于 OSPF 的 DD 报文,分为 Level-1、Level-2,包括 LSDB 中所有 LSP 的摘要信息,从而可以在相邻路由器间保持 LSDB 的同步。在广播网络上,CSNP 由 DIS 定期发送(缺省的发送周期为 10 秒);在点到点链路上,CSNP 只在第一次建立邻接关系时发送。

  • PSNP(部分序列号数据包)类似于 OSPF 的 LSRequest 或 LSAck 报文,分为 Level-1、Level-2,只列举最近收到的一个或多个 LSP 的序号,它能够一次对多个 LSP 进行确认,当发现 LSDB 不同步时,也用 PSNP 来请求邻居发送新的 LSP

邻居关系建立

  • 广播网络:

采用的是可靠的邻接建立过程,如果在接收的 IIH 报文中看到了自己接口的 MAC 地址,说明邻接已经收到并确认了自己发送的 IIH 报文。那么本地维护邻居的状态变为 UP 状态。

  • 点到点网络:

2Way 是属于两次握手,没有可靠性保证。只要收到邻接发送的 IIH 报文,并检测通过,维护邻居的状态为 UP 状态。

3Way 是属于三次握手,在点到点网络中使用 3way 的方式保证邻接建立的可靠性。新增一种 TLV,点到点邻居状态 TLV。

两次握手机制存在明显的缺陷。当路由器间存在两条及以上的链路时,如果某条链路上到达对端的单向状态为 Down,而另一条链路同方向的状态为 Up,路由器之间还是能建立起邻接关系

注:在华为中默认是 3way 的建立过程。

建立条件

  • 只有同一层次的相邻路由器才有可能成为邻居。

  • 对于 Level-1 路由器来说,区域号必须一致。

  • 链路两端 IS-IS 接口的网络类型必须一致。

  • 链路两端 IS-IS 接口的地址必须处于同一网段。

DIS(Designated Intermediate System)

在广播网络中,IS-IS 需要在所有的路由器中选举一个路由器作为 DIS,在邻居关系建立后,路由器会等待两个 Hello 报文间隔,再进行 DIS 的选举。

  • 作用

周期性 10s 发送 CSNP 报文,CSNP 相当于 DBD 接收 PSNP 请求,回复 LSP 应答(同时担当 ACK 确认)

创建和更新伪节点(Pseudonodes)

负责生成伪节点的 LSP(Link state Protocol Data Unit),用来描述这个网络上有哪些网络设备。

  • 选举规则

优先级(选大)>MAC 地址(选大)

Level-1 和 Level-2 的 DIS 是分别选举的

可手动配置优先级,默认为 64

优先级为 0 也参与选举(区别于 ospf)

  • 特点

没有备份(所有的路由器之间都形成邻接关系,都可以互相交互 LSP 信息,DIS 只是负责同步 LSDB)

会抢占(当有新的路由器加入,并符合成为 DIS 的条件时,这个路由器会被选中成为新的 DIS)

不同级别的 DIS 可以是同一台路由器,也可以是不同的路由器。

LSP 的交互过程

  • 广播网络:

建立邻接关系。

向组播地址通告自己的 LSP,Level-1 的组播地址 01-80-C2-00-00-14,level-2 的组播地址:01-80-C2-00-00-15。

由 DIS 收集 LSP,并每隔 10s 发送一次 CSNP,在 CSNP 报文中通告 DIS 设备中 LSDB 中所有 LSP 的摘要信息(LSP 头部信息)

其他设备收到 DIS 发送的 CNSP 报文后,需要查看在 CNSP 报文中是否包含自己的 LSP,如果包含说明 DIS 收到了自己发送的 LSP。如果没有需要重传。同时,还需要将 CSNP 中的摘要信息和本地的 LSDB 做对比,查看本地去缺少哪些 LSP,后续通过 PSNP 报文向 DIS 请求自己缺少的 LSP。

DIS 收到 PSNP 报文后回复 PSNP 报文中请求的 LSP。

  • 上述过程中所有的报文都是以组播方式交互。
  • 点对点网络:

首先建立邻接关系。

开始互相发送 CSNP,在 CSNP 报文中包含本地 LSBD 中所有 LSP 的摘要信息。

收到邻居发送的 CSNP 报文,需要将 CSNP 报文中的 LSP 摘要信息和自己的 LSDB 做对比,查看缺少的 LSP,并通过 PSNP 报文请求缺少的 LSP。

收到 PSNP 请求后,回复 LSP 报文。

收到 LSP 报文后回复 PSNP 确认接收到的 LSP。

路由器工作原理

Leve-1 路由器:只存在 L-1 的 LSP 信息(路由信息和拓扑信息)

Leve-2 路由器:只存在 L-2 的 LSP 信息(仅仅存在路由信息)

Leve-1-2 路由器:存在 L-1 和 L-2 的 LSP 信息

例如:R1、R2 是 1 区域,R3 是 2 区域,那么 R1 是 L-1 路由器,R2 就是 L-1-2 路由器,R3 是 L-2 路由器

R1 传递 L-1 LSP,R2 传递 L-1 LSP 和 L-2 LSP,因为 R3 是 L-2 路由器,所以他可以学习到 R2 的 L-1-2 信息,但是 R1 识别不到 R3 的 L-2 信息,所以 R2 会将里面的 ATT, 位置为 1,默认是 0,那么 R1 就会向传递给自己 ATT 是 1 的路由器自动产生一条缺省。

L-1-2 路由器收到数据包时候会检测去往的目标网段是否与自己在一个区域,如果是查看 L-1 信息,不是就查看 L-2 信息。

默认情况下:所有设备都是 L-1-2

NET 地址

运行 IS-IS 协议的路由器必须有一个被称为 NET (Network Entity Title)的网络地址,NET 也称为网络实体名,可唯一标识一台路由器,长度为 8 至 20 字节,是可变长的,采用 16 进制写法,两位代表一个字节

image-20200606151806982

  • 格式

区域 ID (1 ~ 13 字节)+ 系统 ID(6 个字节)+SEL (1 个字节),NET 中的 SEL 总是为 00。

如:49.0001.0000.0000.0001.00

最长 :49.1234.5678.2211.4511.1111.2232.5533.8881.2411.00

区域号必须从后往前确认,先确认 NSEL 为 00,再确认 System ID :5533.8881.2411,剩下才是区域号:

49.1234.5678.2211.4511.1111.2232

  • 配置方法

例如:一台路由器使用接口 Loopback0 的 IP 地址 1.1.1.1 作为 Router ID,那么 SystemID 可以进行如下转换:

将 IP 地址 1.1.1.1 的每一部分都扩展为 3 位,不足 3 位的在前面补 0:001.001.001.001

将扩展后的地址 001.001.001.001 重新划分为 3 部分,每部分由 4 位数字组成,得到的 0010.0100.1001 就是 System ID

这台路由器属于 area 1 区域,则区域号设置为 49.0001,那么这台路由器的 NET 地址为:49.0001.0010.0100.1001.00

  • 同一台路由器,可以配置 3 个 NET,但它们的 system ID 要相同

IS-IS 路由渗透

  • 作用

Level 1-2 和 Level-2 路由将自己知道的其他 Level-1 区域以及 Level-2 区域的路由信息通报给指定的 Level-1 区域的过程,需要手动配置。

  • 原理

Level-1 区域必须只能与骨干区域相连,不同 level-1 区域之间不能直接相连。level-1 区域内的路由信息会通过 level-1-2 路由器通报给 level-2 区域,即 level-1-2 路由器会将学习到的 level-1 路由信息封装进 level-2 LSP,并将这些 level-2 LSP 传递给其他 level-2 和 level-1-2 路由器。因此,level-1-2 和 level-2 路由器是知道整个 IS-IS 路由域的路由信息的。

但是在缺省情况下,level-1-2 和 level-2 路由器并不会将自己知道的路由域中其他 level-1 区域以及骨干区域的路由信息通报给 level-1 区域。于是,level-1 路由器只能通过自动生成缺省路由来访问区域以外的任何目的地,类似 ospf 的 Totally Stub 区域。

但是缺省路由未必就是最优路径,假设某个场景是要求 level-1 路由器选择最优路径到达目的地的这种情况,缺省路由显然就无法满足,这个时候也需要让 level-1 知道其他外部区域的路由信息,让它自己计算选择最优路径或者人为配置 cost 值让它按照我们想让他走的路径到达目的地,这种前提下就需要路由渗透。

命令:
import-route isis level-2 into level-1  // 在 level-1-2 路由器上配置

  • 配置完成后,缺省路由还存在路由表中,但是它会优先选择最优路径

度量值类型

  • 窄模式(narrow):范围 1-63

开启 auto-cost enable 之后,cost 值见表:

image-20200606174319393

  • 宽模式(wide):范围:1-16777214

开启 auto-cost enable 之后,COST = (bandwidth-reference / 接口带宽)* 10;

cost 默认为 10,可手动指定

相关术语

image-20200606175915375

IS(Intermediate System):中间系统。相当于 TCP/IP 中的路由器,是 IS-IS 协议中生成路由和传播路由信息的基本单元。

ES(End System):终端系统。相当于 TCP/IP 中的主机系统。ES 不参与 IS-IS 路由协议的处理,ISO 使用专门的 ES-IS 协议定义终端系统与中间系统间的通信。

伪节点:是用来模拟广播网络的一个虚拟节点,并非真实的路由器。在 IS-IS 中,伪节点用 DIS 的 System ID 和一个字节的 Circuit ID(非 0 值)标识。使用伪节点可以简化网络拓扑,使路由器产生的 LSP 长度较小。另外,当网络发生变化时,需要产生的 LSP 数量也会较少,减少 SPF 的资源消耗。

常用命令

isis 100  // 配置 isis 进程号
network-entity 49.0001.0010.0100.1001.00   // 配置 NET 值
is-level level-1  // 配置路由器类别,默认是 level-1-2,即使配了也不会显示
int g0/0/1   // 进接口使能 isis 进程
isis enable 100
isis cost 50  // 配置花销
import-route isis level-2 into level-1   // 配置路由渗透
dis isis peer // 查看邻居信息
dis isis int g0/0/0   // 查看接口的 isis 信息,可查看是否为 DIS
dis isis lsdb    // 查看 isis 的链路状态数据库信息

常用表项信息

在这里插入图片描述

img

image-20200606174607953

image-20200606175137096


IS-IS 路由原理详解

可惜已不在 已于 2024-09-17 10:05:44 修改

一 协议介绍

IS-IS 最初是国际标准化组织 ISO(the International Organization for Standardization)为它的无连接网络协议 CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议。随着 TCP/IP 协议的流行,为了提供对 IP 路由的支持,IETF 在相关标准中对 IS-IS 进行了扩充和修改,使它能够同时应用在 TCP/IP 和 OSI 环境中,称为集成 IS-IS(Integrated IS-IS 或 Dual IS-IS)。IS-IS 使用最短路径优先 SPF(Shortest Path First)算法进行路由计算,收敛速度快,拓展性强,运行在数据链路层,抗攻击能力强,可以实现大规模网络的互通。

优点:

  • IS-IS 报文中采用 TLV 格式,扩展性很高;
  • 一个路由器最多可配置多个区域地址,可以实现多区域的平滑合并;
  • 报文结构简单,邻居交互效率高;
  • 由于 IS-IS 工作在数据链路层,因此不依赖 IP 地址;
  • 采用最短路径 SPF 算法,收敛速度快。
  • 可应用于规模较大的网络中。如大型 ISP(Internet Service Provider)中

二 协议基本概念

为了支持大规模的路由网络,IS-IS 在路由域内采用两级的分层结构,即一个大的 Domain(域)可以被分为多个 Areas(区域)。IS-IS 网络中三种不同级别的路由设备:一般来说,将 Level-1 路由设备部署在区域内,Level-2 路由设备部署在区域间,Level-1-2 路由设备部署在 Level-1 和 Level-2 路由设备的中间。如下图所示,一个运行 IS-IS 协议的网络,整个骨干区域(backbone)不仅包括 Area1 中的所有 Level-2 路由设备,还包括其他区域的 Level-1-2 路由设备

img

Level-1 路由器

Level-1 路由器负责区域内的路由,它只与属于同一区域的 Level-1 和 Level-1-2 路由器形成邻居关系。一个 Level-1 路由器只负责维护本区域内的 LSDB(Link State Database,链路状态数据库),对于目的地不在本区域内的路由,Level-1 路由器会将该路由的目的地标识为最近的 Level-1-2 路由器。

Level-2 路由器

Level-2 路由器负责区域间的路由,可以与 Level-2 或其它区域的 Level-1-2 路由器形成邻居关系,维护一个 Level-2 的 LSDB,该 LSDB 包含区域间的路由信息。

所有 Level-2 级别的路由器组成路由域的骨干网,负责在不同区域间通信,路由域中 Level-2 级别的路由器必须是连续的,以保证骨干网的连续性。只有 Level-2 级别的路由器才能直接与区域外的路由器交换数据报文或路由信息。

Level-1-2 路由器

同时属于 Level-1 和 Level-2 的路由器称为 Level-1-2 路由器,可以与同一区域的 Level-1 和 Level-1-2 路由器形成 Level-1 邻居关系,也可以与其他区域的 Level-2 和 Level-1-2 路由器形成 Level-2 的邻居关系。Level-1 路由器必须通过 Level-1-2 路由器才能连接至其他区域。

Level-1-2 路由器维护两个 LSDB,Level-1 的 LSDB 用于区域内路由,Level-2 的 LSDB 用于区域间路由。

三 协议网络类型与网络链路关系

  1. IS-IS 可以运行在广播链路和点到点链路上,广播链路包括 Ethernet、Token-Ring 等;点到点链路如 PPP。

  2. IS-IS 包括两种网络类型:广播网络类型和 P2P 网络类型(如下图所示)。广播链路可以配置成广播网络类型也可以配置成 P2P 网络类型,点到点链路仅支持 P2P 网络类型。

img

img

四 IS-IS 报文类型

IS-IS 报文有以下几种类型:Hello PDU(Protocol Data Unit)、LSP 和 SNP。

img

Hello PDU

Hello 报文用于建立和维持邻居关系,也称为 IIH(IS-to-IS Hello PDUs)。其中,广播网中的 Level-1 IS-IS 使用 Level-1 LAN IIH;广播网中的 Level-2 IS-IS 使用 Level-2 LAN IIH;非广播网络中则使用 P2P IIH。它们的报文格式有所不同。P2P IIH 中相对于 LAN IIH 来说,多了一个表示本地链路 ID 的 Local Circuit ID 字段,缺少了表示广播网中 DIS 的优先级的 Priority 字段以及表示 DIS 和伪节点 System ID 的 LAN ID 字段。

在所有的 IS-IS PDU 中,前八个字节都是公用的,Hello PDU 各个主要字段的含义及作用如下:

  • Intradomain Routing Protocol Discriminator: 域内路由选择协议鉴别符,用来标识网络层协议数据单元。在 IS-IS 中,该字段的值固定为 0x83。

  • Length Indicator: 长度标识符,用来标识该固定头部的长度。

  • ID Length:用来标识该路由选择域内 SystemID 的长度。

  • PDU Type:用来标识 PDU 的类型。

  • Maximum Area Address:最大区域地址数,表示该 IS-IS 区域所允许的最大区域地址数量。目前,该字段固定为 0,表示最多支持 3 个区域地址。

  • TLV:即 Type/Length/Value(类型 / 长度 / 值),不同 PDU 类型所包含的 TLV 是不同的。

LSP

链路状态报文 LSP(Link State PDUs)用于交换链路状态信息。LSP 分为两种:Level-1 LSP 和 Level-2 LSP。Level-1 LSP 由 Level-1 IS-IS 传送,Level-2 LSP 由 Level-2 IS-IS 传送,Level-1-2 IS-IS 则可传送以上两种 LSP。

主要字段的解释如下:

  • ATT(Attached):区域关联位。

由 Level-1-2 路由器产生,用来指明始发路由器是否与其它区域相连。当 L1 区域中的路由器收到 Level-1-2 路由器发送的 ATT 位被置位的 L1 LSP 后,它将创建一条指向 Level-1-2 路由器的缺省路由,以便数据可以被路由到其他区域。

虽然 ATT 位同时在 L1 LSP 和 L2 LSP 中进行了定义,但是它只会在 L1 LSP 中被置位,并且只有 L1/2 路由器会设置这个字段。

  • OL(LSDB Overload):过载标志位。

设置了过载标志位的 LSP 虽然还会在网络中扩散,但是在计算通过过载路由器的路由时不会被采用。即对路由器设置过载位后,其它路由器在进行 SPF 计算时不会使用这台路由器做转发,只计算该节点上的直连路由。

  • IS Type:生成 LSP 的 IS-IS 类型。

用来指明是 Level-1 还是 Level-2 IS-IS(01 表示 Level-1,11 表示 Level-2)。

SNP

序列号报文 SNP(Sequence Number PDUs)通过描述全部或部分 LSP 的摘要信息来同步各 LSDB(Link-State DataBase),它包括 CSNP(Complete Sequence Number Protocol Data Unit,全序列号协议数据单元)和 PSNP(Partial Sequence Number Protocol Data Unit,部分序列号协议数据单元)。CSNP 包括 LSDB 中所有 LSP 的摘要信息,从而可以在相邻路由设备间保持 LSDB 的同步。

在广播网链路和点到点链路中,SNP 运行机制略有不同:

  • 在广播网链路上,CSNP 由 DIS 设备周期性的发送。当邻居发现 LSDB 不同步时,发送 PSNP 报文来请求缺失的 LSP 报文。
  • 在点到点链路上,CSNP 只在第一次建立邻居关系时发送,邻居发送 PSNP 报文来做应答。当邻居发现 LSDB 不同步时,同样发送 PSNP 报文来请求缺失的 LSP 报文

五 邻居关系的建立

IS-IS 建立邻居关系的原则

  • 只有同一层次的相邻路由设备才有可能成为邻居。
  • 对于 Level-1 路由设备来说,区域号必须一致。
  • 链路两端 IS-IS 接口的网络类型必须一致。

img

P2P 链路邻居关系的建立

在 P2P 链路上,邻居关系的建立不同于广播链路。分为两次握手机制和三次握手机制。

  • 两次握手机制:只要路由设备收到对端发来的 Hello 报文,就单方面宣布邻居为 Up 状态,建立邻居关系。
  • 三次握手机制:此方式通过三次发送 P2P 的 IS-IS Hello PDU 最终建立起邻居关系,类似广播邻居关系的建立。

两次握手机制存在明显的缺陷。当路由设备间存在两条及以上的链路时,如果某条链路上到达对端的单向状态为 Down,而另一条链路同方向的状态为 Up,路由设备之间还是能建立起邻居关系。SPF 在计算时会使用状态为 UP 的链路上的参数,这就导致没有检测到故障的路由设备在转发报文时仍然试图通过状态为 Down 的链路。三次握手机制解决了上述不可靠点到点链路中存在的问题。这种方式下,路由设备只有在知道邻居路由设备也接收到它的报文时,才宣布邻居路由设备处于 Up 状态,从而建立邻居关系。

img

六 综上所述

2 种网络类型,3 种路由器类型,3 张表,4 种报文类型

IS-IS 和 OSPF 的最大区别

img

有兴趣的可以研究 IS-IS 基本原理 华为 (huawei.com)


抓包分析 ISIS 报文格式

把倒立的世界腾空于 2020-06-07 22:46:57 发布

ISIS 报文格式

通用报文

image-20200607221528613

image-20200607223009394

  • Intra Domain Routing Protocol Discriminator:域内路由选择协议鉴别符:这里是 ISIS

  • System ID Length:NSAP 地址或 NET 中 System ID 区域的长度。值为 0 时,表示 System

ID 区域的长度为 6 字节。值为 255 时,表示 System ID 区域为空(即长度为 0)

  • PDU Type:PDU 的类型:9 种类型,这里表示的是一个 Level-2 的 CSNP

  • Max.Area:支持的最大区域个数,为 0,表示该 IS-IS 进程最大只支持 3 个区域地址数

Hello 报文

image-20200607221237172

  • Circuit Type:最后两位表示发出 hello 报文路由器的类型(01 表示 L1,10 表示 L2,11 表示 L1-L2)

  • SystemID:表示这个 hello 报文是哪个路由器发出来的

  • Holding Timer:相当于死亡时间,如果这个时间内没有收到邻居发来的 hello 报文,则结束邻居关系

  • PDU Length:总长度,单位是字节

  • Priority:优先级,默认 64,范围为 0~127,DIS 选举会关注它

  • Area address:发 hello 包那台路由器所属的区域名

  • IS Neighbor:发出 hello 包的路由器的邻居的接口 mac 地址

  • IPv4 interface address:从哪个接口发出的 hello 报文

LSP 报文

image-20200607220518593

  • PDU Length:总长度,单位:字节

  • Remaining Lifetime:生存时间,单位:秒

  • LSP-ID:发出 LSP 报文的路由器,由三部分组成,System

ID、伪节点 ID(00,如果第一位不为 0 则表示伪节点)和 LSP 分片后的编号(00,第一位不为 0 代表被分片)

  • Sequence number:序列号

  • Checksum:校验和

  • Attachment(ATT):由 Level-1-2 路由器产生,用来指明始发路由器是否与其它区域相连。虽然此标志位也存在于 Level-1 和 Level-2 的 LSP 中,但实际上此字段只和 Level-1-2 路由器始发的 L1LSP 有关

  • Overload

bit:过载标志位。对路由器设置过载位后,其它路由器在进行 SPF 计算时不会考虑这台路由器。当路由器内存不足时,系统自动在发送的 LSP 报文中设置过载标志位

  • Type Of Intermediate

System:生成 LSP 的路由器的类型。用来指明是 Level-1 还是 Level-2 路由器(01 表示 Level-1,11 表示 Level-2)

  • Area address:发出此报文的路由器所在区域

  • IPv4 Interface Address:发出此报文身上的 ip 地址

  • 此报文是收敛以后抓取的 LSP 报文

CSNP 报文

image-20200607221724108

  • PDU length:总长度

  • Source ID:发出 CSNP 报文的路由器的 System ID

  • Start LSP ID:CSNP 报文中第一个 LSP 的 ID 值

  • End LSP ID:CSNP 报文中最后一个 LSP 的 ID 值


注:几篇关于 IS-IS 协议的比较详细的博文合辑。


ISIS 基础知识

曹世宏 发表于 2018-01-08 | 更新于 2018-04-12

ISIS 简介

中间系统到中间系统 IS-IS(Intermediate System to Intermediate System)属于内部网关协议 IGP(Interior Gateway Protocol),用于自治系统内部。IS-IS 也是一种链路状态协议,使用最短路径优先 SPF(Shortest Path First)算法进行路由计算。

目的:

IS-IS 是国际标准化组织 ISO(the International Organization for Standardization)为它的无连接网络协议 CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议。

随着 TCP/IP 协议的流行,为了提供对 IP 路由的支持,IETF(Internet Engineering Task Force )在 RFC1195 中对 IS-IS 进行了扩充和修改,使它能够同时应用在 TCP/IP 和 OSI(Open System Interconnection)环境中,称为集成 IS-IS(Integrated IS-IS 或 Dual IS-IS)。

IS-IS 原理描述

ISIS 基本概念:

IS-IS 的拓扑结构:

为了支持大规模的路由网络,IS-IS 在自治系统内采用骨干区域与非骨干区域两级的分层结构。一般来说,将 Level-1 路由器部署在非骨干区域,Level-2 路由器和 Level-1-2 路由器部署在骨干区域。每一个非骨干区域都通过 Level-1-2 路由器与骨干区域相连。

OSPF 与 ISIS 的拓扑不同点:

  • 在 IS-IS 中,每个路由器都只属于一个区域;而在 OSPF 中,一个路由器的不同接口可以属于不同的区域。

  • 在 IS-IS 中,单个区域没有骨干与非骨干区域的概念;而在 OSPF 中,Area0 被定义为骨干区域。

  • 在 IS-IS 中,Level-1 和 Level-2 级别的路由都采用 SPF 算法,分别生成最短路径树 SPT(Shortest Path Tree);而在 OSPF 中,只有在同一个区域内才使用 SPF 算法,区域之间的路由需要通过骨干区域来转发。

IS-IS 路由器的分类:

  • Level-1 路由器

Level-1 路由器负责区域内的路由,它只与属于同一区域的 Level-1 和 Level-1-2 路由器形成邻居关系,属于不同区域的 Level-1 路由器不能形成邻居关系。Level-1 路由器只负责维护 Level-1 的链路状态数据库 LSDB(Link State Database),该 LSDB 包含本区域的路由信息,到本区域外的报文转发给最近的 Level-1-2 路由器。

  • Level-2 路由器

Level-2 路由器负责区域间的路由,它可以与同一或者不同区域的 Level-2 路由器或者其它区域的 Level-1-2 路由器形成邻居关系。Level-2 路由器维护一个 Level-2 的 LSDB,该 LSDB 包含区域间的路由信息。

所有 Level-2 级别(即形成 Level-2 邻居关系)的路由器组成路由域的骨干网,负责在不同区域间通信。路由域中 Level-2 级别的路由器必须是物理连续的,以保证骨干网的连续性。只有 Level-2 级别的路由器才能直接与区域外的路由器交换数据报文或路由信息。

  • Level-1-2 路由器

同时属于 Level-1 和 Level-2 的路由器称为 Level-1-2 路由器,它可以与同一区域的 Level-1 和 Level-1-2 路由器形成 Level-1 邻居关系,也可以与其他区域的 Level-2 和 Level-1-2 路由器形成 Level-2 的邻居关系。Level-1 路由器必须通过 Level-1-2 路由器才能连接至其他区域。

Level-1-2 路由器维护两个 LSDB,Level-1 的 LSDB 用于区域内路由,Level-2 的 LSDB 用于区域间路由。

IS-IS 的网络类型:

IS-IS 只支持两种类型的网络,根据物理链路不同可分为:

  • 广播链路:如 Ethernet、Token-Ring 等。

  • 点到点链路:如 PPP、HDLC 等。

对于 NBMA(Non-Broadcast Multi-Access)网络,如 ATM,需对其配置子接口,并注意子接口类型应配置为 P2P。

IS-IS 不能在点到多点链路 P2MP(Point to MultiPoint)上运行。

DIS 和伪节点:

在广播网络中,IS-IS 需要在所有的路由器中选举一个路由器作为 DIS(Designated Intermediate System)。DIS 用来创建和更新伪节点(Pseudonodes),并负责生成伪节点的链路状态协议数据单元 LSP(Link state Protocol Data Unit),用来描述这个网络上有哪些网络设备。

伪节点是用来模拟广播网络的一个虚拟节点,并非真实的路由器。在 IS-IS 中,伪节点用 DIS 的 System ID 和一个字节的 Circuit ID(非 0 值)标识。

Level-1 和 Level-2 的 DIS 是分别选举的,用户可以为不同级别的 DIS 选举设置不同的优先级。DIS 优先级数值最大的被选为 DIS。如果优先级数值最大的路由器有多台,则其中 MAC 地址最大的路由器会被选中。不同级别的 DIS 可以是同一台路由器,也可以是不同的路由器。

IS-IS 协议中 DIS 与 OSPF 协议中 DR(Designated Router)的区别:

  • 在 IS-IS 广播网中,优先级为 0 的路由器也参与 DIS 的选举,而在 OSPF 中优先级为 0 的路由器则不参与 DR 的选举。

  • 在 IS-IS 广播网中,当有新的路由器加入,并符合成为 DIS 的条件时,这个路由器会被选中成为新的 DIS,原有的伪节点被删除。此更改会引起一组新的 LSP 泛洪。而在 OSPF 中,当一台新路由器加入后,即使它的 DR 优先级值最大,也不会立即成为该网段中的 DR。

  • 在 IS-IS 广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非 DIS 路由器之间也会形成邻接关系。而在 OSPF 中,路由器只与 DR 和 BDR 建立邻接关系。

IS-IS 广播网上所有的路由器之间都形成邻接关系,但 LSDB 的同步仍然依靠 DIS 来保证。

IS-IS 的地址结构:

网络服务访问点 NSAP(Network Service Access Point)是 OSI 协议中用于定位资源的地址。NSAP 的地址结构如下图所示,它由 IDP(Initial Domain Part)和 DSP(Domain Specific Part)组成。IDP 和 DSP 的长度都是可变的,NSAP 总厂最多是 20 个字节,最少 8 个字节。

NSAP地址结构

图:ISIS 协议的地址结构示意图

  • IDP 相当于 IP 地址中的主网络号。它是由 ISO 规定,并由 AFI(Authority and Format Identifier)与 IDI(Initial Domain Identifier)两部分组成。AFI 表示地址分配机构和地址格式,IDI 用来标识域。

  • DSP 相当于 IP 地址中的子网号和主机地址。它由 High Order DSP、System ID 和 SEL 三个部分组成。High Order DSP 用来分割区域,System ID 用来区分主机,SEL(NSAP Selector)用来指示服务类型。

  • Area Address

IDP 和 DSP 中的 High Order DSP 一起,既能够标识路由域,也能够标识路由域中的区域,因此,它们一起被称为区域地址(Area Address),相当于 OSPF 中的区域编号。同一 Level-1 区域内的所有路由器必须具有相同的区域地址,Level-2 区域内的路由器可以具有不同的区域地址。

一般情况下,一个路由器只需要配置一个区域地址,且同一区域中所有节点的区域地址都要相同。为了支持区域的平滑合并、分割及转换,在设备的实现中,一个 IS-IS 进程下最多可配置 3 个区域地址。

  • System ID

System ID 用来在区域内唯一标识主机或路由器。在设备的实现中,它的长度固定为 48bit(6 字节)。

  • 将 IP 地址 168.10.1.1 的每个十进制数都扩展为 3 位,不足 3 位的在前面补 0,得到 168.010.001.001。

  • 将扩展后的地址分为 3 部分,每部分由 4 位数字组成,得到 1680.1000.1001。重新组合的 1680.1000.1001 就是 System ID。

实际 System ID 的指定可以有不同的方法,但要保证能够唯一标识主机或路由器。

  • SEL

SEL 的作用类似 IP 中的 “协议标识符”,不同的传输协议对应不同的 SEL。在 IP 上 SEL 均为 00。

网络实体名称 NET(Network Entity Title)指的是设备本身的网络层信息,可以看作是一类特殊的 NSAP(SEL=00)。NET 的长度与 NSAP 的相同,最多为 20 个字节,最少为 8 个字节。在路由器上配置 IS-IS 时,只需要考虑 NET 即可,NSAP 可不必去关注。

例如有 NET 为:ab.cdef.1234.5678.9abc.00,则其中 Area Address 为 ab.cdef,System ID 为 1234.5678.9abc,SEL 为 00。

IS-IS 基本原理:

IS-IS 是一种链路状态路由协议,每一台路由器都会生成一个 LSP,它包含了该路由器所有使能 IS-IS 协议接口的链路状态信息。通过跟相邻设备建立 IS-IS 邻接关系,互相更新本地设备的 LSDB,可以使得 LSDB 与整个 IS-IS 网络的其他设备的 LSDB 实现同步。然后根据 LSDB 运用 SPF 算法计算出 IS-IS 路由。如果此 IS-IS 路由是到目的地址的最优路由,则此路由会下发到 IP 路由表中,并指导报文的转发。

IS-IS 邻居关系的建立:

两台运行 IS-IS 的路由器在交互协议报文实现路由功能之前必须首先建立邻居关系。在不同类型的网络上,IS-IS 的邻居建立方式并不相同。

广播链路邻居关系的建立:

下图以 Level-2 路由器为例,描述了广播链路中建立邻接的过程。Level-1 路由器之间建立邻居与此相同。

广播网下ISIS建立邻居过程

图:广播链路邻居关系的建立过程

  1. RouterA 广播发送 Level-2 LAN IIH,此报文中无邻居标识。

  2. RouterB 收到此报文后,将自己和 RouterA 的邻居状态标识为 Initial。然后,RouterB 再向 RouterA 回复 Level-2 LAN IIH,此报文中标识 RouterA 为 RouterB 的邻居。

  3. RouterA 收到此报文后,将自己与 RouterB 的邻居状态标识为 Up。然后 RouterA 再向 RouterB 发送一个标识 RouterB 为 RouterA 邻居的 Level-2 LAN IIH。

  4. RouterB 收到此报文后,将自己与 RouterA 的邻居状态标识为 Up。这样,两个路由器成功建立了邻居关系。

因为是广播网络,需要选举 DIS,所以在邻居关系建立后,路由器会等待两个 Hello 报文间隔,再进行 DIS 的选举。Hello 报文中包含 Priority 字段,Priority 值最大的将被选举为该广播网的 DIS。若优先级相同,接口 MAC 地址较大的被选举为 DIS。

P2P 链路邻居关系的建立:

在 P2P 链路上,邻居关系的建立不同于广播链路。分为两次握手机制和三次握手机制。

  • 两次握手机制

只要路由器收到对端发来的 Hello 报文,就单方面宣布邻居为 Up 状态,建立邻居关系。

  • 三次握手机制

此方式通过三次发送 P2P 的 IS-IS Hello PDU 最终建立起邻居关系,类似广播邻居关系的建立。

两次握手机制存在明显的缺陷。当路由器间存在两条及以上的链路时,如果某条链路上到达对端的单向状态为 Down,而另一条链路同方向的状态为 Up,路由器之间还是能建立起邻接关系。SPF 在计算时会使用状态为 UP 的链路上的参数,这就导致没有检测到故障的路由器在转发报文时仍然试图通过状态为 Down 的链路。三次握手机制解决了上述不可靠点到点链路中存在的问题。这种方式下,路由器只有在知道邻居路由器也接收到它的报文时,才宣布邻居路由器处于 Up 状态,从而建立邻居关系。

IS-IS 按如下原则建立邻居关系:
  • 只有同一层次的相邻路由器才有可能成为邻居。

  • 对于 Level-1 路由器来说,区域号必须一致。

  • 链路两端 IS-IS 接口的网络类型必须一致。

  • 链路两端 IS-IS 接口的地址必须处于同一网段。

由于 IS-IS 是直接运行在数据链路层上的协议,并且最早设计是给 CLNP 使用的,IS-IS 邻居关系的形成与 IP 地址无关。但在实际的实现中,由于只在 IP 上运行 IS-IS,所以是要检查对方的 IP 地址的。如果接口配置了从 IP,那么只要双方有某个 IP(主 IP 或者从 IP)在同一网段,就能建立邻居,不一定要主 IP 相同。

当链路两端 IS-IS 接口的地址不在同一网段时,如果配置接口对接收的 Hello 报文不作 IP 地址检查,也可以建立邻居关系。对于 P2P 接口,可以配置接口忽略 IP 地址检查;对于以太网接口,需要将以太网接口模拟成 P2P 接口,然后才可以配置接口忽略 IP 地址检查。

IS-IS 的 LSP 交互过程:

LSP 产生的原因:

IS-IS 路由域内的所有路由器都会产生 LSP,以下事件会触发一个新的 LSP:

  • 邻居 Up 或 Down

  • IS-IS 相关接口 Up 或 Down

  • 引入的 IP 路由发生变化

  • 区域间的 IP 路由发生变化

  • 接口被赋了新的 metric 值

  • 周期性更新

收到邻居新的 LSP 的处理过程:
  1. 将接收的新的 LSP 合入到自己的 LSDB 数据库中,并标记为 flooding。

  2. 发送新的 LSP 到除了收到该 LSP 的接口之外的接口。

  3. 邻居再扩散到其他邻居。

LSP 的” 泛洪”:

LSP 报文的 “泛洪”(flooding)是指当一个路由器向相邻路由器通告自己的 LSP 后,相邻路由器再将同样的 LSP 报文传送到除发送该 LSP 的路由器外的其它邻居,并这样逐级将 LSP 传送到整个层次内所有路由器的一种方式。通过这种 “泛洪”,整个层次内的每一个路由器就都可以拥有相同的 LSP 信息,并保持 LSDB 的同步。

每一个 LSP 都拥有一个标识自己的 4 字节的序列号。在路由器启动时所发送的第一个 LSP 报文中的序列号为 1,以后当需要生成新的 LSP 时,新 LSP 的序列号在前一个 LSP 序列号的基础上加 1。更高的序列号意味着更新的 LSP。

广播链路中新加入路由器与 DIS 同步 LSDB 数据库的过程:

广播链路中新加入路由器与DIS同步LSDB数据库的过程

图:广播链路数据库更新过程

  1. 如上图所示,新加入的路由器 RouterC 首先发送 Hello 报文,与该广播域中的路由器建立邻居关系。

  2. 建立邻居关系之后,RouterC 等待 LSP 刷新定时器超时,然后将自己的 LSP 发往组播地址(Level-1:01-80-C2-00-00-14;Level-2:01-80-C2-00-00-15)。这样网络上所有的邻居都将收到该 LSP。

  3. 该网段中的 DIS 会把收到 RouterC 的 LSP 加入到 LSDB 中,并等待 CSNP 报文定时器超时并发送 CSNP 报文,进行该网络内的 LSDB 同步。

  4. RouterC 收到 DIS 发来的 CSNP 报文,对比自己的 LSDB 数据库,然后向 DIS 发送 PSNP 报文请求自己没有的 LSP。

  5. DIS 收到该 PSNP 报文请求后向 RouterC 发送对应的 LSP 进行 LSDB 的同步。

在上述过程中 DIS 的 LSDB 更新过程如下:

  1. DIS 接收到 LSP,在数据库中搜索对应的记录。若没有该 LSP,则将其加入数据库,并广播新数据库内容。

  2. 若收到的 LSP 序列号大于本地 LSP 的序列号,就替换为新报文,并广播新数据库内容;若收到的 LSP 序列号小本地 LSP 的序列号,就向入端接口发送本地 LSP 报文。

  3. 若收到的 LSP 和本地 LSP 的序列号相等,则比较 Remaining Lifetime。若收到的 LSP 报文的 Remaining Lifetime 为 0,则将本地的报文替换为新报文,并广播新数据库内容;若收到的 LSP 报文的 Remaining Lifetime 不为 0 而本地 LSP 报文的 Remaining Lifetime 为 0,就向入端接口发送本地 LSP 报文。

  4. 若两个序列号和 Remaining Lifetime 都相等,则比较 Checksum。若收到的 LSP 的 Checksum 大于本地 LSP 的 Checksum,就替换为新报文,并广播新数据库内容;若收到的 LSP 的 Checksum 小于本地 LSP 的 Checksum,就向入端接口发送本地 LSP 报文。

  5. 若两个序列号、Remaining Lifetime 和 Checksum 都相等,则不转发该报文。

P2P 链路上 LSDB 数据库同步过程:

P2P链路上LSDB同步过程

图:P2P 链路数据库更新过程

  1. RouterA 先与 RouterB 建立邻居关系。

  2. 建立邻居关系之后,RouterA 与 RouterB 会先发送 CSNP 给对端设备。如果对端的 LSDB 与 CSNP 没有同步,则发送 PSNP 请求索取相应的 LSP。

  3. 如上图所示假定 RouterB 向 RouterA 索取相应的 LSP。RouterA 发送 RouterB 请求的 LSP 的同时启动 LSP 重传定时器,并等待 RouterB 发送的 PSNP 作为收到 LSP 的确认。

  4. 如果在接口 LSP 重传定时器超时后,RouterA 还没有收到 RouterB 发送的 PSNP 报文作为应答,则重新发送该 LSP 直至收到 PSNP 报文。

在 P2P 链路上 PSNP 有两种作用:

  • 作为 Ack 应答以确认收到的 LSP。

  • 用来请求所需的 LSP。

在 P2P 链路中设备的 LSDB 更新过程如下:

  1. 若收到的 LSP 比本地的序列号更小,则直接给对方发送本地的 LSP,然后等待对方给自己一个 PSNP 报文作为确认;若收到的 LSP 比本地的序列号更大,则将这个新的 LSP 存入自己的 LSDB,再通过一个 PSNP 报文来确认收到此 LSP,最后再将这个新 LSP 发送给除了发送该 LSP 的邻居以外的邻居。

  2. 若收到的 LSP 序列号和本地相同,则比较 Remaining Lifetime,若收到的 LSP 报文的 Remaining Lifetime 为 0,则将收到的 LSP 存入 LSDB 中并发送 PSNP 报文来确认收到此 LSP,然后将该 LSP 发送给除了发送该 LSP 的邻居以外的邻居;若收到的 LSP 报文的 Remaining Lifetime 不为 0 而本地 LSP 报文的 Remaining Lifetime 为 0,则直接给对方发送本地的 LSP,然后等待对方给自己一个 PSNP 报文作为确认。

  3. 若收到的 LSP 和本地 LSP 的序列号相同且 Remaining Lifetime 都不为 0,则比较 Checksum,若收到 LSP 的 Checksum 大于本地 LSP 的 Checksum,则将收到的 LSP 存入 LSDB 中并发送 PSNP 报文来确认收到此 LSP,然后将该 LSP 发送给除了发送该 LSP 的邻居以外的邻居;若收到 LSP 的 Checksum 小于本地 LSP 的 Checksum,则直接给对方发送本地的 LSP,然后等待对方给自己一个 PSNP 报文作为确认。

  4. 若收到的 LSP 和本地 LSP 的序列号、Remaining Lifetime 和 Checksum 都相同,则不转发该报文。

ISIS 高级特性

IS-IS 认证:

IS-IS 认证是基于网络安全性的要求而实现的一种认证手段,通过在 IS-IS 报文中增加认证字段对报文进行认证。当本地路由器接收到远端路由器发送过来的 IS-IS 报文,如果发现认证密码不匹配,则将收到的报文进行丢弃,达到自我保护的目的。

认证的分类:

根据报文的种类,认证可以分为以下三类:

  • 接口认证:是指使能 IS-IS 协议的接口以指定方式和密码对 Level-1 和 Level-2 的 Hello 报文进行认证。

  • 区域认证:是指运行 IS-IS 的区域以指定方式和密码对 Level-1 的 SNP 和 LSP 报文进行认证。

  • 路由域认证:是指运行 IS-IS 的路由域以指定方式和密码对 Level-2 的 SNP 和 LSP 报文进行认证。

对于接口认证,有以下两种设置:

  • 发送带认证 TLV 的认证报文,本地对收到的报文也进行认证检查。

  • 发送带认证 TLV 的认证报文,但是本地对收到的报文不进行认证检查。

对于区域和路由域认证,可以设置为 SNP 和 LSP 分开认证。

  • 本地发送的 LSP 报文和 SNP 报文都携带认证 TLV,对收到的 LSP 报文和 SNP 报文都进行认证检查。

  • 本地发送的 LSP 报文携带认证 TLV,对收到的 LSP 报文进行认证检查;发送的 SNP 报文携带认证 TLV,但不对收到的 SNP 报文进行检查。

  • 本地发送的 LSP 报文携带认证 TLV,对收到的 LSP 报文进行认证检查;发送的 SNP 报文不携带认证 TLV,也不对收到的 SNP 报文进行认证检查。

  • 本地发送的 LSP 报文和 SNP 报文都携带认证 TLV,对收到的 LSP 报文和 SNP 报文都不进行认证检查。

根据报文的认证方式,可以分为以下三类:

  • 明文认证:一种简单的认证方式,将配置的密码直接加入报文中,这种认证方式安全性不够。

  • MD5 认证:通过将配置的密码进行 MD5 算法之后再加入报文中,这样提高了密码的安全性。

  • Keychian 认证:通过配置随时间变化的密码链表来进一步提升网络的安全性。

认证信息的携带形式:

IS-IS 通过 TLV 的形式携带认证信息,认证 TLV 的类型为 10,具体格式如下:

  • Type:ISO 定义认证报文的类型值为 10,长度为 1 字节。

  • Length:指定认证 TLV 值的长度,长度 1 字节。

  • Value:指定认证的具体内容,其中包括了认证的类型和认证的密码,长度为 1~254 字节。

其中认证的类型为 1 字节,具体定义如下:

  • 0:保留的类型

  • 1:明文认证

  • 54:MD5 认证

  • 255:路由域私有认证方式

ISIS 路由渗透:

通常情况下,Level-1 区域内的路由通过 Level-1 路由器进行管理。所有的 Level-2 和 Level-1-2 路由器构成一个连续的骨干区域。Level-1 区域必须且只能与骨干区域相连,不同的 Level-1 区域之间并不相连。

Level-1-2 路由器将学习到的 Level-1 路由信息装进 Level-2 LSP,再泛洪 LSP 给其他 Level-2 和 Level-1-2 路由器。因此,Level-1-2 和 Level-2 路由器知道整个 IS-IS 路由域的路由信息。但是,为了有效减小路由表的规模,在缺省情况下,Level-1-2 路由器并不将自己知道的其他 Level-1 区域以及骨干区域的路由信息通报给它所在的 Level-1 区域。这样,Level-1 路由器将不了解本区域以外的路由信息,可能导致与本区域之外的目的地址通信时无法选择最佳的路由。

为解决上述问题,IS-IS 提供了路由渗透功能。通过在 Level-1-2 路由器上定义 ACL(Access Control List)、路由策略、Tag 标记等方式,将符合条件的路由筛选出来,实现将其他 Level-1 区域和骨干区域的部分路由信息通报给自己所在的 Level-1 区域。

ISIS Overload:

IS-IS OverLoad 使用 IS-IS 过载标记位来标识过载状态。IS-IS 过载标志位是指 IS-IS LSP 报文中的 OL 字段。对设备设置过载标志位后,其它设备在进行 SPF 计算时不会使用这台设备做转发,只计算该设备上的直连路由。

当系统因为各种原因无法保存新的 LSP,以致无法维持正常的 LSDB 同步时,该系统计算出的路由信息将出现错误。在这种情况下,系统就可以自动进入过载状态,即通过该设备到达的路由不计算,但该设备的直连路由不会被忽略。

除了设备异常可导致自动进入过载状态,也可以通过手动配置使系统进入过载状态。当网络中的某些 IS-IS 设备需要升级或维护时,需要暂时将该设备从网络中隔离。此时可以给该设备设置过载标志位,这样就可以避免其他设备通过该节点来转发流量。

ISIS 网络收敛:

为了提高 IS-IS 网络的收敛,有快速收敛和按优先级收敛两种方式。快速收敛侧重于从路由的计算角度加快收敛速度;按优先级收敛侧重于从路由优先级角度提高网络性能。

快速收敛:

IS-IS 快速收敛是为了提高路由的收敛速度而做的扩展特性。它包括以下几个功能:

  • 增量最短路径优先算法 I-SPF(Incremental SPF):是指当网络拓扑改变的时候,只对受影响的节点进行路由计算,而不是对全部节点重新进行路由计算,从而加快了路由的计算。

在 ISO10589 中定义使用 SPF 算法进行路由计算。当网络拓扑中有一个节点发生变化时,这种算法需要重新计算网络中的所有节点,计算时间长,占用过多的 CPU 资源,影响整个网络的收敛速度。

I-SPF 改进了这个算法,除了第一次计算时需要计算全部节点外,每次只计算受到影响的节点,而最后生成的最短路径树 SPT 与原来的算法所计算的结果相同,大大降低了 CPU 的占用率,提高了网络收敛速度。

  • 部分路由计算 PRC(Partial Route Calculation):是指当网络上路由发生变化的时候,只对发生变化的路由进行重新计算。

PRC 的原理与 I-SPF 相同,都是只对发生变化的路由进行重新计算。不同的是,PRC 不需要计算节点路径,而是根据 I-SPF 算出来的 SPT 来更新路由。

在路由计算中,叶子代表路由,节点则代表路由器。如果 I-SPF 计算后的 SPT 改变,PRC 会只处理那个变化的节点上的所有叶子;如果经过 I-SPF 计算后的 SPT 并没有变化,则 PRC 只处理变化的叶子信息。比如一个节点使能一个 IS-IS 接口,则整个网络拓扑的 SPT 是不变的,这时 PRC 只更新这个节点的接口路由,从而节省 CPU 占用率。

PRC 和 I-SPF 配合使用可以将网络的收敛性能进一步提高,它是原始 SPF 算法的改进,已经代替了原有的算法。

  • 智能定时器:在进行 SPF 计算和产生 LSP 的时候用到的一种智能定时器。该定时器首次超时时间是一个固定的时间。如果在定时器超时前,又有触发定时器的事件发生,则该定时器下一次的超时时间会增加。

改进了路由算法后,如果触发路由计算的时间间隔较长,同样会影响网络的收敛速度。使用毫秒级定时器可以缩短这个间隔时间,但如果网络变化比较频繁,又会造成过度占用 CPU 资源。SPF 智能定时器既可以对少量的外界突发事件进行快速响应,又可以避免过度的占用 CPU。通常情况下,一个正常运行的 IS-IS 网络是稳定的,发生大量的网络变动的几率很小,IS-IS 不会频繁的进行路由计算,所以第一次触发的时间可以设置的非常短(毫秒级)。如果拓扑变化比较频繁,智能定时器会随着计算次数的增加,间隔时间也会逐渐延长,从而避免占用大量的 CPU 资源。

与 SPF 智能定时器类似的还有 LSP 生成智能定时器。在 IS-IS 协议中,当 LSP 生成定时器到期时,系统会根据当前拓扑重新生成一个自己的 LSP。原有的实现机制是采用间隔时间固定的定时器,这样就不能同时满足快速收敛和低 CPU 占用率的需要。为此将 LSP 生成定时器也设计成智能定时器,使其可以对于突发事件(如接口 Up/Down)快速响应,加快网络的收敛速度。同时,当网络变化频繁时,智能定时器的间隔时间会自动延长,避免过度占用 CPU 资源。

  • LSP 快速扩散:此特性可以加快 LSP 的扩散速度。

正常情况下,当 IS-IS 收到其它路由器发来的 LSP 时,如果此 LSP 比本地 LSDB 中相应的 LSP 要新,则更新 LSDB 中的 LSP,并用一个定时器定期将 LSDB 内已更新的 LSP 扩散出去。

LSP 快速扩散特性改进了这种方式,使能了此特性的设备收到一个或多个较新的 LSP 时,在路由计算之前,先将小于指定数目的 LSP 扩散出去,加快 LSDB 的同步过程。这种方式在很大程度上可以提高整个网络的收敛速度。

按优先级收敛:

IS-IS 按优先级收敛是指在大量路由情况下,能够让某些特定的路由(例如匹配指定 IP 前缀的路由)优先收敛的一种技术。因此用户可以把和关键业务相关的路由配置成相对较高的优先级,使这些路由更快的收敛,从而使关键的业务收到的影响减小。通过对不同的路由配置不同的收敛优先级,达到重要的路由先收敛的目的,提高网络的可靠性。

ISIS 管理标记:

管理标记特性允许在 IS-IS 域中通过管理标记对 IP 地址前缀进行控制,可以达到简化管理。其用途包括控制不同级别和不同区域间的路由引入,以及在同一路由器上运行的 IS-IS 多实例。

管理标记值与某些属性相关联。当 cost-sytle 为 wide、wide-compatible 或 compatible 时,如果发布可达的 IP 地址前缀具有该属性,IS-IS 会将管理标记加入到该前缀的 IP 可达信息 TLV 中。这样,管理标记就会随着前缀发布到整个路由域。

ISIS Wide Metric:

在早期的 ISO10589 中,使能 IS-IS 协议的接口下最大只能配置值为 63 的开销值,此时认为 IS-IS 开销类型为 narrow。但是在大型网络设计中,较小的度量范围不能满足实际需求。所以在 RFC3784 中规定,使能 IS-IS 协议的接口开销值可以扩展到 16777215,IS-IS 路由开销值可以达到 4261412864,此时 IS-IS 的开销类型为 wide。

  • narrow 类型下使用的 TLV:

  • 128 号 TLV(IP Internal Reachability TLV):用来携带路由域内的 IS-IS 路由信息。

  • 130 号 TLV(IP External Reachability TLV):用来携带路由域外的 IS-IS 路由信息。

  • 2 号 TLV (IS Neighbors TLV):用来携带邻居信息。

  • wide 类型下使用的 TLV:

  • 135 号 TLV (Extended IP Reachability TLV):用来替换原有的 IP reachability TLV,携带 IS-IS 路由信息,它扩展了路由开销值的范围,并可以携带 sub TLV。

  • 22 号 TLV(IS Extended Neighbors TLV):用来携带邻居信息。

不同开销类型接收和发送 ISIS 信息的类型详细列表:

开销类型接收发送
narrownarrownarrow
narrow-compatiblenarrow & widenarrow
compatiblenarrow & widenarrow & wide
wide-compatiblenarrow & widewide
widewidewide
  • 当配置开销类型为 compatible 的时候,会按照 narrow 类型和 wide 类型分别发送一份信息。

  • wide 类型下的 IS-IS 和 narrow 类型下的 IS-IS 不可实现互通。如果需要互通,就必须设置成一致的开销类型,让网络上所有路由器都可以接收其他路由器发的所有报文。

ISIS LSP 分片扩展:

当 IS-IS 要发布的链路状态协议数据报文 PDU(Protocol Data Unit)中的信息量太大时,IS-IS 路由器将会生成多个 LSP 分片,用来携带更多的 IS-IS 信息。

IS-IS LSP 分片由 LSP ID 中的 LSP Number 字段进行标识,这个字段的长度是 1 字节。因此,一个 IS-IS 进程最多可产生 256 个 LSP 分片,携带的信息量有限。在 RFC3786 中规定,IS-IS 可以配置虚拟的 SystemID ,并生成虚拟 IS-IS 的 LSP 报文来携带路由等信息。

基本概念:

  • 初始系统(Originating System):初始系统是实际运行 IS-IS 协议的路由器。允许一个单独的 IS-IS 进程像多个虚拟路由器一样发布 LSP,而 “Originating System” 指的是那个 “真正” 的 IS-IS 进程。

  • 系统 ID(Normal System-ID):初始系统的系统 ID。

  • 虚拟系统(Virtual System):由附加系统 ID 标识的系统,用来生成扩展 LSP 分片。这些分片在其 LSP ID 中携带附加系统 ID。

  • 附加系统 ID(Additional System-ID):虚拟系统的系统 ID,由网络管理器统一分配。每个附加系统 ID 都允许生成 256 个扩展的 LSP 分片。

  • 24 号 TLV(IS Alias ID TLV):用来表示初始系统与虚拟系统的关系。

工作原理:

在 IS-IS 中,每个系统 ID 都标识一个系统,每个系统都最多可生成 256 个 LSP 分片。通过增加附加系统 ID,可以最多配置 50 个虚拟系统,从而使得 IS-IS 进程最多可生成 13056 个 LSP 分片。

使能分片扩展功能之后,如果存在由于报文装满而丢失的信息,系统会提醒重启 IS-IS。重启之后,初始系统会尽最大能力装载路由信息,装不下的信息将放入虚拟系统的 LSP 中发送出去,并通过 24 号 TLV 来告知其他路由器此虚拟系统和自己的关系。

工作模式:

IS-IS 路由器可以在两种模式下运行 LSP 分片扩展特性:

模式一:

  • 应用场景:

    用于网络中的部分路由器不支持 LSP 分片扩展特性的情况。

  • 工作原理:

    虚拟系统参与路由 SPF 计算,初始系统发布的 LSP 中携带了到每个虚拟系统的链路信息。类似地,虚拟系统发布的 LSP 也包含到初始系统的链路信息。这样,在网络中虚拟系统看起来与初始系统相连的真实路由器是一样的。

这种方式是为了兼容不支持分片扩展的老版本所做的一个过渡模式。在老版本中,IS-IS 无法识别 IS Alias ID

TLV,所以虚拟系统的 LSP 必须表现的像一个普通 IS-IS 发出的报文。

  • 注意事项:

    虚拟系统的 LSP 中包含和原 LSP 中相同的区域地址和过载标志位。如果还有其它特性的 TLV,也必须保持一致。

    虚拟系统所携带的邻居信息指向初始系统,metric 为最大值减 1;初始系统所携带的邻居信息指向虚拟系统,metric 必须为 0。这样就保证了其它路由器在进行路由计算的时候,虚拟系统一定会成为初始系统的下游节点。

模式二:

  • 应用场景:

    用于网络中所有路由器都支持 LSP 分片扩展特性的情况。

  • 工作原理:

    虚拟系统不参与路由 SPF 计算,网络中所有路由器都知道虚拟系统生成的 LSP 实际属于初始系统。

    在该模式下工作的 IS-IS,可以识别 IS Alias ID TLV 的内容,并作为计算树和路由的依据。

注:无论在哪种方式下,初始系统和虚拟系统的 LSP 零分片中,都必须包含 IS Alias ID TLV 来表示初始系统是谁。

ISIS 主机名映射:

IS-IS 主机名映射机制为运行 IS-IS 协议的设备提供了一种从主机名到 System ID 映射的服务,它包括动态主机名映射和静态主机名映射。动态主机名映射的优先级高于静态主机名映射。当两者同时存在时,由动态主机名代替静态主机名。

在没有使能主机名交换特性的运行 IS-IS 协议的设备上,查看 IS-IS 邻居和链路状态数据库等信息时,IS-IS 域中的各设备都是用由 12 位十六进制数组成的 System ID 来表示的,例如:aaaa.eeee.1234。这种表示方法比较繁琐,而且易用性不好。主机名交换机制就是为了方便对 IS-IS 网络的维护和管理而引入的。

  • 显示 IS-IS 邻居时,将 IS-IS 邻居的 System ID 替换为主机名。如果该邻居为 DIS,则 DIS 的 System ID 也替换为该邻居的主机名。

  • 显示 IS-IS 链路状态数据库中的 LSP 时,将 LSP ID 中的 System ID 替换为发布该 LSP 的设备的主机名。

  • 显示 IS-IS 链路状态数据库的详细信息时,对于使能了动态主机名交换的设备发送的 LSP 报文会增加显示 Host Name 字段,而此字段显示内容中的 System ID 也将替换为发送此 LSP 的设备的动态主机名。

动态主机名映射:

在使能了动态主机名映射的设备上,IS-IS 动态主机名的信息在 LSP 中以 137 号 TLV(Dynamic Hostname TLV)的形式发布给其他 IS-IS 设备。在其他设备上使用 IS-IS 相关显示命令查看 IS-IS 信息时,本地设备的 System ID 将被设置的主机名所代替,这样更直观,也更容易记忆。

动态主机名的 TLV 是可选的,它可以存在于 LSP 中的任何位置。其中 TLV 的 value 值不能为空。设备在发送 LSP 的时候可以决定是否携带该 TLV,接收端的设备也可以决定是否忽略该 TLV,或者提取该 TLV 的内容放在自己的映射表中。

静态主机映射:

静态主机名映射是指在本地设备上对其他运行 IS-IS 协议的设备设置主机名与 System ID 的映射。静态主机名映射仅在本地设备生效,并不会通过 LSP 报文发送出去。

IS-IS 扩展知识

ISIS GR:

IS-IS GR(Graceful Restart)是一种支持 GR 能力的高可靠性技术,可以实现数据的不间断转发。

设备发生主备倒换后,由于没有保存任何重启前的邻居信息,因此一开始发送的 Hello 报文中不包含邻居列表。此时邻居设备收到后,执行两次握手机制邻居关系检查,发现在重启设备的 Hello 报文的邻居列表中没有自己,这样邻居关系将会断掉。同时,邻居设备通过生成新的 LSP 报文,将拓扑变化的信息泛洪给区域内的其它设备。区域内的其他设备会基于新的链路状态数据库进行路由计算,从而造成路由中断或者路由环路。

IETF 针对这种情况为 IS-IS 制定了 GR 规范(RFC3847),对保留 FIB 表和不保留 FIB 表的协议重启都进行了处理,避免协议重启带来的路由震荡和流量转发中断的现象。

基本概念:

IS-IS GR 过程由 GR-Restarter 和 GR-Helper 配合完成。

  • GR-Restarter:具备 GR 能力,且要进行 GR 的设备。

  • GR-Helper:具备 GR 能力,辅助 GR 设备完成 GR 功能的设备。GR-Restarter 一定具有 GR-Helper 的能力。

为了实现 GR,IS-IS 引入 211 号 TLV(Restart TLV)和 T1、T2、T3 三个定时器。

Restart TLV:

Restart TLV 是包含在 IIH(IS-to-IS Hello PDUs)报文中的扩展部分。支持 IS-IS GR 能力的设备的所有 IIH 报文都包含 Restart TLV。Restart TLV 中携带了协议重启的一些参数。其报文格式如下图所示:


图:Restart TLV 格式

报文字段解释如下:

字段名长度含义
Type1 字节TLV 的类型。值为 211 表示是 Restart TLV。
Length1 字节TLV 值的长度。
RR1 比特重启请求位(Restart Request)。<br /设备发送的 RR 置位的 Hello 报文用于通告邻居自己发生 Restarting/Starting,请求邻居保留当前的 IS-IS 邻接关系并返回 CSNP 报文。
RA1 比特重启应答位(Restart Acknowledgement)。<br /设备发送的 RA 置位的 Hello 报文用于通告邻居确认收到了 RR 置位的报文。
SA1 比特抑制发布邻接关系位(Suppress adjacency advertisement)。<br /用于发生 Starting 的设备请求邻居抑制与自己相关的邻居关系的广播,以避免路由黑洞。
Remaining Time2 字节邻居保持邻接关系不重置的时间。<br /长度是 2 字节,单位是秒。当 RA 置位时,这个值是必需的。

定时器:

IS-IS 的 GR 能力扩展中,引入了三个定时器,分别是 T1、T2 和 T3。

  • T1 定时器:如果 GR Restarter 已发送 RR 置位的 IIH 报文,但直到 T1 定时器超时还没有收到 GR Helper 的包含 Restart TLV 且 RA 置位的 IIH 报文的确认消息时,会重置 T1 定时器并继续发送包含 Restart TLV 的 IIH 报文。当收到确认报文或者 T1 定时器已超时 3 次时,取消 T1 定时器。T1 定时器缺省设置为 3 秒。

使能了 IS-IS GR 特性的进程,在每个接口都会维护一个 T1 定时器。在 Level-1-2 路由器上,广播网接口为每个 Level 维护一个 T1 定时器。

  • T2 定时器:GR Restarter 从重启开始到本 Level 所有设备 LSDB 完成同步的时间。T2 定时器是系统等待各层 LSDB 同步的最长时间,一般情况下为 60 秒。

Level-1 和 Level-2 的 LSDB 各维护一个 T2 定时器。

  • T3 定时器:GR Restarter 成功完成 GR 所允许的最大时间。T3 定时器的初始值为 65535 秒,但在收到邻居回应的 RA 置位的 IIH 报文后,取值会变为各个 IIH 报文的 Remaining time 字段值中的最小者。T3 定时器超时表示 GR 失败。

整个系统维护一个 T3 定时器。

会话机制:

为了以示区别,主备倒换和重启 IS-IS 进程触发的 GR 过程称为 Restarting,FIB 表保持不变。设备重启触发的 GR 过程称为 Starting,进行 FIB 表更新。

下面分 Restarting 和 Starting 两种情况说明 IS-IS GR 的详细过程。

ISIS Restarting 的过程:

Restarting过程

图:IS-IS Restarting 过程

  1. GR Restarter 进行协议重启后,GR Restarter 进行如下操作:
  • 启动 T1、T2 和 T3 定时器。

  • 从所有接口发送包含 Restart TLV 的 IIH 报文,其中 RR 置位,RA 和 SA 位清除。

  1. GR Helper 收到 IIH 报文以后,进行如下操作:
  • GR Helper 维持邻居关系,刷新当前的 Holdtime。

  • 回送一个包含 Restart TLV 的 IIH 报文(RR 清除,RA 置位,Remaining time 是从现在到 Holdtime 超时的时间间隔)。

  • 发送 CSNP 报文和所有 LSP 报文给 GR Restarter。

在点到点链路上,邻居必须发送 CSNP。

在广播链路上,是 DIS 的邻居才发送 CSNP 报文,如果重启的是 DIS,则在 LAN 中的其它设备中选举一个临时的 DIS。

如果邻居设备不具备 GR Helper 能力,就忽略 Restart TLV,按正常的 IS-IS 过程处理,重置和 GR Restarter 的邻接关系。

  1. GR Restarter 接收到邻居的 IIH 回应报文(RR 清除、RA 置位),做如下处理:
  • 把 T3 的当前值和报文中 Remaining time 比较,取其中较小者作为 T3 的值。

  • 在接口收到确认报文和 CSNP 报文之后,取消该接口的 T1 定时器。

  • 如果该接口没有收到确认报文和 CSNP 报文,T1 会不停地重置,重发含 Restart TLV 的 IIH 报文。如果 T1 超时次数超过阈值,GR Restarter 强制取消 T1 定时器,启动正常的 IS-IS 处理流程。

  1. 当 GR Restarter 所有接口上的 T1 定时器都取消,CSNP 列表清空并且收集全所有的 LSP 报文后,可以认为和所有的邻居都完成了同步,取消 T2 定时器。

  2. T2 定时器被取消,表示本 Level 的 LSDB 已经同步。

  • 如果是单 Level 系统,则直接触发 SPF 计算。

  • 如果是 Level-1-2 系统,此时判断另一个 Level 的 T2 定时器是否也取消。如果两个 Level 的 T2 定时器都被取消,那么触发 SPF 计算,否则等待另一个 Level 的 T2 定时器超时。

  1. 各层的 T2 定时器都取消后,GR Restarter 取消 T3 定时器,更新 FIB 表。GR Restarter 可以重新生成各层的 LSP 并泛洪,在同步过程中收到的自己重启前生成的 LSP 此时也可以被删除。

  2. 至此,GR Restarter 的 IS-IS Restarting 过程结束。

ISIS Starting 过程:

对于 Starting 设备,因为没有保留 FIB 表项,所以一方面希望在 Starting 之前和自己的邻接关系为 “Up” 的邻居重置和自己的邻接关系,同时希望邻居能在一段时间内抑制和自己的邻接关系的发布。其处理过程和 Restarting 不同,具体如下图所示:

ISISStarting过程

图:IS-IS Starting 过程

  1. 为每层 LSDB 的同步启动 T2 定时器。
  • 从各个接口发送携带 Restart TLV 的 IIH 报文,其中 RR 位清除,SA 位置位。

  • RR 位清除表示是 Starting 完成。

  • SA 位置位则表示希望邻居在收到 SA 位清除的 IIH 报文之前,一直抑制和自己的邻接关系的发布。

  1. 邻居收到携带 Restart TLV 的 IIH 报文,根据设备是否支持 GR,进行如下处理。
  • 支持 GR

重新初始化邻接关系。

在发送的 LSP 中取消和 GR Restarter 邻接关系的描述,进行 SPF 计算时也不考虑和 GR Restarter 相连的链路,直到收到 SA 位清除的 IIH 为止。

  • 不支持 GR

邻居忽略 Restart TLV,重置和 GR Restarter 之间的邻接关系。

回应一个不含 Restart TLV 的 IIH 报文,转入正常的 IS-IS 处理流程。这时不会抑制和 GR Restarter 的邻接关系的发布。在点到点链路上,还会发送一个 CSNP 报文。

  1. 邻接关系重新初始化之后,在每个接口上 GR Restarter 都和邻居重建邻接关系。当有一个邻接关系到达 Up 状态后,GR Restarter 为该接口启动 T1 定时器。

  2. 在 T1 定时器超时之后,GR Restarter 发送 RR 置位、SA 置位的 IIH 报文。

  3. 邻居收到 RR 置位和 SA 置位的 IIH 报文后,发送一个 RR 清除、RA 置位的 IIH 报文作为确认报文,并发送 CSNP 报文。

  4. GR Restarter 收到邻居的 IIH 确认报文和 CSNP 报文以后,取消 T1 定时器。

如果没有收到 IIH 报文或者 CSNP 报文,就不停重置 T1 定时器,重发 RR 置位、SA 置位的 IIH 报文。如果 T1 超时次数超过阈值,GR Restarter 强制取消 T1 定时器,进入正常的 IS-IS 处理流程完成 LSDB 同步。

  1. GR Restarter 收到 Helper 端的 CSNP 以后,开始同步 LSDB。

  2. 本 Level 的 LSDB 同步完成后,GR Restarter 取消 T2 定时器。

  3. 所有的 T2 定时器都取消以后,启动 SPF 计算,重新生成 LSP,并泛洪。

  4. 至此,GR Restarter 的 IS-IS Starting 过程完成。

IS-IS NSR(不间断路由):

在网络高速发展的今天,用户对数据、视频、语音等应用的需求日渐增多,运营商对 IP 网络的可靠性也提出了更高的需求。当网络中某个节点发生故障,或者维护过程中人为进行的主备倒换,都可能导致设备无法组建路由信息,导致流量丢失甚至网络瘫痪。部署 NSR(Non-Stop Routing)能够解决上述问题,给用户的关键业务提供不间断转发的高可靠性保障。

IS-IS NSR 特性通过 IS-IS 实时数据的主备间高度同步来保证主备倒换后备板能够快速接管原主控板的业务,使邻居不感知本设备故障。在主备倒换后,新主用主控板利用这些实时数据可以迅速地恢复协议,使邻居设备对主备倒换不感知。IS-IS NSR 主要通过备份以下数据来实现:

  • 配置数据:用户完成的所有配置,包括邻居信息,定时器参数信息及进程下的配置信息等。

  • 动态数据:包括接口参数及状态、邻居、LSDB 等信息。

IS-IS 与 BFD(双向转发检测)联动

通常情况下,IS-IS 设定发送 Hello 报文的时间间隔为 10 秒,一般将宣告邻居 Down 掉的时间(即邻居的保持时间)配置为 Hello 报文间隔的 3 倍。若在相邻路由器失效时间内没有收到邻居发来的 Hello 报文,将会删除邻居。由此可见路由器能感知到邻居故障的时间最小为秒级。这样可能会出现在高速的网络环境中大量报文丢失的问题。

双向转发检测 BFD(Bidirectional Forwarding Detection)能够提供轻负荷、快速(毫秒级)的通道故障检测,解决了 IS-IS 现有检测机制的不足的问题。使用 BFD 并不是代替 IS-IS 协议本身的 Hello 机制,而是配合 IS-IS 协议更快的发现邻接方面出现的故障,并及时通知 IS-IS 重新计算相关路由以便正确指导报文的转发。

IS-IS Auto FRR(快速重路由)

随着网络的不断发展,VoIP 和在线视频等业务对实时性的要求越来越高,而 IS-IS 故障恢复需要经历 “故障感知、LSP 更新、LSP 泛洪、路由计算和下发 FIB” 这几个过程才能让流量切换到新的链路上,因此故障恢复的时间远远超过了 50ms(即用户感知流量中断的时间),不能满足此类网络业务的实时性要求。

IS-IS Auto FRR(Fast reroute)遵循 RFC 5286(Basic Specification for IP Fast Reroute Loop-Free Alternates)协议,可为流量提供链路和节点的保护。IS-IS Auto FRR 能够保证转发系统快速地响应这种故障事件并采取措施,尽快让业务流恢复正常。

通常情况下,通过将 BFD 会话与 IS-IS Auto FRR 进行绑定,可以使故障恢复时间降低到 50ms 以内。当 BFD 检测到接口链路故障后,BFD 会话状态会变为 Down 并触发接口进行快速重路由,将流量从故障链路切换到备份链路上,从而达到流量保护的目的。

工作原理

IS-IS Auto FRR 利用 LFA(Loop-Free Alternates)算法预先计算好备份链路,并与主链路一起加入转发表。当网络出现故障时,IS-IS Auto FRR 可以在控制平面路由收敛前将流量快速切换到备份链路上,保证流量不中断,从而达到保护流量的目的,因此极大的提高了 IS-IS 网络的可靠性。

LFA 计算备份链路的基本思路是:以可提供备份链路的邻居为根节点,利用 SPF 算法计算出到目的节点的最短距离。然后,按照 RFC5286 规定计算出无环的备份链路。

IS-IS Auto FRR 支持对需要加入 IP 路由表的备份路由进行过滤,通过过滤策略的备份路由才会加入到 IP 路由表,因此,用户可以更灵活的控制加入 IP 路由表的 IS-IS 备份路由。

IS-IS TE(流量工程)

传统的路由器选择最短的路径作为主路由,不考虑带宽等因素。这样,即使某条路径发生拥塞,也不会将流量切换到其他的路径上。MPLS TE(Multiprotocol Label Routering Traffic Engineering)解决网络拥塞问题有自己的优势。通过 MPLS TE,用户可以精确地控制流量流经的路径,从而可以避开拥塞的节点。同时,MPLS TE 在建立隧道的过程中,可以预留资源,保证服务质量。

为了保证服务的连续性,MPLS TE 还引入路由备份和快速重路由的机制,可以在链路出现问题时及时进行切换。通过 MPLS TE 技术,服务提供商能够充分利用现有的网络资源,提供多样化的服务。同时可以优化网络资源,进行科学的网络管理。

MPLS TE 为了实现上述目的,需要了解整个网络中所有路由器的 TE 配置信息,但是 MPLS TE 缺乏这样一个机制:每个路由器在整个网络中泛洪各自的 TE 信息,并完成整网 TE 信息的同步。这个机制恰恰是 IS-IS 路由协议的一个基本特性,MPLS TE 需要借助 IS-IS 完成 TE 信息的发布和同步。

IS-IS TE 是 IS-IS 为了支持 MPLS TE 而做的扩展,它遵循 RFC5305 和 RFC4205 中关于 IS-IS 部分扩展的规定,通过在 IS-IS LSP 报文中定义新的 TLV 的方式,携带该路由器 MPLS TE 的配置信息,通过 LSP 的泛洪同步,实现 MPLS TE 信息的泛洪和同步。IS-IS TE 把所有 LSP 中携带的 TE 信息提取出来,传递给 MPLS 的 CSPF(Constraint Shortest Path First)模块,用来计算隧道路径。IS-IS TE 在 MPLS TE 的流程中扮演着 “搬运工” 的角色,IS-IS TE 和 MPLS TE、CSPF 的关系可以用下图来概括:

MPLSTE关系图

图:MPLS TE、CSPF 和 IS-IS TE 关系图

IS-IS TE 新增 TLV:

IS-IS TE 为了在 LSP 中携带 TE 信息,在 RFC5305 中新定义了如下四种 TLV:

  • Extended IS reachability TLV

此 TLV 用来替换 IS reachability TLV,并采用 sub TLV 的形式扩展了原来的 TLV 格式。sub TLV 在 TLV 中的实现方式与 TLV 在 LSP 中的实现方式相同。这些 sub TLV 用来携带配置在物理接口下的 TE 信息。

  • Traffic Engineering router ID TLV

此 TLV type 为 134,包含了四字节的 Router ID,在目前实现中就是 MPLS LSR-ID。对于 MPLS TE 来说,Router ID 用来唯一的标识一台路由器,它必须要和路由器一一对应。

  • Extended IP reachability TLV

此 TLV 用来替换 IP reachability TLV,用来携带路由信息。扩展了路由开销值的范围(四个字节),并可以携带 sub TLV。

  • Shared Risk Link Group TLV

此 TLV type 为 138,用来携带共享风险链路组信息。每个共享链路信息为四字节的正整数值,该 TLV 可以携带多个共享链路信息。

Extended IS reachability TLV 已经定义的 Sub TLV:

名称类型长度(Byte)
Administrative Group34管理组
IPv4 Interface Address64本端 IPv4 接口地址
IPv4 Neighbour Address84邻居的 IPv4 接口地址
Maximum Link Bandwidth94最大链路带宽
Maximum Reserved Link Bandwidth104最大预留链路带宽
Unreserved Bandwidth1132未预留带宽
Traffic Engineering Default Metric183流量工程缺省开销值
Bandwidth Constraints sub-TLV2236带宽约束 TLV

IS-IS TE 工作流程:

IS-IS TE 主要有两个流程:

  • 响应 MPLS TE 的配置消息流程

只有使能了 MPLS TE,IS-IS TE 特性才能运行。

根据 MPLS TE 的配置,更新 IS-IS LSP 报文中的 TE 信息。

将 MPLS TE 的配置传递给 CSPF 模块。

  • 处理 LSP 中 TE 信息的流程

提取收到的 IS-IS LSP 报文中的 TE 信息,传递给 CSPF 模块。

IS-IS TE 的典型应用是协助 MPLS TE 建立 TE 隧道。

IS-IS 多实例和多进程:

对于支持 VPN(Virtual Private Network)的设备,IS-IS 多实例是指在同一台路由器上,可以配置多个 VPN 实例与多个 IS-IS 进程相关联。IS-IS 多进程指在同一个 VPN 下(或者同在公网下)可以创建多个 IS-IS 进程,每个进程之间互不影响,彼此独立。不同进程之间的路由交互相当于不同路由协议之间的路由交互。

每个 IS-IS 进程都可以绑定一个指定的 VPN 实例,其典型应用就是在 VPN 场景中 PE 和 CE 之间运行 IS-IS 协议,同时 VPN 骨干网上的 IGP 也采用 IS-IS。那么,在 PE 上这两个 IS-IS 进程互不影响。

  • IS-IS 多进程共用同一个 RM 路由表。而 IS-IS 多实例使用 VPN 中的 RM 路由表,并且每个 VPN 都有自己单独的 RM 路由表。

  • IS-IS 多进程允许为一个指定的 IS-IS 进程关联一组接口,从而保证该进程进行的所有协议操作都仅限于这一组接口。这样,就可以实现一台路由器有多个 IS-IS 协议进程,每个进程负责唯一的一组接口。

  • IS-IS 进程在创建时可以选择绑定一个 VPN 实例,于是这个 IS-IS 进程就与此 VPN 实例相关联,并且只接收和处理此 VPN 实例内的事件。当 VPN 实例删除时,IS-IS 进程也会跟着被删除。

IS-IS 邻居震荡抑制:

IS-IS 邻居震荡抑制功能是一种震荡抑制方式,通过延迟邻居建立或调整链路开销为最大值的方法达到抑制震荡的目的。

产生原因:

如果承载 IS-IS 业务的接口状态在 Up 和 Down 之间切换,就会引起邻居状态的频繁震荡。此时,IS-IS 会快速发送 Hello 报文重新建立邻居,同步数据库 LSDB,触发路由计算,会造成大量报文交互,影响现有邻居的稳定性,对 IS-IS 业务造成较大影响,同时也会影响依赖 IS-IS 的其他业务(如:LDP、BGP)的正常运行。为了解决这个问题,IS-IS 实现了邻居震荡抑制功能,即在邻居频繁震荡时,启动震荡抑制,实现邻居延迟建立,或实现业务流量延迟经过频繁震荡的链路,达到抑制震荡的目的。

相关概念:

-flapping_event:震荡事件,接口上最后一次邻居状态由 Up 切换为 Init 或 Down,称之为 flapping_event。flapping_event 作为震荡源输入,用来触发震荡检测机制启动工作。

-flapping_count:当前震荡次数。

-detect-interval:震荡检测间隔,用于判断是否触发一次有效震荡事件。

-threshold:震荡抑制阈值,有效震荡事件触发累计超过该值时,进入震荡抑制阶段。

-resume-interval:恢复间隔,连续两次有效震荡事件超过该值时,退出震荡抑制阶段。

实现原理:

震荡检测

IS-IS 接口启动一个 flapping_count 计数器,相邻两次 flapping_event 产生时间的间隔在 detect-interval 之内,记为一次有效震荡事件。flapping_count 计数加 1,当 flapping_count 计数大于 threshold 时,系统判定震荡发生,需要进入震荡抑制阶段。进入震荡抑制阶段后,flapping_count 清 0。在 flapping_count 大于 threshold 之前,如果两次 flapping_event 的间隔大于 resume-interval,则 flapping_count 清 0。邻居震荡抑制从最后一次邻居状态变为 Init 或 Down 开始计时。

用户可以通过命令行配置 detect-interval,threshold,resume-interval 三个震荡检测的关键参数。

震荡抑制

震荡抑制分为 Hold-down 和 Hold-max-cost 两种模式:

  • Hold-down 模式:针对邻居建立过程中的频繁泛洪和拓扑变化的问题,在一段时间内禁止该邻居重新建立,避免频繁的数据库同步和大量的报文交互。

  • Hold-max-cost 模式:针对用户业务流量频繁切换的问题,在一段时间内将链路开销值设置为最大值 Max-cost(IS-IS Wide 模式的 Max-cost=16777214,IS-IS Narrow 模式的 Max-cost=63),避免用户的业务流量经过频繁震荡的链路。

Hold-down 模式和 Hold-max-cost 模式可以叠加使用,同时生效时,先进入 Hold-down 模式,待 Hold-down 模式退出后,再进入 Hold-max-cost 模式。

缺省情况下,IS-IS 使能 Hold-max-cost 模式,用户可以通过命令行修改震荡抑制方案和震荡抑制周期。

接口进入震荡抑制阶段后,接口下的全部邻居都会进入震荡抑制阶段。

退出震荡抑制

退出震荡抑制有以下几种方式:

  • 抑制定时器超时。

  • 复位 IS-IS 进程。

  • 用户通过命令行强制退出震荡抑制状态。

  • 通过连续发送三个携带特殊信息的 Hello 报文(Padding TLV 携带一个特殊的 Sub TLV=251),通知对端设备强制退出震荡抑制状态。


ISIS 路由协议理论

WJ.L 于 2020-04-09 17:21:49 发布

一、ISIS 的协议理论

CLNS (无连接网络服务):

1、CLNS 相当于 IP 协议簇;

2、CLNP(无连接网络协议)相当于 IP 协议,CLNP 地址相当于 IP 地址。

3、ES(Endpoint System)相当于 PC 和服务器;IS(Internal System)相当于路由器,就是三层设备。

4、ES-IS 就是指在 ES 和 IS 之间需要建立邻接关系,才能互相发现,才能离开 VLAN。也可以用来实现类似 ARP 和 RARP 的功能。

ES 发给 IS 的 Hello PDU 叫做 ESH,IS 发给 ES 的 Hello PDU 叫做 ISH。

5、IS-IS 是链路状态路由协议,核心算法是 SPF。

IS-IS 的 Hello PDU 叫 IIH。

IS-IS:

1、也有 Area 存在。

2、L0 是 ES-IS;L1 是区域内路由;L2 是区域间路由;L3 是域(AS)间路由。

Cisco 不支持 L3 路由,华为和 H3C 支持 L3 路由。

3、L1 路由器相当于区域内路由器;

L2 路由器相当于区域间骨干路由器(类似 OSPF 的 Area 0)以及 OSPF 的 ASBR;

L1/2 路由器相当于 OSPF 的 ABR。连接区域与骨干网络用的。

4、连续的 Level 2 功能的路由器互联起来相当于 OSPF 的 Area 0,也叫 IS-IS 的骨干网络。

5、区域间的路由汇总,只能在 L1/2 路由器配置。

6、默认路由器是 L1/2 角色。

如果两个 L1/2 路由器互联,会产 2 个邻接关系,一个是 L1 的,一个是 L2 的。

7、IS-IS 整个路由器属于一个 Area 的,Area 的边界是在链路上的。

OSPF 是以接口来区分 Area 的,Area 的边界在路由器上。

8、如果 IS-IS 路由器配置为纯 Level 1 路由器,则这个路由器上会把区域间和外部路由的精细路由全部用默认路由取代,默认路由指向 L1/2 路由器。—— 自动变为相当于 OSPF 的 Totally Stub。

9、IS-IS 里,CLNP 地址相当于 Router-id 值。

10、NSAP 是网络层 CLNP 地址的简化版,用单一地址表示整个路由器,SNPA 是数据链路层地址,路由器上接口都用 SNPA 地址来区分。

NSAP 地址的格式 “区域 ID. 主机(system)ID. 传输层端口号”。

NET 地址是纯三层 OSI 地址,特点是传输层端口号永远写 00。

即格式为 “区域 ID. 主机(system)ID.00”。

11、NET 地址:49.0001.abcd.ef12.3456.00,49 代表是私有 AS,0001 代表是区域号,abcd.ef12.3456 代表是 RID 值。

12、CSNP 相当于 OSPF exchange 状态下的 DBD 包的作用 —— 把自己整个 LSDB 的所有 LSA 的摘要信息发给邻居。

13、PSNP 相当于 OSPF Loading 状态下的 LSR 的作用 —— 向邻居申请它自己没有的 LSA。

14、LSP 的 ATT 位,用于告诉 L1 路由器,我是这个区域的 L1/2 路由器。

15、IS-IS 在 BMA 网络中选举的 DIS 只是为了表示这里有一个 BMA 网络,而不像 OSPF 的 DR 起路由反射器的作用。

因此,IS-IS 的 BMA 网络有 DIS,但 BMA 网络中的 IS-IS 邻接关系仍然是全互联的。

DIS 分别在 L1 和 L2 上各自创建一个 DIS。

DIS 选举,先比较 BMA 网络中接口的优先级(默认是 64),再比较 BMA 网络中接口的 SNPA(就是 MAC 地址的值)。以值越大越优先。

附注:

NSAP:・是在传输层和网络层边界上的一个概念性的点,是 OSI 网络层为传输层提供服务的位置

・NSAP 的最后一个字节用来标识同一个设备上的不同程序,类似于 TCP/IP 中的端口。

理清 ISIS、CLNS、NSAP、NET 的关系:

一、ISIS 简介

ISIS 最初是为 OSI 网络(并非 TCP/IP)设计的路由协议。

1. OSI 协议的网络层:

在 OSI 协议的网络层提供两种形式的服务:

CMNS: 连接模式的网络服务,对应的协议为 CONP(面向连接的网络协议)。在提供服务之前,先要建立一个连接。

CLNS: 无连接的网络服务,对应的协议为 CLNP(无连接的网络协议)。在提供服务之前,不需要建立连接。

CMNS/CLNS: 定义了具体的连接方法。

CONP/CLNP: 定义了 OSI 参考模型的网络层与传输层之间的接口,相当于 TCP/IP 模型中的 protocol 字段。

2. ISIS 网络中的术语:

ES:end-system 非路由的网络节点。(主机)

IS:intermediate-system 中间系统。(路由器)

area: 一组路由器和主机,以及连接这些路由器与主机之间的链路就构成了 ISIS 网络的一个区域。

domain: 一组连续的 area 就构成了 domain。

3. 路由协议:

ES-IS:

工作在主机与路由器之间,自动运行,不需要干预。

主机向路由器发 ESH 包,路由器可以知道所有连接的主机。

路由器向主机发送 ISH 包,主机可以发现它的缺省网关。

IS-IS:

工作在路由器于路由器之间。

相互交换 IIH 包。

ISIS 用于 CLNS 环境中,用来路由 CLNS 包

Integrated-ISIS:是 ISIS 的一个扩展版本(记得有个说法是为了适应 IP 网络而设计的)

可以用来单独路由 CLNS 包,IP 包,或者同时路由 CLNS 包,IP 包。

Integrated-ISIS 的中文名叫集成 ISIS,但由于目前 IP 网络比较普遍,所以所集成 ISIS 都说成 ISIS 了,很少特意说明是集成 ISIS。

二、ISIS 的 NSAP 地址结构

既然 ISIS 是为 OSI 网络设计的,那么 ISIS 所使用的网络层地址也应该是 OSI 的网络层地址。OSI 网络层地址是通过 NSAP 地址实现的,NSAP 地址定义了任意系统在 OSI 网络里面的地址。在不同的系统里面 NSAP 地址的格式是不一样的,不同的协议里 NSAP 地址的表现形式也是不一样的。

这相当于 TCP/IP 协议中的 IP 地址(NSAP 表示节点,用单一地址表示整个路由器, IP 地址是基于接口的)。

|  AFI  |  IDI  |  High Order DSP    |   System-ID   |  NSEL  |
    
       (      相当于网络号        )     (     相当于主机号    )

AFI:authorization and format ID 授权以及格式信息。

IDI:inter domain ID 域间标识

High Order DSP:高位的域内特定部分,指明 domain 内的 area

System-ID:标识独立的 OSI 设备,定长 6 个字节,通常取路由器以太口的 MAC 地址作为 system-ID

NSEL (NSAP selector):标识服务类型,标识设备中的进程,NSEL 字段为 00 的 NSAP 地址又叫做 NET 地址,标识路由器的,这种地址一般是应用在路由器上用于 SPF 计算的。

注意:

1.NSAP 地址的长度在 8 字节到 20 字节之间。其中 AFI、IDI、High Order DSP 组成了区域地址,这一段信息的长度是可变的,但 System ID 和 NSEL 的长度是固定的,其中 NSEL 又是可选字段。

2.NSAP 地址必须以整八位开头,0111 可以,011 不行,当 NSAP 的 NSEL 字段为 00 时,表示 NET 地址,标识路由器。

3.NSAP 地址最多 20 个字节。

对于 NSAP 地址,可以有两种解释,OSI(应了前面 “在不同的系统里面 NSAP 地址的格式是不一样的,不同的协议里 NSAP 地址的表现形式也是不一样的。” 这句话:

OSI:

system-ID 之前的表示为 area.

因此地址长度的范围为 8byte----20byte.

以下面这个地址为例:

47.0001.0000.0000.0001.00

OSI 表述:

47.0001 表示区域,

0000.0000.0001 表示节点

IS-IS 的设计主要是为了满足 CLNS 网络中的如下需求:

  1. 在路由域内执行路由选择协议功能 - 2. 为网络提供最佳路由 - 3. 当网络出现故障后,能够快速的收敛 - 4. 提供无环路的网络 - 5. 提供网络的稳定性 - 6. 提供网络的可扩展性

OSI 规范中定义了四种路由选择级别,分别为 L0、L1、 L2 和 L3

二、OSPF 与集成 ISIS 的差异

  ~  
img

img

IS-IS 属于链路状态、内部网关路由协议。

由于 IS-IS 是基于 OSI 协议栈开发的路由协议,所以最初它并不能支持 TCP/IP 协议栈。

但由于 IS-IS 使用的算法实在是太高效了,再加上 IS-IS 并没有使用固定的报文格式,所以 IS-IS 才能在 TCP/IP 统一天下的今天存活下来。

目前支持 TCP/IP 的 IS-IS 叫「集成 IS-IS」。

不过,集成 IS-IS 中依然保留了很多 OSI 协议栈的概念。例如 CLNP(无连接网络协议,类似于 IP 协议)、NSAP(网络服务接入点,类似于 IP 地址)等。

IS-IS 的主要特点如下:

  1. IS-IS 必须指定一个 OSI 格式的 “区域号和路由器 ID 的合体”,这个东西叫做 NET(网络实体标题)。NET 的格式为 xx.xxxx.yyyy.yyyy.yyyy.00(点分十六进制数)。其中 xx.xxxx 代表路由器所属的区域,yyyy.yyyy.yyyy 代表路由器 ID。

  2. IS-IS 将路由器分为了 Level-1、Level-2 和 Level-1-2(默认)这三类。其中,Level-1 路由器只能和 Level-1 路由器建立邻居;Level-2 路由器只能和 Level-2 路由器(跨区域)建立邻居;而 Level-1-2 路由器既可以和 Level-1 路由器也能和 Level-2 路由器(跨区域)建立邻居,可以看作是 Level-1 路由器和 Level-2 路由器的合体。Level-2 路由器可知道全网的拓扑信息,而 Level-1 路由器只能知道自己区域内的拓扑信息。

  3. IS-IS 严格来说并没有骨干区域和非骨干区域这种概念。取而代之的是骨干链路和非骨干链路。骨干链路指的是:一组连续的 Level-2 路由器以及 Level-1-2 路由器所组成的链路。

  4. IS-IS 以路由器为单位划分一个区域,而不是链路。

  5. IS-IS 的报文是直接封装在数据链路层之上的,所以它不能像其它路由协议一样在路由配置模式下使用 network 命令指定接口的 IP 来在对应接口上启用该路由协议。如果需要在某个接口上启用 IS-IS,只能在接口配置模式下启用。


IS-IS 原理与配置

不方便,你要方便吗?于 2023-12-15 09:18:12 发布

・IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是 ISO (International Organization for Standardization,国际标准化组织)为它的 CLNP (ConnectionLessNetwork Protocol,无连接网络协议)设计的一种动态路由协议。

・随着 TCP/IP 协议的流行,为了提供对 IP 路由的支持,IETF 在 RFC1195 中对 IS-IS 进行了扩 充和修改,使它能够同时应用在 TCP/IP 和 OSI(Open System Interconnect,开放式系统 互联)环境中,我们将扩展后的 IS-IS 称为集成 IS-IS。・本课程主要介绍集成 IS-IS 的基本概念、工作原理以及配置方法。

一. IS-IS 的基本概念

IS-IS 是 ISO 定义的 OSI 协议栈中的 CLNS(ConnectionLess Network Service,无连接网络服务)的一部分。

在这里插入图片描述

・IS-IS 是一种链路状态路由协议,IS-IS 与 OSPF 在许多方面非常相似,例如运行 IS-IS 协议的直 连设备之间通过发送 Hello 报文发现彼此,然后建立邻接关系,并交互链路状态信息。

・CLNS 由以下三个部分组成:

▫ CLNP:类似于 TCP/IP 中的 IP 协议。

 ▫ IS-IS:类似于 TCP/IP 中的 OSPF。

▫ ES-IS:类似于 TCP/IP 中的 ARP,ICMP 等。

・ES:End System,终端系统,类似于 IP 网络环境中的主机。

・ES-IS:End System to Intermediate System,终端系统到中间系统。

NSAP

・NSAP(Network Service Access Point,网络服务访问点)是 OSI 协议栈中用于定位资源的地址,主要用于 提供网络层和上层应用之间的接口。NSAP 包括 IDP 及 DSP,如下图所示:

在这里插入图片描述

・IDP(Initial Domian Part)相当于 IP 地址中的主网络号。它是由 ISO 规定,并由 AFI(Authority and Format Identifier)与 IDI(Initial Domain Identifier)两部分组成。AFI 表示地址分配机构和地址格式,IDI 用来标识 域。

・DSP(Domian Specific Part)相当于 IP 地址中的子网号和主机地址。它由 High Order DSP、System ID 和 SEL 三个部分组成。High Order DSP 用来分割区域,System ID 用来区分主机,SEL(NSAP Selector)用来 指示服务类型。

NET

・NET(Network Entity Title,网络实体名称)是 OSI 协议栈中设备的网络层信息,主要用于路由 计算,由区域地址(Area ID)和 System ID 组成,可以看作是特殊的 NSAP(SEL 为 00 的 NSAP)。

・NET 的长度与 NSAP 的相同,最长为 20Byte,最短为 8Byte。

・在 IP 网络中运行 IS-IS 时,只需配置 NET,根据 NET 地址设备可以获取到 Area ID 以及 System ID。

在这里插入图片描述

・Area ID 由 IDP 和 DSP 中的 High Order DSP 组成,既能够标识路由域,也能够标识路由域中 的区域。因此,它们一起被称为区域地址,相当于 OSPF 中的区域编号。

▫ 一般情况下,一个路由器只需要配置一个区域地址,且同一区域中所有节点的区域地 址都要相同。为了支持区域的平滑合并、分割及转换,缺省情况下,一个 IS-IS 进程下 最多可配置 3 个区域地址。

・System ID 用来在区域内唯一标识主机或路由器。在设备的实现中,它的长度固定为 6Byte。

NET 的配置举例

・每台运行 IS-IS 的网络设备至少需拥有一个 NET,当然,一台设备也可以同时配置多个 NET,但是 这些 NET 的 System ID 必须相同。

・在华为的网络设备上,System ID 的长度总是固定的 6Byte。在一个 IS-IS 路由域中,设备的 System ID 必须唯一,为了便于管理,一般根据 Router ID 配置 System ID。

在这里插入图片描述

IS-IS 和 OSPF 区域划分的区别

在这里插入图片描述

注: L1: Level-1 L1/2: Level-1-2 L2: Level-2

・IS-IS 在自治系统内采用骨干区域与非 骨干区域两级的分层结构: ▫ Level-1 路由器部署在非骨干区 域。 ▫ Level-2 路由器和 Level-1-2 路由 器部署在骨干区域。

・每一个非骨干区域都通过 Level-1-2 路 由器与骨干区域相连。 如图上图所示,整个骨干区域不仅包括 Area49.0002 中的所有路由器,还包括其 它区域的 Level2 和 Level-1-2 路由器。

・在学习 OSPF 过程中,我们已经体会到了多区域、层次化网络设计的好处。对于链路状态路 由协议而言,运行了该协议的设备会向网络中通告链路状态信息,同时也收集网络中所泛 洪的链路状态信息后加以存储,并最终以这些信息为基础进行计算,从而得到路由信息。 如果不采用多区域部署的方式,那么随着网络的规模逐渐增大,网络中泛洪的链路状态信 息势必会越来越多,所有设备都将承受更重的负担,路由计算机收敛将逐渐变得更加缓慢, 这也使得网络的扩展性变差。

・以上拓扑结构图可以体现 IS-IS 与 OSPF 的不同点: ▫ 在 IS-IS 中,每个路由器都只属于一个区域;而在 OSPF 中,一个路由器的不同接口可 以属于不同的区域。

▫ 在 IS-IS 中,单个区域没有骨干与非骨干区域的概念;而在 OSPF 中,Area0 被定义为骨 干区域。

▫ 在 IS-IS 中,Level-1 和 Level-2 级别的路由都采用 SPF 算法,分别生成最短路径树 SPT (Shortest Path Tree);而在 OSPF 中,只有在同一个区域内才使用 SPF 算法,区域 之间的路由需要通过骨干区域来转发。

IS-IS 路由器的分类

Level-1 路由器

▫ Level-1 路由器(例如图中的 R1)是一种 IS-IS 区域内部路由器,它只与属于同一区域的 Level-1 和 Level-1-2 路由器形成 邻接关系,这种邻接关系称为 Level-1 邻接关系。Level-1 路由器无法与 Level-2 路由器建立邻接关系。

▫ Level-1 路由器只负责维护 Level-1 的链路状态数据库 LSDB,该 LSDB 只包含本区域的路由信息。值得一提的是,Level1 路由器必须通过 Level-1-2 路由器接入 IS-IS 骨干区域从而访问其他区域。

在这里插入图片描述

Level-2 路由器

▫ Level-2 路由器(例如图中的 R4、R5、R6、R7)是 IS-IS 骨干路由器,它可以与同一或者不同区域的 Level-2 路由器或者 Level-1-2 路由器形成邻接关系。Level-2 路由器维护一个 Level-2 的 LSDB,该 LSDB 包含整个 IS-IS 域的所有路由信息。

▫ 所有 Level-2 级别(即形成 Level-2 邻接关系)的路由器组成路由域的骨干网,负责在不同区域间通信。路由域中 Level2 级别的路由器必须是物理连续的,以保证骨干网的连续性。

在这里插入图片描述

Level-1-2 路由器

▫ Level-1-2 路由器与 OSPF 中的 ABR 非常相似,它也是 IS-IS 骨干网络的组成部分。 ▫ Level-1-2 路由器维护两个 LSDB,Level-1 的 LSDB 用于区域内路由,Level-2 的 LSDB 用于区域间路由。

▫ 同时属于 Level-1 和 Level-2 的路由器称为 Level-1-2 路由器(例如图中的 R2 和 R3),它可以与同一区域的 Level-1 和 Level-1-2 路由器形成 Level-1 邻接关系,也可以与其他区域的 Level-2 和 Level-1-2 路由器形成 Level-2 的邻接关系。

在这里插入图片描述

在华为路由器上配置 IS-IS 时,缺省时,路由器全局 Level 为 Level-1-2,当然,可以通过命令 修改该设备的类型。

IS-IS 支持的网络类型

IS-IS 会自动根据接口的数据链路层封装决定该接口的缺省网络类型, IS-IS 支持两种类型的网络:

▫ 广播(Broadcast): 如 Ethernet。

▫ 点到点(P2P): 如 PPP、 HDLC 等。

在这里插入图片描述

对于 NBMA 网络,需对其配置子接口,并注意子接口类型应配置为 P2P。

IS-IS 开销值

・IS-IS 使用 Cost(开销)作为路由度量值,Cost 值越小,则路径越优。IS-IS 链路的 Cost 与设备的接口有关,与 OSPF 类似,每一个激活了 IS-IS 的接口都会维护接口 Cost。然而与 OSPF 不同的是,IS-IS 接口的 Cost 在缺省情 况下并不与接口带宽相关(在实际部署时,IS-IS 也支持根据带宽调整 Cost 值),无论接口带宽多大,缺省时 Cost 为 10。

・一条 IS-IS 路径的 Cost 等于本路由器到达目标网段沿途的所有链路的 Cost 总和。

・IS-IS 有三种方式来确定接口的开销,按照优先级由高到低分别是:

▫ 接口开销:为单个接口设置开销。

▫ 全局开销:为所有接口设置开销。

▫ 自动计算开销:根据接口带宽自动计算开销。

在这里插入图片描述

・在早期的 ISO10589 中,使能 IS-IS 的接口下最大只能配置值为 63 的开销值,此时 IS-IS 的开销 类型为 narrow。但是在大型网络设计中,较小的度量范围不能满足实际需求。RFC3784 中 规定,使能 IS-IS 的接口开销值可以扩展到 16777215,此时 IS-IS 的开销类型为 wide。

・缺省时,华为路由器采用的开销类型是 narrow。

・narrow 类型下使用的 TLV:

▫ 128 号 TLV(IP Internal Reachability TLV):用来携带路由域内的 IS-IS 路由信息。

▫ 130 号 TLV(IP External Reachability TLV):用来携带路由域外的 IS-IS 路由信息。

▫ 2 号 TLV (IS Neighbors TLV):用来携带邻居信息。

・wide 类型下使用的 TLV:

▫ 135 号 TLV (Extended IP Reachability TLV):用来替换原有的 IP reachability TLV,携 带 IS-IS 路由信息,它扩展了路由开销值的范围,并可以携带 sub TLV。

▫ 22 号 TLV(IS Extended Neighbors TLV):用来携带邻居信息。

IS-IS 报文格式

・IS-IS 报文是直接封装在数据链路层的帧结构中的。

・PDU(Protocol Data Unit,协议数据单元)可以分为两个部分,报文头(IS-IS Header)和变长字段部分 (Variable Length Fields )。

・其中 IS-IS Header 又可分为通用头部(PDU Common Header)和专用头部(PDU Specific Header)。对于 所有 PDU 来说,通用报头都是相同的,但专用报头根据 PDU 类型不同而有所差别。

在这里插入图片描述

IS-IS 通用头部详解

在这里插入图片描述

重要字段解释:

・Intradomain Routing Protocol Discriminator:域内路由选择协议鉴别符, 固定为 0x83。・Length Indicator:IS-IS 头部的长度(包括通用头部和专用头部),以 Byte 为 单位。

・Version/Protocol ID Extension:版本 / 协议标识扩展,固定为 0x01。

・System ID Length:NSAP 地址或 NET 中 System ID 区域的长度。值为 0 时,表 示 System ID 区域的长度为 6Byte。

・R(Reserved):保留,固定为 0。

・Version:固定为 0x01。

・Max.Areas:支持的最大区域个数。设置为 1~254 的整数,表示该 IS-IS 进程 实际所允许的最大区域地址数;设置为 0,表示该 IS-IS 进程最大只支持 3 个区 域地址数。

IS-IS 报文类型概述

・IS-IS 的 PDU 有 4 种类型:IIH (IS-IS Hello),LSP( Link State PDU,链路 状态报文),CSNP(Complete Sequence Number PDU,全序列号报 文),PSNP(Partial Sequence Number PDU,部分序列号报文)。

・IIH:用于建立和维持邻接关系, 广播网络中的 Level-1 IS-IS 路由器使用 Level-1 LAN IIH; 广播网络中的 Level-2 IS-IS 路由器使用 Level-2 LAN IIH; 点到点网络中则使用 P2P IIH。

・LSP:用于交换链路状态信息。LSP 分为两种,Level-1 LSP、Level-2 LSP。

・SNP:通过描述全部或部分链路数据库中的 LSP 来同步各 LSDB,从而维护 LSDB 的完整与同步。SNP 包括 CSNP 和 PSNP,进一步又可分为 Level-1 CSNP、 Level-2 CSNP、 Level-1 PSNP 和 Level-2 PSNP。

在这里插入图片描述

IS-IS 常见的 TLV

・TLV 的含义是:类型(TYPE),长度(LENGTH),值(VALUE)。实际上是一个数据结构,这个结构包含了这三个字段。

・使用 TLV 结构构建报文的好处是灵活性和扩展性好。采用 TLV 使得报文的整体结构固定,增加新特性只需要增加新 TLV 即可, 不需要改变整个报文的整体结构。

在这里插入图片描述

・TLV 也称为 CLV(Code-Length-Value)。


via:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值