G-SRv6实现原理及基本功能测试方法
什么是G-SRv6?
G-SRv6(Generalized Segment Routing over IPv6,通用SRv6)是一种兼容SRv6的通用机制,支持携带多种类型不同长度的SID,这些SID称为G-SID(Generalized SID,通用SID)。G-SRv6通过携带压缩类型的通用SID,最多可减少75%的Segment List(也称为SID List)开销,从而解决SRv6的报文头开销问题。此外,G-SRv6还支持普通SRv6 SID和压缩SID混合编程,网络按需升级部分节点即可部署G-SRv6,实现从SRv6到G-SRv6的平滑升级和存量演进。
G-SRv6产生的原因
SRv6 SRH(Segment Routing Header,段路由扩展报文头)中携带多个SRv6 SID会带来较大的报文开销,从而影响传输效率和转发性能,也对网络设备的硬件能力提出了更高的要求。为了解决SRv6报文头开销过大的问题应运而生的SRv6报文头压缩主流方案之一。
SRv6的带来的问题
- 报文开销大
SRv6数据报文的扩展头(SRH)封装长度为:40 Bytes(IPv6头) + 8 Bytes(SRH固定头)+ 16 * N Bytes(Segment List)。以净荷256字节的报文传送为例,当Segment List长度为1时,报文头长度为64 bytes,当Segment List长度为10时,报文头长度为208 bytes 。由此可见,SRv6承载小字节报文的效率非常低。
- 硬件处理效率低
商用路由器/交换机主流芯片对报文头的一次性处理长度通常小于144字节(意味着Segment List长度小于6)。当报文头中压入较多SID时,芯片不能在一个处理周期内完成报文头处理,导致报文处理效率大幅下降。
- MTU超限风险增加
通常只有 IPv6 源节点和目的节点才会解析 IPv6 扩展头部,所以只有IPv6 源节点始发IPv6 报文时才会进行IPv6 MTU 分片,中间节点转发IPv6 报文时不进行IPv6 MTU 分片。当 IPv6 报文长度大于出接口 IPv6 MTU 时,设备会丢弃报文。使用 SRv6 作为IPv6数据平面协议,MTU 问题对SRv6 的影响较大。
G-SRv6 实现原理
G-SID

- G-SRv6主要采用“减少冗余”+“差异覆盖”方式实现。一个128bit SID中包括Block(即共同前缀Common Prefix)、G-SID(Node ID+Function)及Args/Padding等内容。
- 其中,Block字段与Node ID组合即为Locator前缀。Block是运营商为子网分配的地址空间前缀,Node ID则是该子网内区分节点的标识。通过将Segment List中冗余的Block移除,仅携带变化的G-SID(Node ID+Function)部分,从而可大幅减少SRv6的报头开销。在更新IPv6报头中的目的地址时,只需将差异部分的G-SID更新至目的地址相应字段,同时更新SI值即可。
- 基于SRv6头压缩设计原则分析,G-SID长度采用32bit较为合适。其中Node ID和Function的长度理论上可灵活定义,但需综合考虑网络规模、业务量等情况进行规划。
G-SRH

G-SRv6基于SRH通用格式,同时支持SRv6 SID与G-SID的编码,以满足压缩与非压缩SID在同一个segment list中混编。在G-SRv6混编场景下,定义了压缩子路径的概念。一个压缩子路径中的G-SID具有相同Block(即Common Prefix),每个压缩子路径起始128bit(G-SID Container)需携带完整的Block、起始G-SID及Argment/Padding等字段,后续的G-SID Container中则只携带G-SID部分,最后一个G-SID即为压缩子路径的最后一跳,如果G-SID无法排满128bit,则以0填充。G-SRH同样采用Segment Left字段指示128bit SRv6 SID的位置,当压缩子路径结束后,SL指针指向下一个128bit SRv6 SID,并将其全部拷贝至IPv6报文头的目的地址(DA)字段中。
SI(SID Index)

G-SRv6中一个G-SID Container包含4个G-SID,因此需要额外的指针SI(SID Index)来指向当前节点的G-SID。SI字段的位置在128bit G-SRv6地址中Arguments的最后2位。
设备生成压缩SID时,分配地址空间给各字段,SI初始为0,在转发时只有当前目的地址是可压缩SID时SI才生效,此时SL指向G-SID Container,SI指向下一跳G-SID。SI与SL都是采用倒叙排列。
G-SRv6中一个G-SID Container包含4个G-SID,因此需要额外的指针SI(SID Index)来指向当前节点的G-SID。SI字段的位置在128bit G-SRv6地址中Arguments的最后2位。
设备生成压缩SID时,分配地址空间给各字段,SI初始为0,在转发时只有当前目的地址是可压缩SID时SI才生效,此时SL指向G-SID Container,SI指向下一跳G-SID。SI与SL都是采用倒叙排列。
COC Flavor

