Segment Routing IPv6
1. Segment Routing IPv6特性描述
1.1. Segment Routing IPv6介绍
1.1.1. 定义
SRv6(Segment Routing IPv6,基于IPv6转发平面的段路由)是基于源路由理念而设计的在网络上转发IPv6数据包的一种协议。SRv6通过在IPv6报文中插入一个路由扩展头SRH(Segment Routing Header),在SRH中压入一个显式的IPv6地址栈,并由中间节点不断的进行更新目的地址和偏移地址栈的操作来完成逐跳转发。
1.1.2. 目的
未来的网络是面向5G时代的网络。面对5G,承载网也需要做出相应的调整。化繁为简,低时延,SDN/NFV化是后续的主要发展方向。
为了5G网络的进一步发展,用户希望能够借用IPv6的地址更简单的实现VPN。SRv6技术就是采用现有的IPv6转发技术,通过扩展IPv6报文的头域,实现类似标签转发的处理。SRv6将一些IPv6地址定义成实例化的SID(Segment ID),每个SID有着自己显式的作用和功能,通过不同的SID操作,实现简化的VPN,以及灵活的路径规划。
1.1.3. 优点
- 简化网络配置,更简易的实现VPN。
SRv6基于IPv6转发,不使用MPLS技术,完全兼容现有IPv6网络。中间Transit节点可以不支持SRv6,按照正常路由转发含有SRH的IPv6报文。
- 便于IPv6转发路径的流量调优。
各种服务类型的SID搭配使用,头节点可以灵活规划显式路径,调整对应的业务流量。
- 提供高保护率的FRR保护能力。
在SRv6技术的基础上结合RLFA(Remote Loop-free Alternate)FRR算法,形成高效的TI-LFA(Topology-Independent Loop-free Alternate)FRR算法,原理上支持任意拓扑保护,能够弥补传统隧道保护技术的不足。
1.2. Segment Routing IPv6原理描述
1.2.1. SRv6基本原理
1.2.1.1. SRH
IPv6报文是由IPv6标准头+扩展头(0~n个)+负载Payload组成。为了基于IPv6转发平面实现Segment Routing IPv6(SRv6),新增加一种IPv6扩展头,称作SRH(Segment Routing Header)扩展头,该扩展头指定一个IPv6的显式路径,存储的是IPv6的Segment List信息,其作用与SR MPLS里的Segment List一样。
头节点在IPv6报文增加一个SRH扩展头,中间节点就可以按照SRH扩展头里包含的路径信息转发。SRH扩展头的格式如下图所示。

