Title

SRv6(BE)-原理介绍+报文解析+配置示例

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

因此本文将以SRv6 BE场景下报文交互过程为例,以详细介绍SRv6。
有关于SR-MPLS的场景介绍,可参见SR-MPLS(BE)场景
关于SRv6的RFC,可参考如下RFC:

ISIS对SRv6的扩展支持参考RFC

其他相关扩展功能还有

自动换行
SRv6还存在大量相关RFC,感兴趣者可查阅相关资料。

Note:第一章主要简介了SRv6内容。有相关基础可以直接阅读第二和三章节。

目录

@

1.SRv6概念

1.1.SRv6是什么

SRv6(Segment Routing v6,基于IPv6转发平面的段路由)是基于源路由理念而设计的在网络上转发数据包的一种协议。其核心思想是将报文转发路径切割成不同的段,再为其分配SID(Segment Identifier,段标识符)进行标识从而以段指导报文转发。
SR-MPLS基于MPLS转发平面
SRv6的一个重要特点是不再使用LDP/RSVP-TE协议,也不需要MPLS标签,简化了协议。
SRv6基于Native IPv6进行转发。Native IPv6指的是普通的IPv6报文。SRv6是通过IPv6扩展报文头来实现的。普通的IPv6设备也可以识别SRv6报文(其实是识别IPv6报文)。SRv6设备能够和普通IPv6设备共同部署,对现有网络具有更好的兼容性。

这就是SR的Segment概念,例如在SR网络中End节点可以支持SR路由能力,而对中间节点只要求进行普通的IPv6报文转发即可。

1.2.SRv6特点

SRv6原理简介:SRv6主要是利用的IPv6的扩展头部。在扩展头部中携带了“IPv6地址(被称为SID)”,利用这个IPv6地址来指导支持SRv6的设备对报文进行报文转发。该IPv6携带了报文的处理动作。
SRv6可编程:SR的设计理念在于对路径进行分段(Segment)以及在起始节点对路径进行排序组合(Segment List),确定出行路径。例如可以在SRH头部中(IPv6扩展头的一种),携带多个SID。每个节点设备处理不同的SID,从而严格规定报文的转发路径实现可编程。
传统路由网络如果需要指定路径则需要全网统一规划路由,这通常是难以实现的。

2.SRv6术语

2.1.SRH简介

SRH也即(Segment Route Header)是IPv6的扩展头。
如下是IPv6的头部信息
在这里插入图片描述Version:固定为6表示IPv6。
Traffic class:类似IPv6的TOS,用于QOS为报文分配优先级。
Flow Label:流标签。该字段用来标记 IP 数据包的一个流。
Payload Length:IPv6有效载荷的长度,包括扩展头长度。
Next header: IPv6 基本报头后的那一个扩展报头的信息类型。一个IPv6可以有多个扩展头,通过在扩展头中指定下一个头部信息
Hop limit:跳数限制。与IPv4的TTL作用相同。
Source Address:IPv6源地址。
destination Address:IPv6目的地址。
Extension Header:扩展头。类型由Next header定义。

IPv6的Next Header
2017年的RFC8200定义了多种扩展头,这里对其进行简介
1@逐跳选项报头(Hop-by-Hop Options header,Next Header=0)=该选项主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段。(每台IPv6都需要处理的参数)
应用场景:用于巨型载荷;用于路由器提示;用于资源预留。
2@目的选项报头(Destination Options header,Next Header=60)=目的选项报头携带了一些只有目的节点才会处理的信息。目前,目的选项报文头主要用于移动lPv6
3@路由报头(Routing header,Next Header=43)=路由报头和IPv4的Loose Source and Record Route选项类似,该报头能够被lPv6源节点用来强制数据包经过特定的路由器。
4@分段报头(Next Header=44)=同IPv4一样,IPv6报文发送也受到MTU的限制。当报文长度超过MTU时就需要将报文分段发送,而在IPv6中,分段通过分段报头来实现。
5@认证报头(Authentication header,Next Header=51)=该报头由IPSec使用,提供认证、数据完整性以及重放保护。它还对IPv6基本报头中的一些字段进行保护。
6@封装安全净载报头(Encapsulating Security Payload header,Next Header=50)=该报头由IPSec使用,提供认证、数据完整性以及重放保护和IPv6数据报的保密,类似于认证报头。

IPv6的SRH
SRH实际是43号IPv6扩展报头路由报头的一种。
在这里插入图片描述Next Header:1字节。描述后续头部类型。可以正常报文也可以是扩展头。这里携带的就是ICMPv6报文。
Length:1字节。自己扩展头的长度。
Type:1字节。标识路由报头的类型。4表示SRH
Segment Left:1字节。SRv6激活的SID。前文提到类似于MPLS的多层标签,SRH可以携带多个SID。这里用于标识当前节点应使用的SID号。该字段与C语言的指针有点类似。
SRv6的SID可以形象理解为IPv6网络中的标签
Last Entry:1字节。
Flags:1字节。
Tag:2字节。用于对数排包分组。可以实现基于组的策略。
Address:16字节,这一字段也叫Segment List[]。IPv6地址,也即SRv6的SID。一般有多个,只是这里只有一个SID=SL[0]。每有一个SID增加16字节
有一个需要说明的是这个SID列表 Segment List从上往下依次为SL0,1,2,...。在使用时,首先使用的是最低层的SL,而传统MPLS是从外层开始使用剥离。(正好相反)
点击此处回到目录

