IS-IS详解

今天继续给大家介绍IS-IS相关内容。本文主要内容是IS-IS路由开销计算与外部路由引入。
https://blog.csdn.net/weixin_40228200/article/details/120050945?utm_term=isis%E8%81%9A%E5%90%88%E8%B7%AF%E7%94%B1%E7%9A%84cost%E8%AE%A1%E7%AE%97&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-1-120050945-null-null&spm=3001.4430
IS-IS详解(一)——IS-IS基础

一、IS-IS简介
所谓IS-IS,就是Intermediate System-to-Intermediate System,中间系统到中间系统的意思。
我们都知道,目前广泛存在的是TCP/IP网络模型和OSI模型。计算机网络领域,大部分路由协议和功能的实现是基于TCP/IP网络模型的,但是IS-IS协议却是基于OSI网络模型的一种协议,因此在各项功能的实现上与其他的路由协议略有差别。
在TCP/IP网络模型中,我们把实现网络层通信的路由设备叫做路由器,而OSI中则称为中间系统,这也就是IS-IS协议中中间系统的来历。
与OSPF功能类似,IS-IS也是一种动态路由协议,与OSPF有很多相像的地方,也有很多不同,在学习IS-IS协议前,建议先学习OSPF的相关内容,这样可以使得IS-IS的学习更加顺利。
IS-IS最开始是基于OSI7层网络模型,支持CLNP(ConnectionLess Network Protocol 无连接网络协议,相当于OSI的网络层协议)的网络环境,但是由于OSI7层网络模型没有大规模采用,因此IS-IS协议也没有大规模使用。但是由于IS-IS是在数据链路层之上的类三层网络协议,并且IS-IS比较灵活,因此IS-IS工程小组对IS-IS进行了扩展,使其可以支持IPv4和IPv6。因此这样集成了IPv4和IPv6网络功能的IS-IS协议又得到了现网的广泛使用。再加上IS-IS具有扩展性强、收敛速度快,工作机制简单的优点,因此被ISP大量部署。
目前,在企业网网络环境下,使用IS-IS协议比较少,大都是部署的OSPF协议,但是在ISP运行商网络中,IS-IS协议与OSPF协议则处于平分秋色的地位。

二、IS-IS地址
NSAP,Network Service Access Point,网络服务接入点,是OSI模型中规定的网络层地址,类似于TCP/IP模型中的IP地址。
NSAP地址结构如下图所示:

NSAP由IDP(Initial Domain Part,初始域部分)和DSP(Damian Specific Part,域特定部分)。IDP和DSP长度时可变的,NSAP总厂最多是20个字节,最少是8个字节。实际上,NSAP地址最长长度比IPv6地址长度要长,因此其所支持的地址数量比IPv6地址还要多。
IDP相当于IP地址中的主网络号,它由ISO 规定,并由AFI(Area and Format Identifier,地址格式标识符)和IDI(Initial Domain Identifier,初始域标识符)组成,AFI表示地址分配机构的地址格式,IDI用来标识域。
DSP相当于IP地址中的子网好和主机地址,由High Order DSP、System ID和SE了三个部分组成。High Order DSP用来区分区域,相当于IP地址中的子网络号,System ID用来区分主机,相当于IPv4中的主机号,SEL用来指示服务类型,类似于IP协议中的协议号,用于区分上层协议类型。
IDP的AFI和ADI字段,加上DSP的High Order DSP字段一起构成了NSAP的网络号字段,也被称为IS-IS的Area ID。(注意,在IS-IS中有两个区域的概念,除了这里的Area以外,还有骨干区域和非骨干区域的概念,相关知识会在本文后面讲到)Area ID的长度为1-13B。
事实上,由于Sytem ID和SEL长度为固定的6B和1B。因此,在计算Area ID时,只需要倒数7B,剩下的地址就是Area ID。
在配置IS-IS时,尽管不需要在路由器的每个接口上配置NSAP地址,但是需要给每个运行IS-IS协议的路由器配置一个特殊的NSAP地址——NET地址。NET地址称为网络实体标识符,是一类特殊的NSAP地址,它的SEL部分为全0。

三、IS-IS路由器级别与区域
运行IS-IS协议的路由器,有三种级别,分别是Level 1、Level 2和Level 1/2。IS-IS协议两个路由器之间可以建立Level 1级别的和Level 2 级别的邻居。(在以后的描述中简写为L1、L2和L1/2)
IS-IS协议规定:
L1路由器只能建立L1级别的邻居;
L2路由器只能建立L2级别的邻居;
L1/2路由器和同区域的L1路由器建立L1级别的邻居,和L2路由器(不论是不是同区域)建立L2级别的邻居。与同区域的L1/2路由器建立L1级别的邻居,与不用区域的L1/2路由器建立L1和L2级别的邻居。
总结来看,相应级别的路由器可以建立相应级别的邻居,但是L1级别邻居的建立要求两个路由器之间处于同一区域,而L2级别邻居的建立不要求两个路由器处以同一区域。
根据IS-IS路由器邻居关系,可以将IS-IS划分为两个区域——骨干区域和非骨干区域。(注意,这里的区域不是上文中提到的Area ID)由L2的IS-IS邻居构成的区域为骨干区域,由L1的IS-IS邻居构成的区域为非骨干区域。骨干区域和非骨干区域的边界在Level 1-2路由器上。由于IS-IS没有类似于OSPF的Vlink机制,因此IS-IS的骨干区域必须连续。

