SRv6基本原理

概述

网络指令:SRv6 Segment(SID)

Locator Function Arguments
Locator是网络拓扑中分配给一个网络节点的标识,用于路由和转发报文到该节点。Locator标识位置信息,它有两个重要的属性:可路由和可聚合。 Function用来表达该指令要执行的转发动作,相当于计算机指令的操作码。 Arguments(Args)是一个可选字段。它是指令在执行时对应的参数,这些参数可能包含流、服务或任何其他相关的信息。

目前的Segment Routing技术就是通过在源节点封装一个有序的Segment列表,指示网络在指定节点上执行对应的指令来实现网络的可编程。

网络节点

  • SRv6源节点(SRv6 Source Node):生成SRv6报文的源节点。
  • 中转节点(Transit Node):转发SRv6报文但不进行SRv6处理的IPv6节点。
  • SRv6段端点节点(SRv6 Segment Endpoint Node):接收并处理SRv6报文的任何节点,其中该报文的IPv6目标地址必须是本地配置的SID或者本地接口地址,后文简称为Endpoint节点。

SRv6扩展报文头

字段 长度 含义
Next Header 8 bit 标识紧跟在SRH之后的报文头的类型。
Hdr Ext Len 8 bit SRH报文头的长度。不包括前8 Byte的SRH的长度
Routing Type 8 bit 标识路由扩展报文头(Routing Header)类型,SRH的类型为4
Last Entry 8 bit 段列表最后一个元素的索引
Flags 8 bit 预留的标志位,用于特殊的处理,比如OAM
Tag 16 bit 标识同组报文
Segment List[n] 128*n bit 段列表中的第n个Segment,Segment是IPv6地址形式
Optional TLV 长度可变 可选TLV(Type Length Value,类型长度值)部分,例如Padding TLV和HMAC

扩展报文头TLV

Segment List携带的SID都是特定节点要执行的指令信息,也即每个SID只有在发布该SID的节点才会被执行,其他节点只做基本的查表转发动作。相对
来说,TL V携带的信息可以被Segment List中包含的每一个SID对应的发布节点处理,而不仅仅受限于某一个节点。

SRv6指令集

EndPoint 节点行为

  • End:End表示一个指令的终结,开始执行下一个指令。对应的转发动作是SL减1,并将SL指向的SID复制到IPv6报文头的目的地址字段。
  • X:指定一个或一组三层接口转发报文。对应的转发行为是按照指定出接口转发报文。
  • T:查询路由转发表并转发报文。
  • D:解封装。移除IPv6报文头和它相关的扩展报文头。
  • V:根据VLAN查表转发。
  • U:根据单播MAC查表转发。
  • M:查询二层转发表,进行组播转发。
  • B6:绑定到SRv6 Policy。

中转节点行为

中转行为 功能简述
T 不处理SRH,正常查找IPv6路由表转发
T.Insert 为接收到的IP报文插入SRH扩展报文头,并查表转发
T.Insert.Red 插入时使用Reduced SRH
T.Encaps 为接收到的IP报文封装外层IPv6报文头与SRH,并查表转发
T.Encaps.Red 封装中使用Reduced SRH
T.Encaps.L2 为接收到的二层报文封装外层IPv6报文头和SRH,并查表转发
T.Encaps.L2.Red 封装中使用Reduced SRH

SRv6报文转发

本地SID表

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

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

报文转发流程

  • SRv6源节点的处理:将SRv6路径信息封装在SRH扩展报文头中,指定链路B->C和D->E的End.X.SID
  • EndPoint节点的处理执行End.X SID的指令动作:SL减1,并将SL指示的SID更新到外层IPv6报文头的目的地址字段,同时将报文从End.X SID绑定的链路发送出去。
  • 中转节点的处理:按照正常的IPv6报文处理流程,按照最长匹配原则查找IPv6路由表,将报文转发

SRv6 TE

