SRv6概述

如果网络也能像计算机一样,将网络承载的业务的意图翻译成发给沿途网络设备的一系列转发指令,就可以实现网络编程,满足业务的定制化需求。

SRv6就是基于以上考虑,将网络功能指令化,将表达网络功能的指令嵌入128 bit的IPv6地址中。在SRv6网络里,业务需求可以被翻译成有序的指令列表,由沿途的网络设备去执行,达到网络业务的灵活编排和按需定制。

为了实现SRv6,根据IPv6原有的路由扩展报文头定义了一种新类型的扩展报文头,称作SRH。

SRH格式抽象图:

srv6网络 underlay Overlay srv6网络部署权威指南_网络编程


Segment List等信息显式地指定一条SRv6路径。Segment List[0]~Segment List[n]相当于计算机程序的指令,第一个需要执行的指令是Segment List[n]。SL初始值为n,每执行完一个指令,将SL的值减1,指向下一条要执行的指令。

SRv6域中分别有三种角色:

SRv6源节点生成SRv6报文;

中转节点只执行普通的IPv6报文转发,不参与SRv6处理;

Endpoint节点接收的报文的IPv6目的地址是本地配置的SID,需要处理SRv6 SID和SRH。

srv6网络 underlay Overlay srv6网络部署权威指南_sdn_02

网络指令

通常一条计算机指令包括两方面的内容:Opcode(操作码)和Operand(操作数),其中Opcode决定要完成的操作,Operand指参加运算的数据及其所在的单元地址。同样,我们在进行SRv6网络编程的时候,也需要定义网络指令:SRv6 Segment。
标识SRv6 Segment的ID被称为SRv6 SID

SRv6 SID格式:

srv6网络 underlay Overlay srv6网络部署权威指南_srv6_03

学习SRv6首先需要对SRv6 SID的三部分逐一分解展开,弄清楚其中奥妙。

Locator

Locator是网络拓扑中一个网络节点的标识,用于路由和转发报文到该节点。Locator标识的位置信息有两个重要的属性:可路由和可聚合。
Locator字段对应ipv6-prefix ipv6-address参数,长度由prefix-length参数决定。Locator本身是一个IPv6网段,该网段下的所有IPv6地址都可以作为SRv6 SID分配。节点配置Locator之后,系统会生成一条Locator网段路由,通过Locator网段路由就可以定位到本节点,同时本节点发布的所有SID也都可以通过该条Locator网段路由到达。

Function

Function用来表达该指令要执行的转发动作,相当于计算机指令的Opcode。因此Function字段也称为Opcode,可以通过IGP协议动态分配,也可以通过opcode命令静态配置。在SRv6网络编程中,不同的转发行为由不同的Function来表达。

Arguments

Arguments(Args)字段是一个可选字段。它是指令在执行时对应的参数,这些参数可能包含流、服务或任何其他相关的信息。
例如,End.DT2M SID可以携带一个参数Arg.FE2,该参数可以用于ESI(Ethernet Segment Identifier,以太网段标识符)过滤和EVPN E-Tree查找二层转发表进行组播复制时排除特定的一个或一组出接口。

上述各个字段关系可以简示如下:

|–Locator–|–Dynamic Opcode–|–Static Opcode–|–Args–|

静态配置SID时,SID只占用静态段范围,静态段取值从1开始,动态段设置为0。动态分配SID时,SID会占用动态段和静态段范围,动态段取值从1开始,静态段取值从0开始。

优先使用静态Opcode构成SID,如果不存在静态Opcode,则动态分配。

举例:

locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD:: 64 static 32,Locator是2001:DB8:ABCD::,长度占用64位,静态段占用32位,动态段占用32位,args字段占用0位。

•静态段起始值: 2001:DB8:ABCD:0000:0000:0000:0000:0001

•静态段结束值: 2001:DB8:ABCD:0000:0000:0000:FFFF:FFFF

•动态段起始值: 2001:DB8:ABCD:0000:0000:0001:0000:0000

•动态段结束值: 2001:DB8:ABCD:0000:FFFF:FFFF:FFFF:FFFF

以上述举例的组合格式,我们拿华为配置更直观感受一下。

srv6网络 underlay Overlay srv6网络部署权威指南_sdn_04


R1上配置locator 前缀为1001::,前缀长度64bit,Static Opcode段占用32位,

下一行配置了Function,static opcode是::1,Function类型是End.X 表示根据指定出接口转发报文(下篇再详细分析Function类型)。locator的前缀和Opcode组成一个SRv6 SID:1001::1,对应的转发动作是将下一条网络指令(SID)更新到IPv6目的地址字段,并将报文从Eth1/0/0口转发出去。

srv6网络 underlay Overlay srv6网络部署权威指南_srv6_05

基于这样的指令,任何业务的端到端的连接需求都可以通过一个有序的指令集来表达。目前的Segment Routing技术就是通过在源节点封装一个有序的Segment List,指示网络在指定节点上执行对应的指令来实现网络的可编程。随着SRv6应用场景越来越多,这个指令集会不断演进和扩充。