IS-IS详解(二)——IS-IS邻居建立

一、IS-IS报文简介
IS-IS协议中一共定义了9中报文类型,大致可以分为三种:
1、Hello报文。
Hello报文主要用于建立和维持邻居关系,根据链路和邻居级别又可以分为一下三种:
(1)L1 Hello报文。
用于在广播型链路上建立L1的邻居。
(2)L2 Hello报文。
用于在广播型链路上建立L2的邻居。
(3)P2P Hello报文。
用于在P2P链路上建立L1和L2的邻居。
2、LSP报文。
LSP报文主要用于描述携带的LSA(链路状态信息),可以细分为两种:
(4)L1 LSP
用于描述非骨干区域链路状态表
(5)L2 LSP
用于描述骨干区域链路状态表
3、SNP报文。
SNP报文用于维护LSDB的完成和同步。该报文可以分为以下四类:
(6)L1 CSNP
L1级别的完全序列号PDU,类似OSPF DD报文。
(7)L2 CSNP
L2级别的完全序列号PDU,类似OSPF DD报文。
(8)L1 PSNP
L1级别的部分序列号PDU,类似于OSPF的LSR和LSACK。
(9)L2 PSNP
L2级别的部分序列号PDU,类似于OSPF的LSR和LSACK。

二、IS-IS邻居状态
与OSPF协议不同,IS-IS协议一共定义了三种邻居状态,如下所示:
1、Down。 没有收到邻居Hello包时处于Down状态。
2、Initiated。 收到邻居Hello包,但是在Hello包中没有发现自己的信息,也称为one-way状态。
3、Up。 收到邻居Hello包,并发现自己的信息。
可以看出,IS-IS仅仅根据Hello包的交互情况来定义自己的状态,并没有链路状态信息的相关状态。

三、IS-IS邻居建立
IS-IS邻居建立过程如下:

(一)广播型链路邻居关系建立
在广播型链路上,IS-IS邻居的建立采用三次握手机制,流程如下:

 

 

 

此外,如果数据包发送的次序稍有变化,R2在收到R1发送的Hello包之前发送了自身的Hello包,还有可能是以下情况:

 

 

 

从中可以看出,在广播行链路上,双方邻居关系的建立要经过一个三次握手过程,才能最终完成邻居关系的建立。
注意:以上示意图中发送的数据包都是Hello包,并且没有涉及到链路状态数据信息的发送过程。

(二)P2P链路邻居关系建立
与广播型链路稍有区别,P2P链路上建立IS-IS邻居可以采用根据配置,采取三次握手或者两次握手的方式建立IS-IS邻居关系。当采用两次握手建立邻居时,只要收到对端的Hello包就处于Up状态,这样邻居建立更快,但是可靠性有所降低,尤其是当采用的线路采用光纤时,有可能存在单向通路的状况,这有可能导致IS-IS邻居建立了单向邻居。
两次握手时P2P邻居关系建立过程如下:

 

 

 

IS-IS详解(三)——IS-IS 报文结构与功能

一、IS-IS报文格式
IS-IS报文时直接封装在数据链路帧里面的。所有的IS-IS协议报文可以分为两个部分——报文头和TLV数据段(TLV也被称为变长字段部分) 。其中报文头部又可以细分为通用头部和专用头部。对于所有的IS-IS报文来说,通用报头都是相同的,但是专用报头根据不同的IS-IS报文种类而不同。
IS-IS报文格式:

 

 二、IS-IS通用报文格式

IS-IS通用报文也可以成为ISO头部,其格式如下:

  三、IS-IS通用报文各字段作用

1、Interdomain Routing Protocol Discriminator。 域内路由协议鉴别符,占用1B,IS-IS协议固定为0x83
2、Length Indicator。 IS-IS报文头部长度(单位为字节),包括通用报文和专用报文头部,不包括TLV字段,占用1B。
3、Version/Protocol ID Extension。 版本/协议标识扩展,固定为0x1,占用1B。
4、ID Length。 NSAP地址中,System ID区域的长度,长度为1B。注意,当该字段值为0时,表示System ID长度为6,值为255时,表示System ID长度为0。
5、Reserved。 保留字段,恒为0。
6、PDU Type。 IS-IS PUD报文类型(一共9种)。
7、Version。 IS-IS版本,恒为0x1。(IS-IS通用报文头部有两个Version字段)
8、Maximum Area Address。 同时支持的最大区域个数,占用1B。该字段值默认值为0,且此时的“0”,表示支持的最大区域个数为3。

IS-IS详解(四)——IS-IS Hello报文详解

一、Hello包发送原则
可以通过在IS-IS视图中修改IS-IS的级别来控制IS-IS路由器发送的Hello包类型,同时,在运行IS-IS协议的接口上,也可以修改IS-IS的级别,而这也会对Hello包的发送造成影响,实际上,Hello包的发送有一个较为复杂的原则,具体如下:
L1和L2路由器在广播型链路上,只发相应级别的Hello包,此时发送的Hello级别只与IS-IS视图下配置的路由器级别有关,而与接口上配置的IS-IS链路级别无关。
默认情况下,L1/2路由器在广播型链路上既发送L1的Hello包,也发送L2的Hello包。但是L1/2路由器发送Hello包的类型收到链路上配置的IS-IS级别的影响,当链路上配置IS-IS级别为L1时,则该路由器在该链路上只发L1的Hello包,当链路上配置IS-IS级别为L2时,则该路由器在该链路上只发L2的Hello包。

