下一代广域网技术2:SRv6

2.SRv6

SR架构设计之初,就为SR数据平面设计了两种实现方式:一种是SR-MPLS,其重用了MPLS数据平面,可以在现有IP/MPLS网络上增量部署;另一种是SRv6,使用IPv6数据平面,基于IPv6路由扩展头进行扩展。

RFC8402(Segment Routing Architecture)介绍了源路由的机制,即在头节点引入一段有序的Segment List控制流量引入和转发。这个行为可以被看作是在头节点输入一段有序的指令(Instruction),每个指令则代表了在网络中某个特定位置的功能(Function)。功能是节点上本地定义的,例如简单的按照Segment List转发或其他复杂的用户自定义行为。

SRv6(draft-ietf-spring-srv6-network-programming)更强调网络编程,这能将简单和复杂的网络功能结合,能够实现更多的网络目的而不仅仅是转发。

基于IPv6转发面的SRv6,通过在IPv6报文中插入一个路由扩展头SRH(Segment Routing Header),在SRH中压入一个显式的IPv6地址栈,通过中间节点不断的进行更新目的地址和偏移地址栈的操作来完成逐跳转发。


网络编程的概念

  1. 网络意图–某业务沿着低时延路径转发
  2. SDN控制器–业务需求转换为网络模型、
  3. SRv6段–控制器计算将路径编码为SRv6 Segment插入报文中
  4. 网络设备–网络设备转发报文

SRv6的价值

  • 简化协议、简化网络:去掉LDP、RSVP-TE等MPLS控制协议,网络控制层面协议简化为IGP/BGP。无需维护多种协议状态,并应对复杂的协议状态同步问题
  • SDN事实上的标准应用:兼具全局最优和分布智能的优势,可以实现各种流量工程,根据不同业务提供提供按需的SLA保障
  • 100%拓扑保护:任意拓扑100%保护倒换全覆盖,保护路径最优(与收敛后的路径一致)
  • 强可扩展性:基于源路由技术,每条流的状态仅在头节点维护,中间节点不感知

2.1 IPv6 Segment Routing Header(SRH)

2.1.1 SRH字段

RFC 8754中定义IPv6 SRH扩展头标准,在IPv6报文增加一个SRH扩展头。

在这里插入图片描述

next=43字段 :表明是Routing Extension Header。IPv6的扩展报头类型之一就是路由报头 (Routing Header),其类型号是43,。IPv6源结点使用路由报头列出一个或多个中间结点,使得数据包在去往最终目的地的路径上经过这些结点。因此源结点可以使用路由报头来实现数据包的源路由。

Routing Extension Header的Routing Type建议值为4表明是SR Header,称作SR扩展头或者SRH。
SRH继承路由报头属性:它应该只在数据包中出现一次,并且如果Segment Left = 0,则忽略 (但不丢弃) SRH,并且基于数据包中的下一报头来处理数据包

Segment Left是一个指针,指向下面的地址列表,比如2,就会把指针为2的地址放入到目的地址中,从而影响数据的转发

如果结点收到数据包,并且数据包的目的地址对应于该结点的地址,则该数据包检查扩展报头 (如果存在)。如果扩展报头中含有结点不能识别的路由类型的路由报头,结点的行为取决于 “Segment Left” 的值:
如果Segment Left = 0,则节点忽略路由报头并处理数据包的下一报头。
如果Segment Left != 0,则节点丢失数据包,并且向数据包的源地址发送ICMP “参数问题 (Parameter Problem)” 的消息。

SRH扩展头包含如下内容:

  1. Segment List:有序的SRv6 SID列表
  2. Segments Left(SL):SRv6激活的SID为Slist【SL】。转发过程中通过修改SL,同时更换DIP为活跃的SID来分段完成转发
  3. Tag:用于对数据包分组可以实现基于组的策略。
  4. SRH TLVs(NSH metadata,HMAC TLV,Padding TLV等):可以作为segment list的SID共同使用的全局参数

从SRH看SRv6网络可编程能力

SRv6较于SR-MPLS有更强大的网络编程能力,这种能力体现在SRH中。
整体上看SRH有三层编程空间:

  • 第一层是segment序列。它可以将多个segment组合,形成SRv6路径。这一点和MPLS标签栈类似。
  • 第二层是对SRv6 SID 128bit地址的运用。MPLS标签中四个段是定长的(20bit标签、8bit TTL、3bit TC和1bit栈底标识)。而SRv6 SID的128bit可以灵活分段,并且每个段的长度也可以变化。由此SRv6具备更灵活的可编程能力。
  • 第三层是紧接在segment序列后的可选TLV。报文在网络中传送时,如果需要在转发平面封装一些非规则类的信息,可以通过在SRH中TLV的灵活组合来完成。

