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 实现原理
1、 G-SID
- G-SRv6主要采用“减少冗余”+“差异覆盖”方式实现。一个128bit SID中包括Block(即共同前缀CommonPrefix)、G-SID(Node ID+Function)及Args/Padding等内容。
- 其中,Block字段与Node ID组合即为Locator前缀。Block是运营商为子网分配的地址空间前缀,Node ID则是该子网内区分节点的标识。通过将SegmentList中冗余的Block移除,仅携带变化的G-SID(Node ID+Function)部分,从而可大幅减少SRv6的报头开销。在更新IPv6报头中的目的地址时,只需将差异部分的G-SID更新至目的地址相应字段,同时更新SI值即可。
- 基于SRv6头压缩设计原则分析,G-SID长度采用32bit较为合适。其中Node ID和Function的长度理论上可灵活定义,但需综合考虑网络规模、业务量等情况进行规划。
2、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)字段中。
3、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都是采用倒叙排列。
4、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的构建:
1、仪表模拟PE+P, 设备对仪表流量执行引流,此方式可真实模拟设备对于G-SRv6模型的测试,构建时可参考如下方式:
**目标:**构造L3VPN over G-SRv6-TE模型,被测试设备通过SRv6-Policy匹配路由中color属性引流
**应用场景:**G-SRv6-TE 功能测试
构造模型步骤:以下介绍两侧单端口创建方式,两侧多端口创建时方法相似,本文不展开介绍。
1)使用SRv6 VPN向导可以快速创建本次测试所需基本拓扑和业务配置,并根据实际dut配置填写仪表模拟的P/PE节点的各项配置,以及CE侧接入和通告私网路由等配置。SRv6 VPN向导创建完成后再检查生成的配置是否与测试规划一致,需要手工修改成预期配置;
根据实际dut配置填写仪表模拟的P/PE节点的各项配置
2)仪表模拟多跳的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前缀路由
3)仪表模拟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路由前缀
4)修改PE侧bgp路由,添加扩展团体属性,使路由能够被sr policy匹配,并添加PE相应的SRv6 prefix-sid等信息;
IPv4/IPv6路由都需要添加扩展团体属性和SRv6信息
5)PE侧路由通过bgp通告,ipv4/ipv6路由各100条;
6)仪表模拟CE时,CE侧路由通过ospfv2/ospfv3通告,ipv4/ipv6路由各通告100条;
7)检查“编辑虚拟网络”中私网路由信息是否符合预期,ipv4/ipv6路由都需要检查;
8)另取一个端口与dut建立bgp sr policy,配置sr policy路由,携带color100、segment list中填写压缩SRv6 sid;
9)进入“流模板”界面,选择“新建绑定流”创建两端流量;
10)ipv4/ipv6流量创建步骤相同,在此以ipv4流量为例;
选择流量的源和目的端点,点击“新增”创建流量的源和目的点对,勾选双向流量同时创建,隧道绑定选择ipv6;
11)隧道绑定界面选择PE到CE侧的流量,点击“自动绑定”,绑定SRv6 SID业务标签,然后可以跳过剩余配置,点击“完成”,完成仪表配置;
12)isis、bgp、ospfv2/ospfv3协议逐个启动,在dut上查看G-SRv6相关信息,查看isis lsdb可以看到仪表通告的携带coc属性的end.x sid;
13)dut上查看srv6 policy状态正常,segment-list上显示第一跳SID位128位不压缩,从第二跳开始压缩成32位;
14)srv6 policy up后,PE路由可以正常迭代到SRv6 TE隧道;
15)发送双向流量,停止流量后双向收发一致;
16)CE侧抓包观察,仪表发送的PE侧流量经过dut后正常封装压缩的SRv6 SID,符合预期。
DarYu-X系列测试仪
DarYu-X系列高性能网络测试仪是信而泰推出的面向高端路由器等高端数通设备的测试产品,具有高性能、高密度、高速率等特点,配置信而泰基于PCT架构的新一代测试软件RENIX和X2系列测试模块,可提供高性能G-SRv6测试解决方案,为高端路由产品的研发保驾护航。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!