2.2.SRv6的SID

Segment用于指导报文转发,总的来说可分为3类。分别是Prefix Segment、Node Segment、Adjacency Segment。而针对Segment的标识SID(Segment ID)也有如下三种。

分类 生成方式 作用
Prefix SID 手工 标识目的地址前缀。
简单理解可以用于标识目标网络
Node SID 手工 标识节点设备。
简单理解可以用于标识设备,例如OSPF的router-id
Adjacency SID 手工或协议动态分配 标识网络邻接。

Prefix SID/Node SID和Adjacency SID可以分别类比于传统IP转发中的目的地址出接口
SR-MPLS的SID是与MPLS概念相同的标签,SRv6的SID则可以单纯理解为IPv6地址
SRv6的SID=Locator+Function+Arguments
Locator:提供IPv6的路由能力,报文通过该字段实现寻址转发。此外,Locator对应的路由也是可聚合的。(用于传递报文的路由前缀)
Function:用来表达该设备指令要执行的转发动作,不同的转发行为由不同的Function来表达。(比如可以指定邻居转发或按节点解封装SRH按链路转发,传统L3VPN是按所建立的LSP转发)
Arguments:可选字段,是对Function的补充。这些参数可能包含流、服务或任何其他相关的信息,目前应用较少。

(SID的每个字段都是可变长的,并且可人为指定也可动态分配。并且一个SRH可以包含多个SID)

2.3.SRv6的其他概念

Segment Routing domain (SR domain):一组参与源路由模型计算的节点。这些节点可以连接到相同的物理基础设施(例如,服务提供商的网络)。如果部署了多个协议实例,则SR域通常包括网络中的所有协议实例。

SR Global Block (SRGB):SR域中的全局Segment的集合。如果一个节点参与多个SR域,则节点为每个SR域分配一个SRGB。
@在SR-MPLS中,SRGB具有节点的本地属性,并且标识为全局Segment保留的一组本地标签。在里面SR-MPLS,强烈推荐在SR域内的所有节点上使用相同的SRGB。这样做可以简化操作和故障排除。
@在SRv6中,SRGB是SR域中全局SRv6 SID的集合。

SR Local Block (SRLB):SR节点的局部属性。如果一个节点参与多个SR域,则节点为每个SR域分配一个SRLB。
@在SR-MPLS中,SRLB是为本地段保留的一组本地标签。
@在SRv6中,SRLB是为本地SRv6 SID保留的一组本地IPv6地址。在控制器驱动的网络中,一些控制器或应用程序可以使用控制平面来发现本地段的可用集合。

SR Policy:一个有序的Segments列表。用于将数据包与指定的路径相关联。Segments列表是基于目的地和一组优化目标和约束(例如,延迟、亲和性、SRLG等)来计算的。计算可以是本地的,也可以委托给PCE服务器。
SR Policy的下发可以手工配置也可以通过NETCONF或PCEP协议。

PUSH:PUSH动作包括在Segments列表的顶部插入一个段。类似于MPLS的标签压入。
NEXT:当活动Segments执行完成时,NEXT动作是由下一个Segments的检查组成的操作。下一个分段变为活动分段。在SR-MPLS中,NEXT指的是顶部标签的POP。在SRv6中,NEXT指的是从SRH到IPv6报头的目的地地址的下一段的拷贝。
CONTINUE:Segments未执行完成时或数据包处于Segments中执行时。在SR-MPLS中,CONTINUE指的是顶部标签的SWAP。在SRv6中,CONTINUE指的是IPv6目的地址的转发。

点击此处回到目录

3.SRv6(BE)跨域场景介绍

根据之前的介绍可以知道SRv6是一种新型的隧道技术。IPv6地址(SID)替代MPLS的标签用于公网数据传递。
这里以L3VPN跨域BE场景为例子进行SRv6技术的介绍。实际上SRv6方案也可用于承载EVPN。

3.1.SID介绍

SRv6的SID主要是由Locator路由前缀+Function+Argument组成。
Locator:网络节点的标识。是IPv6路由前缀,主要用于路由传递。一个重要特性是可路由。
Argument:SID的可选参数,在双归双活场景下有应用。

3.1.1.Function功能

