SRv6 基本结构

简介: 【5月更文挑战第4天】SRv6是一种网络功能指令化技术,将128位IPv6地址用于表达网络操作。它将业务需求转化为有序指令列表,由网络设备执行,实现灵活的网络业务编排和定制。

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


1、SRv6 Segment

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

  • Locator的作用就是将报文路由到执行该指令的网络设备中,实现网络指令的可寻址。Locator标识的位置信息有两个重要的属性:可路由和可聚合。Locator对应的路由会由节点通过IGP发布到网络中,用于帮助其他设备将报文转发到发布该Locator的节点。此外,Locator对应的路由也是可聚合的。Locator的长度可变,用于适配不同规模的网络。
  • Function用来表达该指令要执行的转发动作,相当于计算机指令的Opcode。在SRv6网络编程中,不同的转发行为由不同的Function来表达。和计算机的指令类似,按照不同功能将Function定义成不同类型的SID,表达对应的转发行为,如转发报文到指定链路,或在指定表中进行查表转发等。
  • Arguments(Args)字段是一个可选字段。它是指令在执行时对应的参数,这些参数可能包含流、服务或任何其他相关的信息。


2、SRv6节点

在SRv6网络中存在多种类型的节点角色,基本上分为以下3类:

  • SRv6源节点:生成SRv6报文的源节点,源节点将数据包引导到SRv6 Segment List中,如果SRv6Segment List只包含单个SID,并且无须在SRv6报文中添加信息或TLV,则SRv6报文的目的地址字段设置为该SID,可以不封装SRH。源节点可以是生成IPv6报文且支持SRv6的主机,也可以是SRv6域的边缘设备。
  • 中转节点:在SRv6报文转发路径上不参与SRv6处理的IPv6节点,即中转节点只执行普通的IPv6报文转发。当节点收到SRv6报文以后,会解析报文的IPv6 DA(Destination Address,目的地址)字段。如果IPv6目的地址既不是本地配置的SRv6SID,也不是本地接口地址,则节点将SRv6报文当作普通的IPv6报文,按照最长匹配原则查找IPv6路由表,进行处理和转发,不处理SRH,此时该节点就是中转节点。中转节点可以是普通的IPv6节点,也可以是支持SRv6的节点。
  • SRv6段端点节点:在SRv6报文转发过程中,节点接收的报文的IPv6目的地址是本地配置的SID,则该节点被称为端点节点。该节点需要处理SRv6 SID和SRH。


3、SRv6扩展报文头

为了实现SRv6,根据IPv6原有的路由扩展报文头定义了一种新类型的扩展报文头,称作SRH。该扩展报文头通过携带Segment List等信息显式地指定一条SRv6路径。SRH的格式如下:

SRH各字段的说明如下:

SRv6指令的命名规则如下:

  • End:End是最基础的Segment Endpoint执行指令,表示当前指令的终止,开始执行下一个指令。对应的转发动作是将SL的值减1,并将SL指向的SID复制到IPv6报文头的目的地址字段。
  • X:指定一个或一组三层接口转发报文。对应的转发行为是按照指定出接口转发报文。
  • T:查询路由转发表并转发报文。
  • D:解封装。移除IPv6报文头和与它相关的扩展报文头。
  • V:根据VLAN(Virtual Local Area Network,虚拟局域网)查表转发。
  • U:根据单播MAC查表转发。
  • M:查询二层转发表,进行组播转发。
  • B6:应用指定的SRv6 Policy。
  • BM:应用指定的SR-MPLS Policy。

所有指令都是由上述一个或多个原子功能组合而成的。


4、SRv6报文转发

SRv6节点维护一个本地SID表,该表包含所有在该节点生成的SRv6 SID信息。本地SID表有以下用途。

  • 存储本地生成的SID,例如End.X SID。
  • 指定绑定到这些SID的指令。
  • 存储和这些指令相关的转发信息,例如VPN实例、出接口和下一跳等。

假设现在有报文需要从主机H1转发到主机H2,H1将报文发送给节点A处理。节点A、B、D和F均为支持SRv6的设备,节点C和节点E为不支持SRv6的设备。


在SRv6源节点A上进行了网络编程,希望报文经过B-C和D-E这两条链路,然后送达节点F,再经节点F送达主机H2。以下是报文从节点A到节点F的详细处理步骤。


