前言

本文将介绍另一项动态路由协议:IS-IS,全称intermediate system to intermediate system(中间系统到中间系统)。

它与OSPF一样,都属于链路状态协议,都是设备之间通过Hello报文发现彼此、建立邻居、交互链路状态信息、同步LSDB、最后通过SPF算法计算路由信息,并且对整个网络会进行区域划分以减少LSDB的规模,降低对网络资源与设备性能的影响。

拓展一下,我们都学习过OSI七层网络模型,但是目前我们使用的是TCP/IP。这两种协议栈是不相同的,IS-IS原本是使用于OSI协议栈中,而我们要学习的是被引进到TCP/IP中的IS-IS。

所谓的IS(intermediate system,中间系统)指的是OSI中的路由器,因此IS-IS的原意为实现IS之间动态路由信息交互。

在IS-IS中,交互的链路状态信息,被称为LSP(link-state packet),对于OSI模型来说,IS-IS所处层级的报文就叫做packet。

目前IS-IS主要应用于运营商网络中,所以说实话,各位可能不太会接触到,一般的企业网还是以OSPF为主(甚至是RIP与静态)。因此本文不会介绍的太过细致,尤其是命令配置方面,真的有需要,还请以产品文档为准。

因为IS-IS与OSPF有很多相似处,并且本文是在OSPF之后出的,所以我就默认各位都学习过OSPF了,将会与OSPF进行参照比较来介绍IS-IS。同时这也是一个复习巩固ospf知识点的机会。

基本原理

与OSPF的大致相同点,我们在前文简单描述过,对于链路状态信息以及LSDB是什么的内容则在介绍OSPF的文章中提到过了。

因此我们不再赘述身为链路状态协议是如何通过链路状态信息交互,最后得到路由的基础过程。

先着重介绍IS-IS与OSPF的不同之处,概念术语抛的差不多之后再介绍IS-IS的通信过程。

个别部分一样是先介绍简单概念,后面另起一小节详细介绍

路由器类型

在IS-IS中,对路由器进行了两种级别的划分,分别是level-1与level-2。值得注意的是路由器可以同时是level-1和level-2,对于这种路由器,我们称之为level-1-2路由器。

我们可以理解为level-2为OSPF中的骨干路由器,level-1为OSPF中的非骨干区域路由器,而level-1-2则是ABR。

Level-1 路由器

  • 在 IS-IS 中,Level-1 路由器负责在同一个区域(Level-1 区域)内进行邻居关系建立与链路状态信息交互。
  • level-1路由器只能与level-1路由器建立邻居与链路状态信息交互。
  • 类似地,在 OSPF 中,非骨干路由器负责在同一个区域内进行路由选择。

Level-2 路由器

  • Level-2 路由器在 IS-IS 中负责在不同区域之间进行路由选择,处于连接不同 Level-1 区域的 Level-2 区域。
  • level-2路由器只能与level-2路由器建立邻居与链路状态信息交互。
  • 在 OSPF 中,骨干路由器(Backbone Router)扮演类似的角色,位于连接不同区域(OSPF 区域)的骨干区域。

Level-1-2 路由器

  • Level-1-2 路由器是同时具有 Level-1 和 Level-2 路由器功能的路由器
  • 既可以在 Level-1 区域内进行邻居建立,也可以在 Level-2 区域之间进行邻居建立。
  • 在 OSPF 中,ABR(Area Border Router)也具有类似的功能,连接不同 OSPF 区域并负责在它们之间传递链路状态信息。

类型总结

可以说,IS-IS 中的 level-1、level-2 和 level-1-2 路由器与 OSPF 中的非骨干路由器、骨干路由器和 ABR 在功能上有一定的相似性,都是为了实现在不同区域之间的路由选择和信息传递。

系统ID

再次提醒,IS-IS协议诞生于OSI协议栈中,“中间系统”这个叫法就是TCP/IP中的“路由器”。

系统ID(system ID)相当于OSPF中的router-id,都是表示区域内的某台路由器。

与router-id一样,IS-IS的系统ID也要求保证在区域内的唯一性。

巧的是,IS-IS是工作于二层,二层的MAC地址本质也是具备全局唯一性,因此,系统ID在不手动配置时,会默认使用MAC地址

也因此,系统ID为48位二进制,与MAC地址长度一致;也与MAC地址一样默认使用十六进制表示。

区域

区域 id

IS-IS使用OSPF中类似area的概念,但不同的时,IS-IS的area长度是可变的,同时,还是使用十六进制的方式书写。

一般我们描述的区域id都是带有“49.”的前缀,实际上这个49并不属于区域id,49在OSI协议栈中用于表示私有地址。

值得注意的是,IS-IS中,区域的边界并不是设备。

在OSPF里,假设R2的两端:R1属于area0,R3属于area1。

  • 那么我们会配置R2的一个接口属于area0,与R1相连;
  • R2的另一个接口属于area1,与R3相连。
  • 最终结果就是R2处于area0与area1的边界。