Function:SID处理的选择动作,指导报文进行转发。Function比较复杂,这里重点进行介绍。
相关文档可参考2021-RFC8986-Segment Routing over IPv6 (SRv6) Network Programming,这里对不同类型进行介绍。
End:表示Endpoint SlD,用于标识目的节点(Node)。对应的处理动作为更新IPv6 DA,目的为End SID时正常路由表转发。
End.X:表示三层连接的Endpoint SID,用于标识链路。对应的转发动作是:更新IPv6 DA,从End.x SID绑定的出接口转发报文。
End.DT4:表示PE类型的Endpoint SID,用于标识IPv4 VPN实例。对应的转发动作是:解封装报文,并且查找IPv4 VPN实例路由表转发。等价于IPv4 VPN的标签。
End.DT6:表示PE类型的Endpoint SID,用于标识IPv6 VPN实例。对应的转发动作是:解封装报文,并且查找IPv6 VPN实例路由表转发。等价于IPv6 VPN的标签。
End.DX4:表示PE类型三层连接的Endpoint SID,用于标识IPv4 CE。对应的转发动作是:解封装报文,并且查找绑定CE SID的三层接口转发。
End.DX6:表示PE类型三层连接的Endpoint SID,用于标识IPv6 CE。对应的转发动作是:解封装报文,并且查找绑定CE SID的三层接口转发。
其实Function有一定的命名规则:
End:是最基础的Segment处理动作,中止当前动作。处理时将SRH的Segment Left字段-1,Segment List复制到IPv6的Destination Address中。
D:Discapsulate。不仅解封装IPv6扩展头还解封装IPv6报文。
X:指定出接口进行转发。
T:Table。查找路由表转发。
V:Vlan。查找vlan转发。
U:Unicast。查找单播Mac表转发。
M:Multicast。查看组播表转发。
B6:指定应用SRv6 Policy。
BM:指定应用SR-MPLS Policy。

3.1.2.Flavors附加行为

Flavors是为了增强SRv6 Segment而定义的附加Function行为。这些附加行为是可选项,它们将会增强SRv6 Segment的执行动作,满足更丰富的业务需求。2021年发布的RFC8986-Segment Routing over IPv6 (SRv6) Network Programming定义了如下三种Flavors。
PSP: Penultimate Segment Pop of the SRH:在倒数第二个Endpoint节点执行移除SRH操作。类似于MPLS的倒数第二跳弹出。但是这里是段的概念,每个段之间可能经历了多台设备。
USP: Ultimate Segment Pop of the SRH:在倒数第一个Endpoint节点执行移除SRH操作
USD: Ultimate Segment Decapsulation:在倒数第一个Endpoint节点执行移除IPv6头部操作

设备如何知晓对报文的Function处理动作:
在报文中携带SID时,会进行SID标识。例如在ISIS的LSP报文的SRv6 Locator型SubTLV中会携带Code字段进行标识具体是哪种Function,以及是否需要进行Flavors行为。
控制面:IGP会将SID在全网通告(还有BGP的相应动作)。

其实RFC8402也表明BGP也可作为控制面传递SID。

转发面:End节点收到DIP=SID的IPv6报文后,根据该SID相应的Function字段进行相应报文转发行为。
(对于该IPv6报文收到后,会进行SRH的SID替换DIP。这一过程在3.3章节进行详细介绍)。点击此处到达第3.3章节

和L3VPN的小区别
在L3VPN中,标签不仅作为数据转发的指导也承载了对私网租户的标识作用。
SRv6不存在L3VPN的标签,而是由SID代替了标签。SID的Locator本身作为IPv6路由前缀可以指导数据转发。而丰富的Function不仅可以承载对私网的标识,而且可以进一步指导报文的处理动作。相比于Label,业务承载类型和业务处理动作的丰富性都大大提高!!

3.2.SID地址的传递(IGP报文分析)

3.2.1.IGP报文分析

与SR-MPLS相同,SR的SID都可由IGP协议动态生成。在IGP协议的收敛完成的同时,标签转发路径LSP也随之建立。
本场景下以ISIS作为Underlay协议进行SID信息的传递。本场景下ISIS协议涉及SRv6功能的有如下三种TLV:Router capabilitySRv6 LocatorExtender IS reachability。接下来对其进行介绍:
自动换行
Router Capability-Type=242由RFC7981介绍
在这里插入图片描述
Router Capability:T=242。
Type:1字节。取值242。
Length:1字节。取值5-255。
Router ID:4字节。
S-bit:1bit。置1时,表示Router capability整个ISIS域泛洪。
D-bit:1bit。UP/Down bit,置1时,表示从Level-2区域泄漏到Level-1区域。并不得在泄露至Level-2区域水平分割。