二、Hello报文结构
(一)广播型链路上Hello包头

 (二)P2P链路上Hello包头

  三、Hello报文各字段功能

(一)Hello包头字段详解
Hello包头字段功能如下:
1、Reserved/Circuit Type。 表示路由器级别,0x01表示L1级别,0x02表示L2级别,0x03表示L1/2级别(注:此字段与链路上IS-IS级别也有关系,当必须路由器级别和接口级别均为L1/2,此时此字段才为L1/2,具体规则如本文第一章介绍相同)。
2、Source ID。 发送报文的IS-IS路由器SID,占6Byte。
3、Holding Time。 保持计时器,单位为秒,占用2Byte,默认为Hello-Interval的三倍。本字段的含义是告诉邻居本端失效的时间。这里IS-IS协议与OSPF不同,IS-IS允许建立邻居的相邻路由器之间Hello-Interval和Holding Time不一致。可以在路由器IS-IS视图下修改本字段时间,但是有一定的限制。
4、PDU Length。 本字段表示整个IS-IS报文的长度,包括头部、Hello报文以及后面的TLV字段的长度,占用2Byte。
5、Priority。 表示优先级,占用1Byte,但是该字段值使用了7个bit,因此该字段取值范围是0-127。该字段主要用于DIS的选举,且该字段越大越优先。当该字段值相等时,则比较MAC地址,越大越优先。
6、R。 预留字段,用0填充。
7、LAN ID。 用于描述链路上的伪节点DIS。
8、Local Circuit ID。 表示本地链路ID。
实际上,在Hello报文头字段,广播型链路上的Hello包和P2P链路上Hello包的区别在于广播型有独有的LAN ID和Priority字段,而P2P链路上有独有的Local Circuit ID字段。

(二)Hello包常见TLV字段功能
TLV机制即Type(类型)、Length(长度)和Value(值)的意思。
TLV机制允许路由协议只携带需要的属性,不需要的属性可以不携带,扩展性强,如果协议需要支持新的特性,则只需要开发新的TVL属性即可支持。在使用wireshark抓包时,如果字段的前面有一个“>”符号,则代表该字段为一个TLV字段。
Hello包常见的TLV字段如下:
1、Area Address。 区域地址,考虑到IS-IS协议中可配置3个以内的区域地址,因此该字段长度并不固定,因此该字段放在了TLV字段中。
2、IS Neighbor。 中间系统邻居,在广播型链路上,该字段使用邻居的MAC地址表示,但是在P2P链路上该字段使用路由器的System ID表示。
3、IP Interface Address。 接口IP地址。如果一个接口配置了多个IP地址,IS-IS协议默认携带所有的IP地址。
4、Protocol Supported。 表示本路由器支持的协议。
5、Restart Signaling。 主要用于重启动时使用。
6、Muti Topology。 主要用于多拓扑时使用。
7、Padding 。 填充字段,该字段全为0。

四、Hello抓包展示
(一)广播链路上IS-IS Hello包

 (二)P2P链路上Hello包

 

IS-IS详解(五)——IS-IS 三次握手与两次握手

一、三次握手建立邻居
在之前的文章中,我们介绍过,IS-IS有两种类型的链路类型,一种是广播型链路,另一种是P2P链路,在这两种链路上IS-IS邻居的建立略有不同。IS-IS建立邻居的方式可以分为两种,一种是三次握手建立邻居,另一种是两次握手建立邻居。在广播型链路上,只能采用三次握手的方式建立邻居,而在P2P链路上,既可以采取三次握手的方式建立邻居,也可以采用两次握手的方式建立邻居。在默认情况下是三次握手,但是可以修改为两次握手方式。在广播型链路上,IS-IS协议的目的MAC地址L1级别的为0180-C200-0014,L2级别的为0180-C200-0015,而如果将以太网链路修改为P2P类型,则目的MAC地址为0900-2B00-0005。

二、两次握手建立邻居
P2P链路上,当采用两次握手建立邻接关系时,只要路由器收到对方的Hello包状态就处于UP状态。邻居建立更快,但是可靠性较差。
在接口模式上执行命令:

isis ppp-negotiation 2-way

可以将链路的接口邻接关系建立方式改为两次握手。

在接口模式上执行命令:

isis ppp-negotiation 3-way

可以将链路上的接口邻接关系建立方式设置为三次握手,事实上,这也是IS-IS路由器上的默认配置。此时链路与对端路由器建立邻接关系使用三次握手,但是当对端路由器使用两次握手时,本端也会兼容对端路由器的两次握手机制。

在接口模式上执行命令:

isis ppp-negotiation 3-way only

可以使得本端链路采用三次握手机制与对端建立邻接关系,但是不兼容对端两次握手建立邻接关系方式。

