传统IGP(Interior Gateway Protocol,内部网关协议)基于链路的开销值来计算到达目的地的最优路径。在链路开销值不能作为路径优劣的唯一标准时,传统IGP的路由计算方法无法满足用户的不同需求,主要表现在如下两点:
流媒体、视频会议等业务对网络时延要求高,需要IGP根据链路时延进行路径计算。
如果网络中的某些链路存在故障风险,需要IGP在路径计算时排除具有故障风险的链路。
在IGP无法满足上述需求的情况下,Flex-Algo(Flexible Algorithm,灵活算法)技术应运而生。采用Flex-Algo算法,用户可以根据需要自由选择最优路径计算方法和度量值类型,并可以为不同的业务规划最优路径,从而达到灵活控制路径的选择、实现流量工程等目的。
以下拓扑分别展示了基于IGP metric、时延delay和带宽的路径规划。
基于IGP metric
基于时延delay
基于带宽
02 什么是Flex-Algo算法
用户可以自定义的Flex-Algo算法范围是Flex-Algo(128)~Flex-Algo(255),可以有128个。其中每个Flex-Algo算法可以使用Flex-Algo(k)表示,k是FAID(FA算法标识符)。Flex-Algo(k)在参与这个算法的逻辑拓扑中具有本地意义,并且具有唯一定义。
Flex-Algo(k)的定义包含三个要素:
03 Flex-Algo是如何工作的
以IGP采用IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统)、SR采用SR-MPLS的场景为例介绍Flex-Algo的工作流程。
01 定义算法
在参与Flex-Algo(k)计算的逻辑拓扑中,需要存在Flex-Algo(k)的定义,即前面介绍的Flex-Algo(k)的三个要素。
不需要每个节点都定义Flex-Algo(k),只需要部分(至少一个)节点定义并通告到拓扑中。
为了保证拓扑内所有节点对于Flex-Algo(k)的定义统一,避免定义冲突,建议在其中的2个节点进行相同的定义,并通告出来。
IS-IS使用携带IS-IS FAD Sub-TLV的协议报文来定义Flex-Algo(k)。其中,FAD的含义是灵活算法定义(Flexible Algorithm Definition)。
02 通告算法
网络拓扑中的节点将如下内容通告到拓扑中。
部分(至少一个)节点将本地定义的算法通告到拓扑中。
该通告是通过定义算法中提到的IS-IS FAD Sub-TLV来实现的。IS-IS FAD Sub-TLV只能在同一个IS-IS级别里传播,不能传播到该级别区域之外。
所有节点将本节点拥有的Flex-Algo能力,即所有支持的算法ID通告到拓扑中。
该通告是通过SR-Algorithm Sub-TLV来实现的。SR-Algorithm Sub-TLV只能在同一个IS-IS级别里传播,不能传播到该级别区域之外。
所有节点将Prefix SID通告到拓扑中,其中包含了Prefix SID和算法ID的关联关系。这个通告是通过Prefix-SID Sub-TLV来实现的。
03 生成拓扑
每个Flex-Algo(k)都会生成自己的逻辑拓扑,拓扑生成的原则如下。
节点范围:只有参与Flex-Algo(k)的节点才会被包含在Flex-Algo(k)拓扑中,包括Flex-Algo(k)定义的本地产生者和通告接收者。
链路范围:如果在Flex-Algo(k)的定义中配置了约束条件,如Admin-group或者SRLG,拓扑将根据这些约束条件进行调整,保留或排除部分链路。如果拓扑中的某些链路不具有Flex-Algo(k)所使用的度量值,这些链路也会被排除。
04 计算路径
Flex-Algo(k)将采用其定义中的计算类型和度量类型进行路径计算。Flex-Algo支持ECMP负荷分担,可以根据情况生成多条具有相同Flex-Algo代价的路径。
任何参与Flex-Algo(k)的节点都会执行路径计算。如果节点参与多个Flex-Algo,将针对每个Flex-Algo进行独立计算。所有节点都默认支持Flex-Algo(0),即支持传统的IGP路径计算。
节点会将路径计算的结果通过Flex-Algo(k)关联的Prefix SID加入到自己的MPLS-MPLS转发表,不会加入到任何IP-MPLS或者IP-IP的转发表。
04 Flex-Algo是如何应用的
SR TE Policy可以通过ODN(On-Demand Next-hop,按需下一跳)功能自动创建。如果在设备收到的BGP路由中,Color属性与ODN模板相匹配,则根据该ODN模板自动创建一个SR TE Policy。ODN模板关联Flex-Algo算法后,Flex-Algo算法会自动为ODN创建的SR TE Policy的候选路径计算SID列表。
在R1上创建ODN模板,并且关联了Flex-Algo算法。
在该场景中,FAD为:
使用SPF算法。
基于TE开销计算到达目的地的最小开销路径。
R2和R6之间的链路不支持TE开销值,因此该链路被排除。
排除亲和属性为“红色”的链路。
R1与R2之间的链路亲和属性为红色,R3与R5之间的链路亲和属性也为红色,因此R1与R2之间的链路、R3与R5之间的链路都被排除。
在SR Policy的Candidate Path下配置Segment List,内容为数据包经过R5、R3。由于该SR Policy关联了以上的Flex-Algo算法,数据包转发路径如下所示。
通过不同的FAD定义与SR的绑定,可以自由控制转发路径,达到软切片的效果。Flex-Algo算法可以应用于SRv6和SR网络,可以为SRv6 Policy和SR Policy直接计算出SID列表,满足流量工程的需求。