并在该TLV中标识携带
SRv6 capability :T=25。由RFC9352介绍。
OAM-bit:Operations, Administration, and Maintenance功能。
其中标识了路由器对SRv6的支持能力。Node Maximum SID Depth:T=23。
Router capability作用在于协商对SRv6的支持能力,因为设备对SID的处理程度是有限制的。这一限制主要在于芯片的限制。限制包含
Maximum Segment Left:对Segment Left字段最大支持处理能力;Maximum End Pop:节点POP能力;Maximum T Insert:最多插入SID数;Maximum T Encaps:最多的封装SID数;Maximum End D:执行End.D动作时,可指定SID最大值。
自动换行
SRv6 Locator-Type=27由RFC9352介绍在这里插入图片描述
SRv6 Locator:T=27。主要用于传递SID信息,建立LSP。
Topology ID:12bit。表示所承载IGP协议对网络的支持能力。
在这里插入图片描述Algorithm:1字节。表示所使用的路由算法。目前只有两种0和1:0表示SPF,1表示严格SPF。

由RFC8402介绍严格SPF表示结果严格按照SPF算法执行忽略任何可能的覆盖SPF决策的本地策略。如果使用严格SPF通常要求全网都使用严格SPF。

Locator Size:1字节。和Locator共同表示了SID的Locator或路由前缀。
SubTLV=SRv6 End SID:Code=5。这里的End SID用于标识节点的SID。
SRv6 Endpoint Function:2字节。表示Endpoint Behavior行为。

而PSP指的是Flavors行为(用于增强SRv6 Segment的执行动作)
PSP表示在倒数第二个End节点剥离SRH
在这里插入图片描述
这里的Local-sid也即节点SID。此外在Extended IS reachability中携带了邻居SID。

自动换行
Extended IS reachability-Type=22由RFC5305介绍
在这里插入图片描述
Extended IS reachability:T=22。主要用于传递SID信息。这里主要传递的是邻居SID End.X SID表示按链路进行传递。
在这里插入图片描述 并在该TLV中标识携带Sub TLV
SRv6 LAN End.X SID :Code=44。由RFC9352介绍。
B-bit:Backup备份标志位。如果置位表明SID受保护,使用IPFRR等功能。
S-bit:Set标志位。如果置位表明SID指的是一组相邻(因此也可以分配给其他相邻)。
P-bit:Persistent永久标志位。如果置位表明SID是永久分配的,即SID值在路由器重新启动和/或接口波动之间保持一致。
Algorithm:1字节。表示所使用的路由算法。目前只有两种0和1:0表示SPF,1表示严格SPF。

由RFC8402介绍严格SPF表示结果严格按照SPF算法执行忽略任何可能的覆盖SPF决策的本地策略。如果使用严格SPF通常要求全网都使用严格SPF。

Weight:1字节。RFC8402中主要描述了用于负载分担场景。
Endpoint Behavior:2字节。对于不支持或不识别的Behavior将进行忽略。
RFC8986中主要描述了所定义的几种End节点行为。本文档的3.1.1.章节对其进行了相关描述。
SID:16字节。封装通告的SRv6 SID。
Sub-sub-TLV-length:1字节。所使用的sub-sub- TLVs字节数,也即之后还可根据选择携带相应的sub-sub- TLVs。

在IGP分发SID收敛完成后,BGP为CE分配Prefix-SID即可
在这里插入图片描述
Extended Community:传递VPN的RT。
BGP Prefix-SID:为相应的节点配置Prefix-SID。目前wireshark4.0.1暂不支持对该字段的识别。但是可以隐约识别出:3001:1:1:1::。
MP-NLRI:传递相应的VPNv4路由192.168.1.0/24(可以通过Prefix Length=112进行判断),下一跳指定为1111::1111。

点击此处回到目录

3.2.2.SID扩展阅读

BGP-SID简介:
RFC8402的page-9中介绍BGP也可作为Underlay网络传输SID地址信息,也即BGP-based distributed control plane此时BGP Segments可分为:BGP-Prefix Segment和BGP Peering Segments。
BGP-Prefix Segment:SR域中的BGP-Prefix segment具有全局属性并且等价于IGP-Prefix Segment。
BGP Peering Segment:在BGP Egress Peer Engineering(EPE)的概念中,启用了EPE的出口节点可以通告与其所连接的对等体相对应的分段。这些Segment称为BGP Peering Segment或BGP peering SIDs。它们用于表达SR域间路径。

而BGP Peering Segment则又可分为:PeerNode SID、PeerAdj SID和PeerSet SID。
PeerNode SID:本地Segment(local segment),SR动作为NEXT。segment相关的对等体Node。类似于LDP的标签SWAP。
PeerAdj SID:本地Segment(local segment),SR动作为NEXT。接口连接与Segment相关的对等体。
PeerSet SID:本地Segment(local segment),SR动作为NEXT。同一个组的对等体集合,通过任意连接的接口进行负载分担。

Binding Segment:
Binding Segment称为绑定Segment,又称为粘连Segment。主要用于SID的扩展,网络不透明和服务独立性。

通常由于设备的芯片等硬件的限制,SRH所能携带的SL通常是有限的。当进行一个大范围多个Segment的网络时,就无法一次包含所有的SID。此时可通过SID映射的方式进行扩展。
此外与SR Policy强相关的Binding Segment也可以实现多种策略路由。