三、建立邻居方式判定
那么运行IS-IS协议的路由器是如何判定对端如何与自己建立邻居呢?
如果采用两次握手建立邻接关系,则Hello报文的TLV字段不会出现P2P Adjacent State字段,而当采用三次握手建立邻接关系时,Hello报文的TLV字段会出现P2P Adjacent State字段。凭借P2P Adjacent State字段,就可以通过对端发送的Hello包从而判定对端建立邻居的方式了。
当采用三次握手方式建立邻居时发送的Hello数据包:

 

 

 

当采用两次握手方式建立邻居时发送的Hello数据包:

 

IS-IS详解(六)——IS-IS LSP机制详解

一、IS-IS LSP简介
从报文的角度看,IS-IS LSP可以分为L1级别的LSP和L2级别的LSP。L1和L2 LSP的区别只存在于报文级别上,但是具体的内容没有差别。从用途角度看,IS-IS LSP可以分为实节点LSP和伪节点LSP。实结点LSP相当于OSPF Type1 LSA,每台运行IS-IS协议的路由器都会产生,用于描述自身直连链路状态;伪节点LSP相当于OSPF Type 2LSA,广播型链路上由DIS产生,用于描述广播型链路。
IS-IS LSP洪范范围是在整个区域内,执行命令:

dis isis lsdb

可以查看路由器的IS-IS的LSDB,执行结果中带星号的表示自己产生的LSP。
执行命令:

dis isis lsdb 0000.0000.0001.00-00 verbose

可以查看某一条具体的LSP报文的详细信息。

二、IS-IS LSP区分
IS-IS协议通过LSP ID唯一区分一条LSP。LSP ID一共8Byte,由三个部分——system-id、伪结点标识符和分片标识符组成。
system-id用于标识LSP的产生路由器,类似于OSPF的Advertised Router。伪节点标识符用于描述IS-IS路由器的真实链路信息,当伪节点标识符为0时,代表此LSP为实结点LSP;当伪节点标识符不为0时,代表此LSP为伪结点LSP,此时system-id为链路上DIS的system-id。分片标识符用于描述同一态IS-IS路由器产生的不同LSP。若需要描述的连路由信息很多,一条LSP无法承载时,就会使用此字段进行分片。
LSP IDsystem-id与伪节点标识符之间使用点号隔开,伪节点标识符和分片标识符之间使用短杠隔开。

三、IS-IS LSP 新旧判断
当一个IS-IS路由器收到一条本地已经存在的LSP时,就要进行LSP新旧判断机制,然后根据判断结果进行不同的处理。LSP新旧判断采用如下机制:
1、若收到的LSP序列号大于本地LSP,就替换为新报文,并广播新LSP内容;若收到的LSP序列号小于本地的LSP序列号,则不接受该报文,同时向收到该报文的接口发送本地LSP报文。
2、若收到的LSP和本地的LSP序列号相等,则判断剩余老化时间是否为0,若为0,则表示为最新的LSP。剩余老化时间为0的LSP常常被产生该LSP的路由器用来删除一条LSP。但是,不能使用这种方式修改一条LSP。

PS:在默认情况下,IS-IS路由器每个15分钟(即900s),周期性的泛洪更新LSP,同时序列号加1。而IS-IS一条LSP的老化时间默认为20分钟(即1200s)。
3、若收到报文序列号相同,且Remaining Time都不为0,则比较checksum,越大越优先。
4、若checksum相同,则认为是相同的LSP。

IS-IS详解(七)——IS-IS LSP报文详解

一、LSP 报文格式
LSP报文,即Link State PDUs,是IS-IS的链路状态报文,用于交换链路信息。LSP分为L1 LSP和L2 LSP,不同级别的LSP除了级别外差距不大,各字段基本相同。LSP报文也符合IS-IS报文的基本格式,由ISO头部、LSP报文头部和TLV字段构成。
其中LSP头部报文格式如下:

 二、LSP报文各字段项详解

LSP报文各字段作用和功能如下:
1、PDU Lengths。 PDU的总长度,单位为Byte。
2、Remaining Lifetime。 LSP生存时间,单位为s。
3、LSP ID。 LSP ID,由System id,伪节点标识符和分片标识符三部分组成,唯一标识一条LSP报文。
4、Sequency Number。 LSP的序列号。
5、Checksum。 LSP的校验和。
6、P(Partition Repair)。 仅与L2 LSP有关,表示路由器是否支持修复区域分割。
7、ATT(Attachment)。 一般由L1/2路由器产生,用于控制L1区域对L2区域的路由学习情况。
8、OL(LSDB Overload)。 过载标志位。
9、IS Type。 生成的LSP的路由器的级别,用来指名是L1的路由器还是L2的路由器。

三、LSP报文抓包
使用wireshark,对LSP报文抓包显示如下:

 

 IS-IS详解(八)——深入探究IS-IS DIS选举机制

一、IS-IS IDS选举机制
在IS-IS协议中,与OSPF协议类似,在广播型链路上,需要选举DIS来替代广播型链路伪节点发布伪节点的LSP信息。IDS选举规则如下:
1、接口优先级越大越优先。IS-IS接口优先级默认为64,取值范围是0-127,执行命令:

isis dis-priority 120
1
可以修改当前接口的DIS优先级。
2、当借口优先级相同时,则比较IS-IS路由器的MAC地址,MAC地址越大越优先。

