BFD与IGP快速收敛应用测试

cqmmx,2008-9-10

1、背景介绍

目前对网络稳定性影响较大的一般是链路中断、节点失效等故障,而常规的慢 Hello 机制检测耗时较长,且常用 IGP ISIS OSPF )在默认配置情况下,收敛速度很慢,一般需要几十秒钟,会造成骨干电路的大量数据丢失,从而对用户的正常上网带来较大的影响。
cisco 路由器为例,默认配置情况下 OSPF ISIS 路由协议的 hello time dead time 参数如下:
可见,在默认配置情况下,故障时 OSPF ISIS 最坏需要 30 /40 秒才能完成网络重新收敛。在没有传输网络 APS automatic protection switching )保护的情况下,显然这种慢速收敛机制会大幅度降低网络的整体性能,从而降低用户可感知的网络质量。
 
一般情况下,我们希望能在保证网络性能稳定的前提下,提供尽可能快速的流量保护机制。首先,需要明白网络的恢复周期是什么,可以用下来的图来进行简单说明:
从恢复周期图可以看出 IGP 的收敛时间组成,大体上分为一下几个主要部分:
       失效链路检测时间
       报告拓扑变化的新 LSA/LSP 的泛洪时间
       各路由器的路由表计算时间(包括 SPF 计算时间和路由表计算及线卡 FIB 更新时间)
从实际情况来看,为了加快流量保护速度, IGP 收敛时间 的①和③两部分可以进一步优化,目前业内主要采取的优化措施是使用 BFD 检测、 IGP 快速收敛和 MPLS FRR 等相关技术。其中 MPLS FRR 超出本文讨论范围,请另外查询相关资料。
 

2、BFD技术简介

BFD(双向转发检测)是一个简单的“Hello”协议,主要用于对相邻转发引擎之间通道故障提供轻负荷、持续时间短的检测,并将检测结果及时通知IGP。
在很多方面,它与普通路由协议的邻居检测功能类似,一对系统在邻居间的会话通道上周期性的发送检测报文,如果超过 dead time 的时间内没有收到对端的 hello 报文,则认为链路发生故障,并发布拓扑变更信息,启动网络收敛过程。当然,为了减少负荷,系统之间的发送和接收速率需要协商。
然而,与以往的其他“ Hello ”检测机制相比, BFD 只检测下一跳设备连接状态,具有轻负荷、灵敏度高、适应范围广的检测特点。 BFD 能够在系统之间的任何类型通道上进行故障检测,这些通道包括直接的物理链路、虚电路、隧道、 MPLS LSP 、多跳路由通道,以及非直接的通道(如跨接二层以太网)。同时正是由于 BFD 实现故障检测的简单、单一性,致使 BFD 能够专注于转发故障的快速检测,帮助网络以良好 QoS 实现各类业务的传输。
BFD 的定位是更多的绑定到转发平面,从而脱离具体的网络协议,使网络快速检测缺陷、实现电信级倒换成为可能;加上 BFD 处理的低开销使得 BFD 具有很好的扩展性和更广的适用性。
目前 BFD 支持 OSPF ISIS BGP 等全部主流路由协议。当邻居关系建立后,路由器将告诉 BFD 协议去检测邻接连接状态。 BFD 检测报文在路由器的 FIB 表中具有高的优先级,并且通过 unicast 形式相互传播,可保证监测链路拥塞时也不会影响 BFD 报文的传送。
BFD 协议可分为两种工作模式:异步模式、查询模式,另外还有一种辅助回声功能,它可以与这两种模式结合起来使用。异步模式和查询模式的本质区别在于检测的位置不同,异步模式下本端按一定的发送周期发送 BFD 控制报文,需要在远端检测本端系统发送的 BFD 控制报文;而在查询模式下检测本端发送的 BFD 控制报文是在本端系统进行的。
BFD 已实现协议国际标准化,现在使用版本是 draft-ietf-bfd-base-02.txt ,目前主流网络设备已基本全部支持,并可实现不同厂家设备间协议互通。

