HCIE-广域承载解决方案专题04-SRv6概念和工作原理
HCIE-广域承载解决方案专题04-SRv6概念和工作原理
SRv6概述
Segment Routing架构设计之初,就为数据平面设计了两种实现方式:一种是SR-MPLS,其复用了MPLS数据平面,可以在现有IP/MPLS网络上增量部署;另一种是SRv6,使用IPv6数据平面,基于IPv6路由扩展头进行扩展。
SRv6技术本身可以简化现有网络协议,降低网络管理复杂度,除此以外,SRv6更核心的优势是Native IPv6特质与网络编程能力
- 基于Native IPv6特质,SRv6能更好地促进云网融合、兼容存量网络、提升跨域体验
- 基于网络编程能力,SRv6可以更好地进行路径编程,满足业务的SLA,同时还能将网络和应用连接起来,构建智能云网
注: Native IPv6: 网络中只需要IPv6技术
1 SRv6基本概念
- SRv6在头节点上对数据压入段路由SRH(Segment Routing Header, 段路由扩展报文头部)来指导数据转发
- SRv6报文没有改变原有IPv6报文的封装结构,SRv6报文仍旧是IPv6报文,普通的IPv6设备也可以识别,即使中转设备本身不支持SRv6, 所以说SRv6是Native IPv6技术
- SRv6的Native IPv6特质使得SRv6设备能够和普通IPv6设备共同组网,对现有网络具有更好的兼容性
头节点: 也叫源路由器, 是位于SRv6网络边界的第一台设备, 将平普通报文分装为SRv6报文转发进SRv6网络中
1.1 IPv6 SRH
SRH扩展头格式如下, 位于IPv6报文的扩展头部中, 在网络层进行封装
SRH扩展头包括如下内容
-
Segment List: 有序的SRv6 SID列表, 内容是128bit的IPv6地址, 它会完整地存在直到整条路径转发完成, 配合Segment Left使用;
-
Routing Type: 置为4时表示该报文是SRH报文
-
Segment Left(SL): SRv6激活的SID为SList(SL), 转发过程中通过修改SList, 同时更换Des IP为活跃的SID来分段完成转发.
说通俗点就是Segment List的指针, 表示当前需要使用哪个标签进行转发(不同于MPLS无论后续是否再次压入同一个标签, 都会将使用完的标签弹出标签栈)
除此之外, 在SL选中Segment List的同时, 会其直接放到IPv6报文头部中的目的地址中, 并进行IPv6路由查表
比如当前会有一个如下Segment List
SRv6 SID Segment Left 10001 0 10002 1 10003 2 SL值会随转发经过跳数从大到小依次递减, 上表的转发路径为: 10003->10002->10001
-
Tag: 用于对数据包分组, 可以实现基于组的策略
-
SRH TLVs(NSH metadata, HMAC TLV, Padding TLV等): 可以作为Segment List的SID共同使用的全局参数
IPv6扩展头部及其在Next中的序列号(有顺序):
- 逐跳扩展头部--0
- 目的选项扩展头部--60
- 路由扩展头部--43
- 分片扩展头部--44
- 认证扩展头部--51
- 封装安全有效载荷头部--50
- 目的选项扩展头部(可以出现第二次)--60
1.2 SRv6 Segment
SRv6 Segment是IPv6地址形式,通常也可以称为SRv6 SID(Segment Identifier)
SRv6SID由Locator、Function和Arguments三部分组成,格式为:
- Locator:Function:Arguments
注意Length(L+F+A)<=128bit。当长度和小于128时,保留位(后面)用0补齐
如果没有Arguments字段,格式则是
- Locator:Function
Locator占据IPv6地址的高比特位,Function部分占据IPv6地址的剩余部分
Locator
Locator是网络拓扑中的一个网络节点的标识,用于路由和转发报文到该节点,实现网络指令的可寻址, 用于表示IPv6的路由前缀(类似Prefix中的Node SID), 需要工程师手动配置
Locator标识的位置信息由两个重要的属性:可路由和可聚合。节点配置Locator之后,系统会生成一条Locator网段路由,并且通过IGP在SR域内扩散。
网络内其他节点通过Locator网段路由就可以定位到本节点,同时本节点发布的所有SRv6 SID也都可以通过该条Locator网段路由到达
Locator起到网络寻址定位作用、需要SRv6每一台设备都有且有唯一的Locator, 如果部署anycast(备用必经节点),Locator不需要唯一
配置举例
ipv6 enable #开启ipv6
segment-routing ipv6 #开启SRv6并进入SRv6视图
locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD:: 64 static 32
创建当前设备的Locator信息, 该IPv6路由前缀信息为2001:DB8:ABCD:: ,长度为64bit, static后面会讲
Function
Function用来标识该指令要执行的转发动作。在SRv6网络编程中,不同的转发行为由不同的Function来标识,例如在RFC中定义了公认的End、End.X、End.DX4、End.DX6等, 这个标识会在下面详细说明
例如End.x类似SR-MPLS中的Adjacency SID,用于标识某条链路, 其配置如下:
segment-routing ipv6
locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD:: 64 #创建loactor
opcode ::1 end-x interface G3/0/0 next-hop 2001:DB8:200::1 #描述动作
-
此Function对应的opcode为: :1,由于此时后面没有Arguments,那么SRv6 SID值(Locator:Function)为
2001 : db8 : abcd : : 1
-
此Function的行为(opcode): :1绑定的动作是end-x, 即将报文从指定接口(G3/0/0),转发给对应的邻居节点(2001:DB8:200::1)。
-
创建Locator时指定的static表示有xx位是静态段, 如长度64位且静态段32位的标识如下:
- 静态段起始值: 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
至于Segment Routing的opcode的动作类型会在下面展开说
Argument
Argument作为SRv6的可选部分, 用于定义报文的流和服务信息, 目前最多用于EVPN VPLS的CE多归属(即一个CE连接多个PE)场景中, 转发BUM流量时, 利用Argument信息实现水平分割.
讲道理这一段我也没太懂, 不过其实也不是很重要.
**注: **
- EVPN(Ethernet Virtual Private Network)是下一代全业务承载的VPN解决方案。EVPN统一了各种VPN业务的控制面,利用BGP扩展协议来传递二层或三层的可达性信息,实现了转发面和控制面的分离
- BUM(broadcast、unknown-unicast、multicast,广播、未知单播、组播流量)流量
1.3 SRv6的工作方式
- 头节点收到其他网络的数据, 然后根据SRv6网络情况, 封装Segment List
- 根据Segment Left转发
1.4 SRv6 Segment动作opcode类型介绍
1.4.1 常见动作
类型 | 功能 | 协议 | 类型 |
---|---|---|---|
END | 表示Endpoint SID,用于标识网络中的某个目的节点(Node)。对应的转发动作(Function)是:更新IPv6 DA,查找IPv6 FIB进行报文转发 | IGP | 路径SID |
END.X | 表示三层交叉连接的Endpoint SID,用于标识网络中的某条链路。对应的转发动作是: 更新IPv6 DA,从End.XSID绑定的出接口转发报文 | IGP | 路径SID |
END.DT4 | 表示PE类型的Endpoint SID,用于标识网络中的某个IPv4 VPN实例对应的转发动作是: 解封装报文,并且查找IPv4 VPN实例路由表转发 | BGP | 业务SID |
END.DT6 | 表示PE类型的Endpoint SID,用于标识网络中的某个IPv6 VPN实例。对应的转发动作是: 解封装报文,并且查找IPv6 VPN实例路由表转发 | BGP | 业务SID |
END.DX4 | 表示PE类型的三层交叉连接的Endpoint SID,用于标识网络中的某个IPv4 CE. 对应的转发动作是:解封装报文,并且将解封后的IPv4报文在该SID绑定的三层接口上转发 | BGP | 业务SID |
END.DX6 | 表示PE类型的三层交叉连接的EndpointSID,用于标识网络中的某个IPv6 CE对应的转发动作是:解封装报文,并且将解封后的IPv6报文在该SID绑定的三层接口上转发 | BGP | 业务SID |
- END: 类似Node SID, 用于向指定的Locator进行IGP最短路径转发, 全局可见, 全局有效;
- END.X: 类似Adj SID, 用于将数据包向指定接口进行转发, 全局可见, 本地有效;
- END.DT4: 在VPN v4场景中使用, 表示流量进入某个VPN实例, 使得PE设备将流量转发到CE设备(未指定CE设备)
- END.DT6: 在VPN v6场景中使用, 表示流量进入某个VPN实例, 使得PE设备将流量转发到CE设备(未指定CE设备)
- END.DX4: 在VPN v4场景中使用, 表示流量进入某个VPN实例, 使得PE设备将流量转发到CE设备(指定CE设备), 等价于连接到CE的邻接标签
- END.DX6: 在VPN v6场景中使用, 表示流量进入某个VPN实例, 使得PE设备将流量转发到CE设备(指定CE设备), 等价于连接到CE的邻接标签
1.4.2 动作命名规则
除此之外, 也有其他不参加的SRv6 Segment, 他们都遵循一套命名规则, 可以通过命名组合快速判断指令功能:
- 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
1.4.3 附加动作
当然, 有些时候光凭Segment不足以满足一些细节需求, 此时就可以考虑Function附加动作, 类似MPSL中的特殊标签(1-16)
- PSP: 倒数第二跳弹出SRH头部机制
- USP: 最后一跳弹出SRH头部机制
- USD: 在最后一个ENDPoint节点执行解封装外层IPv6报文头操作
1.5 SRv6配置
配置流程:
-
使能SRv6功能, 并进入SRv6视图
segment-routing ipv6
配置命令后,可以在SRv6视图下配置Locator和SRv6 SID,以生成SRv6 Local SID转发表项
-
配置SRv6 SID Locator字段
locator locator-name[ipv6-prefix ipv6-address prefix-length[[static static-length]|[args args-length]]*]
分别指定Locator、Function静态段、Argument的长度, 如
locator test ipv6-prefix 2001:db8:abcd:: 64 static 16 arg 6
代表Locator为64bit, function的静态段为16bit, argument为6bit, function的动态段为128-64-16-6=42bit, 正常情况下不推荐function静态段将动态段全挤占完.
-
(可选)配置静态END SID的Opcode字段
opcode func-opcode end [no-flavor|psp|psp-usp-usd]
- 标识一个SRv6节点, func-opcode为指定的function字段, 如0000:0001(::1)或ffff:ffff
- Function也称Opcode, 可以手动配置, 也可以不配置, 在不配置的情况下, IGP协议会在动态段中动态分配动作;
- 可以在末尾指定Function的附加动作: psp、psp-usp、usd
- 对于END和END.X推荐使用静态段, 避免重启后动态段改变不利于维护
-
配置静态END.X SID的Opcode字段
opcode func-opcode end-x interface{interface-name|interface-type interface-number} nexthop nexthop-address[no-flavor|psp|psp-usp-usd]
End.X SID全称为Layer-3 cross-connect,表示SRv6节点的三层邻接。所以在参数配置过程中需要指定接口和接口下一跳地址
由于HCIE的笔试有考过SRv6的静态段和动态段分配, 所以在这里着重练习一下:
试写出locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD:: 64 static 16的静态段和动态段的起始与结束
静态段起始: 2001:DB8:ABCD:0000:0000:0000:0000:0001
静态段结束: 2001:DB8:ABCD:0000:0000:0000:0000:ffff
动态段起始: 2001:DB8:ABCD:0000:0000:0000:0001:0000
动态段结束: 2001:DB8:ABCD:0000:ffff:ffff:ffff:ffff
1.6 SRv6节点
RFC8754中定义了SR有三种类型节点:
- 源节点(SR Source Node): 生成SRv6报文的源节点
- 中转节点(Transit Node): 转发SRv6报文但不进行SRv6处理的普通IPv6节点
- Endpoint节点: 接收并处理SRv6报文的节点, 其中该报文的IPv6目标地址必须是本地配置的SID或者本地接口地址
SRv6源节点
源节点可以是生成IPv6报文且支持SRv6的主机,也可以是SRv6域的边缘设备, 即对非SR报文进行SRH头部封装的设备.
源节点将数据包引导到SRv6 Segment List中,如果SRv6 Segment List只包含单个SID,并且无需在SRv6报文中添加信息或TLV字段,则SRv6报文的目的地址字段设置为该SID。(BE网络)
SRv6源节点负责将流量引导到SRv6 Policy中,并执行可能的SRH封装。
以下列举了SRv6源节点封装报头的几种模式
源节点行为 | 功能描述 |
---|---|
H.Insert | 为接收到的IPv6报文插入SRH,并查表转发 |
H.Insert.Red | 为接收到的IPv6报文插入Reduced SRH,并查表转发 |
H.Encaps | 为接收到的IP报文封装外层IPv6报文头与SRH,并查表转发 |
H.Encaps.Red | 为接收到的IP报文封装外层IPv6报文头与Reduced SRH,并查表转发 |
H.Encaps.L2 | 为接收到的二层帧外封装IPv6报文头与SRH,并查表转发 |
H.Encaps.L2.Red | 为接收到的二层帧外封装IPv6报文头与Reduced SRH,并查表转发 |
Reduced SRH: 如果SRH的List信息中第一个SID可以封装到IPv6的目的IPv6地址中, 其他信息继续保留在SRH里面, 通过Reduced行为可以直接去掉List列表中第一个SID.
即原本List中有5个SID, 第一个SID直接封装到IPv6报文的目的地址中, SRH就只需要封装4个SID到List中.
Encaps封装: 在原本的IP报文前面插入SRH, 然后在对这个报文封装一个IPv6报文, 相当于SRH头部和原来的IPv6共同作为新IPv6报文的payload载荷部分.(类似GRE VPN的封装模式)
SRv6中转节点
中转节点是在SRv6报文转发路径上不参与SRv6处理的IPv6节点,中转节点只执行普通的IPv6报文转发。
当节点收到SRv6报文后解析报文的IPv6目的地址字段。如果IPv6目的地址不是本地配置的SRv6SID也不是本地接口地址,节点则将SRv6报文当做普通IPv6报查询路由表执行转发,不处理
SRH。
中转节点可以是普通的IPv6节点,也可以是支持SRv6的节点
中转节点不处理SRv6的原因:
- 设备支持ipv6但不支持SRv6, 只负责转发
- 当前标签并非指定当前设备进行处理, 类似于END Node转发时路径中间的设备
SRv6 Endpoint节点
在SRv6报文转发过程中,节点接收报文的IPv6目的地址是本地配置的SID,则节点被称为Endpoint节点
例如:R3使用报文的IPv6目的地址FC03::3查找Local SID表,命中到EndSID,随后R3将报文SL减1,同时将SL=0的SID做为报文目标IPv6地址, 以供不支持SRv6的设备进行转发,并查路由表转发出去, 此操作会造成目的地址的改变为Segment SID, 这个可能有点违背学习网络基础时强调的: 目的mac改变而目的ip不变
Endpoint Node在数据的转发路径上可以有多个,每个Endpoint Node都会为报文提供转发,封装和解封装等服务
接收并处理SRv6报文的设备
- SRH头部中, 标签值为当前设备的时候, 则当前设备需要对改SRv6报文做处理
- Endpoint并非SRv6网络的终点, 只是代表某一段SRv6 List的终点, 即只要对SRv6的SRH执行操作就是EndPoint, 需要对Policy技术中的尾端EndPonit在概念上做区分
SRv6的转发重点:
如果只有一个Segment, 即List列表中只有1个Segment, 则此时SL(Segment Left)=0, 源节点不会为报文压入SRH头部, 而是会将这个Segment的SID直接加入到IPv6报文的目的地址中, 作为普通ipv6报文进行SRv6转发.
疑问: 如果这个报文经过最后一个Endpoint节点处理后, 目的地址是否会改变回来, 此时目的地址是如何得到的?
1.7 SRv6转发模式
SRv6有两种转发(部署)模式:SRv6 Policy和SRv6 BE
- SRv6 Policy可以实现流量工程(兼具TE和Policy),配合控制器可以更好地响应业务的差异化需求,做到业务驱动网络, 需要控制器
- SRv6 BE是一种简化的SRv6实现, 之后有一个Segment SID,正常情况下不含有SRH扩展头, 会直接放在ipv6的目的地址中,只能提供尽力而为的转发, 无需控制器
这也引出了部署SRv6的条件:
- 网络中必有有两台设备需要部署Locator信息
- Locator信息会形成IGP路由进行扩散
- 整个IGP网络中的所有IPv6设备, 都可以学习到该Locator相关的路由信息
- 根据Locator和SRv6部署的转发模式可以封装SRH并转发SRv6报文
1.7.1 SRv6 Locator信息扩散
无论基于SRv6 BE或是SRv6 Policy转发流量,路由器都需要有SRv6 Locator的相关路由信息才能转发SRv6报文
SRv6节点通常通过扩展IGP(扩展OSPFv3或扩展IS-IS),将Locator相关路由扩散到网络节点上(包括源节点,中转节点,Endpoint节点)
1.7.2 SRv6 BE转发过程
传统MPLS有LDP和RSVP-TE两种控制协议,其中LDP方式不支持流量工程能力,LDP利用基于目的地址的IGP最短路径转发结果,建立LDP LSP指导转发。
在SRv6里,也有类似的方式,只不过SRv6仅使用一个业务SID来指引报文在IP网络里基于标签值的IGP最短路径转发,这种方式就是SRv6 BE
1.7.3 SRv6 Policy转发过程
在SRv6转发过程中每经过一个SRv6 Endpoint节点,Segments Left(SL)字段减1,IPv6报文头中的目的IPv6地址变换一次。Segments Left和Segment List字段共同决定IPv6报头里的Des Addr信息
与SR-MPLS的标签栈不同,SRv6 SRH是从队列尾到队列首逆序操作,SRH中的Segment在经过节点后也不会被弹出。因此SRv6报头可以做路径回溯(需要在SRH报头在倒数第二跳被弹出之前分析SRH报头).
2 SRv6 Policy路径建立与引流
以下内容了解即可
2.1 SRv6 Policy简介
- SRv6 Policy是在SRv6技术基础上发展的一种新的引流技术。
- SRv6 Policy路径表示为指定路径的段列表(Segment List),称为SID列表(Segment ID List)。每个SID列表是从源到目的地的端到端路径,并指示网络中的设备遵循指定的路径,而不是遵循IGP计算的最短路径。
- 如果数据包被导入SRv6 Policy中,SID列表由头端添加到数据包上,网络的其余设备执行SID列表中嵌入的指令
一句话: 同SR-MPLS, 什么Policy列表、粘连节点、BGP-LS都和SR-MPLS一样
2.1.1 标识SRv6 Policy
一个SRv6 Policy有一个元组标识<headend,color,endpoint>
对于一个指定的源节点,SRv6 Policy由<color,endpoint>标识:
- 头端(headend):SRv6 Policy生成的节点,一般是全局唯一的IP地址。
- 颜色(color):32比特扩展团体属性,用于标识某一种业务意图(例如低延时)。
- 尾端(endpoint):SRv6 Policy的目的地址,一般是全局唯一的IPv6地址
在特定头端,color和endpoint被用于标识SRv6 Policy转发路径
2.2 SRv6 Policy路径模型
- 一个SRv6 Policy可以包含多个候选路径(Candidate Path)。候选路径携带优先级属性(Preference)。优先级最高的有效候选路径为SRv6 Policy的主路径,优先级次高的有效路径为SRv6 Policy的备份路径。
- 一个候选路径就是SRv6 Policy通过静态配置或BGP IPv6 SR Policy向头端发送的基础单元。
- Segment List附带权重(Weight)来控制SRv6路径的负载分担
2.3 SRv6 Policy路径建立概述
在华为SRv6 Policy解决方案架构中,依赖控制器(iMaster NCE-IP)建立SRv6 Policy路径
- 控制器通过BGP-LS(Link-state)收集扩展IGP协议收集的拓扑信息,用于计算SRv6 Policy路径和状态呈现。
- 控制器通过BGP IPv6 SR Policy协议向源节点下发SRv6 Policy信息(headend、color、endpoint等)
除了以上两个协议之外,还有跟SR-MPLS一样的,也可以支持PCEP协议和NETconf/yang
- 在华为SRv6 Policy解决方案中,还会使用NETCONF协议,该协议主要用于下发业务接口、路由策略(添加Color属性)等其他配置。
- 除了通过iMaster NCE-IP下发SRv6 Policy之外,也可以通过手工的方式部署SRv6 Policy
2.3.1 通过BGP-LS收集信息
在华为SRv6 Policy解决方案架构中,BGP-LS的主要功能有两个
- 通过BGP-LS路由将IS-IS/OSPFv3收集的拓扑信息,前缀信息,SRv6 Locator和SID信息通告给iMaster NCE-IP。
- 通过BGP-LS路由通告SRv6 Policy的状态
2.3.2 通过BGP IPv6 SR Policy下发路径
iMaster NCE-IP可以通过BGP IPv6 SR Policy邻居下发SRv6 Policy给源节点
SRv6 Policy在BGP路由表呈现为[distinguisher][color][endpoint]
2.3.3 SRv6 Policy跨域路径建立
SRv6设备需要获取全网的SID信息才能实现端到端的数据转发。
在一个AS内,设备可以通过扩展的IGP协议(扩展OSPFv3或扩展IS-IS)获取AS内的SID信息,而在跨域场景中需要借助BGP帮助传递SID信息,这种通过BGP传递SID的技术叫做BGP EPE(Egress Peer Engineering)
2.4 SRv6 Policy路径粘连
SRv6的SRH头部有栈深的限制,因此对于大型网络可以部署SRv6路径粘连方案
路径粘连主要通过粘连SID与粘连节点实现:
- 粘连SID也叫Binding SID,通过Binding SID可以表示一段SRv6 Policy转发路径
- 粘连节点会处理Binding SID,并压入SRH信息,粘连节点一般是ABR或ASBR设备
SRv6粘连标签常用的有两种封装模式:
- Insert模式:在原始IPv6报文头后插入一个SRH,数据包基于原始IPv6头部与新SRH头指导转发
- Encaps模式:在原始IPv6报文头前插入外层IPv6头部与SRH头,数据包基于外层IPv6头部与SRH头部转发数据
2.5 SRv6 Policy基于Color引流
SRv6 Policy可以基于路由Color属性引流。Color引流是直接基于路由的扩展团体属性Color和目的地址迭代到SRv6 Policy
2.6 SRv6 Policy基于DSCP引流
对于去往同一个目的地址的不同业务流量(HTTP,FTP等),基于Color引流会导致所有流量都迭代到同一条转发路径,无法精细化控制流量,因此需要使用基于DSCP引流的方式将流量迭代到不同的转发路径
3 SRv6典型用例
也是了解即可
3.1 L3 VPN Over SRv6 Policy
当使用SRv6Policy承载VPN流量时,最末跳SRv6设备在处理数据时,与普通SRv6处理数据的方式稍有不同
3.2 L3 VPN Over SRv6 BE
SRv6 BE(Best Effort)承载VPN流量时,PE之间的P设备不作为Endpoint节点使用
3.3 Native IPv6 Over SRv6 Policy
普通IPv6数据也能被SRv6承载
本文来自博客园,作者:Qurare,严禁转载至CSDN平台, 其他转载请注明原文链接:https://www.cnblogs.com/konjac-wjh/p/17754980.html