二、IS-IS 注意事项
除了上述选举规则外,IS-IS的DIS选举还有以下需要注意的点:
1、与OSPF的DR不同,IS-IS的DIS可以抢占。
2、IS-IS的DIS是分级别的,如果在一条广播型链路上既有L1级别的IS-IS邻居,也有L2级别的IS-IS邻居,则不同的邻居之间需要选举L1级别的DIS和L2级别的DIS,并且这两个级别的DIS可以为不同的IS-IS路由器,在配置IS-IS路由器接口优先级时,也可以对分别针对L1和L2级别的DIS级别进行分别配置。
3、与OSPF规定不同,DIS为0的IS-IS路由器也可以进行DIS选举。
4、在IS-IS协议中,没有BDIS的概念。
5、IS-IS伪节点LSP只有拓扑信息,不携带路由信息,IS-IS协议通过与伪节点相连的实结点LSP描述链路上的路由信息。

三、IS-IS中DIS与OSPF中DR对比
在学习各网络协议时,对网络协议中的具体规定进行分析,站在协议开发者的角度上考虑协议规定的科学性,是学习计算机网络及相关网络协议的一个好方法,那么具体到IS-IS协议,为什么IS-IS协议规定DIS可以抢占,而与IS-IS协议类似的OSPF协议规定DR不能抢占呢?
针对OSPF来说,在广播型链路Dother路由器之间的邻接关系停留在2-way阶段,并没有形成full的邻接关系,如果OSPF路由协议允许DR的抢占,当一个Dother路由器抢占成为DR的过程中,会引起广播型链路上邻居关系的不断震荡,发生大面积变化,影响的设备很多。而IS-IS协议并没有规定LSDB同步过程中的邻接关系建立状态,因此在广播型链路上所有的IS-IS都建立起Up状态的邻接关系。因此,在这种情况下,DIS不会引起邻居关系的震荡。虽然DIS的抢占会引起伪节点LSP的变化,但是考虑到目前网络设备性能上非常稳定,发生该现象的可能性比较低,再加上影响比较少,因此在稳定网络中可以忽略DIS抢占带来的问题,因此,IS-IS协议规定DIS是可以抢战的。

IS-IS详解(九)——IS-IS 骨干区域与非骨干区域访问基础

一、默认情况下骨干区域和非骨干区域路由传递
(一)骨干区域访问非骨干区域
在默认情况下,IS-IS的L1/2路由器会将L1级别的路由作为自身直连的叶子节点进行描述,并通过L2级别的LSP在L2区域进行泛洪。因此,在IS-IS骨干区域上,IS-IS路由器可以知道非骨干区域的路由信息,并将该路由作为L1/2路由器的叶子节点。这样,骨干区域就可以访问非骨干区域了。

(二)非骨干区域访问骨干区域
在默认情况下,L1/2的路由器不会如上述骨干区域访问非骨干区域一样,将L2级别的路由信息转化成L1级别的LSP在非骨干区域进行泛洪。而是类似于OSPF的完全末梢区域,下发一条缺省路由访问骨干区域。
但是,这条缺省路由并不是有L1/2路由器主动下发,而是借助ATT比特位,由非骨干区域IS-IS路由器主动计算得到的。

(三)骨干区域和非骨干区域下IS-IS路由表查看
下面我以一个简单的IS-IS拓扑图向大家展示一下IS-IS的骨干区域和非骨干的路由表情况,实验拓扑如下:

  骨干区域IS-IS路由表如下:

 非骨干区域IS-IS路由表如下:

 二、IS-IS 非骨干区域缺省路由计算

ATT比特为一个IS-IS报文中特殊的TLV字段,当ATT位为1时,表明L1/2路由器和骨干区域连接着。ATT比特位置1还要求L1/2路由器至少存在一个不再共同区域的L2的邻居。ATT比特位只会在L1的LSP中置1。
如果在路由器上查看IS-IS的LSDB,就可以看出哪些LSP的ATT为置1,如下所示。

 ATT位置1的LSP如下所示:

 L1区域的IS-IS路由器在收到ATT位置1的LSP报文后,就知道该LSP报文的发送方是L1/2路由器。由于L1路由器和L1/2路由器在同一个区域,所以L1的路由器将会自动在路由表中生成一条指向L1/2路由器的缺省路由,该路由的下一跳为L1/2路由器的下一跳,该路由的开销为到L1/2路由器的SPF树的开销。

同时,如果在一个区域内存在多个L1/2路由器,则批次不进行缺省路由的计算,防止出现路由环路。

三、通过缺省路由访问骨干区域存在问题和优势
(一)通过缺省路由访问骨干区域存在问题
1、无法感知明细路由状态,失去了路由细度,当外部路由失效时,浪费带宽。
2、明细路由缺失,导致可能出现次优路径。
3、明细路由确实,导致MPLS网络中LSP无法正常建立。

(二)通过缺省路由访问骨干区域优势
1、收敛更快,无法维护明细路由。
2、节省设备资源。
3、增强网络稳定性。

 

IS-IS详解(十)——IS-IS 骨干区域与非骨干区域访问进阶

