SRv6第二弹:SRv6基本概念

1、SRv6原理简介

SRv6在头节点上对数据压入段路由扩展报文头(SRH,Segment Routing Header)来指导数据转发。

SRv6报文没有改变原有IPv6报文的封装结构,SRv6报文仍旧是IPv6报文,普通的IPv6设备也可以识别,所以说SRv6是Native IPv6技术。

SRv6 的Native IPv6特质使得SRv6设备能够和普通IPv6设备共同组网,对现有网络具有更好的兼容性。

2、IPv6 SRH介绍

RFC 8754中定义IPv6 SRH扩展头标准,在IPv6报文增加一个SRH扩展头。其格式如下:

3、SRv6 Segment介绍

SRv6 Segment是IPv6地址形式,通常也可以称为SRv6 SID(Segment Identifier)。

如图所示,SRv6 SID由Locator、Function和Arguments三部分组成,格式为Locator:Function:Arguments。注意Length(L+F+A) <= 128。当长度和小于128时,保留位用0补齐。

如果没有Arguments字段,格式则是Locator:Function。Locator占据IPv6地址的高比特位,Function部分占据IPv6地址的剩余部分。

SRv6 Segment:IPv6地址格式

SRv6 Segment: Locator

Locator是网络拓扑中的一个网络节点的标识,用于路由和转发报文到该节点,实现网络指令的可寻址。

Locator标识的位置信息由两个重要的属性:可路由和可聚合。节点配置Locator之后,系统会生成一条Locator网段路由,并且通过IGP在SR域内扩散。网络内其他节点通过Locator网段路由就可以定位到本节点,同时本节点发布的所有SRv6 SID也都可以通过该条Locator网段路由到达。

在华为设备配置中,如图配置前缀为2001:DB8:ABCD::,长度为64 bit:

SRv6 Segment: Function & Arguments

Function用来标识该指令要执行的转发动作。在SRv6网络编程中,不同的转发行为由不同的Function来标识,例如在RFC中定义了公认的End、End.X、End.DX4、End.DX6等。

例如End.x类似SR-MPLS中的Adjacency SID,用于标识某条链路,配置如图:

4、SRv6网络编程能力

SRv6 Segment List是128 Bits的IPv6地址形式,也称为SRv6 SID,由Locator、Function以及Argument组成。Argument参数可选,Locator,Function长度可变。

(1)Locator: 具有定位功能,一般要求SRv6域内唯一。

 Locator主要承担路由功能,设备节点配置Locator之后系统会生成一条Locator网段路由,并且通过IGP在SRv6域内扩散。网络里其他节点通过Locator网段路由就可以定位到本节点,同时本节点发布的所有SRv6 SID也都可以通过该条Locator网段路由到达。

(2)Function:代表设备的指令(Instruction),这些指令都由设备预先设定,Function部分用于指示SRv6 SID的生成节点进行相应的功能操作。Function通过Operation Code(Opcode)来显性的表征。

 Function标识设备的任何功能,执行的转发动作(本地转发行为和业务行为),如定义节点、链路、L2VPN业务、L3VPN业务等。

(3)Argument:该SID使用的参数,可选。

本地SID表:使能SRv6的节点维护一个本地SID(Local SID)表,该表包含所有在本节点生成的SRv6 SID信息,根据该表可以生成一个SRv6转发表(FIB)。SRv6 SID生成以后,一方面会加入本机的Local SID表,另一方面也可以通过路由协议对外发布。

5、SRv6 Locator规划分配原则

SID支持静态配置或者动态分配,end-op、end、end.x、end-dt4、end-dt6、end-dx2推荐静态配置 ,便于网络运维,其他的SID可以动态分配。

举例:locator DCPE   ipv6-prefix 2400:A420:F013:2:1:: 80 static 15 args 16

     |------Locator-----|-------Dynamic Opcode-------|-------Static Opcode-------|-Args-|

(1)Locator:字段对应ipv6-prefix ipv6-address参数,长度由prefix-length参数决定。

(2)Function:字段也称为Opcode,可以通过IGP协议动态分配,也可以通过opcode命令静态配置。配置Locator时可以通过static static-length参数指定静态段长度,静态段长度决定能够在该Locator下配置多少静态Opcode,IGP协议动态分配Opcode时会在静态段范围外申请,确保最终构成的SRv6 SID不会冲突。

(3)Args:字段由argsargs-length参数决定,Args字段在SRv6 SID里是可选的,由命令配置决定。

