TI-LFA FRR
TI-LFA FRR (Topology-Independent Loop-free Alternate FRR)能为Segment Routing隧道提供链路及节点的保护。当某处链路或节点故障时,流量会快速切换到备份路径,继续转发。从而最大程度上避免流量的丢失。
相关概念
概念 |
解释 |
---|---|
P空间 |
以保护链路源端为根节点建立SPF树,所有从根节点不经过保护链路可达的节点集合称为P空间。 |
扩展P空间 |
以保护链路源端的所有邻居为根节点分别建立SPF树,所有从根节点不经过保护链路可达的节点集合称为扩展P空间。 |
Q空间 |
以保护链路末端为根节点建立反向SPF树,所有从根节点不经过保护链路可达的节点集合称为Q空间。 |
PQ节点 |
PQ节点是指既在扩展P空间又在Q空间的节点,PQ节点会作为保护隧道的目的端。 |
LFA |
LFA(Loop-Free Alternate)算法计算备份链路的基本思路是:以可提供备份链路的邻居为根节点,利用SPF算法计算到达目的节点的最短距离,然后计算出一组开销最小且无环的备份链路。关于LFA的介绍,可以参考IS-IS Auto FRR。 |
RLFA |
RLFA(Remote LFA)算法根据保护路径计算PQ节点,并在源节点与PQ节点之间建立tunnel隧道形成备份下一跳保护。当保护链路发生故障时,流量自动切换到隧道备份路径,继续转发,从而提高网络可靠性。关于RLFA的介绍,可以参考IS-IS Auto FRR。 |
TI-LFA |
LFA FRR和Remote LFA对于某些场景中,P空间和Q空间既没有交集,也没有直连的邻居,无法计算出备份路径,不能满足可靠性要求。在这种情况下,实现了TI-LFA。TI-LFA算法根据保护路径计算P空间,Q空间,Post-convergence最短路径树,以及根据不同场景计算Repair List,并在源节点与PQ节点之间建立SR隧道形成备份下一跳保护。当保护链路发生故障时,流量自动切换到隧道备份路径,继续转发,从而提高网络可靠性。 |
产生原因
传统的LFA技术需要满足至少有一个邻居下一跳到目的节点是无环下一跳。RLFA技术需要满足网络中至少存在一个节点从源节点到该节点,从该节点到目的节点都不经过故障节点。而TI-LFA技术可以用显式路径表达备份路径,对拓扑无约束,提供了更高可靠性的FRR技术。
使用价值
- 满足IP FRR快速收敛的基本要求。
- 原理上支持100%场景保护。
- 算法复杂度适中。
- 选择收敛后的路径作为备份路由转发路径,相比其他FRR技术转发不会有正在收敛的中间态。
TI-LFA FRR原理
如图2-70所示,PE1为源节点,P1节点为故障点,PE3为目的节点,链路中间的数字表示cost值。
TI-LFA流量保护分为链路保护和节点保护。
链路保护:当需要保护的对象是经过特定链路的流量时,流量保护类型为链路保护。
节点保护:当需要保护的对象是经过特定设备的流量时,流量保护类型为节点保护。节点保护优先级高于链路保护。
下面以节点保护为例介绍TI-LFA的实现过程。如图2-70所示,假设流量路径为:PE1→P1→P5→PE3,为避免P1节点故障导致流量丢失,TI-LFA会计算出P空间,Q空间,P1故障收敛后(Post-convergence)最短路径树,以及备份出接口和Repair List,最终生成备份转发表项。
计算P空间:至少存在一个邻居节点到P节点的路径不经过故障链路的集合。
计算Q空间:Q节点到目的节点不经过故障链路的集合。
计算收敛后最短路径树:计算主下一跳故障收敛后的最短路径树,排除主下一跳计算最短路径树。
- 计算备份出接口和Repair List。
备份出接口:在某些场景下,P空间和Q空间即没有交集,也没有直连的邻居。这种情况下备份出接口为收敛后下一跳出接口。
Repair List:Repair List是一个约束路径,用来指示如何到达Q节点,Repair List由“P节点标签+P到Q路径上的邻接标签”组成。在图2-70中,Repair Lis为P3的节点标签100,加上P3到P4的邻接标签9304。
- 优选Repair节点发布的Node SID。
- 优选Repair节点单源前缀SID最小的Prefix SID。
- 优选Repair节点非多源前缀,并且本节点前缀优选的Prefix SID。
- 不支持SR的节点不能作为Repair Node,不发布Prefix SID/Node SID的节点不能作为Repair Node。
TI-LFA FRR转发流程
TI-LFA备份路径计算完成之后,如果主路径发生故障,就可以根据备份路径进行转发,避免流量丢失。
如图2-71所示,DeviceF为P节点,DeviceH为Q节点。主下一跳B故障,触发FRR切换到备路径。详细过程如表2-25所示。
设备 |
流程 |
---|---|
DeviceA |
DeviceA根据Reapair list封装标签栈,最外层封装P节点(DeviceF)的节点标签=下一跳DeviceD的SRGB起始值+P节点标签偏移值=720,然后就封装P节点到Q节点的标签,分别为130和240,目的节点标签=Q节点的SRGB起始值+目的节点(DeviceC)的标签偏移值=310。 |
DeviceD |
DeviceD收到报文后,根据最外层标签查找标签转发表,出标签是120,下一跳为DeviceF,于是将最外层标签SWAP成120,报文转发给DeviceF。 |
DeviceF |
DeviceF收到报文后,根据最外层标签查找标签转发表,由于DeviceF是该标签的Egress节点,弹出该标签以后,路由路径标签130,出标签为空,下一跳DeviceG,继续弹出130标签将报文转给DeviceG。 |
DeviceG |
DeviceG收到报文后,根据最外层标签查找标签转发表,弹出240标签,将报文转发给DeviceH。 |
DeviceH |
DeviceH收到报文后,根据最外层标签查找标签转发表,出标签为510,下一跳为DeviceE。于是将最外层标签SWAP成510,报文转发给DeviceE,如此按照最短路径的方式转给目的节点DeviceC。 |
TI-LFA FRR应用场景
TI-LFA FRR保护 |
含义 |
部署 |
---|---|---|
TI-LFA FRR保护IP转发 |
主路径走IP转发,计算TI-LFA FRR备份路径。 |
|
TI-LFA FRR保护Segment Routing隧道 |
主路径走Segment Routing隧道转发,计算TI-LFA FRR备份路径。 |
|
正切防微环
如图2-72所示,当DeviceB故障时,流量切换到TI-LFA计算的备份路径,当DeviceA收敛完成之后,流量从备份路径切换到收敛后路径,但是如果此时DeviceD和DeviceF还没有收敛,还在用收敛前的路径转发,则在DeviceA到DeviceF之间形成环路,直到DeviceD和DeviceF收敛完成。
为了解决上述问题,DeviceB故障以后,首先流量切换到TI-LFA计算的备份路径,然后DeviceA延迟一段时间收敛,等待DeviceD和DeviceF收敛完成以后,DeviceA开始收敛,收敛完成以后,流量从备份路径切换到收敛后路径。
- 本地直连接口故障/BFD down。
- 在延迟期间,网络中没有第二次拓扑变化。
- 路由有备份下一跳。
- 路由主下一跳和故障端口相同。
- 收敛后主下一跳和备份下一跳不相同。
- 多源路由延时期间收到路由源变化退出延时。
回切防微环
- DeviceB和DeviceC之间的链路故障恢复前,数据流量沿着备份路径转发。
- 当DeviceB和DeviceC之间的链路故障恢复后,如果DeviceA先于DeviceB收敛,则DeviceA会将流量转发给DeviceB,但是DeviceB没有收敛,仍旧沿着备份路径转发,这样DeviceA和DeviceB之间就会形成环路。
- 为了避免微环的产生,DeviceA在故障回切以后,先通过显式指定路径的方式转发数据包,在转发的时候往数据包添加端到端路径信息(例如DeviceB到DeviceC的邻接标签),这样DeviceB收到数据包后,根据数据包里的路径信息将数据包转发给DeviceC。
在DeviceB节点收敛以后,DeviceA就可以去除额外添加的显式路径信息,按正常SR转发的方式将数据包转发到DeviceC。
Anycast FRR
Anycast SID
组内所有路由器发布相同的SID,称为Anycast SID。如图2-74所示,DeviceD和DeviceE都在SR区域出口,通过DeviceD和DeviceE都可以到达非SR区域,因此二者可以互相备份。在这种情况下,可以将DeviceD和DeviceE配置在同一个组里,并且发布相同前缀SID,也即Anycast SID。
Anycast标签的下一跳指向路由器组中IGP路径开销最小的设备DeviceD,DeviceD也称为发布Anycast标签的最优源,其他都是备份源。当到DeviceD的主下一跳链路或直连邻居节点发生故障,可以通过其他保护路径到达Anycast标签设备,Anycast标签设备可以是与主下一跳相同的源,也可以是其他Anycast源。VPN使用SR LSP时,Anycast要配置相同的VPN私网标签。
Anycast FRR
Anycast FRR是多个节点发布相同的前缀标签,相当于多源前缀标签的FRR。普通的FRR算法,都只能利用SPT树计算节点的备份下一跳,可以支持单源路由场景,对于多源路由场景无法支持。
为了计算多源场景前缀标签的备份下一跳,需要将多源路由变成单源路由,再进行计算。Anycast FRR方案采用构造一个虚拟节点的方式,将多源路由转换为单源路由,然后按TI-LFA算法计算虚拟节点的备份下一跳,Anycast前缀标签从其创建的虚拟节点继承备份下一跳。该方案对备份下一跳计算的算法没有修改,仍然可以保留算法保证的无环特性,算出的备份下一跳和收敛前的周边节点的主下一跳之间不会形成环路。
如图2-75(a)所示,DeviceA->DeviceB的链路开销值为5,DeviceA->DeviceC的链路开销值为10,DeviceB和DeviceC同时发布路由源10.1.1.0/24。在DeviceA上使能TI-LFA FRR,DeviceA由于不满足单源TI-LFA条件,因此无法计算出路由10.1.1.0/24的备份下一跳。为了解决上述问题,可以使用多源路由场景中的TI-LFA FRR功能。具体实现如下:
如图2-75(b)所示,在DeviceB和DeviceC之间构造一个虚拟节点Virtual Node,Virtual Node与DeviceB和DeviceC分别形成链路,DeviceB和DeviceC指向Virtual Node的链路开销值均为0,Virtual Node指向DeviceB和DeviceC的链路开销值都是无穷大,Virtual Node上发布一条前缀10.1.1.0/24,将多源路由转换为单源路由,然后按TI-LFA算法计算到Virtual Node的备份下一跳,多源路由10.1.1.0/24直接继承该计算结果。在图2-75(b)中,DeviceA计算出到Virtual Node的主链路是DeviceA->DeviceB,备份链路为DeviceA->DeviceC。