3、IGP快速收敛技术简介

为解决 IGP 默认配置情况下收敛速度慢的问题,业界提出了各种解决方案,主要分为以下几部分:
1 I-SPF Incremental SPF
I-SPF 是指增量路由计算,顾名思义它每次只对变化的一部分路由进行计算,而不是对全部路由重新计算。 I-SPF 除了第一次计算时需要计算全部节点外,每次只计算影响的节点,而最后生成的最短路径树( shortest path tree SPT )与原来的算法所计算的结果相同,大大降低了 CPU 的占用率,提高了网络收敛速度。
2 PRC Partial Route Calculation
部分路由计算 PRC 的原理与 I-SPF 相同,都是只计算变化的那一部分。但 PRC 不需要计算节点路径,而是根据 I-SPF 算出来的 SPT 来更新叶子(路由)。 PRC I-SPF 配合使用可以将网络的收敛性能进一步提高,它是原始 SPF 算法的改进,所以已经代替了原有的算法。
3 LSP 快速扩散
LSP OSPF 协议中叫 LSA ISIS 协议中叫 LSP ,为简化说明,下文统一用 LSP 来表示)快速扩散特性改进了传统 LSDB 使用计时器同步方式,在收到一个或多个比较新的 LSP 时,在路由计算之前,先将小于指定数目的 LSP 扩散出去,加快 LSDB 的同步过程。这种方式在很大程度上可以提高整个网络的收敛速度。
4 智能定时器
为了加快网络收敛速度,又不至因网络变化频繁造成 CPU 资源耗尽,传统 SPF 计算前默认需要等待 5 秒用于收集 LSA/LSP 信息,而且连续两次 SPF 计算间隔为 10 秒。然而通常情况下,一个正常运行的网络是稳定的,发生大量的网络变动的几率很小,路由器不会频繁的进行路由计算,所以第一次触发的时间可以设置的非常短(毫秒级)。如果拓扑变化比较频繁,智能定时器会随着计算次数的增加,间隔时间也会逐渐延长,避免占用大量的 CPU 资源。
Cisco 路由器上用于动态计算的这种定时器的算法基于指数 back-off ,并采用三个独立参数来进行速度与性能的调整。与 SPF 智能定时器类似的还有 LSA/LSP 生成智能定时器。这种指数增加算法有助于快速响应,同时还可以在网络元素不稳定时确保网络稳定。
ISIS 协议的命令语法如下( OSPF 语法类似):
Router isis
lsp-gen-interval  A  B  C
spf-interval  X  Y  Z
下图描述了各参数表示的时间关系。
以上述第一句命令为例,语法中的参数 B 是指路由器在检测到丢失路由邻居关系后,等待多长时间后发出一个新的 LSP ,以毫秒为单位。如果发生第二次状态改变,路由器等待 C 毫秒。如果发生第三次状态改变,路由器等待 2C 毫秒,然后是 4C 毫秒,直到到达最大值 A 秒。至此,如果链路状态持续反复变化,则两个 LSP 发出的时间为 A 秒。然后,如果链路保持稳定状态超过 2A 秒,路由器恢复到初始状态行为。

4、网络部署

为便于说明,我们假设在纯数据业务的情况下, 要求网络能够达到这样的性能指标:链路中断后流量倒换时间小于 300ms
为了达到上述目的,需要进行以下几方面的优化部署工作:
l         启用 BDP 进行链路 / 节点 有效性的快速检测
l         调整 IGP 收敛性能的相关参数,加快收敛速度
需要注意的是, 对于链路失效,尽管失效链路的每端同时发出 LSP ,但收到其中一个 LSP 就足以将该链路排除在 SPF 计算外。而路由器在 SPT 计算中考虑一条新启用链路前,总是检查该链路是否由链路两端同时通告,这被称为双向连接性检查。