一、IS-IS 路由器ATT比特位控制位相关命令
在IS-IS详解(九)——IS-IS 骨干区域与非骨干区域访问基础中我们提到过在默认情况下,IS-IS的L1/2路由器会通过设置ATT位来表明自身身份,L1的IS-IS路由器也会由此来计算默认路由。在华为AR系列路由器中,可以通过下列几个命令来对该机制进行控制,从而满足多样化拓扑组网需求。
在L1/2路由器上,执行命令:

attached-bit advertise always
1
可以使得L1/2路由器在生成L1级别的LSP时,ATT位总是置1,而不管该路由器是否有L2的邻居。
在L1/2路由器上,执行命令:

attached-bit advertise never
1
可以使得L1/2路由器在生成L1级别的LSP时,ATT位总是置0,而不管该路由器是否有L2的邻居。
在L1路由器上,执行命令:

attached-bit avoid-learning
1
可以使得该L1级别的IS-IS路由器避免通过ATT学习到默认路由,这条命令本地有效。

二、IS-IS区域间路由泄露
在配置IS-IS网络架构时,如果确实有需要,也可以使得L1/2路由器将L2区域内的明细路由作为L1/2路由器的叶子节点,放在L1的LSP中在L1区域中洪范出去,这种做法叫做IS_SI区域间路由泄漏。
在L1/2路由器上,执行命令:

import-route isis level-2 into level-1
1
可以将IS-IS的L2路由引入L1区域。这样配置后非骨干区域路由器也可以知道骨干区域的路由信息。

三、IS-IS路由泄露常见问题
如果IS-IS网络拓扑如下所示:

 假设AR4和AR3上配置了路由泄露相关操作,AR4将L2区域的路由泄露到了L1区域,那么这些路由会通过AR3再次传递回L1的区域吗?

答案是不会。对于AR3路由器而言,虽然会收到AR1路由器发送过来的L1区域的路由(实际上是L2级别的路由),但是由于AR3本来就域L1区域相连,因此,AR3也会学习到L1级别的L1区域的相关路由。而IS-IS协议规定,在相同情况下,L1级别的路由优于L2级别的路由,因此AR3不会将AR1传递来的L1区域的路由再次传递会L1的区域。这样可以避免路由环路。(关于IS-IS进行路由泄漏后的的路由防环问题是一个非常复杂非常重要的问题,我将会在后面的文章中加以详细阐述)
但是,如果AR3的G0/0/1线路断掉,这是AR3就无法收到L1级别的L1区域的相关路由,这时它受到AR1传来的L2级别的L1区域的相关路由后,就会学习该路由。这样AR3通过AR1,经AR4依然可以访问AR5。同理,将上述情景拓展一下,很容易得出:当IS-IS的同一个非骨干区域分裂时,不会影响IS-IS相关路由的通信。


IS-IS详解(十一)——IS-IS 区域间防路由环路和次优路径

一、IS-IS 路由泄露后防路由环路
在IS-IS路由协议中,如果没有配置区域间路由泄露,则因为此时L1/2路由器只会把L1区域的明细路由下发到L2区域,而L1区域访问L2区域则是通过生成默认路由,因此只要规定L1/2路由器不会把其他L1/2路由器不会根据其他L1/2路由器下发的ATT比特位置1的LSP计算生成默认路由,就不会出现路由环路问题。
而如果IS-IS协议的L1/2路由器如果做了区域间路由泄露,则虽然L2级别的明细路由能够传递到L1区域,但是也由此带来了IS-IS的区域间路由环路风险。
在IS-IS详解(十)——IS-IS 骨干区域与非骨干区域访问进阶中,我们介绍了由于IS-IS协议中L1路由优于L2路由,因此可以防止L1路由经过L1/2路由器传递到L2区域后又传递回L1区域。然而,要想避免区域间路由环路,还必须使得L2的路由在经过L1/2传递到L1区域后,不会再传递会L2区域。
要想实现上一目的,就必须使L1/2路由器区分L1区域的路由和由L1/2路由器转化来的L2区域的路由。因此,IS-IS的L1/2路由器在路由泄露中将L2区域的路由引入L1区域时,会将L2区域的明细路由使用DU比特位进行置位。
DU比特位全称为Distribution,是IP Internal Reachability TLV中每个IP路由的一个比特为,当该比特为0时,为Up状态,当该比特位为1时,为down状态。L1/2会把普通的L1路由的DU比特位置0,而把由L2区域经过路由泄露泄露到L1区域的路由的DU为置1,形成L1级别的LSP后下发。
DU置位的LSP报文如下:

 

 

在L1级别的路由器上,如果查看某一条LSP的详细信息,IP-Internal后面有星号的就是DU比特位置位的路由,如下所示:

 

 

这样,我们只要规定,L1/2路由器不会把L1区域中DU比特位为1的路由再次传递会L2区域,就解决了在引入IS-IS区域间路由泄露后的路由防环问题了。
总的来说,在IS-IS协议中,如果进行了区域间路由泄露,可以通过L1路由优先于L2路由防止L1路由在传递到L2后传递回L1;可以通过L1/2路由器不学习DU位为1的机制防止L2路由在泄露到L1后传递回L2,以此避免了IS-IS区域间路由环路问题。