3.3.SRv6的场景分析

SRv6可以分为控制面和转发面。通俗意义上控制面通常指的是路由信息生成,而转发面则指的是具体的流量传输。
例如我们所说的传统MPLS L3VPN的控制面是MPLS(LDP生成标签)。转发面则是依照LSP进行流量传递。
普通L2VPN没有控制面通过2层的MAC/ARP泛洪学习来导通的,而基于MP-BGP的EVPN是以MP-BGP作为控制面传递5种EVPN路由(目前已新增到8种)实现了转控分离。

接下来以图示为例进行相应介绍:
CX1-CX6用于公网隧道建立(CX1-3为AS100,CX4-6为AS200。CX2和CX5可以支持SRv6功能,也可以不支持);
AR1AR2分别作为VPN的CE路由器;
NE路由器可用于模拟SDN控制器(SRv6通常与SDN技术相关联)在这里插入图片描述AR1向AR2通信:

控制面:
1@控制面上首先应进行IPv6网络的构造,通常CX1-6的每台设备都需要进行IPv6的地址改造。
2@CX1-6都运行IGP协议,同时应使能SRv6功能。自动或手动指定相应的SID信息,由IGP协议进行泛洪。
SRv6的一个强大之处在于不要求所有网络节点都支持SR功能。并且工程应用上的设备通常跨越多个AS。
因为在使用时节点设备实际上执行的IPv6的普通路由转发,只有支持SRv6功能的End节点才处理SRH头部信息。(TLV格式构造报文的一个好处是,可以忽略自己不支持的TLV)

3@在IGP完成SID的泛洪同步后,需要建立BGP邻居传递相应的SID和VPN私网路由。CX1和CX3建立iBGP,CX4和CX6建立iBGP,CX3和CX4建立eBGP。如果有控制器的加入,还需另外和控制器NE建立BGP邻居。
(根据实际的网络规划决定是否需要建立BGP的RR反射器。)
传统MPLS L3VPN场景下,CE-PE端BGP的作用在于生成MP-BGP标签作为私网VPN的标识。而SRv6场景没有单纯的标签概念,CE-PE端只需将相应的VPN实例与SID关联即可。而SID(Function)中自动包含的相应处理动作。
(当然还是需要BGP传递私网路由)
SDN控制器的加入为SRv6提供了可编程功能:
SDN控制器通过建立BGP邻居,下发BGP SID属性(BGP-LS等)。从而指导相应的流量行为。
目前的SDN控制器可以达到在底层可达的网络(underlay)自动下发配置,更加简化了网络变动的工作量。
SRv6的一个重要特点:跨域
传统MPLS L3VPN中,经常有跨域场景出现。而MPLS是无法连续的为非AS域的设备分配标签(一般来说LSP的连续通常只能在一个AS内)。针对这种情况MPLS 提出了3种方案:OptionA(各自AS当成对端的CE设备转发),OptionB(ASBR之间的MP-eBGP分配MPLS单层标签),OptionC(有两种方案可分别产生2层和3层标签,相同点在于内层都是目标CE的私网标签)。
SRv6场景中,不存在传统意义的标签概念(标签被SID/IPv6地址替代)。控制面传递的是SID/IPv6地址。也即只需要每台设备仅知道去往目标CE的IPv6地址即可。

转发面:
在转发面上,实际是IPv6的路由转发。只是IPv6的报文携带了相应的SRH

在控制面完成后AR1和AR2(CE)以及CX1和CX6都具有了相应的路由信息。(或在PE上双点双向重分发,或使用缺省路由。)

1@源节点收到AR1传递过来的数据流量。查表发现下一跳为CX6。去往CX6的地址可以迭代入相应的SRv6隧道(工程上可以有多种隧道并行)
2@源节点对该报文进行封装。外层封装IPv6报文,Mac取相应的下一跳地址。同时IPv6插入相应的SRH头部信息。
目的IPv6地址取SRH的Segment List字段的最大值,发送时Segment left-1。
3@中间节点对相应报文进行2层解封装。
如果支持SRv6功能,则取SRH字段中Segment left对应Segment List的SID/IPv6地址,替换为DIPv6地址,随后Segment left-1发送。
点击此处回到SRH报文介绍
这一行为与MPLS网络中间节点设备的标签替换非常类似
如果不支持SRv6功能,则只查找IPv6路由表比对该SID进行转发。
4@目地节点对相应报文进行解封装。目的节点收到该IPv6报文,可以识别该IPv6地址(也是SID)相应的Function。例如可以是End.DT4型SID,此时就会将SRH和IPv6同时剥离暴露出里边的IPv4报文查找IPv6路由表转发。

这里未提到的一点是Flavors附加行为。
具有Flavors附加行为的SID可以进行倒数第二段弹出,或弹出SRH弹出IPv6等操作。
SRv6的Segment概念可以理解为处理SRH的两个最近节点。在这两个End之间只需查表转发IPv6。

