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

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

因此本文将以SRv6 BE场景下报文交互过程为例,以详细介绍SRv6。

关于SRv6的相关资料,可参考如下RFC:

IGP对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 的扩展头部 SRH。在扩展头部中携带了“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:类似 IPv4 的 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都需要处理的参数)

@:其应用场景可包括用于巨型载荷;用于路由器提示;用于资源预留。在SR的5G网络切片场景下,也会用到该报头。主要用于差异化服务。关于 SRv6 在网络切片方面的应用可参考博客SRv6扩展阅读-故障保护+Flex-Algo+G-SRv6+网络切片
@:RFC8200规定逐跳选项报头必须紧跟在 IPv6 标头之后。

2@目的选项报头(Destination Options header,Next Header =60)
目的选项报头携带了一些只有目的节点才会处理的信息。目前,目的选项报文头主要用于移动 lPv6。
3@路由报头(Routing header,Next Header =43)
路由报头和IPv4的Loose Source and Record Route选项类似,该报头能够被 lPv6 源节点用来强制数据包经过特定的路由器。
4@分段报头(Fragment header,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 扩展头,RFC8200 给出了如下说明
1@:强烈建议当数据包出现多个报头时,应当按照以上顺序插入。但也允许节点以任意顺序处理收到报文中的扩展标头。
2@:封装安全净载报头后还可根据需要插入目的选项报头。详细的报头插入原则可查看相关资料。
3@:目的选项报头最多出现二次,其他报头最多出现一次。
4@:如果定义了其他扩展标头,则必须指定它们相对于上面列出的标头的排序约束。

IPv6的SRH
SRH 实际是 IPv6 扩展报头路由报头(type=43)的一种。
在这里插入图片描述Next Header:1字节。描述后续头部类型。可以正常报文也可以是扩展头。这里携带的就是ICMPv6报文。
Length:1字节。自己扩展头的长度。
Type:1字节。标识路由报头的类型。type=4 表示SRH
Segment Left:1字节。SRv6 激活的 SID。前文提到类似于 MPLS 的多层标签,SRH 可以携带多个 SID。这里用于标识当前节点应使用的 SID 号。该字段与C语言的指针有点类似。
SRv6的SID可以形象理解为IPv6网络中的标签
Last Entry:1字节。
Flags:1字节。

当前在RFC8754中对该Flags定义为未来使用,传输时必须置0并在接收时忽略该Flags字段。
在RFC9259中对该Flags进行如下定义。
在这里插入图片描述//目前仅定义SRv6 O-bit,O-bit用于指示OAM处理。若O-bit置位,则每一个SRv6 Endpoint节点需要复制一份数据包并打上时间戳,然后上送复制报文和时间戳到控制平面处理。为了防止重复处理报文,控制平面无需响应IPv6上层的协议,比如ICMPv6 Ping&Tracert。通常在ping ipv6-sid时会携带该O-bit。
关于SRv6的另一个OAM实现是通过End.Op SID来实现连通性检测或连通质量检测,这里不在进行相关介绍。

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相关概念分析

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

3.1.SID介绍

SRv 6的 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。
自动换行
其他 Function 动作可查阅相关资料。

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的相应动作)。

例如《3.2.1.IGP报文分析》中展示的ISIS LSP携带的SRv6 Locator-Type=27就携带了PSP型的End SID。
RFC8402中也表明BGP也可作为控制面传递SID。

转发面:End 节点收到 DIP=SID 的 IPv6 报文后,根据该 SID 相应的 Function 字段进行相应报文转发行为。

收到该IPv6报文后,会进行SRH的SID替换DIP。这一过程在第4章节进行详细介绍)。点击此处到达《4.SRv6的场景介绍》

SRv6和传统MPLS/LDP的区别

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

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中标识携带Sub-TLV
SRv6 capability :T=25。由RFC9352介绍。
OAM-bit:Operations, Administration, and Maintenance功能。
其中标识了路由器对SRv6 OAM的支持能力。
自动换行
Node Maximum SID Depth:T=23。由RFC8491介绍。
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。主要描述 Advertising Neighbor Information 邻居节点可达信息。例如可以描述接口互联地址(Code 6=IPv4 interface address TLV 和 Code 8=IPv4 neighbor address TLV)。

