IP FRR实现概述
文/丁炎
1 前言
当链路或节点发生故障时,在路由再次收敛前网路流量会发生中断,以现在使用最广泛的OSPF/ISIS协议来说,会经历如下五个过程:探测到故障、产生更新信息、泛洪到整个网络、重新计算路由表以及下刷到FIB表。
为了缩短路由再次收敛时间,人们想了很多办法。比如利用BFD代替hello报文进行故障探测;通过定时器的退避算法以及fast flood缩短路由信息泛洪时间;利用ISPF、PRC缩短路由计算时间等等,但重新收敛时间缩短到几百毫秒已经到极限。随着语音、视频等实时性网络业务的兴起,网络运营商希望这个时间能小于50毫秒, IP FRR(IP Fast Reroute)正是为了满足这种苛刻的需求而出现的。
2 IP FRR基本原理
IP FRR的基本原理就是对当前的路由的下一跳提前进行备份,把主用下一跳和备份下一跳下发到路由和FIB表,当检测到链路故障时,马上切换到备份下一跳进行数据转发,同时进行路由重新收敛的各个步骤,在重新收敛后再切回新的主用下一跳。这样中断时间就能缩短到故障探测和转发表替换的时间,从而大大缩短了流量中断时间。
图 1 IP FRR示意图
如图1所示,从路由器A到目的地D有两条路径:A->B->D和A->C->D。A->B->D的COST更小,所以B作为A到D的主用下一跳下发到路由表和FIB表中,指导数据转发。而C作为备份下一跳也下刷到路由表和FIB表。同时A到B的链路中使能BFD探测,以确保能快速感知到链路故障。
图 2 IP FRR故障示意图
如图2所示,当A通过物理层或BFD感知出到主用下一跳B出现故障后,马上切换到备份下一跳C进行转发,直到路由再次收敛,被新的最优路由替换掉。
在H3C设备上,IP FRR提前备份的下一跳可以手工配置指定,也可以利用SPF和LFA算法,自动计算出备份下一跳。
手工配置是路由控制层面通过路由策略为目的IP地址的路由信息上指定一个备份出接口和下一跳地址,全凭人为指定,设备不会检查备份下一跳是否有效,相当于为目前的最优路由配置备份静态路由。当检测到故障后,临时切换到这条备份静态路由上进行数据转发。利用静态配置方式,优点是它可以为各种IGP路由协议进行IP FRR保护,但缺点就是十分麻烦,配置量大,并容易出错。在大型网络中,这种静态配置方式进行全面保护,要求在各台路由器上逐条进行配置,不太现实。这就需要有一种自动备份下一跳的技术来解决。
早期出现的几种主要IP FRR实现草案有:Loop Free Alternate、Not-Via Address、Interface-specific forwarding、Multi-topology protection等几种。几种方案各有优缺点,其中LFA实现最为简单,不用对路由协议进行扩展,它在06年和07年被列为草案,并在08年的时候由ITEF推为正式标准---RFC5286。H3C和其它几个设备厂商目前都是通过LFA来实现IP FRR的。
3 基于LFA实现IP FRR的基本原理
我们知道,在大型网络上运行的IGP协议多为OSPF/ISIS这种链路状态协议,各台路由器维护同一个LSDB,最优路由就是通过LSDB这张地图,以自己为根,用SPF算法计算出来的。那么在运行链路状态协议的网络中,各台路由器是可以用LSDB把所有去往同一目的地的各个完整路径都计算出来,这就能够知道下一跳后的再下一跳是去往哪里。我们利用链路状态协议的这个特点,就可以让设备自动计算并优选出备份下一跳对下一跳进行保护。
基于Loop Free Alternate实现IP FRR的基本原理就是通过SPF和LFA算法,自动计算并备份下一跳。这种实现方式最大的困难在于如何保证备份路由在故障发生后不会造成临时环路,以及定制一个合理的优选规则,找出最优的备份下一跳。
3.1 确保无环路备份保护
图 3 无环路备份示意图
如图3所示,从始发设备S到D的最优下一跳为E,如果将N_1作为S到E的备份下一跳,当S和E间出现故障后,把去往D的数据包交给N_1,可以正常转发到D,所以N_1具备S到E的备份下一跳资格。
但如果当N_1到D的直连链路COST值大于17,在S和E之间发生故障且N_1上的路由重新收敛前,N_1到D的下一跳是S而不是D(N_1-S-E-D的链路Cost为17),如果S把去往D的数据报文转发给N_1,,N_1会把数据报文转发回给S,这样就形成了临时环路,因此当N_1和D之间直连链路的的COST值大于N_1->S->E->D时,N_1不具备S到E的备份下一跳资格。
在RFC5286中给出了满足无环路备份的条件,当且仅当满足下面不等式的时候,邻居路由器N_1能提供无环路备份保护:
Distance_opt(N_1, D) < Distance_opt(N_1, S) + Distance_opt(S, D)
注:Distance_opt[] 为计算两节点间开销或距离
3.2 对备份下一跳进行优选
当有若干个下一跳都满足Distance_opt(N_1, D) < Distance_opt(N_1, S) + Distance_opt(S, D)的时候,就需要进行优选,主体思想是尽量选出保护能力更强且不会形成微环的备份下一跳。
优选的顺序如下:
节点保护>链路保护>满足下游路径优先>备份路径COST值小的优先>备份下一跳的出接口和主用下一跳出接口不同的优先>备份下一跳的IP的小的优先。
节点保护:
如图3所示,通过N_1的备份路径能绕过路由器E,当路由器E整机出现故障,备份下一跳N_1能够正常把数据流转发给D,这样N就具备节点保护能力。
当满足不等式 Distance_opt(N_1, D) < Distance_opt(N_1, E) + Distance_opt(E, D)的时候,备份下一跳就能对E提供节点保护。
链路保护:
当备份路径能够绕过故障链路,如图4所示,当节点S和E间的直连链路出现故障时,S把流量切换到N_1,能够正常转发到D,这种情况下,N_1具备链路保护能力。
链路保护要满足不等式Distance_opt(N_1, D) < Distance_opt(N_1, S) + Distance_opt(S, D)。
当满足节点保护时,一般而言也会同时满足链路保护。当仅满足链路保护且下游节点发生故障时,可能会出现微环现象。如图4所示, 当S和N_1都启用了IP FRR,S和N_1会互相把对方当做自己到D主路径的备份下一跳,这时候当下游节点E出现故障时,S和N_1就会把到D的报文相互发送,出现微环。所以规定节点保护的优先级大于链路保护。
图 4 链路保护示意图
下游路径标准:RFC中规定,当满足无环路不等式条件的子集:Distance_opt(N_1, D) < Distance_opt(S, D)时,称为满足下游路径标准。当节点保护和链路保护的情况相同时,优先选择符合下游路径标准的备份下一跳。满足下游路径标准的备份下一跳能够适应更复杂的故障情况。
当上述三个条件都相等时,优选各备份路径中COST值最小的。如果整个路径COST相等,选取出接口和主用出接口不同的备份下一跳。当所有优选条件都相同,通过选择备份下一跳IP地址小的来确定最优备份下一跳。
4 总结
基于LFA实现IP FRR的过程相对简单,不需要对OSPF/ISIS协议进行扩展,利用现有的SPF算法将所有计算、备份都在本地完成即可,目前各个主流设备厂商都是基于此来实现IP FRR。但据统计分析,基于LFA实现IP FRR保护率在70%左右,且路由计算量较大。而Not-via Address、Multi-topology protection等技术虽然理论上能解决所有故障情况,使得故障保护率达到100%,但实现复杂,且较多细节问题还待讨论。随着业界对各个方案的研究,IP FRR技术还会继续发展和完善。