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
室内设计原理 第一章 室内设计的含义和基本观点 人的一生,绝大部分时间是在室内度过的,因此,人们设计创造的室内环境,必然会直接关系到室内生活.生产活动的质量,关系到人们的安全.健康.效率.舒适等等.室 ...
随机推荐
- [abc306h/ex] Balance Scale
Ex - Balance Scale 考虑只有>和<的情况,相当于给每条边定向,当且仅当成环时不合法,那么方案数就是\(DAG\)的方案数 对于=,就是将两个点合并 然后对于一般的求\(n ...
- 十三、buildroot 系统package新增应用 编写步骤
4.7.package 添加配置文件 4.7.1.操作步骤 1.集成普通包 如 my-custom-package 在 my-custom-package 目录中创建 Config.in 文件 con ...
- Docker 一键安装部署 JumpServer 堡垒机
一.环境准备 bash # 更新系统 sudo apt update && sudo apt upgrade -y # 安装 Docker sudo apt install -y ...
- css3桃花随意飘落
桃花随意飘落 css3 + js 不实用第三方类库 效果图 <!DOCTYPE html> <html lang="en"> <head> &l ...
- java用URL下载内容
package Kuang; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStre ...
- C++ delete [] 与 delete
简介 对于普通数据类型数组 使用 delete [] pa 和 delete pa, 都不会产生内存泄露. 对于自己定义的对象数组, 会产生内存泄露. 环境 g++ , valgrind 来查看是否产 ...
- Java对接维特智能WIT901WIFI姿态传感器
背景 最近有个项目需要对接传感器,将传感器的数据转发到其他设备,目前只有维特智能的WIT901WIFI传感器. 传感器长这样 配置网络 这个传感器是通过WIFI传输数据,所以第一步需要配置WIFI. ...
- 日事清OGSM模式正式上线:目标管理+战略执行双模式支持,提升企业效率
OGSM模式正式发布 为进一步提升目标管理的执行力和系统性,日事清对目标模块进行了重要升级: 原"规划视图"已统一升级为"行动"模块,全面引入了时下最主流的战略 ...
- 题解:Luogu-P9433 [NAPC-#1] Stage5 - Conveyors
传送门 个人认为,做这种题把思路想清晰代码自然就写出来了,所以要注重思考的过程,重点把握一些自己想不到的性质或技巧. 本篇题解在现有题解的基础上对解法进行了更详细的说明.阅读前建议确保自己会树链剖分和 ...
- 微软Win11 Build 22000.100更流畅好用了
据深度系统官网得到的最新消息,微软官方发布了Windows 11 Build 22000.100预览版更新.Windows开发团队表示请留意该预览版中的已知问题,从而了解新预览版可能会带来的体验问题. ...