4.1、BFD快速检测机制配置

根据总体性能指标要求,我们希望用在链路检测上的时间不要超过指标时间的一半,即 150ms ,这样可设置 BFD hello 报文周期为 50ms ,连续丢失 3 个报文即认为链路失效。当然,如果路由器性能支持,也可以设置 BFD hello 报文周期为 30ms ,连续丢失 5 个报文即认为链路失效,这样准确程度会更高些。
不过要知道,一般来说路由器会在多个接口上同时启用 BFD 机制, hello 报文周期越短,虽然检测精度会提高,但是对路由器性能影响也同样增大,尤其是网络核心路由器。
ISIS 路由协议为例,相关配置如下:
Cisco IOS 配置
router isis isp
  bfd all-interfaces     # 在接口上 启用 bfd 检测功能
exit
int g1/1
  bfd neighbor 192.168.0.1             # 对端接口地址,有些设备默认可不配置本命令
  bfd interval 50 min_rx 50 multiplier 3   # 50ms 发送 bfd 报文,连续 3 次未收到认为链路失效
对端路由器接口配置为:
int g1/1
  bfd neighbor 192.168.0.2              # 对端接口地址
  bfd interval 50 min_rx 50 multiplier 3    # 意义同上
 
Cisco IOS XR 配置
router isis isp
  interface g 0/11/5 /5
   bfd minimum-interval 50   # hello 报文发送时间间隔为 50ms
   bfd multiplier 3          # 连续丢失 3 bfd hello 报文即认为链路 down
   bfd fast-detect ipv4       # 启用 address-family ipv4 bfd 检测功能
由于我们已经在路由器接口上启用了 BFD 检测 因此就不需要再调整 ISIS 的默认 hello time dead time 数值。

4.2、ISIS快速收敛配置

前面 BFD 检测已经占用了 150ms 的时间,为了能达到业务指标要求, ISIS 的收敛时间不能超过 150ms
根据平时网络监控统计数据,正常情况下 SPF 计算时间小于 100ms (与具体网络环境有关,下同), LSP 的传播时间小于 20ms ,各相关参数的选择不能超过上述限制。据此我们把智能定时器的各时间参数定义如下:
Cisco IOS 路由器的 配置
router isis isp
 ispf level-2              # 启用 level 2 ispf 功能
 lsp-gen-interval 5 20 100  #LSP 初始产生时间 20ms 后续递增间隔 100ms 最大间隔时间 5 秒。
  spf-interval 5 50 200      #SPF 初始时间 50ms ,后续递增间隔 200ms ,最大间隔时间 5 秒。
fast-flood 6              # 在进行 SPF 计算先,先 flood 6 LSP
 
Cisco IOS XR 配置:
router isis isp
  lsp-gen-interval initial-wait 20 secondary-wait 100 maximum-wait 5000
 address-family ipv4 unicast
  ispf
  spf-interval initial-wait 50 secondary-wait 200 maximum-wait 5000