2.1.2 SRH处理过程

SRv6路径上分为三种不同角色的结点。

源结点

源结点是可以产生带有SRH的IPv6数据包的任何结点:

产生带有SRH的IPv6数据包的主机
插入SRH或压入新的带有SRH的外部IPv6报头的SRv6域入口节点
当源结点产生数据包时,它会为数据包创建SRH,如下所示,并将其插入报头。

Segment List:采用对路径进行逆序排序的方式编码n个Segment。第一个位置是最后的Segment,最后位置是第一个Segment。
Segment Left:设置为n-1。
First Segment:设置为n-1。
Des-address:数据包地址设置为路径的第一个Segment。
HMAC TLV和 (或) 其他TLV可以添加到SRH。
事实上,SRv6主报头中的目的地址会被编码为active segment对应的IPv6地址。

Segment端节点

带有SRH的IPv6数据包的目的地址如果与结点的地址一样,则该节点称为Segment端节点。

Segment端节点接收到一个带有SRH的数据包时的操作如下:

if “Des-address == self-address” then
— if “Segment Left > 0” then
—— Segment Left - 1 (next Segment become active)
—— update Des-address to active SID (IPv6 address)
—— if “Segment Left ==0” then
——— if “C-flag == 1” then
———— remove SRH
——— endif
—— else
——— process next header
—— endif
— endif
endif

avtive Segment是Segment Left指向的Segment List中的Segment。Active Segment也被设置为数据包的目的地址。在每个Segment端节点处,通过在Segment List中找到的下一个active Segment来更新目的地址。

中转结点

中转结点是数据包路径上的一个结点,但不是Segment端节点。IPv6规范规定中转结点必须将数据包转发到其IPv6目的地址,且不改动SRH。中转结点不需要支持SRv6来转发数据包。

2.2 网络指令:SRv6 Segment

SRv6 Segment是一个128位数,通常也可以称为SRv6 SID或者SID。SID是一种实例化的IPv6地址,此类IPv6地址被赋予唯一的功能,一个SRv6 SID可以表示一个节点/链路,或者一个L2/L3的VPN,又或者一个服务。可以说,通过SRv6 SID可以定义任何的网络功能。

通常一条计算机指令包括两个部分,opcode(操作码)和operand(操作数)。opcode是指令要完成的操作,operand是参加运算的数据及其所在地址。同样SRv6网络编程也要定义网络指令,及SRv6 segment。

SRv6 segment是IPv6地址形式,通常也可以成为SRv6 SID

与SR MPLS的Segment不同,SRv6的Segment有128bits,而且分成了三部分:

  • Locator(位置标识):网络中分配给一个网络节点的标识,可以用于路由和转发数据包。Locator有两个重要的属性,可路由和聚合。在SRv6 SID中Locator是一个可变长的部分,用于适配不同规模的网络。
  • Function(功能):设备分配给本地转发指令的一个ID值,该值可用于表达需要设备执行的转发动作,相当于计算机指令的操作码。在SRv6网络编程中,不同的转发行为由不同的功能ID来表达。一定程度上功能ID和MPLS标签类似,用于标识VPN转发实例等。
  • Args(变量):转发指令在执行的时候所需要的参数,这些参数可能包含流,服务或任何其他相关的可变信息。

三部分的表现为LOC:FUNCT:ARG。注意Length<=128。当长度小于128时,保留位用0补齐

Locator

Locator是网络拓扑中的一个网络节点的标识,用于路由和转发报文到该节点,实现网络指令的可寻址。
Locator标识的位置信息由两个重要的属性:可路由和可聚合。节点配置Locator之后,系统会生成一条Locator网段路由,并且通过IGP在SR域内扩散。网络里其他节点通过Locator网段路由就可以定位到本节点,同时本节点发布的所有SRv6 SID也都可以通过该条Locator网段路由到达。
在华为设备配置中,配置前缀为2001:DB8:ABCD:,长度为64 bit:

[Router] segment-routing ipv6
[Router-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD: 64

Fuction & Argument

Function用来表示该指令要执行的转发动作(实RFC中叫做behavior),相当于计算机指令的Opcode。在SRv6网络编程中,不同的转发行为由不同的Fuction来标示,例如在RFC中定义了公认的End(类似node segment)、End.X(类似邻接segment)、End.DX4、End.DX6等。
Argument是可选的,这是对Function的一个补充。
例如End-x类似SR-MPLS中的Adjacency SID,用于标识某条链路。配置如下:

[Router-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD: 64
[Router-segment-routing-ipv6] opcode ::1 end-x interface g3/0/0 next-hop 2001:DB8:200::1

此Function对应的opcode为::1,此时没有Argument,那么SRv6 SID的只为2001:db8🔡:1
此Function的行为标示将报文从指定接口(G3/0/0),转发给对应的邻居节点(2001:db8:200::1)

SRv6 SID总结

首先它的长度128bit与IPv6地址长度保持了兼容(实际上他们之间没有关系,这只是一种巧妙的设计),这使得SRv6 SID可以作为IPv6地址使用。且现有的IPv6地址也能在读在SRv6中使用。
其次,SRv6中SID中的“Locator+Function”设计实际上是一种“路由+MPLS”的融合。总所周知MPLS是一种“2.5”层技术,SRv6可以类似的看做是一种“3.5”层技术,它同时融合了路由和MPLS技术的优势。
最后SRv6 SID中字段的含义和长度是可自定义的,而非像MPLS标签采用固定格式。这提供了更好的编程灵活性。

2.3 SRv6节点

源节点(SR source node):生成SRv6报文的源节点
中转节点(transit node):转发SRv6报文但不进行SRv6处理的IPv6节点
endpoint节点(SR segment endpoint node):SRv6报文的目的节点

在这里插入图片描述

2.3.1 Source Node

源节点将数据包引导到SRv6 segment list中,如果SRv6 segment list只包含单个SID,并且无需在SRv6报文中添加信息或TLV字段,则SRv6报文的目的地址字段设置为该SID。
源节点可以是生成IPv6报文且支持SRv6的主机,也可以是SRv6域的边缘设备
如图本咧为L3VPNv4 over SRv6 TE policy,即在SRv6上承载IPv4流量。源节点负责将IPv4流量引入隧道,封装SRH

2.3.2 Transit Node

在这里插入图片描述

中转节点是在SRv6报文路径上不参与SRv6处理的IPv6节点,即中转节点只执行普通的IPv6报文转发
当节点收到SRv6报文后解析报文的IPv6目的地址字段。如果IPv6目的地址不是本地配置的SRv6 SID也不是本地接口地址,节点则将SRv6报文当做普通IPv6报文查询路由表执行转发,不处理SRH。
中转节点可以使普通的IPv6节点,也可以是支持SRv6的节点

2.3.3 Endpoint Node

在这里插入图片描述

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

2.3.4 SRH处理过程

在这里插入图片描述

在SRv6转发过程中每经过一个SRv6节点,segment left(SL)字段减1,IPv6 DA信息变换一次,Segment Left和Segment List字段共同决定IPv6 DA信息

与SR-MPLS不同,SRv6是从下到上逆序操作,SRH中的segment在经过节点后也不会被弹出。因此SRv6报头保留了路径信息可以做路径回溯

2.3.5 SRv6指令集

SRH存储了实现网络业务的有序指令列表,相当于计算机的程序。其中的Segment List[0] ~ Segment List[n]相当于计算机程序的指令。第一个需要执行的指令是Segment List[n]。Segment Left相当于计算机程序的PC(Program Counter,程序计数器)指针,指向当前正在执行的指令。

SRv6指令的命名规则

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源节点负责将流量引导到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,并查表转发。
Endpoint节点行为
指令功能描述应用场景
End把下一个SID复制到IPv6目的地址,进行查表转发指定节点转发,相当于SR-MPLS的Node Segment
End. X根据指定出接口转发报文指定出接口转发,相当于SR-MPLS的Adjacency Segment
End. T在指定的IPv6路由表中进行查表并转发报文用于多路由表转发场景
End. DX2解封装报文,从指定的二层出接口转发L2VPN,例如EVPN VPWS(Virtual Private Wire Service)
End. DX4解封装报文,从指定的IPv4三层邻接转发L3VPNv4,通过指定的IPv4邻接转发到CE
End. DX6解封装报文,从指定的IPv6三层邻接转发L3VPNv6,通过指定的IPv6邻接转发到CE
End. DT6解封装报文,在指定的IPv6路由表中进行查表转发L3VPNv6
End. DT4解封装报文,在指定的IPv4路由表中进行查表转发L3VPNv4
End. B6. Insert插入SRH,应用指定的SRv6 PolicyInsert模式下引流如SRv6 Policy,隧道拼接、SD-WAN选路等
End. BM插入MPLS标签栈,应用指定的SR-MPLS PolicySRv6与SR-MPLS互通场景
Flavors附加行为

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

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

附加行为功能描述附着的End指令
PSP在倒数第二个Endpoint节点执行移除SRH操作。End、End.X、End.T
USP在最后一个Endpoint节点执行移除SRH操作。End、End.X、End.T
USD在最后一个Endpoint节点执行解封装外层IPv6报文头操作。End、End.X、End.T

2.4 SRv6 Policy

集中式SR-TE功能架构

SR-TE采用集中式架构,控制器收集全局网络拓扑信息和TE信息,集中算路,然后把算路结果下发给网络设备
首先SR也通过IGP来扩散SR信息,然后由头节点建立满足约束的SR路径,但是不需要RSVP-TE信令建立LSP

在这里插入图片描述

控制器

  1. 通过BGP-LS收集网络信息,建立全局TE数据库
  2. 基于约束全局算路
  3. 使用PCEP或BGP SRv6 Policy将算路结果下发设备

网络设备上没有算路功能组件

SRv6 TE Policy简介

SR-TE Policy是SR Policy在流量工程领域的使用。它使用SR的源路由机制,通过在头节点封装一个有序的指令列表来知道报文穿越网络。SR-TE Policy没有传统隧道接口的概念。
SR-TE Policy根据Segment不同分为SR-MPLS TE Policy和SRv6 TE Policy,这里以后者为例
SR Policy是当前主流厂家的实现SR-TE的方式,后续将用SRv6 policy代指SRv6 TE Policy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker部署常见应用之Oracle数据库

文章目录 安装部署参考文章 安装部署 使用Docker安装Oracle数据库是一个相对简便的过程&#xff0c;可以避免在本地环境中直接安装Oracle数据库的复杂性。 安装Docker环境&#xff1a;确保你的系统上已经安装了Docker&#xff0c;并且Docker服务正在运行。具体的安装方法可以根…

使用North自部署图床服务

图床 图床可以把图片转为链接&#xff0c;从而方便我们书写、分享博客&#xff0c;目前图床主要分为以下几类: 利用 Git 仓库存储对象存储&#xff08;OSS、COS、七牛云等&#xff09;免费公共图床&#xff08;SM.MS、聚合图床、ImgTP、Postimage等&#xff09; 但上述图床都…

多项式回归(Linear Regression)原理详解及Python代码示例

多项式回归原理详解 多项式回归&#xff08;Polynomial Regression&#xff09;是线性回归&#xff08;Linear Regression&#xff09;的一种扩展形式。它通过在输入变量上添加高次项来拟合非线性关系。虽然多项式回归本质上还是线性模型&#xff0c;但它允许模型在输入特征的多…

if action和Switch之间该怎么选择?

1. Switch 2. If及If Action Subsystem 3.结论 元素很多&#xff0c;用switch 元素少&#xff0c;用if或switch 如果...很多&#xff0c;用if

职业技能大赛引领下大数据专业实训教学的改革研究

随着信息化时代的加速发展&#xff0c;大数据专业作为新兴的热门领域&#xff0c;正日益成为高等职业教育体系中不可或缺的一部分&#xff0c;其承担着为社会培养大批具有高素质应用技能的大数据技术人才的重任。职业技能大赛作为检验和提升学生技能水平的有效平台&#xff0c;…

web学习笔记(六十九)vue2

1. vue2创建脚手架项目 &#xff08;1&#xff09;在cmd窗口输入npm install -g vue/cli命令行&#xff0c;快速搭建脚手架。 &#xff08;2&#xff09; 创建vue2项目 &#xff08;3&#xff09; 选择配置项目&#xff0c;最下面的选项是自己重新配置&#xff0c;第一次创建v…

使用nvm管理node版本及pnpm安装

文章目录 GithubWindows 环境Mac/Linux 使用脚本进行安装或更新Mac/Linux 环境变量nvm 常用命令npm 常用命令npm 安装 pnpmNode 历史版本 Github https://github.com/nvm-sh/nvm Windows 环境 https://nvm.uihtm.com/nvm.html Mac/Linux 使用脚本进行安装或更新 curl -o- …

VTable导出当前页和导出所有页数据

表格导出的是当前显示的表格&#xff0c;如果是分页表格想导出全部的数据话。有两种方法可以实现 表格先显示的全量数据&#xff0c;导出后再恢复当前页。新建一个隐藏的表格实例显示全量数据导出这个隐藏的表格实例。 下面是全量代码&#xff1a; <template><div&…

快速创建条形热力图

Excel中的条件格式可以有效的凸显数据特征&#xff0c;如下图中B列所示。 现在需要使用图表展现热力条形图&#xff0c;如下图所示。由于颜色有多个过渡色&#xff0c;因此手工逐个设置数据条的颜色&#xff0c;基本上是不可能完成的任务&#xff0c;使用VBA代码可以快速创建这…

【pytorch03】pytorch基本数据类型

问题&#xff1a;String类型在pytorch中如何表示&#xff1f; 很遗憾&#xff0c;pytorch不是完备的语言库&#xff0c;而是面向数据计算的一个GPU加速库&#xff0c;因此没有内建对string的支持 我们会在做NLP的时候会遇到all string处理的问题&#xff0c;就比如说一句话&am…

华硕PRIME B450M-K主板开启虚拟化

1.判断电脑是否开启了虚拟化 按下CtrlShiftESC打开任务管理器&#xff0c;切换到性能页面&#xff0c;选择查看CPU 如果在右下角看到虚拟化&#xff1a;已禁用&#xff0c;则没有开启虚拟化 2.进入BIOS 重启或开机时&#xff0c;按下DEL或F2进入BIOS设置界面。 屏幕提示&am…

SAP系统中如何用事务码图形视图寻找MD04增强开发实施点

在之前发布的文章中&#xff0c;介绍了善用事务码的图形视图以观察事务的执行流程以及如何在MD04中实施增强以改变生产订单的显示顺序。本文结合两者&#xff0c;介绍一下如何利用事务码的图形视图找到增强开发的实施点。 在事务码中输入SE93&#xff0c;进入图形视图&#xf…

生命在于学习——Python人工智能原理(4.6)

在这里插一句话&#xff0c;我有两个好兄弟的github项目&#xff0c;感兴趣的可以去看一下&#xff0c;star一下&#xff0c;谢谢。 https://github.com/fliggyaa/fscanpoc https://github.com/R0A1NG/Botgate_bypass 四、Python的程序结构与函数 4.1 Python的分支结构 &…

如何将个人电脑做P2V备份到虚拟化平台

背景&#xff1a;公司员工个人电脑绑定了商用软件的license&#xff0c;现在员工离职&#xff0c;license又需要使用&#xff0c;电脑就一直被占用。 解决方法&#xff1a;利用VMware Vcenter Converter Standalone将此台式电脑上载到公司虚拟化平台上 具体做法&#xff0c;下…

.NET C# 树遍历、查询、拷贝与可视化

.NET C# 树遍历、查询、拷贝与可视化 目录 .NET C# 树遍历、查询、拷贝与可视化1 组件安装1.1 NuGet包管理器安装&#xff1a;1.2 控制台安装&#xff1a; 2 接口1.1 ITree\<TTreeNode\>1.2 ITree\<TKey, TTreeNode\>1.3 IObservableTree\<TTreeNode\>1.4 IO…

昇思25天学习打卡营第7天 | 模型训练

内容介绍&#xff1a; 模型训练一般分为四个步骤&#xff1a; 1. 构建数据集。 2. 定义神经网络模型。 3. 定义超参、损失函数及优化器。 4. 输入数据集进行训练与评估。 具体内容&#xff1a; 1. 导包 import mindspore from mindspore import nn from mindspore.dataset…

手把手教你使用kimi创建流程图【实践篇】

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 引言 在昨日的文章中&#xff0c;我们介绍了如何使用Kimi生成论文中的流程图。今天&#xff0c;我们将更进一步&#xff0c;通过实践案例来展示Kimi在生成流程图方面的应用。这不仅将加…

【大数据技术原理与应用(概念、存储、处理、分析与应用)】第1章-大数据概述习题与知识点回顾

文章目录 单选题多选题知识点回顾几次信息化浪潮主要解决什么问题&#xff1f;信息科技为大数据时代提供哪些技术支撑&#xff1f;数据产生方式有哪些变革&#xff1f;大数据的发展历程大数据的四个特点&#xff08;4V&#xff09;大数据对思维方式的影响大数据有哪些关键技术&…

软考《信息系统运行管理员》-1.2信息系统运维

1.2信息系统运维 传统运维模式&#xff08;软件&#xff09; 泛化&#xff1a;软件交付后围绕其所做的任何工作纠错&#xff1a;软件运行中错误的发现和改正适应&#xff1a;为适应环境做出的改变用户支持&#xff1a;为软件用户提供的支持 新的不同视角下的运维 “管理”的…

Java 面试指南合集

线程篇 springBoot篇 待更新 黑夜无论怎样悠长&#xff0c;白昼总会到来。 此文会一直更新哈 如果你希望成功&#xff0c;当以恒心为良友&#xff0c;以经验为参谋&#xff0c;以当心为兄弟&#xff0c;以希望为哨兵。