举例:locator DCPEipv6-prefix 2400:A420:F013:2:1:: 80 static 15 args 16

Locator是2400:A420:F013:2:1 :: ,长度80位、静态段占用15位、args字段占用16位、剩余的留给动态段,占用17位(128-80-15-16=17)。

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

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

1.静态段起始值: 2400:A420:F013:2:1:0000:0001:0

2.静态段结束值: 2400:A420:F013:2:1:0000:7FFF:0

3.动态段起始值: 2400:A420:F013:2:1:0000:8000:0

4.动态段结束值: 2400:A420:F013:2:1:FFFF:FFFF:0

SRv6 Locator查看

查看设备配置的“locator DCPE ipv6-prefix 2400:A420:F013:2:1:: 80 static 15 args 16

”,IPv6前缀80位,静态分配15位,args预留16位,剩余17位动态分配,具体信息如下:

6、带有SRH的IPv6详细报文格式

Next Header = 43 表明是Routing Extension Header,下一层的报文头,可能是IPv4、可能是IPv6、可能是二层头、也有可能是SRH头

Routing Type = 4 表明是SR Header,称作SR扩展头或者SRH

SRH中的重要字段:

Segments Left :剩余的路由段数,即在到达最终目的地之前仍需访问的显式列出的中间节点的数目。

Segment List[n]Segment List[n]: 表示分片列表中第n个分片的128位IPv6地址,从路径的最后一段开始编码。例如,Segment List [0]包含路径的最后一段。

IPv6地址,从路径的最后一段开始编码。例如,Segment List [0]包含路径的最后一段。

Optional TLV Objects: 可以作为Segment列表中所有SID的全局参数,如NSH元数据、HMACTLV、填充TLV等。

IPv6头部分为源地址和目的地址:

源地址表示为起始源IP地址,这个地址在转发过程中保持不变;

目的地址表示为每一跳的目的地址,此目的地址随着下一跳的变化而变化,为Segment List[n],

Segment List[n],随着Segment Left指针变化而变化,每经过下一跳,指针即SL指向Segment List,是从下至上,

即Segment List[n]是第一跳.....一直到Segment List【0】,在此过程中,IPv6头部的目的地址是随着Segment List变化而变化。

带有SRH的IPv6详细报文格式

7、SRv6典型功能

Endpoint 命名原则:

End:End 表达的是 Segment List --,终止当前指令的执行,开始执行下一个要执行的sid

 X: Cross-connect. 交叉互联,意即直接通过一个邻接链路或者邻接链路组转发,某个三层口转发。

 D: Decapsulation. 解封装,必须是SRH的最后一段,通常与业务相关。

 T: Table lookup. 查表,意即查找一张指定表,包括IPv4表和IPv6表,全局表项或者VPN表项。

 DX:表达的解封装后按照某个接口转发出去

SRv6 Segment类型介绍

SRv6 Segment命名规则

SRv6Segment的命名遵循一定规则,可以从命名组合中快速判断指令功能:

End:End是最基础的Segment Endpoint执行指令,表示中止当前指令,开始执行下一个指令。对应的转发动作是将SL值-1,并将SL指向的SID复制到IPv6报文头的目的地址中。

X:指定一个或一组三层接口转发报文。对应的转发行为是按照指定出接口转发报文。

T:查询路由表并转发报文。

D:解封装。移除IPv6报文头和与它相关的扩展报文头。

V:根据VLAN查表转发。

U:根据单播MAC查表转发。

M:查询二层转发表进行组播转发。

B6:应用指定的SRv6 Policy。

BM:应用指定的SR-MPLS Policy。

SRv6 Segment举例

End SID用于标识网络中的某个目的节点(Node)。类似SR-MPLS中的Node SID。End SID通过IGP协议扩散到其他网元,全局可见,本地有效

End.X SID表示三层交叉连接的Endpoint SID,用于标识网络中的某条链路。类似SR-MPLS中的Adjacency SID。End.X SID通过IGP协议扩散到其他网元,全局可见,本地有效。

End.DT4 SID表示PE类型的Endpoint SID,用于标识网络中的某个IPv4 VPN实例。End.DT4 SID对应的转发动作是解封装报文,并且查找IPv4 VPN实例路由表转发。End.DT4 SID在L3VPNv4场景使用,等价于IPv4 VPN的标签。End.DT4 SID可以通过静态配置生成,也可以通过BGP在Locator的动态SID范围内自动分配。

8、SRv6 Flavors附加行为