在IS-IS中,我们仅能配置设备属于单个区域,对于level-2路由器之间来说:

  • 首先考虑R2究竟是要配置为R1所处的区域还是R3所处的区域。
  • 假设R2与R1配置为同一区域,那么R2与R3会进行跨区域邻居建立。
  • 最终结果就是区域的边界是处于R2与R3之间的链路上。

区域划分

刚刚提到的情景说明,强调了“对于level-2路由器之间来说 ”,这是因为在IS-IS中,有严格的层次划分。

IS-IS使用两级区域层次结构:Level 1和Level 2。

level-1层次类似于OSPF的常规区域,而且近似于totally NSSA区域;

level-2层次类似于OSPF的骨干区域,值得注意的是L2层次支持跨区域邻居建立。

老实说,我认为叫成level-1区域和level-2区域对于初学者来说很容易混淆概念。个人认为,应该叫level-1层次、level-2层次,所以本文会采用这个叫法。

level-1路由器负责区域内路由,level-1路由器只能与同区域的level-1路由器建立邻居关系。

level-2路由器负责区域间路由,level-2可以跨区域,或者说无视区域id,与其他level-2路由器建立邻居关系。

也因此,才会存在level-1-2路由器,它即属于level-1路由器,又属于level-2路由器。可以使用它来连接level-1层次与level-2层次,这相当于OSPF中的ABR角色。

小结

对于IS-IS来说,区域仅仅只是标识,而真正划分骨干区域与常规区域的是level层次。

作为骨干的level-2层次可以包含多个区域。

作为常规的level-1层次需要经过level-1-2路由器与作为骨干的level-2层次相连,最后做到跨区域路由。

NET地址

系统ID只要求区域内唯一,也就是不同区域内的两台路由器实际可以用同一个系统ID(这在OSPF中也是如此)。

NET地址则是全IS-IS网络中对路由器的唯一标识符,它由区域ID+系统ID+NSAP选择器(默认为00)组成。

NET=network entity title,网络实体名称

这个概念在OSPF中是不存在的。

事实上,NET地址起源于OSI协议栈中NSAP地址的概念(相当于TCP中的套接字——ip地址+端口号)

NET的示例: 49.0001.1921.6800.1001.00

请注意,这是一个十六进制的数。

  • 49: AFI (Authority and Format Identifier),表示这是一个私有地址。(起源于OSI协议栈)
  • 0001: 区域ID
  • 1921.6800.1001: 系统ID
  • 00: NSAP地址中表示上层协议类型的字段,IS-IS不需要,故默认为00。

总的来说,我们只关注中间的区域ID与系统ID即可。

只不过在DIS生成的伪节点上,会修改NSAP选择器字段为“01”,有关DIS与伪节点的概念稍后就介绍。

另外,值得注意的是,区域ID是可变长的,所以推算区域ID是从右往左推——去掉2位的NSAP选择器,再去掉12位系统ID(以16进制算),得到的就是区域ID。

比如49.0000.0000.00001.00的区域ID为49

49.0000.0000.0000.00001.00的区域ID为49.0000

当然,在以太网中,实际开头不需要为49。10.0000.0000.0001.00也是没错的。

度量值

IS-IS与OSPF一样都是使用cost值作为度量值,不同的是IS-IS是一个完全独立的数值,默认为10。

在OSPF中,cost值是链路带宽的值计算过来的。

所以在不手动修改cost值的情况下,IS-IS的度量值反而更类似于RIP的度量值(跳数)。

不过实际使用中,个别厂商会在自家设备上对IS-IS协议进行魔改,提供自动计算cost的功能。(这个本文不做讨论,可以查看相应的产品文档)。

协议报文

与OSPF报文采用网络层的IP封装不同,IS-IS的报文采用数据链路层封装,在以太网中,我们称数据链路层的报文为协议数据单元PDU。

IS-IS工作于二层的好处就是封装解封装效率高。

IS-IS使用了以下几种PDU进行协议通信。

IIH(IS-IS Hello)

相当于OSPF中的hello报文,一样是用于建立与维护邻居关系。

在IS-IS中存在三种IIH PDU:level-1 LAN IIH、level-2 LAN IIH以及P2P IIH。

前两者用于广播型网络(如以太网):如果设备为level-1,则它仅收发level-1 IIH;如果设备为level-2,则它仅收发level-2 IIH;level-1-2设备则两者都收发。

而P2P IIH则用于P2P类型的网络中。

IS-IS使用LSP承载链路状态信息,LSP是一个完整的在链路上传播的报文,因此它类似于OSPF中的LSU(包含其中的多种LSA)。

LSP仅存在level-1 LSP与level-2 LSP两种,并不像OSPF中分了多种LSA。

CSNP(Complete Sequence Number PDU)

CSNP意为完全序列号报文,也是分level-1与level-2两种,用于在不同的IS-IS邻居关系中。

CSNP类似于OSPF中的DD报文,用途为描述设备中所有的LSP摘要,确保设备之间LSDB的同步。

PSNP(Partial Sequence Number PDU)

PSNP意为部分序列报文,也是分level-1与level-2两种,PSNP与CSNP的不同之处在于PSNP只包含部分LSP摘要信息,PSNP主要用于请求LSP更新。这相当于OSPF中的LSR报文。

