RFC 7747:Basic BGP Convergence Benchmarking Methodology for Data-Plane Convergence(BGP数据平面收敛的基准测试方法学)是IETF在2016年4月发布的关于基本BGP数据平面收敛的基准测试方法学的RFC标准文档,提出了通用测试拓扑和注意事项,给出了具体的测试步骤和收敛计算方法。
BGP(Border Gateway Protocol, 边界网关协议)作为AS(Autonomous System,自治系统)间的缺省路由协议被广泛应用。网络的稳定性和可靠性非常重要,无论是网络中节点或者链路出现故障时的被动切换,还是出于实际业务需要的主动割接场景,都希望流量能够迅速切换到备用路径,流量损失最小化,以保证网络通信的正常进行。许多服务提供商都要求BGP实现整个因特网路由表的亚秒级FIB收敛,以便为用户提供更好的服务。
RFC7747提出了 BGP FIB(Forwarding Information Base,转发信息表)收敛性能的基准测试方法,提供了统一的标准化方法测试不同类型的设备,包括单个网络设备的BGP数据面收敛性能,以及通过三个或四个节点来模拟和重现网络中可能发生的各种情况。这里讨论的方法适用于IPv4和IPv6,也适用于IBGP和EBGP,但L2VPN、L3VPN以及与IGP的交互场景不在讨论范围内。
本文将从以下五个方面解读RFC7747,对BGP数据平面收敛的基准测试方法进行探讨:
基本定义
测试拓扑
测试注意事项
测试用例
报告格式
1. 基本定义
BGP的收敛包括RIB(Routing Information Base,路由信息表)和FIB两个层面。RIB和FIB是两个不同的概念。RIB用于存储和管理路由信息,而FIB用于存储和管理实际的转发路径。当路由信息发生变化时,路由器会更新RIB中的路由信息,然后重新计算并更新FIB中的转发路径。
RFC7747中FIB收敛的定义:FIB(数据平面)收敛是指完成所有的FIB变化,所有流量按新路由转发。
FIB (data-plane) convergence is defined as the completion of all FIB changes so that all forwarded traffic then takes the newly proposed route.
发表于2005年的RFC4098:
Terminology for Benchmarking BGP Device Convergence in the Control Plane (BGP控制平面设备收敛的基准测试术语)对BGP的控制平面相关术语做了详细解释。BGP RIB可以分成三个部分:Adj-RIBs-In、Loc-RIB和Adj-RIBs-Out,关系如下图所示。
图1. BGP RIB各部分关系图
2. 测试拓扑
RFC7747列出了四个测试拓扑:
图2. 拓扑1 基本测试组网
图3. 拓扑2 iBGP或者eBGP的三节点组网
图4. 拓扑3 eBGP多跳场景
图5. 拓扑4 iBGP或者eBGP的四节点组网
3. 测试注意事项
BGP收敛时间受到多个因素的影响,RFC7747列出的测试注意事项包括:对等体数量、每个对等体的路由数量、策略、配置参数(定时器等)、测量精度、统计、认证、收敛事件、高可靠性等共10个方面。这些都会对测试结果产生影响,应该在测试报告中详细记录(参见报告格式章节)。其中配置参数一节给出了参数基本设置:
1. Interface failure detection timer (0 ms)
2. BGP keepalive timer (1 min)
3. BGP holdtime (3 min)
4. BGP update delay timer (0 s)
5. ConnectRetry timer (1 s)
6. TCP segment size (4096 bytes)
7. Minimum Route Advertisement Interval (MRAI) (0 s)
8. MinASOriginationInterval (MAOI) (0 s)
9. Route flap damping parameters (off)
10. TCP Authentication Option (off)
测量精度:当通过丢包来计算路由收敛时间时,两个连续报文间的时间间隔就是最高精度。因此流量速率需要设置在一个合适的值。过大比如超过设备性能,正常情况就会丢包,无法用于测试;过小,报文间隔时间大于故障收敛时间,则无法测出收敛时间。
做收敛测试前,需要先摸底被测设备在当前测试拓扑上的吞吐量。不同被测设备的吞吐量可能有差异。测试流量的大小需要考虑满足所有不同款型被测设备的能力,也需要结合实际应用场景综合考虑。
重复测试次数:受定时器、CPU调度等影响,建议多次重复测试,以便更准确地评估测试结果。重复测试次数的确定,要结合具体情况,比如测试的目的、可用资源和时间限制等。通常可以进行三次重复测试,如果测试结果偏差较大,则需要进行更多次的重复测试,以确保结果的准确性和可靠性。
收敛事件:收敛事件是指网络中的异常事件,导致路由振荡,然后重新收敛到新的稳定状态。这个过程可能会导致收敛延迟。收敛事件可能是实际的故障,也可能不是。收敛根据范围可以分为整个互联网、自治系统内部和单台设备三种情况。单台设备的收敛又分为数据转发过程的收敛和路由过程的收敛。
4. 测试用例
RFC7747给出了一系列测试用例,这些用例的共同说明如下:
1)BGP对等体处于Established建立状态。
2)每次测试首先重置BGP状态,保证每次测试开始时,BGP对等体是Idle初始状态,数据库清空。
3)在测试拓扑上确认流量和路由,确保基于通告路由的流量没有丢包。
4)测量通告路由的到达时间戳,通过在仿真器和DUT之间安装一个内联监测设备,或使用DUT的扩展端口连接外部分析仪。这种内联监视器或外部分析器需要与协议和流量仿真器同步。
5)所有设备必须使用NTP或者其他时钟同步机制进行同步。
4.1 基础收敛测试
BGP非故障场景,包括5个用例。
用例 | 拓扑 | 测试目的 |
RIB-IN | 图2. 拓扑1 | 测试通过BGP学习并添加一条路由到RIB表所需时间 |
RIB- OUT | 图3. 拓扑2 | 测试通过BGP学习、添加、发布一条路由所需时间 |
eBGP | 图3. 拓扑2 | 测试eBGP场景 |
iBGP | 图3. 拓扑2 | 测试iBGP场景 |
eBGP Multi hop | 图4. 拓扑3 | 测试eBGP多跳场景 |
RFC7747的每个用例都给出了具体详细的步骤和结果计算方法。RIB-OUT用例的主要步骤:
1)所有设备配置时钟同步。所有设备的变量配置为相同的值。DUT和仿真器、DUT和辅助节点HLP建立BGP邻接关系,并等待3个keepalive时间或者是一个可配置的延迟时间,以确保邻接关系建立。
2)仿真器发送流量到HLP,目的地址是指定路由。最开始因为没有路由,出接口没有流量。
3)仿真器通告路由到DUT,记录DUT接收到路由的时间。
4)DUT向HLP转发路由,记录DUT转发路由的时间。
4)HLP、DUT学习到路由后转发流量,记录仿真器接收到流量的时间。
结果计算方法:
FIB收敛时间 = 仿真器收到流量的时间 – DUT接收到路由的时间
RIB收敛时间 = DUT转发路由的时间 – DUT接收到路由的时间
如果测试多条路由:
FIB收敛时间 = 仿真器收到最后一条路由的流量的时间 – DUT接收到第一条路由的时间
RIB收敛时间 = DUT转发最后一条路由的时间 – DUT接收到第一条路由的时间
eBGP多跳测试拓扑
默认情况eBGP使用直连接口建立邻居,对应报文的TTL为1。当BGP对等体不直接连接时,比如下面两种场景,需要配置eBGP多跳连接,否则报文会被丢弃。
在eBGP多跳测试中使用Loopback接口可以提高网络的可靠性和灵活性。即使物理接口发生故障或者变化,Loopback接口仍然可以保持稳定,减少了对物理接口的依赖,可以更灵活的配置和管理路由器之间的连接。
图6. eBGP多跳场景一
图7. eBGP多跳场景二
4.2 BGP故障收敛测试
包括3个用例。
用例 | 拓扑 | 测试目的 |
DUT侧 物理链路故障 | 图2. 拓扑1 | 测试由DUT侧链路故障触发的路由收敛时间 |
远端物理链路故障 | 图2. 拓扑1 | 测试由测试仪侧链路故障触发的路由收敛时间 |
DUT侧 ECMP链路故障 | 图2. 拓扑1 | 测试由ECMP链路组中的链路故障触发的路由收敛时间 |
结果计算方法:
正切收敛时间= Emp2接收到流量的时间 – Dp1故障时间
回切收敛时间= Emp1检测到流量的时间 – Dp1恢复时间
4.3 仿真器的BGP邻居故障(非物理链路故障)
使用图2. 拓扑1,测试由仿真器的BGP邻居故障触发的路由收敛时间。
结果计算方法:
正切收敛时间= Emp2接收到流量的时间 – BGP故障时间
回切收敛时间= Emp1检测到流量的时间 – BGP恢复时间
4.4 DUT侧BGP硬复位(不恢复)
使用图2. 拓扑1,测试由DUT硬复位触发的路由收敛时间。
硬复位会清空BGP对等体、RIB、FIB,是完全重新初始化。
结果计算方法:
收敛时间= Emp2接收到流量的时间 – BGP复位时间
4.5 BGP软复位
使用图3. 拓扑2,测试由BGP Route-Refresh报文和通告路由触发的路由收敛时间。
软复位在每个邻居上执行,在重新建立BGP对等体关系时不会清除BGP会话,也不会停止流量。Route-refresh报文用于改变路由策略后刷新BGP路由表,请求BGP对等体重新发送路由信息。只有支持Route-refresh能力的BGP设备会发送和响应此报文。
结果计算方法:
收敛时间 = 仿真器收到流量的时间 – HLP取消策略向DUT发送Route Refresh报文请求路由的时间
4.6 BGP路由撤销收敛时间
使用图3. 拓扑2,测试BGP 撤销路由触发的路由收敛时间。
结果计算方法:
步骤1收敛时间 = 仿真器收不到流量的时间 – 仪表撤销路由时间
总收敛时间=仿真器接收不到流量的时间 – DUT接收到撤销报文的时间 – 步骤1的撤销时间
4.7 BGP 路径属性变化的收敛时间
使用图2. 拓扑1,测试由BGP路径属性变化触发的路由收敛时间。仅适用于公认必须遵循的属性,比如Origin、AS_Path和Next_Hop。
结果计算方法:
收敛时间= Emp2接收到流量的时间 – BGP属性变化时间
4.8 BGP Graceful Restart收敛时间
使用图5. 拓扑4,测试BGP GR触发的收敛时间。
使能GR可以在BGP短时间断连时不删除相应的路由信息,保证了转发不中断,限制了BGP协议震荡范围,从而确保了网络稳定。
RFC4724:Graceful Restart Mechanism for BGP,定义了BGP GR的详细流程。
主要步骤如下:
1) 辅助设备和DUT都支持GR,已完成时钟同步。所有参数为基础配置。DUT和HLP1为相同AS,HLP2和仿真器为另一AS。设备间建立BGP邻接关系,并等待3个keepalive时间或者是一个可配置的延迟时间,以确保邻接关系建立。
2) HLP1配置策略拒绝DUT的路由。仿真器向HLP2通告routeA路由。HLP2向DUT通告routeA路由。DUT向HLP1通告路由,但被拒绝。
3) 仿真器发送流量到HLP1,目的地址为routeA。最初由于路由表中没有对应路由,出接口没有流量。
4) DUT触发GR,记录DUT GR时间。
5) 去掉HLP1的策略。记录出接口接收到流量的时间。
结果计算方法:
收敛时间= 仿真器收到流量的时间 – DUT GR时间 – RIB-IN
5. 报告格式
不同的参数配置、收敛事件类型等都会影响测试结果,RFC7747建议每个用例的报告都包含以下内容。
参数 | 单位或者描述 | |
测试例 | 测试例编号 | |
测试拓扑 | 1、2、3或4 | |
并行链路 | 并行链路的数量 | |
接口类型 | GE、POS、ATM等 | |
收敛事件 | 硬复位、软复位、链路故障、或者其他定义的事件 | |
eBGP会话数 | eBGP会话数量 | |
iBGP会话数 | iBGP会话数量 | |
eBGP邻居 | eBGP邻居数量 | |
iBGP邻居 | iBGP邻居数量 | |
每个对等体的路由 | ||
唯一路由总数 | 路由数量 | |
非唯一路由总数 | 路由数量 | |
配置的IGP | ISIS、OSPF、静态或其他 | |
路由组合 | 路由组合的描述 | |
路由打包 | 一个update中的路由数量 | |
配置路由策略 | 是、否 | |
SIDR源认证 | 是、否 | |
BGP-SEC | 是、否 | |
包长 | 字节 | |
流量负载 | 每秒包个数 | |
测试仪的报文采样间隔 | 秒 | |
转发延迟门限 | 秒 | |
DUT配置的定时器 | 接口故障指示延迟 | 秒 |
保持时间 | 秒 | |
MRAI最小路由通告间隔 | 秒 | |
MAOI最小AS间隔 | 秒 | |
Keepalive时间 | 秒 | |
重连接 | 秒 | |
DUT和测试仪的TCP参数 | MSS | 字节 |
慢启动阈值 | 字节 | |
最大窗口大小 | 字节 |
参数 | 单位 | ||
收敛事件 | 正切、回切 | ||
流量转发衡量标准 | 发送到DUT的总包数 | 报文个数 | |
DUT转发的总包数 | 报文个数 | ||
联通性导致的丢包 | 报文个数 | ||
收敛导致的丢包 | 报文个数 | ||
乱序报文 | 报文个数 | ||
重复报文 | 报文个数 | ||
收敛基准方法 | 基于速率的方法 | 首个路由收敛时间 | 秒 |
总体收敛时间 | 秒 | ||
基于丢包的方法 | 丢包相关的收敛时间 | 秒 | |
基于特定路由的丢包方法 | R-S收敛时间的最小值 | 秒 | |
R-S收敛时间的最大值 | 秒 | ||
R-S收敛时间的中位值 | 秒 | ||
R-S收敛时间的平均值 | 秒 | ||
连通性丢包的基准方法 | 基于丢包的方法 | 基于丢包的LoC时间 | 秒 |
基于特定路由的丢包方法 | LoC最小值 | 秒 数组 | |
基于路由的LoC最小值 | 秒 | ||
基于路由的LoC最大值 | 秒 | ||
基于路由的LoC中位值 | 秒 | ||
基于路由的LoC平均值 | 秒 |
基于速率、基于丢包等收敛方法的详细介绍,参考
RFC6412:Terminology for Benchmarking Link-State IGP Data-Plane Route Convergence。
公众号发表过很多Spirent TestCenter配置BGP相关内容的文章,可以搜索关键字查找。例如:
Spirent TestCenter - BGP配置及参数介绍汇总
Spirent TestCenter小技巧 – BGP如何通告不同Next Hop的路由
RFC7747的用例是按单点故障进行分类的。需要注意的是,实际故障可能是多点故障,比如道路施工导致多根光缆被挖断,或者机房意外停电等。虽然这些场景出现的概率较低,但是影响范围却非常大。因此系统级的收敛测试也非常必要,以确保系统在面对复杂故障时能够有效收敛,提供更全面的保障。
以上就是关于RFC7747的解读,欢迎大家在评论区留言交流,谢谢!
关键词:BGP,RFC测试规范,RFC7747,FIB,数据平面,收敛,测试方法,测试拓扑,注意事项
联系我们:
思博伦官方网站: www.spirent.cn
技术中心热线:400-810-9529
支持邮箱:support@spirent.com
售后网站:support.spirent.com
版权归思博伦通信科技(北京)有限公司所有,思博伦技术中心(SpirentServices)原创发布,转载请联系授权。
长按识别二维码,关注思博伦技术中心