为了区分G-SID和SRv6 SID而定义了COC(Continuation of Compression) Flavor。COC Flavor是SID的一个特殊属性,用于识别下一个SID是否为32bit的G-SID。COC Flavor可用来标记Segment List中G-SRv6压缩子路径的起始和结束,即128bits SID和32bits的G-SID之间的边界。
如何使用测试仪进行G-SRv6基本功能测试
信而泰Daryu系列L2~3层高端仪表支持G-SRv6的构建:
- 仪表模拟PE+P, 设备对仪表流量执行引流,此方式可真实模拟设备对于G-SRv6模型的测试,构建时可参考如下方式:
目标:构造L3VPN over G-SRv6-TE模型,被测试设备通过SRv6-Policy匹配路由中color属性引流
应用场景:G-SRv6-TE 功能测试

构造模型步骤:以下介绍两侧单端口创建方式,两侧多端口创建时方法相似,本文不展开介绍。
- 使用SRv6 VPN向导可以快速创建本次测试所需基本拓扑和业务配置,并根据实际dut配置填写仪表模拟的P/PE节点的各项配置,以及CE侧接入和通告私网路由等配置。SRv6 VPN向导创建完成后再检查生成的配置是否与测试规划一致,需要手工修改成预期配置

根据实际dut配置填写仪表模拟的P/PE节点的各项配置
- 仪表模拟多跳的P节点,通过isis发布每个节点的邻居tlv和各自的ipv6路由tlv、SRv6 locator tlv等信息,并且邻居tlv和SRv6 locator tlv中携带相应的end with coc、end.x with coc,实现向dut通告G-SRv6能力,如下所示

发布各个P/PE节点的邻居tlv和end.x with coc

发布各P节点SRv6 locator的IPv6前缀路由
- 仪表模拟PE时,需要与被测设备建立起VPNv4与VPNv6邻居,建立邻居需要使用IGP域内路由建立,一般情况下以路由可达的loopback接口地址建立。isis通告loopback地址与srv6 locator可达路由,如下所示:
2:2:2::2为BGP loopback接口地址,aaaa:1:1:1013::为PE节点的SRv6 locator IPv6路由前缀

PE节点通告loopback地址和的SRv6 locator的IPv6路由前缀
- 修改PE侧bgp路由,添加扩展团体属性,使路由能够被sr policy匹配,并添加PE相应的SRv6 prefix-sid等信息


IPv4/IPv6路由都需要添加扩展团体属性和SRv6信息
- PE侧路由通过bgp通告,ipv4/ipv6路由各100条
- 仪表模拟CE时,CE侧路由通过ospfv2/ospfv3通告,ipv4/ipv6路由各通告100条
- 检查“编辑虚拟网络”中私网路由信息是否符合预期,ipv4/ipv6路由都需要检查
- 另取一个端口与dut建立bgp sr policy,配置sr policy路由,携带color100、segment list中填写压缩SRv6 sid

- 进入“流模板”界面,选择“新建绑定流”创建两端流量
- ipv4/ipv6流量创建步骤相同,在此以ipv4流量为例

选择流量的源和目的端点,点击“新增”创建流量的源和目的点对,勾选双向流量同时创建,隧道绑定选择ipv6
- 隧道绑定界面选择PE到CE侧的流量,点击“自动绑定”,绑定SRv6 SID业务标签,然后可以跳过剩余配置,点击“完成”,完成仪表配置

- isis、bgp、ospfv2/ospfv3协议逐个启动,在dut上查看G-SRv6相关信息,查看isis lsdb可以看到仪表通告的携带coc属性的end.x sid

- dut上查看srv6 policy状态正常,segment-list上显示第一跳SID位128位不压缩,从第二跳开始压缩成32位

- srv6 policy up后,PE路由可以正常迭代到SRv6 TE隧道

- 发送双向流量,停止流量后双向收发一致

- CE侧抓包观察,仪表发送的PE侧流量经过dut后正常封装压缩的SRv6 SID,符合预期

