Alex_McAvoy

想要成为渔夫的猎手

网络层路由测试

【路由容量】

测试路由设备的路由容量时,通常测试路由设备的转发表的大小,路由容量的测试方法主要有 3 种:控制台读数法、控制层学习法、数据转发层和控制层结合法

控制台读数法

控制台读数法即在被测路由设备的控制台上直接观察测试结果,通过将仪表的端口与被测路由设备的端口相连,令仪表向被测设备注入一定数量带有特定网络前缀的路由条目,然后在被测路由设备上通过控制台命令观察路由表中是否已正确学习到仪表所发送的路由信息

通常,对于一般路由设备,如果其路由表的容量超过了其最大值,就会在控制台上显示异常结果,一般采用二分法来注入路由条目数量,以进行测试,从而测出被测设备的最大路由容量

该方法可以直截了当的观测到测试结果,但观察到的为路由表的内容,而不是转发表的内容,而且当路由表表项较多时肉眼也难以观察,不适合大规模路由性能测试

控制层学习法

控制层学习法测试仪表上直接观察测试信息,该方法需要使用测试仪表上的至少两个端口:

  1. 一个端口 A 仿真成发送路由更新信息的邻居路由器向被测设备下发一定数量带有特定网络前缀的路由条目
  2. 被测路由设备在学到了来自端口 A 通告的路由后,会将其学到的路由通告给由端口 B 仿真的另一个邻居路由器
  3. 通过在仪表上直接观测端口 B 所学到的路由信息量与端口 A 所发送的路由信息量,并进行相应的比较就可以判断出被测设备的最大路由容量
  4. 如果端口 B 学到的路由信息量小于端口 A 所发送的路由信息量,则表示注入的路由条目数超过了被测设备的最大容量,此时,采用二分法减少所注入的路由条目再次测试,直到测出被测设备的最大路由容量

该方法相对于直接观察法来说有了改进,可以在仪表上进行测试结果的观测,可实现大量路由条目的注入、接收与比较,因此具有测试较大路由表容量测试的能力

但该方法和直接观察法一样,都只是对路由器的路由表进行了验证,即只验证了控制层面的转发,并没有验证到数据转发层面的转发,即测试出的最大容量为路由表的最大容量,而不是真正用于转发的转发表最大容量

数据转发层与控制层结合法

数据转发层与控制层结合法需要使用测试仪表的两个端口:

  1. 仪表端口 A 仿真成 DUT 的一个邻居路由器 R1 向 DUT 注入一定数量带有特定网络前缀的路由条目
  2. 从路由学习的反方向,由仪表端口 B 仿真成一个主机向仪表端口 A 仿真的路由器 R1 发送路由测试流量
  3. 测试流量目的 IP 地址为仪表端口 A 向被测设备所发布的 IP 路由前缀
  4. 观测仪表端口 A 的接收流量速率与端口中 B 发送测试流量的速率是否相同
    • 若接收流量速率远小于端口 A 的发送速率,即测试流在传输过程中出现大量丢包,则表明在路由学习过程中,超过了 DUT 的最大路由表容量而导致溢出
    • 若接收流量速率等于端口 A 的发送速率,则应增加下发的路由表条目数
  5. 利用二分法,反复迭代,即可测出 DUT 的路由容量

该方法的拓扑结构如下图,R1 用于发送特定网络前缀的路由更新信息到 DUT,HOST 主机用于从路由学习的反方向,向 DUT 发送路由的验证流量

【路由振荡】

概述

路由振荡是网络中路由不稳定的主要表现形式,其可能导致全网范围内的路由重新计算,直接影响到路由的稳定性,从而影响 IP 报文的转发

如下图,是一个单域的 OSPF 网络

假如由于某种原因导致 R1 的 F0/0 端口由 UP 状态转为 DOWN 状态,则需要这个区域内的所有 OSPF 路由器更新链路状态数据库和路由表

完成路由更新需要时间,在正确的路由下发到 FIB 之前,路由器的转发可能是错误的,更为糟糕的是,在区域中的各路由器完成更新后,原故障链路恢复了连接

若频繁出现 UP 和 DOWN 交替,则各路由器就出现路由振荡

测试思路

路由振荡测试的基本设计思路为:

  1. 使用测试仪表的一个端口向 DUT 下发多个特定 IP 网络前缀的路由,另一端口用来发送到这些特定 IP 网络前缀的测试流量
  2. 在路由振荡测试的整个过程中,流量发送端口始终保持流量的发送状态不变
  3. 当路由已稳定时,撤消下发的多个特定 IP 网络前缀中的部分路由,等路由再次稳定时,又重新下发刚撤消的路由
  4. 重复步骤 3 的反复下发、撤消过程,人为制造出路由振荡的环境
  5. 在测试仪表上观测控制层面的转发,并同时观测数据转发层面测试流的转发速率,得到测试结果

