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个字节。
- 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路由器之间建立邻居与此相同。
- RouterA广播发送Level-2 LAN IIH,此报文中无邻居标识。
- RouterB收到此报文后,将自己和RouterA的邻居状态标识为Initial。然后,RouterB再向RouterA回复Level-2 LAN IIH,此报文中标识RouterA为RouterB的邻居。
- RouterA收到此报文后,将自己与RouterB的邻居状态标识为Up。然后RouterA再向RouterB发送一个标识RouterB为RouterA邻居的Level-2 LAN IIH。
- 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的处理过程:
- 将接收的新的LSP合入到自己的LSDB数据库中,并标记为flooding。
- 发送新的LSP到除了收到该LSP的接口之外的接口。
- 邻居再扩散到其他邻居。
LSP的”泛洪”:
LSP报文的“泛洪”(flooding)是指当一个路由器向相邻路由器通告自己的LSP后,相邻路由器再将同样的LSP报文传送到除发送该LSP的路由器外的其它邻居,并这样逐级将LSP传送到整个层次内所有路由器的一种方式。通过这种“泛洪”,整个层次内的每一个路由器就都可以拥有相同的LSP信息,并保持LSDB的同步。
每一个LSP都拥有一个标识自己的4字节的序列号。在路由器启动时所发送的第一个LSP报文中的序列号为1,以后当需要生成新的LSP时,新LSP的序列号在前一个LSP序列号的基础上加1。更高的序列号意味着更新的LSP。
广播链路中新加入路由器与DIS同步LSDB数据库的过程:
- 如上图所示,新加入的路由器RouterC首先发送Hello报文,与该广播域中的路由器建立邻居关系。
- 建立邻居关系之后,RouterC等待LSP刷新定时器超时,然后将自己的LSP发往组播地址(Level-1:01-80-C2-00-00-14;Level-2:01-80-C2-00-00-15)。这样网络上所有的邻居都将收到该LSP。
- 该网段中的DIS会把收到RouterC的LSP加入到LSDB中,并等待CSNP报文定时器超时并发送CSNP报文,进行该网络内的LSDB同步。
- RouterC收到DIS发来的CSNP报文,对比自己的LSDB数据库,然后向DIS发送PSNP报文请求自己没有的LSP。
- DIS收到该PSNP报文请求后向RouterC发送对应的LSP进行LSDB的同步。
在上述过程中DIS的LSDB更新过程如下:
- DIS接收到LSP,在数据库中搜索对应的记录。若没有该LSP,则将其加入数据库,并广播新数据库内容。
- 若收到的LSP序列号大于本地LSP的序列号,就替换为新报文,并广播新数据库内容;若收到的LSP序列号小本地LSP的序列号,就向入端接口发送本地LSP报文。
- 若收到的LSP和本地LSP的序列号相等,则比较Remaining Lifetime。若收到的LSP报文的Remaining Lifetime为0,则将本地的报文替换为新报文,并广播新数据库内容;若收到的LSP报文的Remaining Lifetime不为0而本地LSP报文的Remaining Lifetime为0,就向入端接口发送本地LSP报文。
- 若两个序列号和Remaining Lifetime都相等,则比较Checksum。若收到的LSP的Checksum大于本地LSP的Checksum,就替换为新报文,并广播新数据库内容;若收到的LSP的Checksum小于本地LSP的Checksum,就向入端接口发送本地LSP报文。
- 若两个序列号、Remaining Lifetime和Checksum都相等,则不转发该报文。
P2P链路上LSDB数据库同步过程:
- RouterA先与RouterB建立邻居关系。
- 建立邻居关系之后,RouterA与RouterB会先发送CSNP给对端设备。如果对端的LSDB与CSNP没有同步,则发送PSNP请求索取相应的LSP。
- 如上图所示假定RouterB向RouterA索取相应的LSP。RouterA发送RouterB请求的LSP的同时启动LSP重传定时器,并等待RouterB发送的PSNP作为收到LSP的确认。
- 如果在接口LSP重传定时器超时后,RouterA还没有收到RouterB发送的PSNP报文作为应答,则重新发送该LSP直至收到PSNP报文。
在P2P链路上PSNP有两种作用:
- 作为Ack应答以确认收到的LSP。
- 用来请求所需的LSP。
在P2P链路中设备的LSDB更新过程如下:
- 若收到的LSP比本地的序列号更小,则直接给对方发送本地的LSP,然后等待对方给自己一个PSNP报文作为确认;若收到的LSP比本地的序列号更大,则将这个新的LSP存入自己的LSDB,再通过一个PSNP报文来确认收到此LSP,最后再将这个新LSP发送给除了发送该LSP的邻居以外的邻居。
- 若收到的LSP序列号和本地相同,则比较Remaining Lifetime,若收到的LSP报文的Remaining Lifetime为0,则将收到的LSP存入LSDB中并发送PSNP报文来确认收到此LSP,然后将该LSP发送给除了发送该LSP的邻居以外的邻居;若收到的LSP报文的Remaining Lifetime不为0而本地LSP报文的Remaining Lifetime为0,则直接给对方发送本地的LSP,然后等待对方给自己一个PSNP报文作为确认。
- 若收到的LSP和本地LSP的序列号相同且Remaining Lifetime都不为0,则比较Checksum,若收到LSP的Checksum大于本地LSP的Checksum,则将收到的LSP存入LSDB中并发送PSNP报文来确认收到此LSP,然后将该LSP发送给除了发送该LSP的邻居以外的邻居;若收到LSP的Checksum小于本地LSP的Checksum,则直接给对方发送本地的LSP,然后等待对方给自己一个PSNP报文作为确认。
- 若收到的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信息的类型详细列表:
开销类型 | 接收 | 发送 |
---|---|---|
narrow | narrow | narrow |
narrow-compatible | narrow&wide | narrow |
compatible | narrow&wide | narrow&wide |
wide-compatible | narrow&wide | wide |
wide | wide | wide |
- 当配置开销类型为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中携带了协议重启的一些参数。其报文格式如下图所示:
报文字段解释如下:
字段名 | 长度 | 含义 |
---|---|---|
Type | 1字节 | TLV的类型。值为211表示是Restart TLV。 |
Length | 1字节 | TLV值的长度。 |
RR | 1比特 | 重启请求位(Restart Request)。设备发送的RR置位的Hello报文用于通告邻居自己发生Restarting/Starting,请求邻居保留当前的IS-IS邻接关系并返回CSNP报文。 |
RA | 1比特 | 重启应答位(Restart Acknowledgement)。设备发送的RA置位的Hello报文用于通告邻居确认收到了RR置位的报文。 |
SA | 1比特 | 抑制发布邻接关系位(Suppress adjacency advertisement)。用于发生Starting的设备请求邻居抑制与自己相关的邻居关系的广播,以避免路由黑洞。 |
Remaining Time | 2字节 | 邻居保持邻接关系不重置的时间。长度是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的过程:
- GR Restarter进行协议重启后,GR Restarter进行如下操作:
- 启动T1、T2和T3定时器。
- 从所有接口发送包含Restart TLV的IIH报文,其中RR置位,RA和SA位清除。
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的邻接关系。
- GR Restarter接收到邻居的IIH回应报文(RR清除、RA置位),做如下处理:
- 把T3的当前值和报文中Remaining time比较,取其中较小者作为T3的值。
- 在接口收到确认报文和CSNP报文之后,取消该接口的T1定时器。
- 如果该接口没有收到确认报文和CSNP报文,T1会不停地重置,重发含Restart TLV的IIH报文。如果T1超时次数超过阈值,GR Restarter强制取消T1定时器,启动正常的IS-IS处理流程。
- 当GR Restarter所有接口上的T1定时器都取消,CSNP列表清空并且收集全所有的LSP报文后,可以认为和所有的邻居都完成了同步,取消T2定时器。
- T2定时器被取消,表示本Level的LSDB已经同步。
- 如果是单Level系统,则直接触发SPF计算。
- 如果是Level-1-2系统,此时判断另一个Level的T2定时器是否也取消。如果两个Level的T2定时器都被取消,那么触发SPF计算,否则等待另一个Level的T2定时器超时。
- 各层的T2定时器都取消后,GR Restarter取消T3定时器,更新FIB表。GR Restarter可以重新生成各层的LSP并泛洪,在同步过程中收到的自己重启前生成的LSP此时也可以被删除。
- 至此,GR Restarter的IS-IS Restarting过程结束。
ISIS Starting过程:
对于Starting设备,因为没有保留FIB表项,所以一方面希望在Starting之前和自己的邻接关系为“Up”的邻居重置和自己的邻接关系,同时希望邻居能在一段时间内抑制和自己的邻接关系的发布。其处理过程和Restarting不同,具体如下图所示:
- 为每层LSDB的同步启动T2定时器。
- 从各个接口发送携带Restart TLV的IIH报文,其中RR位清除,SA位置位。
- RR位清除表示是Starting完成。
- SA位置位则表示希望邻居在收到SA位清除的IIH报文之前,一直抑制和自己的邻接关系的发布。
- 邻居收到携带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报文。
邻接关系重新初始化之后,在每个接口上GR Restarter都和邻居重建邻接关系。当有一个邻接关系到达Up状态后,GR Restarter为该接口启动T1定时器。
在T1定时器超时之后,GR Restarter发送RR置位、SA置位的IIH报文。
邻居收到RR置位和SA置位的IIH报文后,发送一个RR清除、RA置位的IIH报文作为确认报文,并发送CSNP报文。
GR Restarter收到邻居的IIH确认报文和CSNP报文以后,取消T1定时器。
如果没有收到IIH报文或者CSNP报文,就不停重置T1定时器,重发RR置位、SA置位的IIH报文。如果T1超时次数超过阈值,GR Restarter强制取消T1定时器,进入正常的IS-IS处理流程完成LSDB同步。
GR Restarter收到Helper端的CSNP以后,开始同步LSDB。
本Level的LSDB同步完成后,GR Restarter取消T2定时器。
所有的T2定时器都取消以后,启动SPF计算,重新生成LSP,并泛洪。
至此,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与BFD联动的实现方式 | 工作原理 | 区别 |
---|---|---|
IS-IS与静态BFD联动 | 通过命令行手工配置BFD会话参数,包括了配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。 | 静态BFD的优点是可以人为控制,部署比较灵活,为了节省内存,同时又保证关键链路的可靠性,可以在某些指定链路部署BFD,而其他链路不部署。静态BFD的缺点在于建立和删除BFD会话时都需要手工触发,配置时缺乏灵活性。而且有可能造成人为的配置错误。例如,如果配置了错误的本地标识符或者远端标识符时,BFD会话将不能正常工作。 |
IS-IS与动态BFD联动 | 通过IS-IS动态创建BFD的会话,不再依靠手工配置。当BFD检测到故障的时候,通过路由管理通知IS-IS。IS-IS进行相应邻居Down处理,快速发布变化的LSP信息和进行增量路由计算,从而实现路由的快速收敛。 | 动态BFD比静态BFD更具有灵活性。动态BFD由路由协议动态触发BFD会话建立,避免了人为控制可能导致的配置错误,且配置比较简单,适用在全网需要配置BFD的情况。 |
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的关系可以用下图来概括:
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 Group | 3 | 4 | 管理组 |
| IPv4 Interface Address | 6 | 4 | 本端IPv4接口地址 |
| IPv4 Neighbour Address | 8 | 4 | 邻居的IPv4接口地址 |
| Maximum Link Bandwidth | 9 | 4 | 最大链路带宽 |
| Maximum Reserved Link Bandwidth | 10 | 4 | 最大预留链路带宽 |
| Unreserved Bandwidth | 11 | 32 | 未预留带宽 |
| Traffic Engineering Default Metric | 18 | 3 | 流量工程缺省开销值 |
| Bandwidth Constraints sub-TLV | 22 | 36 | 带宽约束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),通知对端设备强制退出震荡抑制状态。