个别情况下,还会作为确认收到更新LSP报文的回应报文,即OSPF中的LSAck。具体内容后续介绍。

提示

LSP并不只在收到PSNP报文请求后才会发布。LSP会周期性的发布,即使没有明显的网络变化。

这个周期通常被称为 “LSP 刷新间隔”,默认值通常为 900 秒(最大生存时间的60%)。

LSP 刷新的目的:

  • 确保 LSP 信息的新鲜度。
  • 防止 LSP 因超时而被删除。
  • 允许新加入的路由器获取完整的拓扑信息。

当然,除了周期性刷新,拓扑变化也会立即触发 LSP 更新。

DIS与伪节点

DIS

在IS-IS中,每个网段会选举一台设备作为DIS(指定中间系统),与OSPF的DR很相似,但有一些重要区别。

选举:

  • 基于接口优先级和**系统ID(通常是路由器的MAC地址)**。
  • 优先级最高的路由器成为DIS。如果优先级相同,则系统ID最高的成为DIS。
  • 没有备份DIS的概念(与OSPF不同)。当DIS发送故障,立即开始选举新的DIS。
  • DIS具有抢占性,即网络中接入优先级更高的设备时,该设备会夺取DIS的名头,成为新的DIS。

职责:

  • 定期发送CSNP(完整序列号PDU)。
  • 为广播网络创建和维护伪节点LSP。
  • 在网络中泛洪LSP。

其他路由器与DIS的关系:

  • 所有路由器都与DIS建立邻接关系。
  • 其他路由器通过DIS同步LSDB。

报文交换:

  • DIS定期(默认每10秒)在广播网络上发送CSNP。
  • 其他路由器如果发现CSNP中列出的LSP是自己没有的,会发送PSNP请求这些LSP。
  • DIS负责响应PSNP请求,发送相应的LSP。

伪节点

还有一个很特别的点在于,IS-IS中的DIS虚拟出的伪节点(Pseudonodes):

伪节点的NET地址是在DIS的NET地址最后位从00改为01。具体我们之后以拓扑进行详细介绍时看一下LSDB表内信息。

目的:

  • 简化拓扑,减少网络中LSP的数量,每个路由器只需要发布描述它邻居为伪节点的LSP,而不需要发布他与所有其他邻居路由器的关系。

其他路由器与伪节点的关系:

  • 伪节点代表整个广播网段。
  • 每个路由器(包括DIS)都在其LSP中声明与伪节点的连接。
  • 伪节点LSP由DIS生成和维护,包含了所有连接到该网段的路由器信息。

报文交换:

  • 路由器不直接与伪节点交换报文。
  • 路由器通过DIS了解伪节点的信息。

小结

DIS负责管理网段,而伪节点简化了网络拓扑的表示。

这种设计大大减少了需要在网络中传播的LSP数量,提高了协议的整体效率。

可以说伪节点与OSPF的type-2 LSA很相似:

  • 普通路由器在OSPF中是与DR建立邻接关系,最后由DR发布type-2 LSA描述DR所处网段一共有多少路由器(与我相连,邻居是我)。
  • 普通路由器在IS-IS中则是背地里与所有路由器都建立邻接关系(包括伪节点),但是表面表示为只与伪节点建立邻接关系,最后由DIS发布的伪节点LSP中描述了DIS所处网段一共有多少路由器(与伪节点、也就是我相连,邻居是我)。

邻居建立过程

广播网络

如图,假设两台level-1在使用千兆以太网连接在一起,都在GE0/0/0口激活IS-IS。

  1. 由于R1是level-1路由器,因此其发送的hello报文为level-1 IIH。该报文中记录了R1的系统ID以及多个TLV,其中一个TLV记录了R1的区域ID。

    有关TLV是啥,我们稍后介绍。

  2. R2在其GE0/0/0口接收到R1的level-1 IIH报文,进行相应的检查(区域是否一致等),检查通过后,R2在其邻居表中记录下R1,并将状态标记为initial(初始化)。

    R2发布一个level-1 IIH报文,报文内包含了系统ID、区域TLV,以及自己已记录邻居设备信息(R1的TLV与MAC地址)。

  3. R1收到R2的报文,了解R2已经发现了自己,则将R2记录在邻居表中,并把状态设置为up。

    R1也发布一个level-1 IIH报文,报文内包含了系统ID、区域TLV,以及自己已记录邻居设备信息(R2的TLV与MAC地址)。

    待R2收到R1的报文,了解R1也发现了自己,则将邻居表中R1的状态也记录为up。

  4. R1与R2彼此状态都为up,我们就认为邻居关系建立起来了。

  5. 因为是广播网络,需要选举DIS,所以在邻居关系建立后,路由器会等待两个Hello报文间隔,再进行DIS的选举。

    Hello报文中包含Priority字段(优先级),优先级值最大的将被选举为该广播网的DIS。若优先级相同,接口MAC地址较大的被选举为DIS。(与STP的选举优先级很类似)