SRH扩展头字段解释
| 字段名 | 长度 | 含义 |
|---|---|---|
| Next Header | 8比特 | 标识紧跟在SRH之后的报文头的类型。常见的几种类型如下:4:IPv4封装 41:IPv6封装 43:IPv6-Route 58:ICMPv6 59:Next Header为空 |
| Hdr Ext Len | 8比特 | SRH头的长度。指不包括前8字节(前8字节为固定长度)的SRH的长度。 |
| Routing Type | 8比特 | 标识路由头部类型,SRH Type是4。 |
| Segments Left | 8比特 | 到达目的节点前仍然应当访问的中间节点数。 |
| Last Entry | 8比特 | 在段列表中包含段列表的最后一个元素的索引。 |
| Flags | 8比特 | 数据包的一些标识。 |
| Tag | 16比特 | 标识同组数据包。 |
| Segment List[0]~Segment List[n] | 128比特 | 段列表,段列表从路径的最后一段开始编码。Segment List是IPv6地址形式。Segment List[0]是路径的倒数第一个Segment;Segment List[1]是路径的倒数第二个Segment;...Segment List[n-1]是路径的第二个Segment;Segment List[n]是路径的第一个Segment; |
- IPv6 Destination Address:IPv6报文的目的地址,简称IPv6 DA。在普通IPv6报文里,IPv6 DA是固定不变的。在SRv6中,IPv6 DA仅标识当前报文的下一个节点,是不断变换的。
- <Segment List [0], Segment List [1], ..., Segment List [n-1], Segment List [n]>:SRv6报文的段列表,类似于SR-MPLS中的MPLS标签栈信息,在入节点生成。Segment List [n]是SRv6路径上第一个需要被处理的Segment List;Segment List [n-1]是第二个;Segment List [1]是倒数第二个;Segment List [0]是倒数第一个。
1.2.1.2. SRH的处理过程
如图2-3所示,在SRv6中,每经过一个SRv6节点,Segments Left(SL)字段减1,IPv6 DA信息变换一次。Segments Left和Segment List字段共同决定IPv6 DA信息。
- 如果SL值是n,则IPv6 DA取值就是Segment List [n]的值。
- 如果SL值是n-1,则IPv6 DA取值就是Segment List [n-1]的值。
... - 如果SL值是1,则IPv6 DA取值就是Segment List [1]的值。
- 如果SL值是0,则IPv6 DA取值就是Segment List [0]的值。
图2-3 SRH的处理过程
从以上描述可见,节点对于SRv6 SRH是从下到上进行逆序操作,这一点与SR-MPLS有所不同。
SRv6与SR-MPLS的另外一个不同是:SRv6 SRH中的Segment在经过节点处理后也不会弹出。这里主要有3个原因:一是最早的IPv6的路由扩展头(RH)设计跟MPLS没有太多关联,当时的设计并没有弹出这个选项;二是MPLS每一个标签相对独立,并且位于顶部,可以直接弹出,SRv6 Segment在IPv6包头后面的SRH扩展头中,并且与其他扩展头信息存在关联(如安全加密和校验等),不能简单地弹出;三是因为没有弹出,SRv6报文头保留了路径信息,可以做路径回溯。另外有一些创新考虑对SRH中的保留的Segment进行重用,做一些新的功能扩展。
1.2.2. SRv6 Segment
SRv6 Segment是IPv6地址形式,通常也可以称为SRv6 SID (Segment Identifier)。如图2-4所示,SRv6 SID由Locator和Function两部分组成,格式是Locator:Function,其中Locator占据IPv6地址的高比特位,Function部分占据IPv6地址的剩余部分。
-
Locator具有定位功能,所以一般要在SR域内唯一,但是在一些特殊场景,比如Anycast保护场景,多个设备可能配置相同的Locator。节点配置Locator之后,系统会生成一条Locator网段路由,并且通过IGP在SR域内扩散。网络里其他节点通过Locator网段路由就可以定位到本节点,同时本节点发布的所有SRv6 SID也都可以通过该条Locator网段路由到达。
-
Function代表设备的指令(Instruction),这些指令都由设备预先设定,Function部分用于指示SRv6 SID的生成节点进行相应的功能操作。
-
Arguments部分,此时SRv6 SID的格式变为Locator:Function:Arguments,Arguments占据IPv6地址的低比特位,通过Arguments字段可以定义一些报文的流和服务等信息。当前一个重要应用是EVPN VPLS的CE多归场景,转发BUM流量时,利用Arguments实现水平分割,具体请参考水平分割。
Function和Arguments都是可以定义的,这也反映出SRv6 SID的结构更有利于对网络进行编程。
1.2.2.1. 本地SID表
使能SRv6的节点维护一个本地SID(Local SID)表,该表包含所有在本节点生成的SRv6 SID信息,根据该表可以生成一个SRv6转发表(FIB)。Local SID表有以下用途:
-
定义本地生成的SID,例如End.X SID。
-
指定绑定到这些SID的指令。
-
存储和这些指令相关的转发信息,例如出接口和下一跳等。
SRv6 SID有很多类型,不同类型的SRv6 SID代表不同的功能。 -
End SID
-
End.X SID
-
End.DT4 SID
-
End.DT6 SID
-
End.DX6 SID
-
End.DX2 SID和End.DX2L SID
1.2.3. SRv6节点
1.2.3.1. SRv6节点角色
在SRv6网络中存在多种类型的节点角色,基本上分为三类:
- SRv6源节点(Source SRv6 Node):生成SRv6报文的源节点。
- Transit节点/中转节点(Transit Node):转发SRv6报文但不进行SRv6处理的IPv6节点。
- Endpoint节点(SRv6 Segment Endpoint Node):接收并处理SRv6报文的任何节点,其中该报文的IPv6目标地址必须是本地配置的SID或者本地接口地址。
节点角色与其在SRv6报文转发中承担的任务有关。同一个节点可以是不同的角色,比如节点在某个SRv6路径里可能是SRv6源节点,在其他SRv6路径里可能就是Transit节点或者Endpoint节点。
如图2-15所示,生成SRv6报文的节点是SRv6源节点,只需进行普通IPv6报文处理转发的节点是Transit节点,需要处理SRv6 SID和SRH的节点是Endpoint节点。
1.2.3.2. EndPoint节点行为
每一个SID都会与一个指令绑定,用于指明在处理SID时需要执行的动作。SID可以在SRH中显式地指定使用,为数据包提供转发、封装和解封装等服务。与SID绑定的指令需要由SRv6 Endpoint节点执行,称为End系列指令。
1.2.3.3. 源节点行为
SRv6源节点负责将流量引导到SRv6 TE Policy,并进行可能的SRH扩展报文头封装。下面介绍SRv6源节点封装扩展头的几种模式,如表2-2所示。
| 源节点行为 | 功能简述 |
|---|---|
| H.Insert | 为接收到的IP报文插入SRH扩展报文头,并查表转发 |
| H.Encaps | 为接收到的IP报文封装外层IPv6报文头与SRH,并查表转发 |
| H.Encaps.L2 | 为接收到的二层报文封装外层IPv6报文头和SRH,并查表转发 |
1.2.3.4. Flavors附加行为
除了EndPoint节点行为和Transit节点行为之外,还有几种为了增强End系列指令而定义的附加行为。这些附加行为是可选项,它们将会改变End系列指令的执行动作,满足更丰富的业务需求。这些常见附加行为及其功能如表2-3所示。
表2-3 Flavors附加行为
| 附加行为 | 功能简述 |
|---|---|
| PSP | 倒数第二段执行SRH移除操作(penultimate Segment POP of the SRH,简称PSP),其功能类似于MPLS转发机制里的倒数第二跳弹出PHP(Penultimate Hop Popping),可以提升转发效率。 |
| USP | 最后一段执行SRH移除操作(Ultimate Segment POP of the SRH,简称USP)。 |
1.3. SRv6 TE Policy
1.3.1. 定义
SRv6 TE Policy是在SRv6技术基础上发展的一种新的隧道引流技术。SRv6 TE Policy路径表示为指定路径的段列表(Segment List),称为SID列表(Segment ID List)。每个SID列表是从源到目的地的端到端路径,并指示网络中的设备遵循指定的路径,而不是遵循IGP计算的最短路径。如果数据包被导入SRv6 TE Policy中,SID列表由头端添加到数据包上,网络的其余设备执行SID列表中嵌入的指令。
SRv6 TE Policy包括以下三个部分:
- 头端(HeadEnd):SRv6 TE Policy生成的节点。
- 颜色(Color):SRv6 TE Policy携带的扩展团体属性,携带相同Color属性的BGP路由可以使用该SRv6 TE Policy。
- 尾端(Endpoint):SRv6 TE Policy的目的地址。
Color和Endpoint信息通过配置添加到SRv6 TE Policy,业务网络头端通过路由携带的Color属性和下一跳信息来匹配对应的SRv6 TE Policy实现业务流量转发。Color属性定义了应用级的网络SLA策略,可基于特定业务SLA规划网络路径,实现业务价值细分,构建新的商业模式。
1.3.2. SRv6 TE Policy模型
SRv6 TE Policy的模型和SR-MPLS TE Policy完全相同,如图2-48所示。一个SRv6 TE Policy可以包含多个候选路径(Candidate Path)。候选路径携带优先级属性(Preference)。优先级最高的有效候选路径作为SRv6 TE Policy的主路径。
一个候选路径可以包含多个Segment List,每个Segment List携带Weight属性。每个Segment List都是一个显式SID栈,Segment List可以指示网络设备转发报文。多个Segment List之间可以形成负载分担。
1.4. SRv6 SFC
1.4.1. SFC定义
业务功能链SFC(Service Function Chain)是一种给应用层提供有序服务的技术。SFC用来将网络设备上的服务在逻辑层面上联接起来,从而形成一个有序的服务组合。SFC通过在原始报文中添加业务链路径信息来实现报文按照指定的路径依次经过服务设备。
数据报文在网络中传递时,往往需要经过各种各样的服务节点,从而保证网络能够按照预先的规划为用户提供安全、快速、稳定的服务。这些服务节点包括熟知的防火墙FW(Firewall)、入侵防御系统IPS(Intrusion Prevention System)、应用加速器和NAT等,网络流量需要按照业务逻辑所要求的既定顺序经过这些服务节点,才能实现所需要的业务。
1.4.2. SFC基本概念
根据是否可以感知SRv6封装,服务节点SF(Service Function)分为SRv6-aware SF和SRv6-unaware SF:
- SRv6-aware SF能够识别收到的SRv6报文并对其进行处理,这种情况直接将SF的SID编排到业务链路径中即可实现业务链;
- SRv6-unaware SF不识别SRv6报文,收到后将其丢弃,这种场景需要配置SF代理才能实现业务链。
| 概念 | 描述 |
|---|---|
| SFC域 | SFC域是指一个包含了SFC设备的区域。 |
| 分类器SC(Service Classifier) | SC位于SFC域的边界入口,报文进入SFC域后会首先进行流量分类,分类的粒度由分类器能力和SFC策略决定,分类规则可以粗略也可以详细。 |
| 业务链转发节点SFF(Service Function Forwarder) | SFF用于将从网络中收到的报文转发到SFF关联的若干个SF上,转发的依据就是SRv6封装的信息。SF处理后将报文再返回给SFF,SFF最终决定是否将报文发回网络中。由于SF本身不支持处理SRv6报文,所以还需要一个SF代理(SF Proxy)。SF Proxy代表SF处理来自SFF的报文,删除SRv6封装信息,通过本地逻辑组件将报文发给SF,也接收从SF发回的报文,重新为之添加SRv6封装信息。在图2-75中,SFF充当SF代理角色。 |
| 业务链路径SFP(Service Function Path) | 根据配置计算出的一条报文路径,可以精确到规定出每一个SF的位置。在SRv6网络中,一个SRv6 TE Policy可以作为一个业务链路径SFP。 |
SFC基本概念表
1.4.2.1. SFC基于SRv6 TE Policy的转发原理
SRv6 TE Policy通过Segment List指示网络中的设备遵循指定的路径转发,非常适合业务链场景。如果数据包被重定向到SRv6 TE Policy中,则SRv6 TE Policy的Segment List由头端添加到数据包上,网络的其余设备执行Segment List中嵌入的指令。
如图2-76所示,SF1和SF2是SRv6-unaware SF。为了实现业务链,需要分别在SFF1和SFF2配置SF Proxy功能,并且为SF1 Proxy和SF2 Proxy分配SRv6 SID。分类器SC上基于SF1 Proxy SID,SF2 Proxy SID和Tail End SID组成一个SRv6 TE Policy的Segment List,SRv6 TE Policy作为业务链路径。
1.4.2.2. 详细的数据转发原理描述如下:
- 分类器SC从用户网络接收到原始IPv4报文,通过匹配五元组等分类信息进行分类,分类后的流量被重定向到SRv6 TE Policy中。分类器根据SRv6 TE Policy进行SRv6报文封装,SRv6报文目的地址是SF1 Proxy SID。在图2-76中,SRH信息里除了SRv6 TE Policy路径信息以外,还有代表VPN业务或公网业务的Tail End.DT4 SID。
- SFF1收到报文以后,执行SF1 Proxy SID对应指令,解封装报文,然后将原始报文发送到SF1进行处理。
- SF1处理完报文以后,将报文发回给SFF1。
- SFF1根据报文的入接口(SFF上与SF相连的接收IPv4报文的接口)信息,查找配置信息,然后依据配置重新添加SRH信息,进行SRv6封装,此时SRv6报文目的地址是SF2 Proxy SID。
- SFF2收到报文以后,执行SF2 Proxy SID对应指令,解封装报文,然后将原始报文发送到SF2进行处理。
- SF2处理完报文以后,将报文发回给SFF2。
- SFF2根据报文的入接口(SFF上与SF相连的接收IPv4报文的接口)信息,查找配置信息,然后依据配置重新添加SRH信息,进行SRv6封装,此时SRv6报文目的地址是Tail End SID。报文沿着IGP最短路径转发给Tail End节点。
- Tail End节点收到SRv6报文后,发现报文目的地址是自己的End SID,所以执行该End SID相关的指令,解封装报文,SL减1,变为0,同时更新IPv6目的地址字段。当前报文IPv6目的地址字段是Tail End.DT4 SID,Tail End节点使用Tail End.DT4 SID查找My Local SID表,执行Tail End.DT4 SID相关的指令,将原始IPv4报文转发到对应的IPv4 VPN或者公网。
1.5. Segment Routing IPv6术语与缩略语
| 缩略语 | 英文全称 | 中文全称 |
|---|---|---|
| CSPF | Constraint Shortest Path First | 约束最短路径优先 |
| FRR | Fast Re-Route | 快速重路由 |
| MSD | Maximum SID Depth | 最大SID深度 |
| NETCONF | Network Configuration Protocol | 网络配置协议 |
| PHP | Penultimate Hop Popping | 倒数第二跳弹出 |
| PSP | Penultimate Segment POP of the SRH | SRH信息倒数第二段弹出 |
| SBFD | Seamless Bidirectional Forwarding Detection | 无缝双向转发检测 |
| SID | Segment ID | 段ID |
| SR | Segment Routing | 段路由 |
| SRv6 | Segment Routing IPv6 | IPv6段路由 |
| SRH | Segment Routing Header | 段路由扩展头 |
| TE | Traffic Engineering | 流量工程 |
| TI-LFA FRR | Topology-Independent Loop-free Alternate FRR | 拓扑无关无环备份FRR |
| USP | Ultimate Segment POP of the SRH | SRH信息倒数第一段弹出 |
| SRv6 BE | Segment Routing IPv6 Best Effort | IGP使用最短路径算法计算得到的最优SRv6路径 |
| TI-LFA | Topology Independent LFA | 与拓扑无关的无环路备份 |
| LSP | Label Switched Path | 一个FEC在MPLS网络中经过的路径称为标签交换路径LSP,是从入口到出口的一个单向路径 |
2. Segment Routing IPv6配置
2.1. SRv6 BE 应用
- L3VPNv4 over SRv6 BE
- EVPN L3VPN over SRv6 BE
- EVPN VPWS over SRv6 BE
- EVPN VPLS over SRv6 BE
- 公网IPv4 over SRv6 BE
- 公网IPv6 over SRv6 BE
- L3VPNv4 HoVPN over SRv6 BE
目前城域网的典型结构是三层模型:核心层、汇聚层、接入层。要在分层结构的网络中部署VPN功能,实现私网数据端到端传送,并提高整个网络的性能和可扩展性,需要采用VPN分层部署方案,HoVPN(Hierarchy of VPN)是常用的解决方案之一。
在网络演进过程中,核心层和汇聚层的网络可能会采用不同转发方式,即SRv6和MPLS。因此,在使用公网承载L3VPNv4私网数据,并使用HoVPN方案分层部署VPN时,私网数据跨公网转发的路径有3种组合情况,如图2-87所示,即:L3VPNv4 over MPLS拼接SRv6、L3VPNv4 over SRv6拼接MPLS和L3VPNv4 over SRv6拼接SRv6。
2.2. SRv6 TE 应用
SRv6 TE Policy是在SRv6技术基础上发展的一种新的隧道引流技术。
2.2.1. 前置条件
在配置SRv6 TE Policy之前,需完成以下任务:配置IGP协议,保证各节点在网络层互通。
2.2.2. 背景信息
SRv6 TE Policy是在SRv6技术基础上发展的一种新的隧道引流技术。SRv6 TE Policy路径表示为指定路径的段列表(Segment List),称为SID列表(Segment ID List)。每个SID列表是从源到目的地的端到端路径,并指示网络中的设备遵循指定的路径,而不是遵循IGP计算的最短路径。如果数据包被导入SRv6 TE Policy中,SID列表由头端添加到数据包上,网络的其余设备执行SID列表中嵌入的指令。
SRv6 TE Policy包括以下三个部分:
- 头端:SRv6 TE Policy生成的节点。
- Color:SRv6 TE Policy携带的扩展团体属性,携带相同Color属性的BGP路由可以使用该SRv6 TE Policy。
- 尾端(End Point):SRv6 TE Policy的目的地址。
Color和End Point信息通过配置添加到SRv6 TE Policy。SRv6 TE Policy在算路时按照代表业务SLA要求的Color属性计算转发路径,业务网络头端通过路由携带的Color属性和下一跳信息来匹配对应的SRv6 Policy实现业务流量转发。Color属性定义了应用级的网络SLA策略,可基于特定业务SLA规划网络路径,实现业务价值细分,构建新的商业模式。
2.2.3. 配置SRv6 SID(localSID)
只有为网络中的邻接和节点分配SID以后,头节点才可以进行网络路径的编排。SRv6 TE Policy可以通过两种方式生成,即SRv6 TE Policy(静态配置)、SRv6 TE Policy(控制器动态下发)。SRv6 Policy可以在转发器上静态配置(CLI/Netconf),也可以由控制器上动态生成然后传递给转发器(例如使用BGP)。相对来说,动态方式更利于网络自动化部署。
- 静态配置SRv6 TE Policy场景:如果使用动态SID,则SID在IGP协议重启后可能发生变化,此时静态SRv6 TE Policy也需要人工介入做相应的调整才能保持Up,在现网中实际无法大规模部署,基于上述原因,建议用户手工配置SID,禁止使用动态SID。
- 控制器动态下发SRv6 TE Policy场景:也建议用户手工配置SID。虽然在此场景,控制器可以通过BGP-LS协议感知SID的变化,但是如果使用IGP动态生成SID,则SID随机变化,不利于日常维护和故障定位。
SRv6 TE Policy可以包含多个候选路径(Candidate Path),候选路径由Segment List定义。配置SRv6 TE Policy需要使用End SID和End.X SID等。SID可以通过手工静态配置,也可以由IGP动态生成。
2.2.4. 配置TE属性
配置链路的TE属性,TE属性会传递给IS-IS,IS-IS发布给BGP-LS,BGP-LS传递给控制器,这样控制器在计算SRv6 TE Policy隧道时可以基于链路的TE属性进行调整。在BGP-LS协议中存在对应Node、Link、Prefix三种NLRI封装格式和其它链路状态相关的属性值。这三种NLRI分别携带网络节点信息、链路信息和前缀信息。
-
BGP-LS(Link-State)是网络拓扑收集的一种方式,可使拓扑收集更加简单高效。通过BGP协议来传递IGP链路状态的一种BGP多协议扩展,通过BGP-LS,可以很容易获取到多IGP域的相关拓扑信息。常见的链路状态协议就两种: OSPF和ISIS。必须在转发器与控制器之间配置BGP-LS能力,才能完成拓扑上报。
-
TE的链路属性主要包括:
- 链路的带宽:如果要限定SRv6 TE Policy某个路径的带宽,必须配置此属性。
- 链路的TE Metric:控制器计算SRv6 TE Policy的时候,既可以采用IGP的度量,也可以单独配置链路的TE度量,使得SRv6 TE Policy的路径计算能够更加独立于IGP,从而更灵活的控制隧道的路径。
- 管理组和亲和属性:SRv6 TE Policy的亲和属性决定隧道使用的链路属性,亲和属性与链路管理组配合,确定SRv6 TE Policy可以使用哪些链路。
- SRLG:共享风险链路组SRLG(Shared Risk Link Group)是一组共享一个公共的物理资源(例如共享一根光纤)的链路。同一个SRLG的链路具有相同的风险等级,即如果SRLG中的一条链路失效,组内的其他链路也失效。SRLG主要用在CR-LSP热备份和TE FRR组网中增强SRv6 TE Policy隧道的可靠性。共享相同物理资源的多个链路具有相同的风险。例如,当主接口Down时,其子接口也通常变为Down,所以子接口和主接口通常具有相同的风险。如果SRv6 TE Policy主路径所在的链路和其备份路径所在链路具有相同的风险,则主路径变为Down时,备份路径也很可能变为Down。
bgp 2000
router-id 1.1.1.1
peer 12.0.0.230 as-number 2000
peer 192.168.200.141 as-number 2000
peer 192.168.200.141 connect-interface M-GigabitEthernet0/0/0
#
address-family link-state
peer 12.0.0.230 enable
peer 192.168.200.141 enable
peer 192.168.200.141 reflect-client
//将link-state发往SDN控制器200.141
ospf 1 router-id 1.1.1.1
distribute bgp-ls
// 将OSPF 的 LSDB 信息传递给 BGP link-state address-family
area 0.0.0.0
network 11.11.11.11 0.0.0.0
network 12.0.0.0 0.0.0.255
2.2.5. 配置SRv6 TE Policy(policy)
SRv6 TE Policy用来引导流量通过SRv6 TE网络。每个SRv6 TE Policy可以有多个候选路径,每个候选路径有不同的优先级,通过优先级可以选择一个最优的有效候选路径作为主路径,优先级次高的有效候选路径做为备份路径。
通过控制器下发SRv6 TE Policy可以提高网络自动化部署SRv6 TE Policy的能力。采用控制器下发SRv6 TE Policy主要过程如下:
- 控制器通过BGP-LS收集网络拓扑和标签等信息。
- 控制器与头端转发器之间建立IPv6 SR Policy地址族的BGP邻居。
- 控制器计算SRv6 TE Policy路径,然后通过BGP邻居下发给头端设备。头端设备生成SRv6 TE Policy表项。
2.2.6. 配置BGP扩展团体属性
通过路由策略对路由增加扩展团体属性Color,携带Color的路由可以根据Color与下一跳地址迭代SRv6 TE Policy。路由着色的过程如下:
- 配置路由策略,匹配特定路由,设置特定的Color属性。
- 将路由策略应用到BGP邻居,或者应用到整个VPN实例,可以做为入口策略,也可以做为出口策略。
2.2.7. 配置SRv6 引流(steering)
通过配置引流特性,可以使路由迭代到SRv6 TE Policy,利用SRv6 TE Policy里的路径信息指导数据转发。
SRv6 TE Policy配置完成以后,需要将业务流量引入SRv6 TE Policy上进行转发,这个过程称为引流。当前可以使用SRv6 TE Policy的业务包括BGP L3VPN和EVPN业务等。本节介绍相关业务如何通过隧道策略迭代到SRv6 TE Policy。
3. 参考
4. 华为SRv6视频
4.1. SRv6概述——产生背景
- SDN:运营商网络管道化,业务驱动网络成为共识
- 云网融合:云网融合带来新变化,传统MPLS TE网络配置复杂,消耗设备资源多,无法部署大规模网络,设备中心难以接受;希望内部高效调优;
- NFV:给网络带来新变化,希望借助SR进行网络编程;
- IPv6:IPv6发展加速,5G/IoT/云化业务的发展,需要更多IP地址;终端/OTT厂商等厂商的IPv6化正在加速,业界多个运营商希望构建纯IPv6网络;
4.2. SRv6优势
4.2.1. 智慧
网络路径编程,业务编程,转发行为可以编程
SRv6是完全基于SDN的技术,能跨越APP和网络鸿沟,将APP中应用程序信息带入到网络中;
4.2.2. 简单
SRv6是基于IGP和BGP扩展来实现的,没有MPLS标签;不使用LDP和RSVP-TE协议,数据中心内部引入之后,只需要TOR交换机支持IPV6即可;
NFV中引入SRv6,可以轻松实现SFC业务链;
4.2.3. 纯IP化
SRv6基于原生IPV6进行转发,可以完全融入现有IPv6网络中,网络中间节点不需要支持IPv6,不需要规模升级就可支持新业务;
4.3. SRv6数据包结构
为了在IPv6报文中实现SRv6转发,引入了一个SRv6扩展头(Routing Type为4),叫Segment Routing Header(SRH),用于进行Segment的编程组合形成SRv6路径。
图2是SRv6的报文封装格式。绿色的是IPv6报文头,棕色部分是SRH,蓝色是报文负荷。