二、IS-IS 区域访问防次优路径
解决了IS-IS区域间路由环路问题,IS-IS区域间路由泄露后还存在次优路径的问题。

(一)IS-IS区域间次优路径产生原因
假设一个网络场景中拓扑图如下所示,并且在R1和R3路由器上配置了路由泄露,如下所示:

 上述路由拓扑中可能存在次优路径。假设R4上存在一条4.4.4.4/32的路由,则该路由的传递如图上红线所示,对于路由器R3而言,它会从R2和R4同时收到前往4.4.4.4/32的路由。但是,由于R3从R2收到的路由为L1级别的路由,从R4收到的路由为L2级别的路由。根据IS-IS协议选路规则,L1级别的路由要优于L2级别的路由,因此R3会优先选择R2的L1的路由,由此形成了次优路径。

(二)IS-IS区域间次优路径避免
那么上述IS-IS区域间次优路径应该如何避免呢?
其实,IS-IS协议本身可以进行IS-IS区域键次优路径的避免,上述情况不会出现。这是因为IS-IS协议除了L1级别的路由优先与L2级别的路由外,还规定了L2级别的路由优先于DU置1的L1级别的路由。
这样,考虑到上述场景,由于R3收到的R2传递来的路由是DU置1的路由,因此该路由的优先级要低于直接从R4学到的路由,从而避免了次优路径。


IS-IS详解(十二)——IS-IS 路由过载、管理标记和主机名映射

一、IS-IS路由过载
当一台IS-IS路由器内存不足以存放更多的LSP时会过载,也可以通过配置命令使路由器处于过载状态。处于过载状态的路由器,会将自己的LSP报文中的OL标志位置1,其他设备就通过此标志位得知该路由器已经设置过载。
L1、L2和L1/2级别的路由器都可以设置过载,当路由器设置过载后,其他设备在进行SPF计算时,不会使用这台设备做转发,只计算该设备上的直连路由。其他路由器会将该过载路由器当作末节区域看待,不会计算该路由器SPF树后面的的网段。当L1/2路由器过载后,就不会将L1级别的路由转换成L2的LSP。如果该L1/2路由器做了路由泄漏,则当该路由器设置过载后,就不再做路由泄露了。
在IS-IS视图下,可以通过命令

set-overload

设置路由器过载。
当一个路由器过载后,其他的路由器会在查看链路状态信息库时发现,如下所示:

 

 路由器过载后发送的LSP报文如下:

 

 


二、IS-IS管理标记
IS-IS管理标记是针对LSP的每一条路由设置的一个Tag值,利用IS-IS的管理标记,可以在给不同的路由打上不同的Tag,以方便进行路由过滤和路由管理。例如,可以将L2区域的直连网段路由和业务网段路由打上不同的标记,在进行L2区域向L1区域进行路由泄露的时候,只泄露业务网段的路由。
要配置IS-IS的管理标记必须设置路由器的度量值风格为宽。(关于IS-IS度量值的问题我将在后续文章中介绍)Tag的值取值范围是1-4294967295,可以在以下场景中设置:
1、引入外部路由时
2、路由过滤时
3、路由器的直连路由
在路由器接口上添加管理标记配置命令如下

isis tag-value 100

该命令在接口模式下运行,其中100是给该接口的直连路由打的标记。
其他方式给路由打标记需要使用route-policy,并且在进行路由泄露时应用该策略。
可以在路由器的LSP详细信息中,查看到该标记,如下所示:

 

 

携带IS-IS管理标记的报文如下所示:

 

 


三、IS-IS主机名映射
在查看IS-IS的LSDB时,本地显示的是各个路由器的system-id,而该显示不是很直观,很难由system-id直接知道具体是哪台网络设备。IS-IS主机名映射可以对IS-IS路由器起一个有意义的“别名”,以方便管理员对网络设备进行管理。
IS-IS主机名映射分为静态主机名映射和动态主机名映射。动态IS-IS主机名映射是在发送LSP报文时,添加一个Hostname TLV(Type=137)来表明自己的主机名。在配置主机名映射时,要注意只有开启了主机名映射的主机,才可以显示其他IS-IS路由器的主机名。开启IS-IS的主机名映射功能就是给该路由器配置一个主机名,命令如下:

is-name Beijing02

该命令配置在IS-IS视图下,后面的额Beijing02为该路由器的主机名。在完成主机名映射配置后,查看IS-IS的LSDB结果如下:

 

 

抓取携带有Hostname TLV的LSP报文如下:

 

 

IS-IS详解(十三)——IS-IS 路由开销类型

一、IS-IS 开销简介
在IS-IS协议刚面世时,互联网网络结构还非常简单,因此IS-IS早期的版本中只使用了6bit来描述链路开销,链路开销的取值范围是1-63。一条路由的开销范围也只有10bit,取值范围是0-1023。后来,随着计算机网路的规模不断扩大,网络结构愈加复杂,原有的开销计算方式已经无法适应大规模网络的组网需求。由于开销值取值范围太小,因此粒度比较粗,并且当路由开销超过1023时,开销值会默认采用1023,还会造成次优路径问题。因此ISO就另外开发了一套IS-IS的开销模式。并且把原有的开销叫做“窄”类型(也称为narrow),把新的开销模式叫做“宽”类型(也称为wide)。在“宽”模式中,接口开销有24bit,取值范围最高到1600多万,路径开销为32bit,取值范围最高到32亿多,完全可以适应当前复杂网络拓扑组网需求。
目前,基本上所有的IS-IS网络中配置的都是宽度量值风格的开销类型。

