GR即Graceful Restart,一般情况下,当一个中间系统路由器重新启动的时候,在重启的路由器与其邻居之间会存在短暂的路由信息失效的问题。引起该问题的原因是重启的路由器在与邻居数据库同步之前会重新计算它自己的路由,这个计算的结果与其他路由器的计算结果很有可能不是一致的,当重启路由器的邻居检测到重启的事件后,会将重启路由器的邻居状态设置为DOWN,这个邻居状态的变化会导致邻居重新生成新的LSP用于描述当前的邻居连接情况,最终的结果会使得经过重启路由器的路由信息失效。
而由于现在的路由器技术基本上都实现了控制平面与业务平面的分离,在路由器重启的时候虽然相应的控制平面的内存信息全部被清空了,但是重启之前的业务平面的信息仍然保留了下来,从而能够有效的实现对数据包的转发,因此上述所述的重启时候路由器之间邻居关系的重新建立导致重新计算路由信息的过程是没有必要的,GR的机制就是要使得路由器在重启的过程中,数据库未完全同步之前仍然可以保持对数据包的正确转发。
T1:T1定时器为每一个接口所维护。该定时器说明当该定时器时间到后,将重复发送一个未收到应答的(re)start信号,一般设置为3s。
T2:T2定时器为每一个LSP数据库所维护。该定时器是系统等待LSP数据库达到同步的
最大等待时间,如果同时属于L1和L2,则需要为L1和L2数据库分别维护一个定时器,一般设置为60s
T3:T3定时器为每一个isis实例所维护。该定时器表明路由器LSP数据库同步失败的时间
(通过在自己生成的LSP中设置OL位),这个时间初始化为65535,在接收到含有211
TLV 类型且RA位设置为1的HELLO报文后,通过对当前的T3定时器的时长和HELLO报文中remaining TIME的时间,更新为其中较小的值
RR位:RR位标识用于restart路由器向邻居发送一个信号表明自己正处于restart的状态,
而相应的邻居接收到RR位标识的HELLO包则应该保持原有的邻居状态不变。
RA位:RA位标识用于resatrt路由器的邻居向restart路由器发送一个信号表明自己已经
收到restart路由器发送的RR位的HELLO报文。
SA位:SA位标识用于start路由器向邻居发送一个信号请求邻居在自己的LSP报文中抑制到start路由器邻居内容。
Running Router的状态表
Event
Running
ADJ Suppressed
RX RR
Maintain ADJ State Send RA
Set SRM, send CSNP
Update Hold Time,
set Restart Mode
RX RR clr
Clr Restart mode
RX SA
Suppress IS neighbor TLV in LSP(s) ,Goto ADJ Suppressed
RX SA clr
Unsuppress IS neighbor TLV in LSP(s) ,Goto Running
状态表解释:
1) RX RR:邻居helper路由器接收到RR标志位,将邻居关系设置为Restart Mode,同时设置SRM标志,发送CSNP报文用于与(re)start路由器同步数据库信息,并发送设置RA标志的确认HELLO报文到(re)start路由器用于确认邻居的重启请求。
2) RX RR clr:邻居helper路由器接收到RR清除标志位,清除邻居关系的Restart Mode,恢复到正常模式。
3) RX SA:邻居路由器接收到SA标志位,抑制自己的LSP中到start路由器的邻居内容。
4) RX SA clr:取消到start路由器的邻居的抑制。
Restarting Router的状态表
Event
Restarting
ADJ seen RA
ADJ seen CSNP
SPF Wait
Router restarts
Send IIH/RR ADJ Init,Start T1,T2,T3
RX RR
Send RA
RX RA
Adjust T3
Goto ADJ Seen RA
Cancel T1
Adjust T3
RX CSNP set
Goto ADJ Seen CSNP
Cancel T1
RX IIH w/o Restart TLV
Cancel T1 (P-to-P only)
T1 Expires
Send IIH/RR
Restart T1
Send IIH/RR
Restart T1
Send IIH/RR
Restart T1
T1 Expires
nth time
Send IIH
normal
Send IIH
normal
Send IIH
normal
T2 expires
Trigger SPF
Goto SPF Wait
T3 expires
Set OL
Flood local LSPs
Update fwd plane
LSP DB Sync
Cancel T2 and T3
Trigger SPF
Goto SPF wait
All SPF Done
Clear OL
Update fwd plane
Flood local LSPs
Goto Running
状态表解释:
1) Router restarts:路由器重启,进入restarting状态,发送设置RR标志位的HELLO报文到邻居,开始启动T1,T2,T3定时器。
2) RX RR:接收到邻居的RR请求,对于restarting路由器直接发送设置RA标志的确认HELLO报文到(re)start路由器用于确认邻居的重启请求(多个路由器同时重启会出现该情况)
3) RX RA:接收到邻居的RA确认标志位,调整T3定时器时间,状态迁移到ADJ seen RA,表示已经接收到邻居的RA确认报文。
4) RX CSNP set:接收到邻居helper路由器的CSNP报文,此时分两种情况,如果当前状态仍为Restarting,则迁移到ADJ seen CSNP;如果当前状态为ADJ seen RA,则取消该接口的T1定时器,表示该接口上的数据库同步已经完成。
5) RX IIH w/o Restart TLV:接收到没有Restart TLV类型的HELLO报文,在点对点链路上直接取消T1定时器,表示对方不支持GR模式,同时还需要清除接口上相应的GR模式下的邻居状态;而广播网络上存在多个邻居,当前邻居不支持,或许其它邻居支持,所以仅仅是清除对应该邻居的状态信息,保持T1定时器。
6) T1 Expires:T1定时器超时,均需要重新发送设置RR标志位的HELLO报文,并重新启动T1定时器。
7) T1 Expires nth time:T1定时器超时且已经超过最大重启的次数,表示没有任何一个邻居支持GR模式,发送正常的HELLO报文。
8) T2 expires:T2定时器超时,一般情况下表示数据库同步已经完成,触发SPF计算,进入SPF Wait状态。
9) T3 expires:T3定时器超时,表示数据库仍然没有同步,设置OL标志位,洪泛自己的LSP信息,通告邻居自己只能接收数据包,不能转发数据包,并更新自己的转发平面。
10) LSP DB Sync:数据库同步后,直接取消T2,T3定时器,触发SPF计算,进入SPF Wait状态。
11) All SPF Done:所有的SPF计算已经完成,清除OL标志位,洪泛自己的LSP信息,更新转发平面。
Starting router的状态表
Event
Restarting
ADJ seen RA
ADJ seen CSNP
Router restarts
Send IIH/SA Start T1,T2
RX RR
Send RA
RX RA
Goto ADJ Seen RA
Cancel T1
RX CSNP set
Goto ADJ Seen CSNP
Cancel T1
RX IIH w/o Restart TLV
Cancel T1 (P-to-P only)
ADJ UP
Start T1, Send local LSPs with OL
T1 Expires
Send IIH/RR and SA
Restart T1
Send IIH/RR and SA
Restart T1
Send IIH/RR and SA
Restart T1
T1 Expires
nth time
Send IIH/SA
Send IIH/SA
Send IIH/SA
T2 expires
Clear OL
Send IIH normal
Goto Running
LSP DB Sync
Cancel T2
Clear OL
Send IIH normal
状态表解释:
1) Router restarts:路由器启动,进入restarting状态,发送设置SA标志位的HELLO报文到邻居,并开始启动T1,T2定时器(不明白这里启动T1定时器干吗??)。
2) RX RR:接收到邻居的RR请求,对于restarting路由器直接发送设置RA标志的确认HELLO报文到(re)start路由器用于确认邻居的重启请求(多个路由器同时重启会出现该情况)
3) RX RA:接收到邻居的RA确认标志位,状态迁移到ADJ seen RA,表示已经接收到邻居的RA确认报文。
4) RX CSNP set:接收到邻居helper路由器的CSNP报文,此时分两种情况,如果当前状态仍为Restarting,则迁移到ADJ seen CSNP;如果当前状态为ADJ seen RA,则取消该接口的T1定时器,表示该接口上的数据库同步已经完成。
5) RX IIH w/o Restart TLV:接收到没有Restart TLV类型的HELLO报文,在点对点链路上直接取消T1定时器,表示对方不支持GR模式,同时还需要清除接口上相应的GR模式下的邻居状态;而广播网络上存在多个邻居,当前邻居不支持,或许其它邻居支持,所以仅仅是清除对应该邻居的状态信息,保持T1定时器。
6) ADJ UP:邻居UP,启动T1定时器,发送自己的设置OL位的LSP信息,表示自己还未完成数据库的同步。
7) T1 Expires:T1定时器超时,需要重新发送设置RR及其SA标志位的HELLO报文,并重新启动T1定时器。
8) T1 Expires nth time:T1定时器超时且已经超过最大重启的次数,继续发送设置SA标志的HELLO报文。
9) T2 expires:T2定时器超时,清除LSP的OL标志位,发送正常的HELLO报文(此时RR,RA,SA均为0)。
10) LSP DB Sync:数据库同步后,直接取消T2定时器,清除LSP的OL标志位,发送正常的HELLO报文。
关于T1,T2,T3定时器的启动和删除条件:
T1定时器启动:路由器启动的时候只要支持GR则都会在所有UP的接口上启动T1定时器。
T1定时器重启:T1超时且未达到最大定时器次数则需要重启。
T1定时器删除:T1超时且达到最大定时器重启次数;接收到对方的RA=1的HELLO报文且该接口上接收到所有的对端helper路由器发送的CSNP报文;
T2定时器启动:路由器启动的时候只要支持GR则都会分别为L1和L2层数据库分别启动T2定时器。
T2定时器重启:不会重启。
T2定时器删除:必须所有接口的T1定时器删除后才能删除T2定时器(即使T2超时了)
T3定时器启动:只有在路由器重启且支持GR才会为每一个ISIS实例启动一个T3定时器。
T3定时器重启:不会重启。
T3定时器删除:T2定时器删除后或者T3定时器超时后自动删除(这里T3定时器的时间会在接收到设置了RA=1的报文后进行调整,具体调整为当前T3定时器的剩余时长和接收报文中的211TLV中Remaining Time之间较小的值,helper路由器填写的Remaining Time值是邻居的hold_timer)