Segment Routing 的出现弥补了 RSVP-TE 的不足。Segment Routing 利用源路由机制,通过在报文头中携带一个有序的指令列表(Segment List),指导报文在网络中的转发。这些指令不是面向数据流的,而是面向节点和链路的,因此网络设备只需维护有限的节点和链路状态即可。Segment Routing 的路径信息被显式的携带在报文中,中间节点只需按照报文中的路径信息进行转发,无须维护逐流的路径状态。

SRv6 Policy

通过在SRH 中封装一系列的SRv6 Segment ID,可以显式指导报文按照规划的路径转发,实现对转发路径端到端的细粒度控制,满足业务的高可靠、大带宽、低时延等SLA 需求。

SRv6 Policy模型

Key值:SRv6 Policy使用如下三元组作为Key,全局唯一标识一个SRv6 Policy。

SRv6 Policy算路

上文介绍到SRv6 Policy的Candidate Path可以通过多种方式生成,主要包括静态指定路径、头节点算路和控制器算路3类。不同方式生成的Candidate Path可以通过Protocol-Origin和originator字段来区分。以下展开介绍。
静态指定路径:
头结点算路:头节点算路和RSVP-TE类似。首先头节点利用IGP携带的TE信息和IGP链路状态信息组成TEDB,然后基于CSPF算法按照带宽、时延、SRLG和不相交路径等约束计算满足条件的路径,并安装相应的SRv6 Policy指导转发。
控制器算路:控制器通过BGP-LS等收集网络拓扑、TE信息以及SRv6信息,并根据业务需求集中进行路径计算,然后通过BGP/PCEP等协议将SRv6 Policy下发到头节点。控制器算路能够支持全局调优、资源预留和端到端跨域。

SRv6 Policy 引流

SRv6 Policy 部署在头节点之后,还需要完成引流工作,将流量引导到 SRv6 Policy中。目前基本有 Binding SID 和 Color 匹配这两大类引流方式。
第一种是通过节点的 binging SID划分发送路径,第二种是通过<Color, Endpoint> 匹配SRv6 Policy。
DSCP引流通过 IP 报文头中封装的 DSCP 值来引流,这种方式可以对命中同一个路由但不同来源的业务进一步细分。

SRv6 Policy 数据转发

IPv4 L3VPN

  1. 控制器向PE1下发SRv6 Policy(color、endpoint、candidate path)
  2. PE2向PE1发布BGP路由
  3. PE1接收到BGP路由以后,利用路由color和下一跳迭代到SRv6 Policy
  4. PE1接收到普通单播报文,查找VPN实例路由表,开路由接口是SRv6隧道接口。PE1为报文插入SRH信息,封装Segment List和IPv6报文头,转发
  5. 中间节点逐条转发
  6. 到达PE2以后,PE2使用报文的IPv6目的地址查找本地SID,SL减一,更新IPv6DA
  7. 使用VPN SID查找本地SID表,命中了End.DT4 SID,执行命令。(D是解封装,T是查询路由表并转发,4是IPv4路由表)

SRv6 VPN

VPN是依靠 ISP Internet Service Provider ,因特网服务提供者)在公共网络中建立的虚拟专用通信网络,也就是我们常说的私网。 VPN 具有专用和虚拟的特征,可以在底层承载网络上创建出逻辑隔离的网络。

基本模型

  • CE(Customer Edge,用户网络边缘设备):CE 是用户网络的边缘设备,与服务提供商(Service Provider,SP)相连。CE 可以是路由器或交换机,也可以是一台主机。CE 感知不到VPN 的存在,也不需要支持VPN 的承载协议,比如MPLS 或SRv6。
  • PE(Provider Edge,运营商边缘设备):PE 是服务提供商网络的边缘设备,与用户的CE 直接相连。在VPN 中,对VPN 的所有处理都发生在PE 上。
  • P(Provider):P 是服务提供商网络中的骨干设备,不与CE 直接相连。P 设备不感知VPN,只需要具备基本网络转发能力即可,比如MPLS 转发或IPv6 转发能力。