以上例子是level-1路由器之间的邻居建立关系;至于level-2路由器,形式也是一样的,只不过level-2路由器是通过另一个组播地址,通过level-2 IIH报文进行关系建立。

可以说,这与OSPF的int状态、2-way状态是一样的。

但请注意,IS-IS并没有像OSPF那样分邻居与邻接两种关系,对IS-IS来说只有邻居这一种关系。

P2P网络

在P2P网络中,IS-IS的邻居建立过程存在两种方式:两次握手及三次握手。

两次握手方式不存在确认机制,只要设备在接口收到P2P IIH,并且检查通过后,就直接当作该邻居存在,状态设置为up。(因为是P2P网络,对端只可能存在一台设备)

三次握手方式则需要经过一轮确认(类似广播网络中需要在报文中发现自己的系统ID才确定状态可以设置为up)。

两次握手

  1. R3在S1/0/0口激活了IS-IS,检查到为P2P网络,于是在该接口上发送P2P IIH报文。该hello报文中包含了R3的系统ID、区域TLV。
  2. R4也激活了IS-IS,并收到了R3的P2P IIH,则认为该点对点网络对面的设备为R3,并且链路通的(毕竟收到了该报文),于是邻居表中填写上R3的信息,并标记为up。
  3. 反过来,对R3来说也是如此,收到R4的P2P IIH报文后,也标记为up。

三次握手

三次握手机制中,新增了一个特殊的TLV:P2P三向邻接TLV。

  1. R3在S1/0/0口激活了IS-IS,检查到为P2P网络,于是在该接口上发送P2P IIH报文。该hello报文中包含了R3的系统ID、区域TLV以及一个三向邻接TLV。由于当前R3设备并没有在该P2P网络中发现其他设备,则该邻接TLV内的邻接状态设置为Dowm

  2. R4收到R3的P2P IIH报文,检查通过后,在其邻居表中添加R3的信息,并将状态设置为Initial。

    R4发送一个P2P IIH报文,包含R4的系统ID、区域ID以及记录了邻居系统ID与状态为initial的邻接TLV。

  3. R3收到R4的报文,检查后还发现对方发来的报文包含了自己的信息,不过由于报文内的邻接状态为initial,R3暂时不认为邻接关系建立完毕。

    邻接状态为initial意味着R4并没有收到R3的进一步确认信息;对于R3来说便是没有确认到“ R4 是否已经收到并处理了 R3 的信息”。

    R3在邻居表内只会将R3的邻居状态设置为initial。

    但当R3 发送下一个 P2P IIH 报文时,在这个新的 IIH 报文中,R3 会在三向邻接 TLV 中将 R4 的状态标记为 Up。

    这表示 R3 已经收到并确认了 R4 的存在,并准备建立完整的邻接关系。

  4. R4收到信息后,发现了自己的信息,且邻接状态为up,因此邻居表中对R3的状态修改为up,同时发送一个标记R3邻接状态为up的P2P IIH报文。

  5. R3收到邻接状态为up的报文,这时才将邻居R4的状态设置为up。

    自此,双方才认为邻接关系建立完毕。

从严格的报文交换角度来看,这个过程涉及四次报文交换。然而,它被称为”三次握手”的原因如下:

  1. 状态变化的关键点:

    • 第一次:初始 Down 状态
    • 第二次:转为 Initial 状态
    • 第三次:最终确认为 Up 状态 这三个关键的状态变化点构成了”三次握手”的核心。
  2. 功能视角:

    • 第一次:通告自己
    • 第二次:确认看到对方并通告自己
    • 第三次:确认双方都已互相看到 从功能上看,这三步完成了必要的信息交换。
  3. 最后一次交换的作用:

    • 第四次报文交换主要是为了同步最终状态,可以看作是对第三次握手的确认。

      在上述例子的第二次交换时——R3收到R4的报文后,本可以设置为up;再加上第三次交换——R4收到R3的报文,状态更新为up。算起来正好是三次握手即可互相标记为up。

    • 在某些描述中,这可能被视为握手过程完成后的一个额外步骤。

  4. 简化的概念模型:

    • 称为”三次握手”可能是为了简化理解和描述,突出过程中的关键步骤。

邻居建立后

广播网络

DIS会周期性地泛洪CSNP(默认10秒一次),以确保该网络中地IS-IS设备拥有一致地LSDB。

其他设备收到该CSNP后会将其包含地LSP摘要与自己地LSDB进行对比,如果一致,则忽略该CSNP。

而如果本地LSDB缺少了部分LSP,则向DIS发送PSNP请求这些LSP地详细信息;

DIS收到该PSNP后,将相应地LSP发送给对方。

设备收到DIS发来地LSP后,无需向DIS回复确认收到信息。(毕竟之后还会收到DIS地周期CSNP,如果没收到/还是缺,再次申请即可)

P2P网络

P2P 网络中不需要DIS,CSNP也仅在邻居关系建立完成时发送一次用于确定要申请更新的LSP,后续不会周期性发布。

对于设备来说,在收到 LSP 后需要发送 PSNP 来确认收到的 LSP,以确保信息的完整性。