1)SRv6源节点A的处理。节点A将SRv6路径信息封装在SRH中,指定B-C链路和D-E链路的End.X SID。另外,节点A上还要封装节点F发布的End.DT4 SID A6::100,这个End.DT4 SID对应于节点F的一个IPv4 VPN。按照逆序形式压入SID序列,由于有3个SID,所以节点A封装后的报文的初始SL=2。SL指向当前需要处理的操作指令,也就是Segment List[2]字段,节点A将其值A2::23复制到外层IPv6报文头的目的地址字段,并且按照最长匹配原则查找IPv6路由表,将报文转发到节点B。


2)Endpoint节点B的处理。节点B收到报文以后,根据IPv6报文的目的地址A2::23查找本地SID表,命中End.X SID。节点B执行End.X SID的指令动作,将SL的值减1,并将SL指示的SID更新到外层IPv6报文头的目的地址字段,同时将报文从End.X SID绑定的链路发送出去。


3)中转节点C的处理。当报文到达节点C后,节点C只支持处理IPv6报文头,无法识别SRH,此时节点C按照正常的IPv6报文处理流程,按照最长匹配原则查找IPv6路由表,将报文转发给当前的目的地址所代表的节点D。


4)Endpoint节点D的处理。节点D收到报文以后,根据IPv6报文的目的地址A4::45查找本地SID表,命中End.X SID。节点D执行End.X SID的指令动作,将SL的值减1,并将SL指示的SID更新到外层IPv6报文头的目的地址字段,同时将报文从End.X SID绑定的链路发送出去。如果A4::45是PSP Flavor的SID,则此时可以根据PSP的指示将SRH弹出,报文就变成了普通的IPv6报文。


5)中转节点E的处理。节点E只支持IPv6报文头处理,无法识别SRH,此时节点E按照正常的IPv6报文处理流程,按照最长匹配原则查找IPv6路由表,将报文转发给当前目的地址所代表的节点F。


6)Endpoint节点F的处理。节点F收到报文以后,根据外层IPv6目的地址A6::100查找本地SID表,命中End.DT4 SID。节点F执行End.DT4 SID的指令动作,解封装报文,去除IPv6报文头,再将内层IPv4报文在End.DT4 SID绑定的VPN实例的IPv4路由表中进行查表转发,最终将报文发送给主机H2。

相关文章
|
3天前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
56 0
|
3天前
|
缓存 网络协议 网络安全
SRv6在SFC中的应用
【2月更文挑战第28天】SFC(Service Function Chaining)是指一系列业务功能(如DPI、FW、IPS、WAF)按序处理特定业务流的网络架构。它包括SF(服务功能节点)、SFF(转发器)、SFP(转发路径)和Classifier(流分类器)等组件。SRv6作为支持SFC的技术,有两种方案:无状态Stateless SRv6 SFC,通过SID组合实现路径编程,不需要维护转发状态;有状态Stateful SRv6 SFC,结合SRv6和NSH,适用于SF不支持SRv6的情况。
|
6月前
|
存储 NoSQL Linux
深入理解Linux内核task_struct结构
深入理解Linux内核task_struct结构
|
3天前
|
应用服务中间件 nginx
Nginx源码阅读:共享内存ngx_shm_t和它的组织方式ngx_shm_zone_t、ngx_list_t
Nginx源码阅读:共享内存ngx_shm_t和它的组织方式ngx_shm_zone_t、ngx_list_t
25 0
|
6月前
|
关系型数据库 Apache PHP
深入理解Linux内核task_struct结构(下)
深入理解Linux内核task_struct结构(下)
|
10月前
|
存储 Web App开发 移动开发
📕Local Storage、Session Storage和Cache Storage之间的区别
你知道什么是Cache Storage、Local Storage和Session Storage吗?它们都是一些可以在你的浏览器里保存信息的介质,但是它们有什么不同呢?🤔
389 0
📕Local Storage、Session Storage和Cache Storage之间的区别
node笔记记录43fs模块2
node笔记记录43fs模块2
46 0
node笔记记录43fs模块2
node笔记记录42fs模块1
node笔记记录42fs模块1
32 0
node笔记记录42fs模块1
【SV】记录UVM/SV使用过程中遇到的生僻知识点
【SV】记录UVM/SV使用过程中遇到的生僻知识点
81 0
|
存储 关系型数据库 MySQL
Xdes&Inode&Seg Header(6) 独立表空间结构(三十二)
Xdes&Inode&Seg Header(6) 独立表空间结构(三十二)