业务类型

承载三层业务的VPN 为L3VPN。由于VPN 是一种虚拟私有网络,不同的VPN 独立管理自己使用的地址空间,所以不同VPN 的地址空间可能会发生重合。比如,在L3VPN 中,VPN1 和VPN2 都使用了地址空间10.110.10.0/24。为实现这两个VPN 的正常通信,需要将这两个VPN 的流量隔离。整体上,一个 VPN 实例包括:标签转发表、 IP 路由表、与 VPN 实例绑定的接口、以及 VPN 实例的管理信息,包括RD Route Distinguisher ,路由标识)、 RT Route Target ,路由目标)、成员接口列表等。

SRv6 L3VPN

BE

TE

APN6

APN6的产生

2013年,在美国计算机协会数据通信专业组会议上,谷歌发表了“ B4: Experience with a Globally Deployed Software Defined WAN ”一文,首次将其数据中心的广域网连接的设计和部署经验公之于众,宣称其广域网连接能达到接近 100% 的利用率。

B4的基本思路是保证高优先级流量以低延迟到达,低优先级大数量流量根据高优先级业务自适应调整其传输速率,在时域上分摊开,从而把空闲管道填满,有效提高链路利用率。

B4网络解决的是一个基于不同应用的网络流量工程的问题。因为掌握了应用的流量,通过有效的调度可以极大地提升网络利用率。借鉴谷歌根据应用需求和流量特征调整网络资源的思路,我们需要打破传统的 IP 承载网络与应用之间的割裂限制,使网络有效感知应用需求,从而对所承载的业务实现精细化的运营,在保证 SLA (服务水平协议)的同时,提高网络资源利用率。

APN6的解决思路

  1. 开放的应用信息携带:APN6 通过IPv6 携带应用特征信息,包括应用标识符及其对网络性能的要求。这些应用信息还可以根据需求进一步扩展。携带应用信息的行为不是强制性的,应用可以选择是否携带应用信息。
  2. 丰富的网络服务:为了实现精细化运营,不仅需要有细粒度的应用特征信息,而且需要网络侧提供丰富的服务,否则即使携带了应用特性信息也失去了意义。除了传统的TE 流量工程和QoS 服务,前面我们还介绍了IP 网络为支持5G 和云业务提供的网络切片、确定性时延、SFC、BIERv6/组播等新的服务,这些都可以与应用信息匹配,提供更细粒度的服务。而为了支持这些丰富的网络服务,也需要
    基于IPv6/SRv6 扩展来支持。
  3. 准确的网络测量:测量网络性能并更新网络服务来匹配应用,以更好地满足细粒度的SLA 要求。
    APN6 可以较为有效地解决传统网络感知应用方案中所遇到的挑战和问题。APN6 通过IPv6 扩展头将业务报文的应用特征信息(包括应用标识信息及其对网络的性能需求)携带进入网络,使得网络更加快速有效地感知到应用及其需求,从而为其提供精细化的网络资源调度和SLA 保证,更好地为应用提供服务。

APN6框架

APN6需求

IPv6基础介绍

  1. 地址空间方面,IPv4地址采用32bit标识,IPv6采用128bit标识
  2. 报文处理方面,IPv6增加了流标签域,提出扩展报文头的概念。
  3. 地址配置方面,IPv6 协议内置支持通过地址自动配置方式使主机自动发现网络并获取 IPv6 地址,大大提高了内部网络的可管理性。
  4. 路由聚合方面,层次化的网络结构使路由聚合更为容易,提高了路由转发效率。
  5. 端到端安全方面,。IPv6 中,网络层支持 IPsec 的认证和加密,支持端到端的安全。
  6. Qos服务质量保障方面,IPv6 新增了流标记字段,可以用于提供 QoS 保证。
  7. 移动性支持方面,解决了移动 IPv4 的三角路由、源地址过滤问题,使得移动通信处理效率更高且对应用层透明。

IPv6地址