exit
int g 0/11/5 /5
lsp fast-flood threshold 6
从实际情况来看,在网络规模比较小的情况下,可以不使用 PRC 计算功能。
这里设置LSP初始等待20ms,主要是为了避免链路因不稳定而在短时间内产生多个LSP,从而造成SPF的多次计算,初始等待一个较短的时间可以大幅度降低这种可能性。另外,SPF计算初始等待50ms,是为了收集网络其他设备发布的LSP,获得网络内完整的LSP信息,初始时间应大于LSP初始等待时间(20ms)+ LSP在网络内的传播时间(最大20ms),这样可以保证进行SPF计算时,网络已趋于稳定。
上述部署配置中,在没有发生链路 flap 的情况下, ISIS 收敛时间为: BFD 检测时间( 150ms + LSP 初始等待时间( 20ms + LSP 传播时间(几 ms + SPT 计算时间(一般为几十 ms +FIB 更新时间(一般小于十几 ms <=300ms ,可以满足业务指标要求。

5、部署效果检测

5.1、BFD效果分析

BFD 效果查看命令主要为
l         Show log
l         show bfd neighbors
l         show bfd neighbors x.x.x.x details
l         IOS XR 命令为 show bfd session detail
 
show log 命令主要是查看端口中断后, BFD 协议是否及时通知了 IGP 。当光缆中断后,一般来说从路由器接口检测到异常直到 protocol down 会经历 2~3 秒,如下列日志:
Sep  5 10:07:07.779: %GRPGE-6-SYNC_LOSS: Interface GigabitEthernet4/0: Loss of Sync
Sep  5 10:07:07.779: %GRPGE-6-RX_LOS: Interface GigabitEthernet4/0: Detected RX Loss of Signal
Sep  5 10:07:09.227: %GRPGE-6-GBIC_TX_FAULT: Interface GigabitEthernet4/0: GBIC TX Fault OK
Sep  5 10:07:09.779: %LINK-3-UPDOWN: Interface GigabitEthernet4/0, changed state to down
Sep  5 10:07:09.779: %OSPF-5-ADJCHG: Process 1, Nbr 172.16.1.6 on GigabitEthernet4/0 from FULL to DOWN, Neighbor Down: Interface down or detached
Sep  5 10:07:10.779: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet4/0, changed state to down
启用 BFD 检测后,则 BFD 能快速主动通知 IGP 发生拓扑结构变化,以便进行快速的 IGP 收敛计算。比如链路失效时的通知日志如下:
Sep  5 20:04:55.650 BeiJing : %CLNS-5-ADJCHANGE: ISIS : Adjacency to R1 (GigabitEthernet4/0) Down, BFD hold time expired
 
查看 BFD 邻居信息命令如下,可以看到各邻居目前状态和使用接口。
R2>show bfd neighbors
OurAddr       NeighAddr     LD/RD RH  Holdown(mult)  State     Int
192.168.0.1     192.168.0.2    37/11  1   146  (3 )      Up        Gi4/0         
10.0.1.1        10.0.1.2        38/8  1   62   (3 )      Up        Gi6/2         
192.168.6.9     192.168.6.10   36/10  1   106  (3 )      Up        Gi5/2         
查看 BFD 邻居详细信息命令如下,可以看到各配置参数的细节。
R2>show bfd neighbors 192.168.0.2 details
OurAddr       NeighAddr     LD/RD RH  Holdown(mult)  State     Int
192.168.0.1     192.168.0.2    37/11  1   102  (3 )      Up        Gi5/1         
Local Diag: 0, Demand mode: 0, Poll bit: 0
MinTxInt: 50000, MinRxInt: 50000, Multiplier: 3
Received MinRxInt: 50000, Received Multiplier: 3
Holdown (hits): 150(0), Hello (hits): 50(9815580)
Rx Count: 10056857, Rx Interval (ms) min/max/avg: 40/56/48 last: 48 ms ago
Tx Count: 9815584, Tx Interval (ms) min/max/avg: 40/64/49 last: 20 ms ago
Registered protocols: ISIS
Uptime: 5d15h
Last packet: Version: 0            - Diagnostic: 0
             I Hear You bit: 1     - Demand bit: 0
             Poll bit: 0           - Final bit: 0
             Multiplier: 3         - Length: 24
             My Discr.: 11          - Your Discr.: 37
             Min tx interval: 50000    - Min rx interval: 50000
             Min Echo interval: 0
查看 BFD 邻居的两个命令在 GSR 上具体显示格式不太一样,邻居的详细信息需要 attach 到线卡上去查看。
 

5.2、ISIS快速收敛效果分析

ISIS 由于是 ISO 协议,在 cisco 路由器上能直接查看的信息相对较少,主要检查命令为:
l         Show isis spf-log
l         show isis lsp-log
l         show clns interface x/y
 
为了便于直观体现 IGP 快速收敛的作用,搭建一个试验网络环境如下:
在网络中全部路由器上使用默认 ISIS 配置,计划在 R2-PE1 扩展 ping 对端 R3-P1 环回地址,在测试过程中人为 shutdown R3-P1 E1/1 接口,这时 ping 会中断,等待 ISIS 收敛完成后,才能继续 ping 到对端。
(一)   ISIS 默认配置测试情况
路由器接口配置为:
interface Ethernet1/1
 ip address 10.0.1.6 255.255.255.252
 ip router isis isp
 duplex full
首先需要确定从 R2-PE1 扩展 ping 对端 R3-P1 环回地址的路径是否经过 e1/1 接口:
R2-PE1#show ip cef exact-route 9.9.0.2 9.9.0.3
9.9.0.2 -> 9.9.0.3 => IP adj out of Ethernet1/1, addr 10.0.1.5
扩展 ping 测试结果如下:
R2-PE1#ping ip
Target IP address: 9.9.0.3
Repeat count [5]: 300
Datagram size [100]:
Timeout in seconds [2]: 1
Extended commands [n]: y
Source address or interface: 9.9.0.2
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 500, 100-byte ICMP Echos to 9.9.0.3, timeout is 1 seconds:
Packet sent with a source address of 9.9.0.2
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!.......!!!!!!!!!!!!!!!!!!!!!!
*Sep 10 10:48:45.655: %CLNS-5-ADJCHANGE: ISIS : Adjacency to R3-P1 (Ethernet1/1) Down, hold time expired!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!
Success rate is 98 percent (293/300), round-trip min/avg/max = 1/97/396 ms
R2-PE1#
默认配置情况下, ping 测试丢包 7 个,收敛时间约 7 秒。
 
(二)   启用 ISIS 快速收敛测试情况
ISIS 快速收敛参数配置如下:
router isis isp
ispf level-2
spf-interval 5 50 200
 lsp-gen-interval 5 20 100
此时扩展 ping 测试结果为:
R2-PE1#ping ip
Target IP address: 9.9.0.3
Repeat count [5]: 300
Datagram size [100]:
Timeout in seconds [2]: 1
Extended commands [n]: y
Source address or interface: 9.9.0.2
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 500, 100-byte ICMP Echos to 9.9.0.3, timeout is 1 seconds:
Packet sent with a source address of 9.9.0.2
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*Sep 10 10:45:10.367: %CLNS-5-ADJCHANGE: ISIS : Adjacency to R3-P1 (Ethernet1/1) Down, hold time expired!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!
Success rate is 99 percent (299/300), round-trip min/avg/max = 4/118/484 ms
R2-PE1#
启用 ISIS 快速收敛, ping 测试丢包 1 个,收敛时间约 1 秒。
可能有人会感到奇怪,按照这里ISIS快速收敛参数配置,收敛时间应该远小于1秒,为什么会丢包呢?然而经过多次测试,我们发现都会发生丢 1 个包的情况,不多也不少,是什么原因造成的呢?从设备日志中可以找到答案,如下:
*Sep  9 17:15:12.490: %LINK-5-CHANGED: Interface Ethernet1/1, changed state to administratively down
*Sep  9 17:15:13.490: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet1/1, changed state to down
在没有启用端口 BFD 检测机制的情况下,路由器端口 down 花费了 1 秒钟时间,再加上 LSP 触发、 SPF 计算时间等,总时间大于 1 秒小于 2 秒,从而造成了 ping 超时丢 1 个包。
 
可见, ISIS 快速收敛机制的确发挥了作用,如果再配合启用 BFD 检测机制,是可以达到前述业务指标要求的,从而明显提高网络的稳定质量。
 

你可能感兴趣的:(职场,休闲,BFD,IGP快速收敛)