IPv6 Next Header字段取值为43,表示后接的是IPv6路由扩展头。Routing Type = 4,表明这是SRH的路由扩展头,这个扩展头里字段解释如下:

4.4. SRH运行原理
SRv6具有比SR-MPLS更强大的网络编程能力。SRv6的网络可编程性体现在SRH扩展头中。其中关键字段Segment List有序队列构成了显示路径,Segment Left是指针,表示当前活跃的Segment List,初始值为0,最大值为List最大值减1;按照序号又大到小依次处理,SegmentList[0]最后处理
IPv6 DA由Segment List和Segment Left共同决定;当Segment Left值为2,将SegmentList[2]的值复制到ipv6 DA中;
转发过程如下:
- 转发层面如果不支持SRv6,则不需要处理扩展,只需要根据IPv6DA地址查找IPv6路由表,依靠最长匹配原则,进行转发;
- 如果支持SRv6,则需要处理SRH,将SL进行减1操作,然后将指针偏移到新的活跃段;之后将新的segmentList复制到IPv6 DA中,然后向下个节点转发;当SL减为0,节点可弹出报文头,然后对报文进行下一步处理;
4.5. SRv6三层编程空间
SRH中有三层编程空间:

第一部分是SegmentList序列。如前所述,它可以将多个Segment组合起来,形成SRv6路径。这跟MPLS标签栈比较类似。
第二部分是是紧接着Segment序列之后的可选TLV(Type-Length-Value)。报文在网络中传送时,需要在转发面封装一些非规则的信息,它们可以通过SRH中TLV的灵活组合来完成。
第三部分是对SRv6 SID的128比特的运用。众所周知,MPLS标签封装主要是分成四个段,每个段都是固定长度(包括20比特的标签,8比特的TTL,3比特的Traffic Class和1比特的栈底标志)。而SRv6的每个Segment是128比特长,可以灵活分为多段,每段的长度也可以变化,由此具备灵活编程能力。
SRv6通过三层编程空间,具备了更强大的网络编程能力,可以更好地满足不同的网络路径需求。
4.6. SRv6 Segment ID及其动作
与SR MPLS的Segment不同,SRv6的Segment有128bits,而且分成了三部分:

- Locator(位置标识):网络中分配给一个网络节点的标识,可以用于路由和转发数据包。Locator有两个重要的属性,可路由和聚合。在SRv6 SID中Locator是一个可变长的部分,用于适配不同规模的网络。
- Function(功能):设备分配给本地转发指令的一个ID值,该值可用于表达需要设备执行的转发动作,相当于计算机指令的操作码。在SRv6网络编程中,不同的转发行为由不同的功能ID来表达。一定程度上功能ID和MPLS标签类似,用于标识VPN转发实例等。
- Args(变量):转发指令在执行的时候所需要的参数,这些参数可能包含流,服务或任何其他相关的可变信息。
从SRv6 SID的组成来看,SRv6同时具有路由和MPLS两种转发属性,可以融合两种转发技术的优点。
4.7. Function动作类型
不同类型的SID对应转发行为不同,可以通过编程新的SID满足用户新的业务诉求,即转发行为/业务可编程。
- End SID : 代表网络中转发节点;
给设备指令是处理SRH,更新IPv6目的地址字段,然后查找IPv6路由表进行报文转发。 - End.X SID : 代表网络中临接关系;
给设备指令是处理SRH,更新IPv6目的地址字段,然后从End.X SID指定的出接口转发报文。 - End.DT4 SID : PE类型SID,主要用在IPv4 L3VPN场景;
给设备指令是解封装报文,去除外层的IPv6和SRH报文头,然后根据剩余报文里的目的地址查找IPv4 VPN实例路由表进行转发。 - End.DT6 SID : PE类型SID,主要用在IPv6 L3VPN场景;
给设备指令是解封装报文,去除外层的IPv6和SRH报文头,然后根据剩余报文里的目的地址查找IPv6 VPN实例路由表进行转发。 - End.DX2 SID : 主要用在L2VPN/EVPN VPWS场景;
给设备指令是解封装报文,去除外层的IPv6和SRH报文头,将剩余报文从该SID绑定的出接口转发报文。