DarYu-X系列测试仪
DarYu-X系列高性能网络测试仪是信而泰推出的面向高端路由器等高端数通设备的测试产品,具有高性能、高密度、高速率等特点,配置信而泰基于PCT架构的新一代测试软件RENIX和X2系列测试模块,可提供高性能G-SRv6测试解决方案,为高端路由产品的研发保驾护航。
G-SRv6实现原理及基本功能测试方法的更多相关文章
- 简单介绍Excel单元格行列指示的实现原理(俗称聚光灯功能)
原始出处:www.cnblogs.com/Charltsing/p/CellLight.html QQ:564955427 Excel单元格行列指示的实现原理(俗称聚光灯功能) 单元格行列指示功能在录 ...
- Web 常用功能测试方法
功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能.常用的测试方法如下: 1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确. 2. 相 ...
- 常用的web功能测试方法
功能测试就是对产品各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求功能,即是否满足需求.常用的测试方法如下: 1.页面连接检查:每一个连接是否都有对应的页面,并且页面之间切换正确. ...
- 一、VIP课程:互联网工程专题 05-快速掌握Jenkins原理与核心功能
第五课:快速掌握jenkins核心功能.docx 2.164 (2019-02) and newer: Java 8 or Java 11 一.jenkins 概述与环境配置 知识点: 关于可持续化集 ...
- golang中字符串的底层实现原理和常见功能
1. 字符串的底层实现原理 package main import ( "fmt" "strconv" "unicode/utf8" ) f ...
- Openstack组件实现原理 — Keystone认证功能
目录 目录 前言 Keystone安装列表 Keystone架构 Keystone的管理对象 一个理解Keystone管理对象功能的例子 Keystone管理对象之间的关系 Keystone V3的新 ...
- KVC之-setValue:forKey:方法实现原理与验证
KVC之-setValue:forKey:方法实现原理与验证 - (void)setValue:(id)value forKey:(NSString *)key方法,实现原理与验证 功能:使用一个字符 ...
- Openstack组件实现原理 — OpenVswitch/Gre/vlan
目录 目录 前文提要 Neutron 管理的网络相关实体 OpenVswitchOVS OVS 的架构 VLan GRE 隧道 Compute Node 中的 Instance 通过 GRE 访问 P ...
- Web应用程序自动化测试工具Selenium的主要功能有哪些?
Selenium是一个用于Web应用程序测试的工具.是一个开源的Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可 ...
- #知识#室内设计原理ing
室内设计原理 第一章 室内设计的含义和基本观点 人的一生,绝大部分时间是在室内度过的,因此,人们设计创造的室内环境,必然会直接关系到室内生活.生产活动的质量,关系到人们的安全.健康.效率.舒适等等.室 ...
随机推荐
- C# WinForms 实现打印监听组件
一.组件简介 打印监听组件是一款集成于 Windows 桌面环境的打印任务管理与监控工具,适用于企业级应用场景.它不仅支持多打印机任务的实时监控,还能通过 WebSocket 与外部系统集成,实现自动 ...
- Review-Gate MCP,让你的 cursor request 次数翻 5 倍
最新资讯: cursor pro 改为无限制,但某些模型(新模型?)依旧限制,看起来是一个黑盒,具体没细说,因此你可以考虑装或者不装本文的 MCP. 另外,本文属于前端社区的一次分享,只是顺带迁移到个 ...
- [书籍精读]《响应式Web设计 HTML5和CSS3实战(第二版)》精读笔记分享
写在前面 书籍介绍:本书主要讲解了如何运用HTML5和CSS3来进行响应式Web设计,使页面的设计与开发根据用户行为以及设备环境(系统平台.屏幕尺寸.屏幕定向等)来进行相应的响应和调整. 我的简评:响 ...
- Visual Components 自定义工具创建吸附接口
添加模型 打开VC,添加机器人模型 IRB 120, 再添加自定义工具模型(这里用基础模型的圆柱充当) 给自定义工具添加 "坐标框A" 和 "坐标框B" 切换到 ...
- Google Cloud Function函数访问AWS的Redis服务(一)
很久很久以前,几家的redis可以通过设置白名单ip,公开访问redis服务.现在所有的redis都进行了隔离,无法相互访问. 我在aws上有台redis服务.现在我希望Google Cloud Fu ...
- screen 相当于 浏览器的多标签.简单使用说明
简介:screen 相当于 浏览器的多标签. 转载: CSDN 个人常用命令 screen -ls 显示所有视窗 杀死视窗 kill -9 threadnum 例如在上面的2637,kill -9 2 ...
- 前端项目中的需求 pdf 转 svg
简介 通过 工具 inskcape 参考链接 https://zhuanlan.zhihu.com/p/144722704
- java 泛型类2
简介 泛型类 确保某个类一定包含某个接口函数 code package cn; import cn.Pair; import java.time.*; class ArrayAlg2{ public ...
- Restcloud ETL实践之数据行列转换
RestCloud ETL社区版是一款数据集成工具,提供可视化多数据管道构建.数据源管理.运行监控及权限管理功能. 本篇将使用多行转多列的方式把下方图中的表数据进行简化. 简化思路:把相同姓名中不 ...
- SciTech-Github-解决git push时的 Error: hasDotgit: contains '.git'
AbaelsMacBookPro:pelican abaelhe$ git push Enumerating objects: 6872, done. Counting objects: 100% ( ...