二、IS-IS路由器开销相关TLV
narrow风格的开销类型和wide风格的开销类型使用不同的TLV来描述自己的路由信息,IS-IS路由器之间就是通过在TLV上的不同来判断邻居IS-IS路由器所采用的开销风格。在配置IS-IS组网时,要注意尽量使得IS-IS路由器之间开销风格一致,负责IS-IS组网时就容易出现问题。当IS-IS的开销类型与自身不兼容时,不影响相互之间IS-IS邻居的建立,也会正常接收邻居的LSP报文并存入自身的LSDB中。但是本身却不计算邻居的路由信息。
narrow风格使用以下类型的TLV:
1、IP Internal Reachability TLV。 128号TLV,用来携带路由域内的IS-IS路由信息。
2、IP External Reachability TLV。 130号TLV,用来携带路由域外的路由信息。
3、Neighbors TLV。 2号TLV,用来携带邻居信息。
narrow度量值风格的LSP报文如下:

 

 

wide风格使用以下类型的TLV:
1、Extended IP Reachability TLV。 135号TLV,用来替换原有的IP Reachability TLV,扩展了路由开销值的范围。
2、IS Extended Neighbors TLV。 22号TLV,用来携带邻居信息。
wide度量值风格的LSP报文如下:

 

 当在IS-IS路由器上查看wide度量值风格的LSP报文时,相应路由前面会有一个加号,如下所示:

 

 三、IS-IS路由开销类型

从上文介绍中,我们可以明确,在IS-IS中存在narrow和wide类型的开销度量值风格。实际上,这只是IS-IS的开销风格的两大类,IS-IS协议一共有五种开销度量值风格。除了narrow和wide以外,还有wide-compatible、narrow-compatible和compatible三种类型的开销风格。
实际上,剩下的三种开销值风格,在很大程度上引入是为了新老版本网络设备的兼容。wide-compatible风格会发送wide风格的LSP,但是当收到narrow风格的LSP时,也会进行“兼容”,将narrow风格的LSP引入自身进行路由计算。narrow-compatible风格会发送narrow风格的LSP,但是当收到wide风格的LSP时,也会进行“兼容”,将wide风格的LSP引入自身进行路由计算。而compatible类型的则会同时发送和接受wide和narrow风格的LSP。这五种类型的发送和接受LSP类型如下表所示:

开销风格 发送的开销风格 接收并计算的报文类型

 

 

IS-IS详解(十四)——IS-IS路由开销计算与外部路由引入

一、IS-IS链路开销计算方式
在默认情况下,不论是哪种IS-IS开销度量值风格,其每条链路的开销值都为10。我们也可以使得IS-IS链路的计算方式修改成类似OSPF的方式根据链路的带宽而得到不同的开销,实际上,这也是一种很合理的开销配置方式。
要想使能IS-IS的路径开销自动计算功能,就必须在IS-IS路由器的IS-IS配置模式中执行命令:

auto-cost enable
1
这样,就开启了IS-IS路由器的链路开销自动计算功能了。在开启了这一功能后,IS-IS路由器的不同开销风格会对路由计算造成不同的影响。
对于wide方式的开销风格而言,其接口链路开销的计算方式为:
【Bandwith-reference/Link-bandwith】*10
上述Bandwith-reference为参考带宽,在默认情况下为100M,也可以在IS-IS视图下通过命令

bandwidth-reference 1000
1
来修改IS-IS的参考带宽,上述命令中1000的单位是Mbit/s。
对于narrow方式的开销风格而言,其接口链路开销如下表所示:

链路开销 接口带宽
60 接口链路带宽小于10M
50 接口链路带宽小于100M,大于10M
40 接口链路带宽小于155M,大于100M
30 接口链路带宽小于622M,大于155M
20 接口链路带宽小于2.5G,大于622M
10 接口链路带宽大于2.5G
二、外部路由引入
在IS-IS路由器的IS-IS视图中,执行命令:

import-route 【协议类型】 cost-type [external/internal] cost 【引入的外部路由开销】
1
可以引入外部路由进入IS-IS协议。在引入外部路由时,协议可以为静态路由、直连路由、BGP路由、其他IS-IS进程路由、OSPF路由、RIP路由以及静态路由。后面的参数为设置引入的外部路由或内部路由,该参数对外部路由的开销会有所影响。
当路由器的开销风格为wide、cpmpatible或wide-compatible时,引入外部路由的开销类型将不区分external或internal。在计算外部路由时也会直接比较路由的cost值大小,开销越小越优先。
当路由器的开销风格为narrow或narrow-compatible时,默认引入路由的cost为0,默认cost-type为external,并且internal的外部路由优先于external类型的外部路由。
当cost-type为external时,引入外部路由的开销为引入外部路由时配置的开销值+64;当cost-type为internal时,引入外部路由的开销为引入外部路由时配置的开销值。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200/article/details/120050945

posted @ 2022-06-02 19:26  常给自己加个油  阅读(1555)  评论(0编辑  收藏  举报