如果发送者一直没等到对方用于确认的PSNP,则会重传刚刚的LSP。

报文与LSDB详解

以下的介绍会在一个简单的拓扑上进行:R1与R2相连,网段为192.168.12.0/24,区域ID为10,都是level-1-2路由器,具体的IP地址主机位与系统ID就是R1为1、R2为2。

TLV介绍

TLV是对IS-IS报文中Type、Length、Value这三个字段的合称。

type表示该TLV的类型、length表示该TLV的整体长度、value存储传递的信息。

在IS-IS报文中,会存在多个TLV,数量不做限制。可以理解为是将ospf中多种LSA类型的机制理念进一步扩大利用。

一些常见的TLV如下:

TLV Type 名称 被应用于以下PDU类型中
1 Area Addresses,区域地址 IIH、LSP
2 IS Neighbors(LSP),IS邻居(LSP) LSP
6 IS Neighbors(MAC Address),IS邻居(MAC 地址) LAN IIH
8 Padding,填充(补足报文整体长度,内容为空白) IIH
9 LSP Entries,LSP条目(摘要信息) SNP
10 Authentication Information,认证信息 IIH、LSP、SNP
128 IP Internal Reachability Information,IP内部可达性信息(包含网段与到达该网段的cost值) LSP
129 Protocols Supported,支持的协议 IIH、LSP
130 IP External Reachability Information,IP外部可达性信息(包含网段与到达该网段的cost值) L2 LSP
131 Inter-Domain Routing Protocol Information,跨域路由协议信息 L2 LSP
132 IP Interface Address,设备接口的IP地址 IIH、LSP

SNP代指CSNP与PSNP。

请记住,字段名称是我们人为理解的,对计算机来说,它们传递的是直接的数据信息,不包含字段名称的。

比如说,在抓包软件中,value这个字段的名称在不同的报文中会被称为不同的字段名称。以下是一个hello中的抓包信息:

通过这个抓包我们也能理解报文中TLV的结构。

报文特有头部省略了。

IIH (hello报文)

我们直接以上面的抓包的 IS-IS Hello 报文信息,进行介绍:

也就是上图的白色背景的内容,灰色背景的内容这里不介绍。

  • hello报文头部信息:
    • Circuit type: 表示电路类型,这里是 Level 1 和 Level 2。
    • SystemID {Sender of PDU}: 发送此 PDU 的系统 ID,为 0000.0000.0001。
    • Holding timer: 保持计时器,设置为 30。
    • PDU length: 该PDU 长度为 1497 字节。
    • Priority: 路由器优先级,优先级为 64。(用于选举DIS)
    • SystemID {Designated IS}: DIS的 系统ID 为 0000.0000.0001.01。
  • 以下为各TLV
    • Area address(es): 区域地址,类型为 1,长度为 2。
    • IP Interface address(es): IP 接口地址,类型为 132,长度为 4。
    • Protocols Supported: 支持的协议,类型为 129,长度为 1。
    • Restart Signaling: 重启信令,类型为 211,长度为 3。
    • Multi Topology: 多拓扑,类型为 229,长度为 2。
    • Padding: 填充字段,用于填充报文,类型为 8,长度为 255 和 161。目的是将hello报文的长度补充到1497字节。

LSP报文

该图为LSP报文的抓包信息。其详细内容如下:

根据提供的抓包信息,以下是对其中一些字段的解读:

  • LSP头部信息:
    • PDU length: PDU 的长度为 54 字节。
    • Remaining lifetime: 剩余生存时间为 1198。
    • LSP-ID: LSP 的 ID 为 0000.0000.0002.00-00。
    • Sequence number: 序列号为 0x00000002。
    • Checksum: 校验和为 0x6d9a,校验正确。
    • Type block: 类型块,该报文表示的 IS 类型为 Level 2。
  • TLV信息:
    • Protocols supported: 支持的协议,类型为 129,长度为 1。
    • Area address(es): 区域地址,类型为 1,长度为 2,区域地址为 10。
    • IP Interface address(es): IP 接口地址,类型为 132,长度为 4,IPv4 接口地址为 192.168.12.2。
    • IP Internal reachability: IP 内部可达性信息,类型为 128,长度为 12,IPv4 前缀(网段)为 192.168.12.0/24,cost值为10。(图中未展开,展开后有详细的cost值)

LSDB

在R1上使用display isis lsdb命令检查LSDB摘要表。由于是level-1-2路由器,因此R1与R2不仅建立了level-1关系,也建立了level-2关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[R1]display isis lsdb

Database information for ISIS(1)
--------------------------------

Level-1 Link State Database

LSPID Seq Num Checksum Holdtime Length ATT/P/OL
-------------------------------------------------------------------------------
0000.0000.0001.00-00* 0x00000009 0x6105 1121 68 0/0/0
0000.0000.0002.00-00 0x00000005 0x7dea 1067 68 0/0/0
0000.0000.0002.01-00 0x00000003 0xa0e7 1067 55 0/0/0

Total LSP(s): 3
*(In TLV)-Leaking Route, *(By LSPID)-Self LSP, +-Self LSP(Extended),
ATT-Attached, P-Partition, OL-Overload