如下图,是路由振荡测试的逻辑拓扑结构

测试步骤

路由振荡测试步骤如下:

  1. 将仪表的端口 A 仿真成一个 OSPF 路由器,在该仿真 OSPF 路由器上通过构造多种不同的 LSAs(如:网络路由 LSA、汇总路由 LSA、外部路由 LSA)来仿真出一个虚拟的互连网络环境,并将这些 LSA 下发给 DUT
  2. 由仪表端口 B 仿真的主机向仪表端口 A 所连的虚拟网络中的所有目标网络发送测试流量
  3. 在测试仪表上使用向导或手工命令建立与编辑反复撤消与重发外部路由通告的命令集,并设置测试的持续时间,该时间可根据用户需求进行设置
  4. 启动反复撤消与重发外部路由通告的命令集,在端口 A 上监测所接收的测试流量,并将其与端口 B 所发送的测试流量进行比较,以判断路由振荡的严重性

测试效果图

如下图,是路由振荡测试后得到的效果图

由于网络状态或路由变化反映到路由器的 FIB 表存在一定的时间延迟,也就是说控制层面的变化需要一定的时间延迟之后才能从数据转发层面显示出来

通常这两条曲线会存在一定程度的偏离或不一致,这两条曲线重叠部分越多,说明控制层面的变化反映到数据转发层面的延迟越小,相应的表明被测路由设备振荡测试性能越好

【路由收敛】

概述

根据路由收敛时间的定义,在一个已经收敛的网络中,网络拓扑发生变化会导致网路中的各路由器通过交换网络信息、计算最佳路径并更新路由表等系列行为来重新达到对网络状态或拓扑的一致认识,从前一个收敛状态到新的收敛状态所需的时间即为路由收敛时间

测试思路

路由收敛测试基本设计思路如下:

  1. 使用测试仪表的两个端口仿真成两个路由器,然后由这两个仿真路由器分别向 DUT 下发具有不同度量的关于同一 IP 网络前缀的路由
  2. DUT 收到路由更新信息后,计算到该特定 IP 网络前缀的路由,选择其中的最优路由更新自己的路由表并将其插入到 FIB 表中
  3. 由仪表的第三个端口来发送到这个 IP 网络前缀的测试流量,以判断网络是否已处于稳定状态
  4. 当网络已处于稳定状态时,将原来下发的最优路由撤销,则 DUT 重新计算到这特定 IP 网络前缀的路由,并选择次优的路由来更新自己的路由表并插入到 FIB 表中
  5. 通过在测试仪表上观测流量转发曲线,即可计算出路由收敛的时间

如下图,是路由收敛测试的逻辑拓扑结构,端口 A 用来发布测试流量,B、C 分别仿真成邻居路由器 R1、R2

测试步骤

路由收敛测试步骤如下:

  1. R1、R2 分别向 DUT 下发具有相同 IP 网络前缀的路由,但 R1 下发的路由其度量要小一些,为最优路由,R2 下发的路由其度量要大一些,为次优路由
  2. 端口 A 构建测试流量,测试流量的目的 IP 地址为 B、C 向 DUT 下发的 IP 网络前缀,由于 B 仿真成的 R1 下发的路由为最优,DUT 会将测试流量转发给 B
  3. 通过将 B 接收的流量与 A 发送的流量进行比较,即可判断路由是否收敛,若两者一致,表示路由已处于收敛状态
  4. 撤销 R1 所下发的路由,则 DUT 重新计算到目的地的路由,并选择次优的 C 作为到达目的网络的新的最优路由,在路由变化过程中,A 仍然持续的向 DUT 发送测试流量
  5. 通过将 C 接收的流量与 A 发送的流量进行比较,即可判断网络是否已经达到新的收敛状态
  6. 在测试仪表上观察两种不同收敛状态下的测试流量转发曲线,红线表示最优路由为 B 时的转发曲线,蓝线表示最优路由为 C 时的转发曲线
  7. 通过计算数据转发从原有的稳定状态到新的稳定状态的时间差,即可得到路由收敛时间

测试结果

根据上图的曲线

业务受影响的角度考虑,以时间 t4 减去 t1,即次优路由学到并达到稳定所需的时间减去最优路由撤销的时间

这种计算方法更加接近用户体验,因为当路由发生变化并影响到数据转发时,用户可以感知到这种影响,只有当路由收敛完毕,流量恢复到收敛前的水平,用户的业务才完全恢复

网络运营商的角度考虑,即从收敛过程的丢包速率考虑,路由变化对业务的影响可以用丢包总数衡量,即:

几何学的角度分析,X 轴为时间(秒),Y 轴为速率(包/秒),$总发包数 = X \times Y$,总丢包数=图形的缺口面积,即:

感谢您对我的支持,让我继续努力分享有用的技术与知识点!