具体转发时,SR可以分为不同的SID类型(不同的SID具有不同的行为)。
例如可以指定链路转发,可以仅查路由表的节点转发。
而添加链路检测的SDN网络,可以根据需求实时下发SID更改转发情况。因此选择性非常强。
实际SRH携带情况还需以实际为准

点击此处回到目录

3.4.L3VPN for IPv4 over SRv6 BE

这里以SRv6 BE为例进行介绍。SRv6 BE可能更像一个加强版的MPLS转发。

考虑到设备所支持情况,这里在CX1、CX2和CX3之间建立AS=100,并且在CX3和CX4之间建立eBGP邻居关系AS200。
1@这里只提供了PE设备配置,有能力者可自行进行其他P和PE设备的配置。
有需要者可私信联系提供模拟器源文件及配置。

在这里插入图片描述这里以CX3为例进行配置介绍:
sysname CX3
#
segment-routing ipv6
locator CX3 ipv6-prefix 3003:1:1:1:: 64
#
//设置SRv6的SID,指定locator为3003:1:1:1:: 且前缀为64。
//设备自动根据定义的长度进行选择。例如此时Locaor指定为64,Function未指定则动态分配那么Function为128-64。Function可以静态指定也可以动态指定,例如
locator CX3 ipv6-prefix 3003:1:1:1:: 64 static 32
opcode ::1111 end
//此时为64的Locator,32的人为分配Function,32的动态Function指定。
//(Arg参数未指定则该SID完全由Locator和Function组成。)

isis 10
is-level level-2
cost-style wide
network-entity 49.0000.0000.0003.00
#
ipv6 enable topology standard
segment-routing ipv6 locator CX3
#
#
//指定IGP携带SRv6相关信息,并且未定义的SID长度部分由IGP自动分配。
bgp 100
router-id 3.3.3.3
peer 2003::4 as-number 200
peer 2222::2222 as-number 100
peer 2222::2222 connect-interface LoopBack1
#
ipv4-family unicast
undo synchronization
#
ipv6-family unicast
undo synchronization
network 1111::1111 128
network 2222::2222 128
peer 2003::4 enable
peer 2222::2222 enable
peer 2222::2222 next-hop-local
#
ipv4-family vpnv4
undo policy vpn-target
peer 2222::2222 enable
peer 2222::2222 prefix-sid
#
//使能VPNv4传递BGP Prefix-SID信息。
//这里宣告了AS内部的loopback用于建立BGP邻居。

3.5.状态查看

SID信息在这里插入图片描述Local-sid:描述了节点的SID。包括End SID、End.x SID和End.DT4等。
Locator:描述了本地定义的Segment信息。
3.2.章节(点击可达)已做过体现,这里不在举例。

VPN路由信息在这里插入图片描述
私网流量传递时的报文
在这里插入图片描述

这里直接携带的是CX4的End型SID地址,直接查IPv6路由表转发。因为只有1个Segment,这里携带的是目的选项报头而非SRH。

具有SRH的报文
使用ping ipv6-sid -a 1111::1111 4444::4444可以进行相应SID可达性检查。
在这里插入图片描述

点击此处回到目录

4.SR Policy的扩展介绍

主要参考2022-RFC9256-Segment Routing Policy Architecture进行描述。
此时仅进行简单介绍,详细的取值和定义可查阅相关资料。

4.1.SR Policy和Candidate Path

1@:SR Policy必须通过元组<Headend,Color,Endpoint>来标识。Color和Endpoint共同描述了到目标的信息。

元组是一个程序概念,可以理解为数据结构的最小单元。只是这个单元有三个要素/成员。
Headend:实例化或实施策略的节点。也即IPv4/IPv6地址,在SR domain中全局唯一。
Color:非0的32-bit整数。将SR策略与意图或目标(例如,低延迟)相关联。
Endpoint:policy的目的。同样即IPv4/IPv6地址,在SR domain中全局唯一。特定情况下可为未指定地址:0.0.0.0或::。

2@:SR Policy与一个或多个 Candidate Path 候选路径相关联。候选路径可通过 Path Computation Element Communication Protocol (PCEP) 或BGP SR Policy协议或手工传递相应的信令。

3@:候选路径可以是动态的、显式的或复合的。
动态的候选路径表示特定数据平面(即SR-MPLS或SRv6)的优化目标和一组约束。Headend可借助PCE对优化问题动态的生成SL或SL的集合。
显式的候选路径表示为SL或SL的集合。
复合的候选路径充当对SR Policy进行分组的容器。每个策略都具有显式的候选路径和/或具有潜在不同优化目标和约束的动态候选路径的组合,可用于对分组流进行负载平衡的引导。