此处该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字节。表示所使用的路由算法。由RFC8402介绍,目前只有两种0和1:0表示SPF,1表示严格SPF。严格SPF表示结果严格按照SPF算法执行忽略任何可能的覆盖SPF决策的本地策略。如果使用严格SPF通常要求全网都使用严格SPF。
Weight:1字节。RFC8402中主要描述了用于负载分担场景。
Endpoint Behavior:2字节。对于不支持或不识别的Behavior将进行忽略。由RFC8986介绍
SID:16字节。封装通告的SRv6 SID。
Sub-sub-TLV-length:1字节。所使用的sub-sub- TLVs字节数,也即之后还可根据选择携带相应的sub-sub- TLVs。
自动换行
在这里插入图片描述这里主要传递的是邻居 SID End.X SID 表示按链路进行转发。

在IGP分发SID收敛完成后,BGP为CE分配Prefix-SID即可:由RFC8669介绍。
在这里插入图片描述
Extended Community Attributes:传递 VPN 的 Route-Target。与传统 MPLS/LDP L3VPN 类似。

BGP Prefix-SID Attributes:为相应的节点配置 Prefix-SID。目前 wireshark4.0.1 暂不支持对该字段的识别。但是可以隐约识别出:3001:1:1:1::。

BGP Prefix-SID Attributes Type=40。其中 sub-TLV Type 4 在 2019 年的草案 draft-ietf-bess-srv6-services-01 及其之前的版本中使用,也称为 SRv6-VPN SID TLV。随后在 2020 年的草案 draft-ietf-bess-srv6-services-02 中废弃,并于逐渐修正完善为 2002 年发布的《RFC9252-BGP Overlay Services Based on Segment Routing over IPv6 (SRv6)》
SRv6-VPN SID TLV 相关功能已由 sub-TLV Type 5 = SRv6 L3 Service TLV 和 sub-TLV Type 6 = SRv6 L2 Service TLV 实现。

MP-NLRI Attributes:传递相应的VPNv4路由192.168.1.0/24(可以通过Prefix Length=112进行判断),下一跳指定为 1111::1111。与传统 MPLS/LDP L3VPN 类似。

点击此处回到目录

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 也可以实现多种策略路由。

点击此处回到目录

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

4.1.SRv6的场景分析

SRv6可以分为控制面和转发面。通俗意义上控制面通常指的是路由信息生成,而转发面则指的是具体的流量传输。
例如我们所说的传统 MPLS L3VPN 的控制面是 MPLS(LDP基于路由表生成标签)。转发面则是依照形成的 LSP 进行流量传递。
普通的 L2VPN 没有控制面,而是通过2层的 MAC/ARP 泛洪学习来导通的。目前基于 MP-BGP 的 L2VPN EVPN 以 MP-BGP 作为控制面传递 5 种 EVPN 路由实现了转控分离。(目前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-LS 邻居。
(根据实际的网络规划决定是否需要建立 BGP 的 RR 反射器。)

传统MPLS L3VPN场景下,PE 端 BGP 的一个作用在于生成 MP-BGP 标签作为私网VPN的标识。而SRv6场景没有单纯的标签概念,PE 端只需将相应的 VPN 实例与 SID 关联即可。而 SID(Function) 中自动包含的相应处理动作。
(当然还是需要 BGP 传递私网 IPv4 路由,只是下一跳指向了IPv6。RFC9252)

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,SRH 的处理由所支持的设备来完成。

1@源节点收到AR1传递过来的数据流量。查表发现下一跳为CX6。去往CX6的地址可以迭代入相应的 SRv6 隧道。(实际使用时可能有多种隧道并行)
2@源节点对该报文进行封装。外层封装 IPv6 报头,MAC 取相应的下一跳地址。同时 IPv6 报头插入相应的 SRH 头部信息。
DIPv6 地址取 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携带情况还需以实际为准

4.2.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。
//指定名为 [CX3] 的 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
 #
 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邻居。

4.3.状态查看

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

VPN路由信息在这里插入图片描述此处可看到私网路由的下一跳为 IPv6 地址。

私网流量传递时的报文
在这里插入图片描述这里直接携带的是 CX4 的 End 型 SID 地址,直接查 IPv6 路由表转发。因为只有1个Segment,这里携带的是目的选项报头而非SRH。

具有SRH的报文
使用ping ipv6-sid -a 1111::1111 4444::4444可以进行相应SID可达性检查。
在这里插入图片描述IPv6 的 Next Header 为43号路由报头,路由报头类型为4表示SRH。同时路由报头的 Next Header 为58标识携带 ICMPv6 作为payload。

点击此处回到目录

5.SR Policy的扩展介绍

主要参考2022-RFC9256-Segment Routing Policy Architecture进行描述。有关 SRv6-TE 的场景介绍,可参见博客SRv6 TE Policy场景-原理浅谈及配置示例

此处仅进行相关原理的简单介绍,详细的取值和定义可查阅相关资料。

5.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来。

5.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前缀。

点击此处回到目录

更新

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值