Level-2 Link State Database

LSPID Seq Num Checksum Holdtime Length ATT/P/OL
-------------------------------------------------------------------------------
0000.0000.0001.00-00* 0x0000000a 0x5f06 1121 68 0/0/0
0000.0000.0002.00-00 0x00000006 0x7beb 1067 68 0/0/0
0000.0000.0002.01-00 0x00000003 0xa0e7 1067 55 0/0/0

Total LSP(s): 3
*(In TLV)-Leaking Route, *(By LSPID)-Self LSP, +-Self LSP(Extended),
ATT-Attached, P-Partition, OL-Overload

可以看到有三条LSP,其中第一条为自己,第二条为邻居,第三条为DIS(伪节点)。

我们可以进一步使用display isis lsdb LSP-ID verbose命令查看指定LSP的详细信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[R1]display isis lsdb 0000.0000.0002.00-00 verbose

Database information for ISIS(1)
--------------------------------

Level-1 Link State Database

LSPID Seq Num Checksum Holdtime Length ATT/P/OL
-------------------------------------------------------------------------------
0000.0000.0002.00-00 0x00000006 0x7beb 1184 68 0/0/0
SOURCE 0000.0000.0002.00
NLPID IPV4
AREA ADDR 10
INTF ADDR 192.168.12.2
NBR ID 0000.0000.0002.01 COST: 10
IP-Internal 192.168.12.0 255.255.255.0 COST: 10

Total LSP(s): 1
*(In TLV)-Leaking Route, *(By LSPID)-Self LSP, +-Self LSP(Extended),
ATT-Attached, P-Partition, OL-Overload


Level-2 Link State Database

LSPID Seq Num Checksum Holdtime Length ATT/P/OL
-------------------------------------------------------------------------------
0000.0000.0002.00-00 0x00000007 0x79ec 1184 68 0/0/0
SOURCE 0000.0000.0002.00
NLPID IPV4
AREA ADDR 10
INTF ADDR 192.168.12.2
NBR ID 0000.0000.0002.01 COST: 10
IP-Internal 192.168.12.0 255.255.255.0 COST: 10

Total LSP(s): 1
*(In TLV)-Leaking Route, *(By LSPID)-Self LSP, +-Self LSP(Extended),
ATT-Attached, P-Partition, OL-Overload

我们也查看以下伪节点的详细信息,比较一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[R1]display isis lsdb 0000.0000.0002.01-00 verbose

Database information for ISIS(1)
--------------------------------

Level-1 Link State Database

LSPID Seq Num Checksum Holdtime Length ATT/P/OL
-------------------------------------------------------------------------------
0000.0000.0002.01-00 0x00000004 0x9ee8 1064 55 0/0/0
SOURCE 0000.0000.0002.01
NLPID IPV4
NBR ID 0000.0000.0002.00 COST: 0
NBR ID 0000.0000.0001.00 COST: 0

Total LSP(s): 1
*(In TLV)-Leaking Route, *(By LSPID)-Self LSP, +-Self LSP(Extended),
ATT-Attached, P-Partition, OL-Overload


Level-2 Link State Database

LSPID Seq Num Checksum Holdtime Length ATT/P/OL
-------------------------------------------------------------------------------
0000.0000.0002.01-00 0x00000004 0x9ee8 1064 55 0/0/0
SOURCE 0000.0000.0002.01
NLPID IPV4
NBR ID 0000.0000.0002.00 COST: 0
NBR ID 0000.0000.0001.00 COST: 0

Total LSP(s): 1
*(In TLV)-Leaking Route, *(By LSPID)-Self LSP, +-Self LSP(Extended),
ATT-Attached, P-Partition, OL-Overload

可以看到伪节点的详细信息与前面表示R2的详细信息有很大的区别。伪节点的信息只包含了伪节点的邻居。

配置

正如前言所说,本文只做简单介绍,尤其是配置方面。本文只做基础的配置介绍,其他诸如静默端口、路由汇总、路由渗透、认证等等都不做介绍,请移步到产品文档观看。

基础配置

创建配置IS-IS进程

  1. 执行命令system-view,进入系统视图。

  2. 执行命令isis [ process-id ] ,创建IS-IS进程并进入IS-IS视图。

    参数process-id用来指定一个IS-IS进程。如果不指定参数process-id,则系统默认的进程为1。

  3. 执行命令network-entity net,设置网络实体名称。

    注意!该命令相当于给设备分配了区域与系统ID。

    NET地址是全IS-IS网络中对路由器的唯一标识符,它由区域ID+系统ID+NSAP选择器(默认为00)组成

    也别忘了:IS-IS在建立Level-2邻居时,不检查区域地址是否相同,而在建立Level-1邻居时,区域地址必须相同,否则无法建立邻居。

  4. 执行命令is-level { level-1 | level-1-2 | level-2 },设置设备的Level级别。

    未指定时,设备的Level级别为level-1-2