简单来说候选路径就是Segment List,用于标识的流量经过的路径。并且如果动态候选路径与SL相关联,则SID报文中的weight有效,并默认置为1用于负载分担。
自动换行
SR Policy可包含/继承其他SR policy,此时要求子父SR Policy有如下要求:
@:子父SR Policy的endpoints必须相同。
@:子父SR Policy的Color必须不同。
@:父SR Policy不可使用复合的候选路径。

4@:至少有一个Candidate Path 候选路径,SR Policy才可生效。

因此SR Policy的关键在于候选路径的选择。
CP的标识:候选路径的标识主要有以下原则:

@:前文提到SR Policy可有多个候选路径,这里要说明的是一个候选路径只为一个SR Policy服务。一个候选路径不可共享给其他SR Policy。
@:SL不可用于区分候选路径,即使他们一样。SL是候选路径的一个属性。
@元组<Protocol Origin,Originator,Discriminator>唯一标识候选路径。
@:候选路径使用ASCII[RFC0020]字符(即0x20到0x7E)的符号名称发信号,以用作用户友好属性,用于调试和故障排除。此类符号名称不得被视为候选路径的标识符。

Protocol-Origin of CP:8-bit,候选路径的协议起源。

目前RFC9256建议PCEP协议取10;BGP SR Policy协议取20;配置取30。
该值可作为同等条件下候选路径选择依据之一。

Originator of CP:160-bit,候选路径的始发者用于识别节点。该节点在Headend上提供或用信号标识候选路径。

Originator主要由ASN(4字节)和Node Address(16字节)进行标识。当AS Number取2字节时,高bit置0。同样的当使用IPv4地址时,映射到低32-bit位而高bit置0。

Discriminator of CP:32-bit,候选路径在来自特定Protocol-Origin的SR policy的上下文中唯一地标识。

候选路径的唯一标识,与Protocol-Origin相关。不同的Protocol-Origin有不同的选择定义。

Preferencer of CP:32-bit,用于为SR Policy选择最佳候选路径。

越大越优,默认100。PCEP协议和BGP SR Policy协议对优先级的定义可查阅相关文档。

Active CP:当候选路径可用并被选择为最优时称为Active CP。每一次的路径信息改动必须重新选举Active CP。选举原则如下

@:比较Preferencer,越大越优
@:比较Protocol-Origin,越大越优。如果都是手工配置的,优选已经存在的。
@:比较Originator,越小越优。
@:比较Discriminator,越大越优

SR Policy的实际应用:在SR Policy的实际应用上通常有如下原则:

@:只有可用的SR Policy才能下发到转发面,指导流量执行转发。
@:Active CP必须用于转发被引导到该策略上的流量,但某些情况除外,如Fast ReRoute快速重新路由。
@:如果一组SL与策略的Active CP相关联,则转向是按流的,并根据每个SL的相对权重加权ECMP(W-ECMP)。当复合候选路径处于活动状态时,引导到每个组成SR策略的流的分数等于每个组成SR政策的相对权重。w/Sw。
@:加权负载平衡的准确性取决于平台实现。

SR Policy的priority:取值0-255,越小优先级越高。默认128。SR Policy的priority可以用在如下场景:

当拓扑发生改变时,每一条SR Policy势必要重新计算Active CP。priority可用于指导优先进行计算的SR Policy。
当使用非默认的priority时,也用于选举。

SR Policy的应用举例
有如下场景1:
在这里插入图片描述

SR Policy1有候选路径CP1和CP2,按上文介绍应选择CP1作为Active CP。并且在引导数据流量时,根据flow-based哈希到SL1的流量应为W1/(W1+W2)。

有如下场景2:
在这里插入图片描述SR Policy100为复合Policy,有父SR Policy color1和SR Policy color2。并且依照上文定义,父SR Policy color1和SR Policy color2都不包含复合CP。此时在父SR Policy color1上进行per-flow的哈希流量应为W1/(W1+W2)。

这里的流量还是根据转发表里的SL来。

4.2.其他概念和SR Policy的Implement

Segment Routing Database:也即SR-DB。
SR-DB是一个数据库概念,用于说明可能有助于SR Policy计算和验证的各种信息及其来源。SR Policy计算节点(例如,Headend或控制器)通常维护SR-DB。Headend可通过SR-DB验证显式候选路径和动态候选路径。

SR-DB通常包括:
@:IGP拓扑信息
@:Segment Route信息,例如SRGB、SRLB和SID等。
@:TE链路属性,例如TE度量、Shared Risk Link Groups共享风险链路组、attribute-flag属性标志、extended admin group扩展管理组等。
@:扩展TE链路属性,例如延迟、丢包。
@:AS内部拓扑信息。
所连接域的拓扑可以通过IGP、BGP-LS和NETCONF协议获得。非所连接则可通过BGP-LS和NETCONF协议获得。

Segment Types
基于所需的数据平面,可从Segment List构建MPLS标签栈或SRv6 SRH。但是,Segment List本身可以使用不同的Segment Types来指定,并且当前定义了以下内容:

Type A=SR-MPLS Label:与SR-MPLS定义的任何Segment Types相对应的MPLS标签
Type B=SRv6 SID:与SRv6的任何SID行为相对应的IPv6地址
Type C=IPv4 Prefix with optional SR Algorithm:这是一种特殊情况。要求headend将指定的IPv4前缀地址解析为与其前缀SID段相对应的SR-MPLS标签。
Type D=IPv6 Global Prefix with optional SR Algorithm for SR-MPLS:这是一种特殊情况。要求headend将指定的IPv6全局前缀地址解析为与其前缀SID段相对应的SR-MPLS标签
Type E=IPv4 Prefix with Local Interface ID:这是一种特殊情况。要求headend将指定的IPv4前缀地址解析为发起它的节点,然后使用本地接口ID来识别其邻接为点对点链路。
Type F=IPv4 Addresses for link endpoints as Local, Remote pair:这是一种特殊情况。要求headend将指定的IPv4本地地址解析为发起它的节点,然后使用IPv4远程地址来识别所引用的链路邻接。
Type ...
Type K= IPv6 Addresses for link endpoints as Local, Remote pair for SRv6

Binding SID of a Candidate Path
相同SR Policy的候选路径应该具有相同的Binding SID。
不同SR Policy的候选路径不得具有相同的Binding SID。

Binding SID of a SR Policy
SR Policy的Binding SID是其活动候选路径的Binding SID。

使用SR Policy导入流量:主要的方式有4种。
通过Active SID:传入数据包具有与头端的本地Binding SID相匹配的Active SID。

举例:头端H
@Active SL<S1, S2, S3>Binding SID B
自动换行
当H收到具有标签/SL为<B, L2, L3>数据包K时,H将进行POP/PHP弹出B并压入<S1, S2, S3>。此时形成<S1, S2, S3, L2, L3>的标签/SL进行相应转发。

Per-Destination的引导:传入数据包与BGP/服务路由匹配,该路由在SR策略上重复出现。

举例:头端H
@从BGP学习到路由R下一跳NColor扩展属性CVPN标签V
@有可用SR Policy P(headend=H,Color=C,endpoint=N),且其有可用候选路径<S1, S2, S3>和Binding SID B
@有BGP policy可匹配到Color扩展属性C并可应用
自动换行
如果满足所有这些条件,H在RIB/FIB中安装R,下一跳设置BSID B的SR Policy P,而非N。当H收到可匹配路由R的数据包K时,H将压入标签栈/SL<S1, S2, S3, V>。

举例:头端H
@从BGP学习到路由R下一跳NColor扩展属性CVPN标签V
@有可用SR Policy P1(headend=H,Color=C1,endpoint=N),且其有可用候选路径<S1, S2, S3>和Binding SID B1
@有可用SR Policy P2(headend=H,Color=C2,endpoint=N),且其有可用候选路径<S4, S5, S6>和Binding SID B2
自动换行
如果满足所有这些条件,H在RIB/FIB中安装R,下一跳设置BSID B的SR Policy P2,而非N。因为优选Color大者。并且当SR Policy P1失效时,继续优选Color大的SR Policy。

Per-Flow的引导:传入数据包根据特定的Flow特征在Forwarding Class转发数组上匹配或递归,根据选中的SR Policy进行转发。

举例:头端H
@有可用SR Policy P1(headend=H,Color=C1,endpoint=N),且其有可用候选路径<S1, S2, S3>和Binding SID B1
@有可用SR Policy P2(headend=H,Color=C2,endpoint=N),且其有可用候选路径<S4, S5, S6>和Binding SID B2
@有指向N的数组/队列A。这一数组/队列称为Forwarding Class,并且有元素0-7。例如A[0],A[1],A[2],...,A[7]。数组/队列A中进行如下定义,使用IGP转发至N的数据流定义为A[0],具有Color=C1映射A[2],具有Color=C1映射A[2]。
@具有相应的Flow分类,例如基于VLAN/TOS/DSCP/IP Destination/IP Source/Port等。并对相应的Flow进行着色Color。
自动换行
如果满足所有这些条件,发往N的数据将进行递归。Entry A(0)将按IGP最短路径转发,Entry A(1)将引导至SR Policy P1,Entry A(2)将引导至SR Policy P2。
需要注意的是,即使走A[0]数组/队列也可压入Prefix-SID进行SL转发。并且其他未匹配或无效匹配的数据走A[0]。
当所有流量都进行A[0]转发时,发往N的转发条目被更新以绕过数组/队列并直接指向其传出接口和下一跳。

Policy-Based的引导:传入的数据包与在SR Policy上引导它们的路由策略相匹配。
头端H可以配置有本地路由策略,该策略覆盖任何BGP/IGP路径并在SR Policy上引导指定的数据包。这包括使用IGP Shortcut等机制,通过SR策略自动路由IGP前缀。

点击此处回到目录

更新

posted @ 2023-04-19 23:41  m风行者  阅读(1521)  评论(0编辑  收藏  举报