4.8. SRv6单自治域应用
- SRH中以一个VPN SID即完成数据转发,没有SRH路径信息SegmentList[],叫做SRv6 BE(Best Effort);
- 如果有SRH路径信息,则叫做SRv6 TE(Traffic Effort);
4.8.1. SRv6业务应用-L3VPN SRv6 BE
CE1-PE1-P-PE2-CE2
P设备不配置LocalSID
4.8.1.1. 第一阶段:路由发布阶段
首先需要在公网进行一些必要配置:
-
先公网配置IGP,保证路由互通;
-
在PE1和PE2之间配置BGP邻居关系;
-
需要在PE1,PE2上配置VPN实例,接入双方的CE1和CE2;
-
配置双方SRv6;例如配置PE设备Locator,即loop A2:1::/64,且设备生成其路由,路由通过IGP对外扩散;IPv6路由互通;
-
PE2上VPN实例配置SID,例如A2:1::B100, 配置为End.DT4 SID;
-
私网路由发布,CE2向PE2发布一条普通IPv4路由;
-
PE2收到后,转换为VPNv4路由向PE1发布,发布过程中会携带VPN SID,传递到PE1;
-
PE1收到路由后,会进行路由交叉,交叉到CE1所属的VPN实例,然后向CE1发布,这样CE1就有CE2上路由;
4.8.1.2. 第二阶段:数据转发阶段
- CE1向PE1发送一个普通IPv4报文,封装自己源地址和目的地址;
- PE1收到报文后,拿报文目的地址在VPN实例路由里面查表,命中到一个路由和SRv6 SID A2:1::B100;PE1直接使用该SID进行数据封装,VPN_SID+SA_DA+PKT包结构;
- 封装完SID后PE1查表,首先查my LocalSid表,结果没有命中;
- 查普通IPv6路由表并命中A2:1::/64这条路由,该路由由PE2设备->P->PE1发布过来,PE1需要将报文对外发送给P;
- P设备执行同样过程,将报文发送给P2;
- PE2拿报文里面的VPN SID A2:1::B100去查my LocalSid表,命中并执行相关指令;即预设的B100 End.DT4指令执行动作,去除IPv6和SRH报头,使用内层的目的地址,去End.DT4指定VPN实例路由表中查表,命中到路由表项,然后数据报文转发到CE2;此时报文已是普通IPv4报文;
4.8.2. SRv6业务应用-L3VPN SRv6 TE
与SRv6 BE类似
CE1-PE1-P-PE2-CE2
A1:1::/64(PE1)-A3:1::/64(P)-A2:1::/64(PE2)
P设备需要配置LocalSID,End转发节点。
PE1到PE2的TE隧道可以表示为SegmentList[2] A2:1::1<-A3:1::1
4.8.2.1. 第一阶段:路由发布阶段
4.8.2.2. 第二阶段:数据转发阶段
- CE1向PE1发送一个普通IPv4报文,封装自己源地址和目的地址;
- PE1收到报文后,拿报文目的地址,首先VPN实例路由里面查表,命中到一个路由和SRv6 SID A2:1::B100;PE1直接使用该SID进行数据封装,IPv6DA+VPN_SID+SegmentList[2]+SADA+PKT包结构,栈是3层,逆序压栈,第一个压入最后一个执行,所以SegmentLeft字段为2;
- PE1封装完后,使用 A3:1::1查IPv6路由表;命中A3:1::/64这条路由,该路由由P->PE1发布过来,所以PE1将报文发给P;
- P设备识别A3:1::1是自己End SID,执行预设定的动作,即SL减1,SegmentList指针偏移下一个地址,将IPv6目的地址更新为A2:1::1,构建为新的数据包;P设备随后通过A2:1::1查找IPv6路由表向PE2转发;
- PE2收到报文后,查IPv6路由表判断报文里面的VPN SID A2:1::B100命中并执行相关指令;即SL减1变为0,SegmentList指针偏移指到VPN SID(LastEntry),然后去查my LocalSid表,命中到End.DT4 SID,解封装报文去除IPv6和SRH报头;
- 然后该数据包恢复为原始ipv4报文,并使用内层的的目的地址去End.DT4指定VPN实例路由表中查表,命中到路由表项,然后数据报文转发到CE2;
4.9. SRv6的跨域
为了组建大规模网路,SRv6需要跨域;
PE1<->P1<->ASBR1<->ASBR2<->P2<->PE2
| AS 60001 | AS 60002 |
4.9.1. SRv6 前置条件
SRv6 BE: 在该跨域中,仅需要头尾节点,也就是PE1和PE2支持SRv6,其他设备仅支持IPv6转发即可;
SRv6 TE: 除了PE1和PE2支持SRv6,ASBR1和ASBR2也需支持SRv6,其他设备仅支持IPv6转发即可;
4.9.2. SRv6 BE
关键点:公网Locator路由发布;私网VPN SID配置;
-
公网Locator路由发布:
- 假设PE2具有Locator路由,通过IGP向ASBR2发布路由;
- ASBR2引入IGP的Locator路由,因ASBR2同ASBR1建立EBGP邻居关系,向ASBR1发布路由;
- ASBR1将路由引入到IGP(ISIS)的进程中,这样PE2 Locator路由在PE1上就存在了;
-
私网路由发布:
- PE2 VPN路由+SRv6 DT4,同样通过多跳MP-BGP传递给PE设备;
- PE1 上既有公网的Locator路由,又有VPN SID,这样就可以建立到PE2的SRv6 BE路径;
4.9.3. SRv6 TE
目前支持OptionA跨域,即两个AS域内分别进行SRv6 TE转发,ASBR之间进行普通IPv4报文交互;
- ASBR1和ASBR2之间互相配置VPN 实例,ASBR1作为ASBR2的CE接入,ASBR2作为ASBR1的CE接入。
- 在ASBR1和ASBR2各自域内,使用SRv6 TE替换MPLS隧道
4.10. SRv6可靠性
支持TI-FLA(Technology-Independent LoopFree Alternate FRR)保护技术;
传统保护技术RLFA(RemoteLFA)对拓扑有一定约束性,无法做到100%故障保护。
4.10.1. [原理](https://www.bilibili.com/video/BV1yE411w7zB 22:57秒)
RLFA:链路故障后,转发的备份节点无法感知旧路径变化将包回传,导致包重复回传;
TI-FLA:则B节点的BE链路故障后,B会在原有报文基础上压入新的显示标签栈,比如C到D的临接标签,这样报文到达C后,C按照显示标签栈继续向下转发,使得转发成功;
4.10.2. 保护技术比较
RLFA:故障转发的失败原因是备份节点认为转发最短路径是原失效链路将数据包回传,各个节点独立决策,B节点无法影响到C节点;也无法把故障信息传递给C;
TI-FLA:可以压入显示标签栈,备用节点C无决策权,只能按照显示标签栈相关指令进行转发;
4.11. SRv6平滑演进
初始阶段只需要将头尾节点升级到SRv6,其他节点仅支持IPv6即可;
待其他设备升级到SRv6后,可构建完全SRv6网络;
4.12. 适用场景

- 4G/5G移动回传(MBH)
- 城域接入(Metro)
- 数据中心DI及DCI
- 电信云(TeleCloud)场景
4.13. NFV场景

NFV场景,业务串联需求大;假如有业务需要经过VNF1,VNF2,VNF3的处理,则SRv6可以轻松编排一条SegmentList;
- 若VNF1,VNF2支持SRv6,可以对其配置一个SegmentList路径;
- 若VNF3仅支持IPv6,可以对其配置一个VNF代理,然后填入VNF代理的SID即可;
配置好的路径为SegmentList<VNF1,VNF2,VNF3_Agent>,然后将业务导入该SegmentList,就可以按顺序处理这几个VNF处理。
通过路径合理编排,可以天然支持业务链需求,而且NFV网络的VNF可以不支持SRv6,具有优势;
未来Linux也会支持IPv6,所以APP可以为电信云,业务链,DCI等需求构建SRv6数据包;

4.14. SRv6和SR MPLS优势
- SRv6具有SR MPLS的所有优点;
- 可编程性
- 传统网络互通
- 支持业务链
| 分类 | SRv6 | SR MPLS |
|---|---|---|
| 控制协议 | IPv6(IGP/BGP) | IPv6(IGP/BGP) |
| 数据转发 | NativeIP;IPv6 | MPLS |
| 业务 | IPv4&IPv6 | IPv4&IPv6 |
| 与传统网络互通 | 简单(只要支持IPv6即可) | 复杂(MPLS over GRE/BGP-LU) |
| SDN管理 | 支持 | 支持 |
| 可编程性 | 支持,SRH具可编程字段 | 不支持,MPLS标签无编程字段 |
| 网络可靠性 | TI-LFA | TI-LFA |
| 网络可扩展性 | 好 | 好 |
| ECMP | 支持,更容易 | 支持 |
| SFC | 简单 | 复杂 |