在接口启用IS-IS进程

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入接口视图。

  3. 执行命令isis enable [ process-id ],在该接口启用IS-IS功能,可选指定哪个进程。

    配置该命令后,IS-IS将通过该接口建立邻居、扩散LSP报文。

    由于Loopback接口不需要建立邻居,因此如果在Loopback接口下启用IS-IS,只会将该接口所在的网段路由通过其他IS-IS接口发布出去。

  4. (可选)执行命令isis circuit-level [ level-1 | level-1-2 | level-2 ],设置接口的Level级别。

    两台Level-1-2设备建立邻居关系时,默认情况下,会分别建立Level-1和Level-2邻居关系。如果只希望建立Level-1或者Level-2的邻居关系,可以通过修改接口的Level级别实现。

与RIP、OSPF不同,IS-IS在接口启用路由协议需要去接口下配置,是因为IS-IS工作在数据链路层,它并不感知IP地址,因此无法像其他路由协议那样通过“宣告”网段的方式去批量激活接口。

示例与路由引入

以该拓扑为例,其中R1、R2、R3、R4、R5为IS-IS网络,而R5连着一OSPF网络,其中存在R6与R7两台路由器。

IS-IS网络属于10.1.0.0/16网段的子网,OSPF属于192.168.0.0/16网段内的子网。

区域的划分如图中所示,其中左侧为level-1层级的区域,右侧为level-2层级的区域。

基础配置

所有路由器的配置如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
R1配置如下:
#
sysname R1
#
isis 1
network-entity 49.0123.0000.0000.0001.00
#
interface GigabitEthernet0/0/0
ip address 10.1.13.1 255.255.255.0
isis enable 1
isis circuit-level level-1
#
interface GigabitEthernet0/0/1
ip address 10.1.14.1 255.255.255.0
isis enable 1
isis circuit-level level-2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
R2配置如下:
#
sysname R2
#
isis 1
network-entity 49.0123.0000.0000.0002.00
#
interface GigabitEthernet0/0/0
ip address 10.1.23.2 255.255.255.0
isis enable 1
isis circuit-level level-1
#
interface GigabitEthernet0/0/1
ip address 10.1.24.2 255.255.255.0
isis enable 1
isis circuit-level level-2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
R3配置如下:
#
sysname R3
#
isis 1
is-level level-1
network-entity 49.0123.0000.0000.0003.00
#
interface GigabitEthernet0/0/0
ip address 10.1.13.3 255.255.255.0
isis enable 1
isis circuit-level level-1
#
interface GigabitEthernet0/0/1
ip address 10.1.23.3 255.255.255.0
isis enable 1
isis circuit-level level-1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
R4配置如下:
#
sysname R4
#
isis 1
is-level level-2
network-entity 49.0045.0000.0000.0004.00
#
interface GigabitEthernet0/0/0
ip address 10.1.14.4 255.255.255.0
isis enable 1
#
interface GigabitEthernet0/0/1
ip address 10.1.24.4 255.255.255.0
isis enable 1
#
interface GigabitEthernet0/0/2
ip address 10.1.45.4 255.255.255.0
isis enable 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
R5配置如下:
#
sysname R5
#
isis 1
is-level level-2
network-entity 49.0045.0000.0000.0005.00
#
interface GigabitEthernet0/0/0
ip address 10.1.45.5 255.255.255.0
isis enable 1
#
interface GigabitEthernet0/0/1
ip address 192.168.56.5 255.255.255.0
#
interface GigabitEthernet0/0/2
ip address 192.168.57.5 255.255.255.0
#
ospf 1 router-id 5.5.5.5
area 0.0.0.0
network 192.168.0.0 0.0.255.255
1
2
3
4
5
6
7
8
9
10
R6配置如下:
#
sysname R6
#
interface GigabitEthernet0/0/0
ip address 192.168.56.6 255.255.255.0
#
ospf 1 router-id 6.6.6.6
area 0.0.0.0
network 192.168.56.6 0.0.0.0
1
2
3
4
5
6
7
8
9
10
R7配置如下:
#
sysname R7
#
interface GigabitEthernet0/0/0
ip address 192.168.57.7 255.255.255.0
#
ospf 1 router-id 7.7.7.7
area 0.0.0.0
network 192.168.57.7 0.0.0.0

完成以上配置后,IS-IS网络内的所有路由器都能互相访问,OSPF网络内的所有路由器也能互相访问。

路由引入

但IS-IS与OSPF网络之间还无法完全互通,需要在R5上配置路由引入。

1
2
[R5]isis 1
[R5-isis-1]import-route ospf 1

配置完之后,我们可以检查R5的isis路由表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[R5]display isis route 

Route information for ISIS(1)
-----------------------------

ISIS(1) Level-2 Forwarding Table
--------------------------------

IPV4 Destination IntCost ExtCost ExitInterface NextHop Flags
-------------------------------------------------------------------------------
10.1.24.0/24 20 NULL GE0/0/0 10.1.45.4 A/-/-/-
10.1.14.0/24 20 NULL GE0/0/0 10.1.45.4 A/-/-/-
10.1.23.0/24 30 NULL GE0/0/0 10.1.45.4 A/-/-/-
10.1.13.0/24 30 NULL GE0/0/0 10.1.45.4 A/-/-/-
10.1.45.0/24 10 NULL GE0/0/0 Direct D/-/L/-
Flags: D-Direct, A-Added to URT, L-Advertised in LSPs, S-IGP Shortcut,
U-Up/Down Bit Set