表示方式

IPv6 地址总长度为 128 bit,通常分为 8 组,每组为 4 个 16 进制数的形式,每组 16 进制数间用冒号分隔,这是 IPv6 地址的首选格式。
FC00:0000:130F:0000:0000:09C0:876A:130B

地址结构

  • 网络前缀 : nbit,相当于网络ID
  • 接口标识:(128 - n) bit,相当于主机ID
    接口标识可通过3 种方法生成:手工配置、系统通过软件自动生成、遵循IEEE EUI-64规范自动生成。其中,遵循EUI-64 规范自动生成最为常用。IEEE EUI-64 规范是将接口的MAC 地址转换为IPv6 接口标识的过程。

地址分类

IPv6地址段 地址类型
2000::/3 全球单播地址
FC00::/7 唯一本地地址
FE80::/10 链路本地地址
FF00::/8 组播地址

IPv6报文头

基本报文头

IPv6 报文由IPv6 基本报文头、IPv6 扩展报文头以及上层协议数据单元3 部分组成。上层协议数据单元一般由上层协议报文头和它的有效载荷构成,有效载荷可以是一个ICMPv6 报文、一个TCP 报文或一个UDP 报文。

字段 长度 解释
Version 4bit 版本号。对于IPv6,该值为6
Traffic Class 8bit 流类别。等同于IPv4 中的ToS 字段,表示IPv6 数据报文的类或优先级,主要应用于QoS
Flow Label 20bit 流标签。IPv6 中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效的区分数据流
Payload Length 16bit 有效载荷长度。有效载荷是指紧跟IPv6 基本报文头的数据报文中的其他部分(即扩展报文头和上层协议数据单元)。该字段只能表示最大长度为65535 Byte 的有效载荷。
Next Header 8bit 下一个报文头。该字段定义紧跟在IPv6 报文头后面的第一个扩展报文头(如果存在)的类型,或者上层协议数据单元中的协议类型
Hop Limit 8bit 跳数限制。该字段类似于IPv4 中的TTL 字段,它定义了IP 数据报所能经过的最大跳数。
Source Address 128bit 源地址,表示发送方的地址
Destination Address 128bit 目的地址,表示接收方的地址

扩展报文头

  1. IPv6 基本报文头(IPv6 Header)
  2. 逐跳选项扩展报文头(Hop-by-Hop Options Header)
  3. 目的选项扩展报文头(Destination Options Header)
  4. 路由扩展报文头(Routing Header)
  5. 分片扩展报文头(Fragment Header)
  6. 认证扩展报文头(Authentication Header)
  7. 封装安全有效载荷扩展报文头(Encapsulating Security Payload Header)
  8. 目的选项扩展报文头(Destination Options Header)(指那些将被IPv6 报文的最终目的地处理的选项)
  9. 上层协议报文(Upper-Layer Header)

ICMPv6

在IPv4 中,ICMP 向源节点报告关于向目的地传输IP 报文过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、报文超长、超时、回应请求和回应应答等。在IPv6 中,ICMPv6 除了提供ICMPv4 常用的功能之外,还是其他一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU(Path Maximum Transmission Unit,路径最大传输单元)发现等。

PMTU

在IPv6 中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6 报文进行分片,报文的分片将在源节点进行。当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU 值大,则会将其丢弃;同时将转发接口的MTU 值通过ICMPv6 报文的“Packet Too Big”消息发给源端主机,源端主机以该值重新发送IPv6 报文,这样带来了额外流量开销。PMTU 发现协议可以动态发现整条传输路径上各链路的MTU 值,减少由于重传带来的额外流量开销。

ND

NDP(Neighbor Discovery Protocol ,邻居发现协议)是 IPv6 协议体系中一个重要的基础协议。邻居发现协议替代了 IPv4 的 ARP Address Resolution Protocol ,地址解析协议)和 ICMP 路由器发现( Router Discovery ),它定义了使用 ICMPv6 报文实现地址解析、邻居不可达检测、重复地址检测、路由器发现、重定向等功能。