Flavors是为了增强SRv6 Segment而定义的附加行为。这些附加行为是可选项,它们将会增强SRv6 Segment的执行动作,满足更丰富的业务需求。

Segment Routing over IPv6 (SRv6) Network Programming中定义了以下附加行为,PSP(Penultimate Segment Pop of the SRH,倒数第二段弹出SRH)、USP(Ultimate Segment Pop of the SRH,倒数第一段弹出SRH)和USD(Ultimate Segment Decapsulation,倒数第一段解封装)。

Tips:常用的是PSP行为。

9、SRv6 Locator配置命令

以华为举例:

1.使能SRv6功能,并进入SRv6视图

配置segment-routing ipv6命令后,可以在SRv6视图下配置Locator和SRv6 SID,以生成SRv6 Local SID转发表项。

2.配置SRv6 SID Locator字段

SRv6 SID是IPv6地址形式,总计128位。SRv6 SID格式为Locator:Function:Args。其中:

•Locator字段对应ipv6-prefix ipv6-address参数,长度由prefix-length参数决定。

•Function字段也称为Opcode,可以通过IGP协议动态分配,也可以通过opcode命令静态配置。配置Locator时可以通过static static-length参数指定静态段长度,静态段长度决定能够在该Locator下配置多少静态Opcode,IGP协议动态分配Opcode时会在静态段范围外申请,确保最终构成的SRv6 SID不会冲突。

•Args字段由args args-length参数决定,Args字段在SRv6 SID里是可选的,由命令配置决定。

10、SRv6 SID配置命令

配置静态End SID的Opcode

End SID标识一个SRv6节点

静态配置End.X SID的Opcode

End.X SID全称为Layer-3 cross-connect,表示SRv6节点的三层邻接。所以在参数配置过程中需要指定接口和接口下一跳地址。

11、SRv6 Locator配置示例

SRv6 SID分为静态配置和动态配置两种方式。动态配置只需要配置locator命令,opcode由IGP动态分配。静态配置则手动配置对应类型SID的opcode。

Locator命令的参数关系简示如下:

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

本配置示例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节点

lRFC8754中定义了SR有三种类型节点:

源节点(SR Source Node):生成SRv6报文的源节点。

中转节点(Transit Node):转发SRv6报文但不进行SRv6处理的IPv6节点。

Endpoint节点(SR Segment Endpoint Node):接收并处理SRv6报文的任何节点,其中该报文的IPv6目标地址必须是本地配置的SID或者本地接口地址。

SRv6源节点

源节点将数据包引导到SRv6 Segment List中,如果SRv6 Segment List只包含单个SID,并且无需在SRv6报文中添加信息或TLV字段,则SRv6报文的目的地址字段设置为该SID。

源节点可以是生成IPv6报文且支持SRv6的主机,也可以是SRv6域的边缘设备。

源节点行为

SRv6源节点负责将流量引导到SRv6 Policy中,并执行可能的SRH封装。以下列举了SRv6源节点封装报头的几种模式:

Red和非Red区别;

SRH扩展头本身占用长度较长,且SRv6源节点在封装SRH时,已经将第一个需要处理的SID封装到了IPv6报文头的目的地址字段,所以SRH中第一个SID对于转发已经没有意义。为了减小SRH扩展头的大小,SRv6源节点在封装SRH时,可以采用Reduced SRH模式。Reduced SRH模式就是指不封装第一个需要处理的SID到SRH扩展头。如果SRH本身只有一个SID,那么按照标准规定,可以不封装SRH扩展头。

中转节点

中转节点是在SRv6报文转发路径上不参与SRv6处理的IPv6节点,中转节点只执行普通的IPv6报文转发。

当节点收到SRv6报文后解析报文的IPv6目的地址字段。如果IPv6目的地址不是本地配置的SRv6 SID也不是本地接口地址,节点则将SRv6报文当做普通IPv6报文查询路由表执行转发,不处理SRH。

中转节点可以是普通的IPv6节点,也可以是支持SRv6的节点。

Endpoint节点

在SRv6报文转发过程中,节点接收报文的IPv6目的地址是本地配置的SID,则节点被称为Endpoint节点。

例如:R3使用报文的IPv6目的地址FC03::3查找Local SID表,命中到End SID,随后R3将报文SL减1,同时将SL=1的SID做为报文目标IPv6地址,并查路由表转发出去。

Endpoint Node在数据的转发路径上可以有多个,每个Endpoint Node都会为报文提供转发,封装和解封装等服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值