
IS-IS理论知识详解(五)
IS-IS理论知识详解(四):http://www.023wg.com/lypz/317.html
27、IS-IS GR
IS-IS GR(Graceful Restart)是一种支持GR能力的高可靠性技术,可以实现数据的不间断转发。
设备发生主备倒换后,由于没有保存任何重启前的邻居信息,因此一开始发送的Hello报文中不包含邻居列表。此时邻居设备收到后,执行两次握手机制邻居关系检查,发现在重启设备的Hello报文的邻居列表中没有自己,这样邻居关系将会断掉。
同时,邻居设备通过生成新的LSP报文,将拓扑变化的信息泛洪给区域内的其它设备。区域内的其他设备会基于新的链路状态数据库进行路由计算,从而造成路由中断或者路由环路。
IETF针对这种情况为IS-IS制定了GR规范(RFC3847),对保留FIB表和不保留FIB表的协议重启都进行了处理,避免协议重启带来的路由震荡和流量转发中断的现象。
1、IS-IS GR基本概念:
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三个定时器。
2、IS-IS GR Restart TLV:
Restart TLV是包含在IIH(IS-to-IS Hello PDUs)报文中的扩展部分。支持IS-IS GR能力的设备的所有IIH报文都包含Restart TLV。Restart TLV中携带了协议重启的一些参数。其报文格式如下图1所示。
图1 Restart TLV格式
Restart TLV各字段的含义如下表1所示。
字段名 |
长度 |
含义 |
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置位时,这个值是必需的。 |
3、IS-IS GR定时器:
IS-IS的GR能力扩展中,引入了三个定时器,分别是T1、T2和T3。
3.1、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定时器。
3.2、T2定时器:
GR Restarter从重启开始到本Level所有设备LSDB完成同步的时间。T2定时器是系统等待各层LSDB同步的最长时间,一般情况下为60秒。
Level-1和Level-2的LSDB各维护一个T2定时器。
3.3、T3定时器:
GR Restarter成功完成GR所允许的最大时间。T3定时器的初始值为65535秒,但在收到邻居回应的RA置位的IIH报文后,取值会变为各个IIH报文的Remaining time字段值中的最小者。T3定时器超时表示GR失败。
整个系统维护一个T3定时器。
4、IS-IS GR会话机制:
为了以示区别,主备倒换和重启IS-IS进程触发的GR过程称为Restarting,FIB表保持不变。设备重启触发的GR过程称为Starting,进行FIB表更新。
下面分Restarting和Starting两种情况说明IS-IS GR的详细过程。

图2 IS-IS Restarting过程
GR Restarter进行协议重启后,GR Restarter进行如下操作:
4.1、启动T1、T2和T3定时器。
从所有接口发送包含Restart TLV的IIH报文,其中RR置位,RA和SA位清除。
4.2、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的邻接关系。
4.3、GR Restarter接收到邻居的IIH回应报文(RR清除、RA置位),做如下处理:
把T3的当前值和报文中Remaining time比较,取其中较小者作为T3的值。
在接口收到确认报文和CSNP报文之后,取消该接口的T1定时器。
如果该接口没有收到确认报文和CSNP报文,T1会不停地重置,重发含Restart TLV的IIH报文。如果T1超时次数超过阈值,GR Restarter强制取消T1定时器,启动正常的IS-IS处理流程。
4.4、当GR Restarter所有接口上的T1定时器都取消,CSNP列表清空并且收集全所有的LSP报文后,可以认为和所有的邻居都完成了同步,取消T2定时器。
4.5、T2定时器被取消,表示本Level的LSDB已经同步。
如果是单Level系统,则直接触发SPF计算。
如果是Level-1-2系统,此时判断另一个Level的T2定时器是否也取消。如果两个Level的T2定时器都被取消,那么触发SPF计算,否则等待另一个Level的T2定时器超时。
4.6、各层的T2定时器都取消后,GR Restarter取消T3定时器,更新FIB表。GR Restarter可以重新生成各层的LSP并泛洪,在同步过程中收到的自己重启前生成的LSP此时也可以被删除。
4.7、至此,GR Restarter的IS-IS Restarting过程结束。
图3 IS-IS Starting过程
对于Starting设备,因为没有保留FIB表项,所以一方面希望在Starting之前和自己的邻接关系为“Up”的邻居重置和自己的邻接关系,同时希望邻居能在一段时间内抑制和自己的邻接关系的发布。其处理过程和Restarting不同,具体如上图3所示。
1、GR Restarter Starting后,进行如下操作:
为每层LSDB的同步启动T2定时器。
从各个接口发送携带Restart TLV的IIH报文,其中RR位清除,SA位置位。
RR位清除表示是Starting完成。
SA位置位则表示希望邻居在收到SA位清除的IIH报文之前,一直抑制和自己的邻接关系的发布。
2、邻居收到携带Restart TLV的IIH报文,根据设备是否支持GR,进行如下处理。
2.1、支持GR
重新初始化邻接关系。在发送的LSP中取消和GR Restarter邻接关系的描述,进行SPF计算时也不考虑和GR Restarter相连的链路,直到收到SA位清除的IIH为止。
2.2、不支持GR
邻居忽略Restart TLV,重置和GR Restarter之间的邻接关系。
回应一个不含Restart TLV的IIH报文,转入正常的IS-IS处理流程。这时不会抑制和GR Restarter的邻接关系的发布。在点到点链路上,还会发送一个CSNP报文。
3、邻接关系重新初始化之后,在每个接口上GR Restarter都和邻居重建邻接关系。当有一个邻接关系到达Up状态后,GR Restarter为该接口启动T1定时器。
4、在T1定时器超时之后,GR Restarter发送RR置位、SA置位的IIH报文。
5、邻居收到RR置位和SA置位的IIH报文后,发送一个RR清除、RA置位的IIH报文作为确认报文,并发送CSNP报文。
6、GR Restarter收到邻居的IIH确认报文和CSNP报文以后,取消T1定时器。
如果没有收到IIH报文或者CSNP报文,就不停重置T1定时器,重发RR置位、SA置位的IIH报文。如果T1超时次数超过阈值,GR Restarter强制取消T1定时器,进入正常的IS-IS处理流程完成LSDB同步。
7、GR Restarter收到Helper端的CSNP以后,开始同步LSDB。
8、本Level的LSDB同步完成后,GR Restarter取消T2定时器。
9、所有的T2定时器都取消以后,启动SPF计算,重新生成LSP,并泛洪。
10、至此,GR Restarter的IS-IS Starting过程完成。
28、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重新计算相关路由以便正确指导报文的转发。