SRv6网络编程阅读笔记相关推荐

  1. java 网络编程学习笔记

    java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...

  2. [Linux网络编程学习笔记]索引

    一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...

  3. [SRv6]《SRv6网络编程》SRv6 OAM与随路网络测量(2/2:IFIT)

    概述 本文主要介绍SRv6 OAM和数据平面Telemetry关键技术(随路网络测量) OAM:基于已有的IPv6 OAM机制进行简单扩展,实现故障管理和性能测量 随路网络测量:基于IFIT(In-s ...

  4. JAVA网络编程个人笔记 第4章 inet地址

    JAVA网络编程个人笔记 第4章 inet地址 Internet寻址 创建InetAddress对象 常用方法 getLocalHost() 代码实现 getByName() 代码实现 getAllB ...

  5. 编程开发:Linux网络编程学习笔记

    非常全面.通俗易懂.值得借鉴的Linux网络编程学习笔记.关键字:linux linux编程 网络编程 linux网络编程 下载地址:点我下载 特别说明:本资源收集于网络,版权归原作者及版权商所有,仅 ...

  6. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION(VGG网络)-论文阅读笔记

    VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION VGG网络 论文阅读笔记 //2022.4.11上午9:53开始阅 ...

  7. java网络编程 个人笔记 第二章 流

    java网络编程 个人笔记 第二章 流 流 I/O介绍 java流式输入/输出原理 输入输出流分类 节点流和处理流 节点流的类型 处理流的类型 InputStream(输入流) InputStream ...

  8. 15Java网络编程学习笔记

    Java网络编程学习笔记 文章目录 1 网络基础 1.1 网络通信 1.2 网络 1.3 IP地址 1.5 域名 1.6 端口号 1.7 网络通信协议 1.8 TCP协议 1.9 UDP协议 2 In ...

  9. SRv6网络编程:开启IP网络新时代 | 一文读懂SRv6 Policy

    SRv6 Policy利用Segment Routing的源路由机制,通过在头节点封 装一个有序的指令列表来指导报文穿越网络.SRv6利用IPv6 128 bit地 址的可编程能力,丰富了SRv6指令 ...

最新文章

  1. shell中的PS命令的含义
  2. docker --- 镜像、容器
  3. EXCEL数据汇总-数据透视图
  4. [凯立德]2015春季版C2739-M7L83-3521JON,已O+带3D+带路况
  5. vue-router路由的使用
  6. Linux笔记--Linux进程通信
  7. Android(安卓)手机变砖复活的三种恢复方法
  8. linux resin目录,Linux下resin的安装以及配置:
  9. Maven的作用通俗介绍
  10. App - 电影天堂第三方客户端
  11. java -基于反射和XML,将XML内的数据输出
  12. 数据库管理工具哪个好?强力推荐Navicat Premium 16 mac中文版
  13. android webView 全屏播放网络视频
  14. python代码书写_如何优雅的书写Python代码, python使用小技巧
  15. Python小白入门分享
  16. Ubuntu安装必备软件
  17. osgEarth例子
  18. 旋转矩阵变换左右手系
  19. 新冠疫情可视化(7月7日,7月8日)
  20. 外贸软件如何提升机械行业进出口管理效率

热门文章

  1. 1306 2249
  2. CMDB服务器管理系统【s5day88】:采集资产-文件配置(一)
  3. 项目介绍|Mirror:用户创造,用户所有
  4. SHT30使用的学习过程2 SHT30驱动程序
  5. 小小舵机,大大玄机!常见常用舵机私服电机参数汇总
  6. 50个Pandas的奇淫技巧:一网打尽各种索引 iloc,loc,ix,iat,at…
  7. 树莓派安装linux
  8. 单电子双缝干涉的猜测:跃迁与反粒子
  9. 语音直播平台,语音系统源码的开发服务。
  10. 2015,BAT将会活跃在哪些科技前沿?