ISIS(1) Level-2 Redistribute Table
----------------------------------

Type IPV4 Destination IntCost ExtCost Tag
-------------------------------------------------------------------------------
D 192.168.57.0/24 0 0
D 192.168.56.0/24 0 0

Type: D-Direct, I-ISIS, S-Static, O-OSPF, B-BGP, R-RIP, U-UNR

R5的isis路由表中出现了Redistribute Table(重定向表)一栏,包含了引入的OSPF路由。

还记得通信是双向的吗,虽然引入了OSPF路由,IS-IS网络内的路由器是拥有了OSPF网络内的路由信息,但OSPF中的路由器没有到IS-IS网络的信息。

因此,还得在R5上的ospf进程中,引入is-is路由。

1
2
[R5]ospf
[R5-ospf-1]import-route isis 1

在R6上检查是否引入成功(OSPF里,R5作为引入者,无法查看到)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[R6]display ospf routing 

OSPF Process 1 with Router ID 6.6.6.6
Routing Tables

Routing for Network
Destination Cost Type NextHop AdvRouter Area
192.168.56.0/24 1 Transit 192.168.56.6 6.6.6.6 0.0.0.0
192.168.57.0/24 2 Transit 192.168.56.5 7.7.7.7 0.0.0.0

Routing for ASEs
Destination Cost Type Tag NextHop AdvRouter
10.1.13.0/24 1 Type2 1 192.168.56.5 5.5.5.5
10.1.14.0/24 1 Type2 1 192.168.56.5 5.5.5.5
10.1.23.0/24 1 Type2 1 192.168.56.5 5.5.5.5
10.1.24.0/24 1 Type2 1 192.168.56.5 5.5.5.5
10.1.45.0/24 1 Type2 1 192.168.56.5 5.5.5.5

Total Nets: 7
Intra Area: 2 Inter Area: 0 ASE: 5 NSSA: 0

我们也去检查下IS-IS网络中R1的路由:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[R1]display isis route 

Route information for ISIS(1)
-----------------------------

ISIS(1) Level-1 Forwarding Table
--------------------------------

IPV4 Destination IntCost ExtCost ExitInterface NextHop Flags
-------------------------------------------------------------------------------
0.0.0.0/0 20 NULL
10.1.23.0/24 20 NULL GE0/0/0 10.1.13.3 A/-/L/-
10.1.13.0/24 10 NULL GE0/0/0 Direct D/-/L/-
Flags: D-Direct, A-Added to URT, L-Advertised in LSPs, S-IGP Shortcut,
U-Up/Down Bit Set


ISIS(1) Level-2 Forwarding Table
--------------------------------

IPV4 Destination IntCost ExtCost ExitInterface NextHop Flags
-------------------------------------------------------------------------------
10.1.24.0/24 20 NULL GE0/0/1 10.1.14.4 A/-/-/-
10.1.14.0/24 10 NULL GE0/0/1 Direct D/-/L/-
10.1.23.0/24 30 NULL
10.1.13.0/24 10 NULL GE0/0/0 Direct D/-/L/-
192.168.57.0/24 20 0 GE0/0/1 10.1.14.4 A/-/-/-
10.1.45.0/24 20 NULL GE0/0/1 10.1.14.4 A/-/-/-
192.168.56.0/24 20 0 GE0/0/1 10.1.14.4 A/-/-/-
Flags: D-Direct, A-Added to URT, L-Advertised in LSPs, S-IGP Shortcut,
U-Up/Down Bit Set
1
2
3
4
5
6
7
8
9
10
11
12
13
[R1]ping 192.168.56.6
PING 192.168.56.6: 56 data bytes, press CTRL_C to break
Reply from 192.168.56.6: bytes=56 Sequence=1 ttl=253 time=50 ms
Reply from 192.168.56.6: bytes=56 Sequence=2 ttl=253 time=30 ms
Reply from 192.168.56.6: bytes=56 Sequence=3 ttl=253 time=30 ms
Reply from 192.168.56.6: bytes=56 Sequence=4 ttl=253 time=30 ms
Reply from 192.168.56.6: bytes=56 Sequence=5 ttl=253 time=40 ms

--- 192.168.56.6 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 30/36/50 ms

可以发现没有问题,也能访问到。

结语

本文主要是让读者知道IS-IS的基础概念与基本原理,甚至能搭建一个“能通”的IS-IS网络;至于实际的报文细节、内部的处理与配置细节都大幅弱化了。

如果读者有兴趣想深入学习,建立在模拟器搭建IS-IS拓扑,在模拟器内检查各信息并配合抓包工具进行观察。

或者说去找专门的课程视频学习。

此外,本文介绍的是ipv4场景的IS-IS,ipv6场景的IS-IS以后有机会我们再介绍吧。

但实际工作中,估计几乎用不到。