图1 IS-IS BFD组网示意图
如上图1所示,各路由器上使能IS-IS基本功能。在RouterA和RouterB上使能IS-IS与BFD联动检测机制。
当主路径上的链路出现故障时,BFD能够快速检测到故障并通告给IS-IS协议,IS-IS Down掉故障链路的接口邻居并删除邻接对应的IP协议类型,从而触发拓扑计算,同时更新LSP使得其他邻居(如RouterC)及时收到RouterB的更新LSP,实现了网络拓扑的快速收敛。
1、IS-IS与BFD联动的分类
IS-IS与BFD联动包括IS-IS与静态BFD联动和IS-IS与动态BFD联动。
1.1、IS-IS与静态BFD联动
通过命令行手工配置BFD会话参数,包括了配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
静态BFD的优点是可以人为控制,部署比较灵活,为了节省内存,同时又保证关键链路的可靠性,可以在某些指定链路部署BFD,而其他链路不部署。
静态BFD的缺点在于建立和删除BFD会话时都需要手工触发,配置时缺乏灵活性。而且有可能造成人为的配置错误。例如,如果配置了错误的本地标识符或者远端标识符时,BFD会话将不能正常工作。
1.2、IS-IS与动态BFD联动
通过IS-IS动态创建BFD的会话,不再依靠手工配置。当BFD检测到故障的时候,通过路由管理通知IS-IS。IS-IS进行相应邻居Down处理,快速发布变化的LSP信息和进行增量路由计算,从而实现路由的快速收敛。
动态BFD比静态BFD更具有灵活性。动态BFD由路由协议动态触发BFD会话建立,避免了人为控制可能导致的配置错误,且配置比较简单,适用在全网需要配置BFD的情况。
BFD使用本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)区分同一对系统之间的多个BFD会话。
由于IS-IS只能建立单跳邻居,IS-IS与BFD联动只对IS-IS邻居间的单跳链路进行检测。
2、BFD会话的创建与删除
路由管理模块RM(Routing Management Module)为IS-IS提供与BFD模块交互的相关服务。IS-IS通过RM通知BFD来动态创建或删除BFD会话,同时BFD的事件消息也通过RM传递给IS-IS。
3、创建BFD会话的条件
各路由器配置了IS-IS基本功能并且在接口下使能了IS-IS。
各路由器配置了全局BFD功能并且使能了接口或者进程的BFD特性。
使能了接口或者进程的BFD特性,且相邻路由器的邻居状态为Up(广播网中须等到DIS选举出来)。
4、创建BFD会话的过程
4.1、P2P网络
满足创建BFD会话的条件后,IS-IS将通过RM模块通知BFD模块直接在邻居间创建BFD会话。
4.2、广播网络
满足创建BFD会话的条件且DIS已经选举出来后,IS-IS将通过RM模块通知BFD模块,DIS与每台路由器之间都自动创建BFD会话。都不是DIS的两台路由器之间不建立BFD会话。
虽然广播网中IS-IS同一网段上的同一级别的路由器之间都会形成邻接关系,即包括所有的非DIS路由器之间也会形成邻接关系,但在IS-IS与BFD联动的实现上,只在DIS和非DIS之间建立BFD会话,非DIS之间不启动BFD会话,而P2P网络直接在邻居间创建会话。
如果同一链路上的同一对路由器形成的是Level-1-2的类型的邻居,在广播网中IS-IS会针对这两个Level分别创建两个BFD会话,但在P2P网络中IS-IS只会创建一个BFD会话。
5、删除BFD会话的条件
5.1、P2P网络
当IS-IS在P2P网络接口类型上建立的邻接关系断开(非Up状态)或者邻居对应的IP协议类型删除时,删除对应的BFD会话。
5.2、广播网络
当IS-IS在广播网络接口类型上建立的邻接关系断开(非Up状态),邻居对应的IP协议类型删除或者广播网络DIS发生变化时,删除对应的BFD会话。
在IS-IS进程下去使能全局动态BFD后,该进程下的所有接口的BFD会话都被删除。
6、IS-IS响应BFD会话Down事件
当BFD检测到链路发生故障并产生Down事件时,会通知RM。RM通知IS-IS删除此邻接。IS-IS响应这个事件并重新进行路由计算,实现网络迅速收敛。
当本地路由器与邻居路由器均为Level-1-2路由器时,二者之间会针对不同的Level分别创建两个邻居,此时IS-IS也会创建两个不同Level的会话。在这种情况下,当BFD检测到链路发生故障并产生Down事件时,RM会通知IS-IS分别删除相应Level的邻接关系。
IS-IS理论知识详解(六):http://www.023wg.com/lypz/319.html



本文地址:http://www.023wg.com/lypz/318.html
版权声明:若无注明,本文皆为“Swiers思唯网络博客”原创,转载请保留文章出处。

