Segment Routing TI-LFA FRR保护中的Tiebreaker规则
简介
Segment Routing的TI-LFA FRR保护存在默认的备份路径计算规则,但是在某些特殊场景备份路径可能也会失效,或者用户存在特殊需求需要优选其他备份路径,此时就需要改变TI-LFA FRR保护中的Tiebreaker(决胜者)规则。
本文将详细介绍TI-LFA FRR保护中的Tiebreaker规则。本文的介绍同时适用于SR-MPLS和SRv6。
SRLG
共享风险链路组SRLG(Shared Risk Link Group)是Tiebreaker规则里的一项因素。SRLG是具有相同故障风险的一组链路集合,即,如果其中一条链路失效,那么组内的其他链路也可能失效,这种情况下使用组内的其他链路作为失效链路的备份链路,将起不到保护的作用。为了避免出现上述情况,需要约束设备在计算备份路径时,排除SRLG相同的链路。
通常来说骨干网的核心节点(P1、P2、P3)之间都由传送网的设备连接。如图1-1所示,现实网络中核心节点之间可能使用了同一根光纤进行连接,具有相同的风险等级,如果这根光纤发生故障,就会同时影响主路径和备份路径。因此要求计算备份路径时绕过这些具有共同风险的链路,这种技术就是SRLG。
IS-IS SRLG
SRLG是一种链路属性,用数值表示,数值相同的链路属于同一个SRLG。
当前IS-IS SRLG的配置步骤如下:
执行命令system-view,进入系统视图。
执行命令interface interface-type interface-number,进入接口视图。
执行命令isis srlg srlg-value,配置接口所属的SRLG。
该配置对IPv4和IPv6同时生效。
该命令可以重复配置,将接口加入多个SRLG。当两个接口所属的SRLG至少有一个相同时,表示这两个接口属于同一SRLG。
- 执行命令commit,提交配置。
配置完成以后,可以检查设备上有哪些SRLG,每个SRLG中都有哪些成员接口。
<HUAWEI> display isis srlg all Total SRLG supported : 4000 Total SRLG configured : 3 SRLG for ISIS(1) -------------------------------- SRLG 10: GE0/1/0 GE0/2/0 GE0/3/0
值得注意的是,IS-IS SRLG只是一个本地属性,仅在IS-IS计算本地保护路径时作为一个约束使用,IS-IS并不会对外发布。
TE SRLG
TE SRLG与带宽、亲和属性一样,都是TE链路属性,也是TE路径计算的约束条件之一。但是TE本身不支持传递TE链路属性,需要借助于IGP TE泛洪。下面以IS-IS为例,讲述TE SRLG的扩散与使用。
IS-IS为了传递TE链路属性,做了IS-IS TE协议扩展。IS-IS TE的工作步骤如图1-2所示,详细过程描述如下:
- 在各个设备为TE链路上配置SRLG等TE链路属性。
- IS-IS获取TE SRLG等TE链路属性,构造TLV,封装在Link State PDU(LSP)中,在整个IS-IS域中泛洪。这样IS-IS域中的各个设备都能够获取域内所有链路的TE SRLG信息。
- IS-IS泛洪的TE链路属性会被加入到各个设备的TEDB(TE DataBase)中,CSPF在进行路径计算时可以使用TE链路属性作为约束条件。
- 在控制器场景,IS-IS也可以将TE链路信息发布给BGP LS,BGP LS上报控制器,控制器使用TE链路信息进行路径计算。
为了携带TE SRLG属性,IS-IS做了TLV扩展。
对于IPv4 IS-IS,SRLG通过Shared Risk Link Group TLV(SRLG TLV)进行发布,SRLG TLV携带在Link State PDU中,类型值是138。
SRLG TLV的格式如图1-3所示。
SRLG TLV的相关字段解释如表1-1所示。
字段名 |
长度 |
含义 |
---|---|---|
System ID |
6字节 |
IS-IS的System ID。 |
Pseudonode |
1字节 |
伪节点号。 |
Flags |
1字节 |
标志位。 |
IPv4 interface address/Link Local Identifier |
4字节 |
本端接口地址/链路标识。 |
IPv4 neighbor address/Link Remote Identifier |
4字节 |
对端接口地址/链路标识。 |
Shared Risk Link Group Value |
4字节 |
SRLG值。可以携带多个。 |
对于IPv6 IS-IS,SRLG通过IPv6 SRLG TLV进行发布,IPv6 SRLG TLV也携带在Link State PDU中,类型值是139。
IPv6 SRLG TLV的格式如图1-4所示。
IPv6 SRLG TLV的相关字段解释如表1-2所示。
字段名 |
长度 |
含义 |
---|---|---|
System ID |
6字节 |
IS-IS的System ID。 |
Pseudonode |
1字节 |
伪节点号。 |
Flags |
1字节 |
标志位。如果最低位NA字段置位,则该TLV包括可选的IPv6 neighbor address字段,否则不包括。 |
IPv6 interface address |
16字节 |
本端接口地址。 |
IPv6 neighbor address |
16字节 |
对端接口地址。可选字段。 |
Shared Risk Link Group Value |
4字节 |
SRLG值。可以携带多个。 |
RFC 6119指出,SRLG TLV和IPv6 SRLG TLV都可以描述链路所属的SRLG,正常情况下,IPv6 SRLG TLV优先用于描述IPv6链路,不应使用IPv6 SRLG TLV来描述IPv4链路。在IPv4和IPv6双栈网络中,二者可能用于描述同一个链路,此时以SRLG TLV为准。
以下是TE SRLG的配置:
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number,进入TE链路的接口视图。
- 执行命令te srlg srlg-number,将该接口加入SRLG。
该命令可以重复配置,将接口加入多个SRLG。当两个接口所属的SRLG至少有一个相同时,表示这两个接口属于同一SRLG。
- 执行命令commit,提交配置。
# 配置完成以后,可以检查设备上有哪些SRLG,每个SRLG中都有哪些成员接口。
<HUAWEI> display te srlg all Total SRLG supported : 1024 Total SRLG configured : 2 SRLG 123: GE0/1/0 SRLG 234: GE0/1/0
上面介绍了IS-IS SRLG和TE SRLG的相关内容,需要特别关注二者的区别:IS-IS SRLG是IS-IS本地FRR保护场景备份路径的约束条件,仅在本地使用,不会对外发布;TE SRLG是MPLS TE、SR-MPLS TE、SRv6 TE Policy场景路径计算的约束条件,需要通过IS-IS的Link State PDU对外泛洪。
由于TI-LFA FRR也只是IGP的一个本地FRR保护方案,所以下文Segment Routing TI-LFA FRR保护中的Tiebreaker规则只与IS-IS SRLG有关,与TE SRLG无关。上面针对TE SRLG的介绍,只是SRLG的扩展介绍,仅供学习了解。
Tiebreaker
Tiebreaker有仲裁的意思。设备上使用此概念,主要用于给多个备份路径的计算规则进行排序。Tiebreaker使用优先级值来给计算规则进行排序,优先级的值越大,其实际的优先程度越高。
目前常见的规则有以下几种,下面逐一介绍。
- 节点保护(node-protecting):排除主下一跳节点之后计算备份路径,如图1-5所示。默认优先级是40。
- 最低开销(lowest-cost):计算备份路径的优选方案是最小开销路径。默认优先级是20。这种方式在计算时是排除主链路进行计算,所以也相当于链路保护,如图1-6所示。
- 最大开销(hold-max-cost):计算备份路径的优选方案是最大开销路径。默认优先级是15。
hold-max-cost用在特殊场景,比如IGP与LDP同步场景,以IS-IS为例进行说明hold-max-cost的作用。IS-IS接口从Down变为Up的过程中,IS-IS邻居会重新建立,IGP路由收敛后,流量会回切。由于IGP路由收敛速度非常快,依赖IGP路由的LDP业务可能还没有建立LDP LSP,立即回切就会造成LDP业务丢包,所以LDP希望IGP路由延时回切。通过配置isis peer hold-max-cost命令,IS-IS在本地设备的Link State PDU会在一段时间内保持通告最大开销值(Wide模式时cost=16777214,Narrow模式时cost=63),这样流量会在原来路径上继续转发,当hold-max-cost定时器超时后,cost值恢复正常值,流量正常回切。
如图1-7所示,DeviceA和DeviceB之间默认以Link1为主路径,Link1故障后,Link2切换为主路径,Link3为备份路径。Link1故障恢复后,如果Link1上配置了isis peer hold-max-cost命令,则IS-IS针对Link1发布最大Cost,Link3仍旧作为备份路径。这个时候如果想优选Link1当做备份路径,执行tiebreaker hold-max-cost preference preference命令调整tiebreaker规则,Link1就可以当做备份路径。当hold-max-cost定时器超时后,cost值恢复正常值,流量正常回切到Link1。
- 非负载分担(non-ecmp):备份路径的优选方案是非负载分担路径,如图1-8所示。默认优先级是10。
- SRLG不相交(srlg-disjoint):备份路径的优选方案是SRLG不相交的路径,如图1-9所示。
TI-LFA FRR保护的Tiebreaker
TI-LFA FRR保护的Tiebreaker规则
以IS-IS为例,目前TI-LFA FRR支持的Tiebreaker规则有:node-protecting、lowest-cost、hold-max-cost、srlg-disjoint。
当前默认顺序:node-protecting > lowest-cost > hold-max-cost > srlg-disjoint。
通过tiebreaker命令可以改变Tiebreaker的优选顺序,主要有几种情况,如表1-3所示。由于hold-max-cost场景比较特殊,我们在表1-3中暂不考虑hold-max-cost。
Tiebreaker的优选顺序 |
TI-LFA的计算顺序 |
---|---|
node-protecting > lowest-cost > srlg-disjoint |
node-protecting + srlg-disjoint -> node-protecting -> lowest-cost + srlg-disjoint ->lowest-cost 最多进行4次计算,如果前面已经计算出结果,就不会进行后续计算 |
node-protecting > srlg-disjoint > lowest-cost |
node-protecting + srlg-disjoint -> node-protecting -> lowest-cost + srlg-disjoint ->lowest-cost 最多进行4次计算,如果前面已经计算出结果,就不会进行后续计算 |
srlg-disjoint > node-protecting > lowest-cost |
node-protecting + srlg-disjoint -> node-protecting -> lowest-cost + srlg-disjoint ->lowest-cost 最多进行4次计算,如果前面已经计算出结果,就不会进行后续计算 |
lowest-cost > node-protecting > srlg-disjoint |
lowest-cost + srlg-disjoint -> lowest-cost 最多进行2次计算,如果前面已经计算出结果,就不会进行后续计算 |
lowest-cost > srlg-disjoint > node-protecting |
lowest-cost + srlg-disjoint -> lowest-cost 最多进行2次计算,如果前面已经计算出结果,就不会进行后续计算 |
srlg-disjoint > lowest-cost > node-protecting |
lowest-cost + srlg-disjoint -> lowest-cost 最多进行2次计算,如果前面已经计算出结果,就不会进行后续计算 |
从上述情况分类可以看出,对于TI-LFA FRR来说,srlg-disjoint的优先级大小并无关系,因为SRLG保护不能单独存在,需要依赖于节点保护或链路保护。
- 当node-protecting > lowest-cost时,先计算节点保护,再计算链路保护;
- 当lowest-cost > node-protecting时,只计算链路保护,不计算节点保护。因为绝大多数情况下,如果链路保护无法计算出结果,节点保护也无法计算出结果。
下面列举不同的场景,详细说明TI-LFA FRR场景Tiebreaker规则的应用。
场景一:使用默认Tiebreaker规则,node-protecting > lowest-cost > srlg-disjoint。并且没有SRLG冲突。
此时TI-LFA FRR采用节点保护(node-protecting),则需要排除DeviceD节点进行计算,此时无法得到计算结果,所以实际生效的保护类型是链路保护(lowest-cost)。在DeviceA上计算结果如图1-10所示。
场景二:使用默认Tiebreaker规则,node-protecting > lowest-cost > srlg-disjoint。并且没有SRLG冲突。
修改DeviceA-DeviceD之间的Cost为20,则主链路变为DeviceA->DeviceB->DeviceD。
此时TI-LFA FRR采用节点保护(node-protecting),则需要排除主下一跳DeviceB节点进行计算,得到的备份路径是:DeviceA->DeviceD。在DeviceA上计算结果如图1-11所示。
场景三:使用默认Tiebreaker规则,node-protecting > lowest-cost > srlg-disjoint。并且存在SRLG冲突。
当前主链路为DeviceA->DeviceB->DeviceD。
此时TI-LFA FRR采用node-protecting + srlg-disjoint进行第一次计算,则需要排除主下一跳DeviceB节点、并且排除链路DeviceA->DeviceD进行计算,得到的备份路径是:DeviceA->DeviceC->DeviceD。在DeviceA上计算结果如图1-12所示。
场景四:修改Tiebreaker规则,lowest-cost > node-protecting > srlg-disjoint。并且存在SRLG冲突。
当前主链路为DeviceA->DeviceB->DeviceD。
此时TI-LFA FRR采用lowest-cost + srlg-disjoint进行第一次计算,则需要排除链路DeviceA->DeviceD进行计算,得到的备份路径是:DeviceA->DeviceC->DeviceD。在DeviceA上计算结果如图1-13所示。
场景五:修改Tiebreaker规则,lowest-cost > node-protecting > srlg-disjoint。并且存在多个SRLG冲突。
当前主链路为DeviceA->DeviceB->DeviceD。
此时TI-LFA FRR采用lowest-cost + srlg-disjoint进行第一次计算,则需要排除链路DeviceA->DeviceD和链路DeviceA->DeviceC进行计算,无法得到计算结果。TI-LFA FRR再采用lowest-cost进行第二次计算,不再考虑SRLG因素,得到的备份路径是:DeviceA->DeviceD。在DeviceA上计算结果如图1-14所示。
场景六:使用默认Tiebreaker规则,node-protecting > lowest-cost > srlg-disjoint。并且存在多个SRLG冲突。
当前主链路为DeviceA->DeviceB->DeviceD。
此时TI-LFA FRR采用node-protecting + srlg-disjoint进行第一次计算,则需要排除主下一跳DeviceB节点、并且排除链路DeviceA->DeviceD和链路DeviceA->DeviceC进行计算,无法得到计算结果。TI-LFA FRR再采用node-protecting进行第二次计算,不再考虑SRLG因素,得到的备份路径是:DeviceA->DeviceD。在DeviceA上计算结果如图1-14所示。
TI-LFA FRR场景的Tiebreaker配置
以IS-IS为例,介绍TI-LFA FRR场景的TieBreaker配置。
一、IS-IS SR-MPLS TI-LFA FRR的配置步骤如下:
- 执行命令system-view,进入系统视图。
- 执行命令isis [ process-id ],使能IS-IS路由进程,进入IS-IS视图。
- 执行命令frr,进入IS-IS FRR子视图。
- 执行命令loop-free-alternate [ level-1 | level-2 | level-1-2 ],使能IS-IS FRR功能。
- 执行命令ti-lfa [ level-1 | level-2 | level-1-2 ],使能IS-IS SR-MPLS TI-LFA FRR功能。
- 执行命令tiebreaker { node-protecting | lowest-cost | srlg-disjoint | hold-max-cost } preference preference [ level-1 | level-2 | level-1-2 ],设置IS-IS SR-MPLS TI-LFA FRR备份路径的优选方案。
- 执行命令commit,提交配置。
二、IS-IS SRv6 TI-LFA FRR的配置步骤如下:
- 执行命令system-view,进入系统视图。
- 执行命令isis [ process-id ],使能IS-IS路由进程,进入IS-IS视图。
- 执行命令ipv6 enable topology ipv6,使能IS-IS进程的IPv6能力。
- 执行命令ipv6 frr,进入IPv6 IS-IS FRR子视图。
- 执行命令loop-free-alternate [ level-1 | level-2 | level-1-2 ],使能IPv6 IS-IS FRR功能,利用LFA(Loop-free Alternate)算法生成无环的备份链路。
- 执行命令ti-lfa [ level-1 | level-2 | level-1-2 ],使能IS-IS SRv6 TI-LFA功能。
- 执行命令tiebreaker { node-protecting | lowest-cost | srlg-disjoint | hold-max-cost } preference preference [ level-1 | level-2 | level-1-2 ],设置IS-IS SRv6 TI-LFA FRR备份路径的优选方案。
- 执行命令commit,提交配置。
总结
本文主要讲解了SRLG的技术原理、Tiebreaker规则,以及Tiebreaker规则在TI-LFA FRR场景中的应用。实际部署时,需要结合网络状况进行合理选择,使TI-LFA FRR保护达到最佳效果。