cqmmx,2008-9-10

1、背景介绍

目前对网络稳定性影响较大的一般是链路中断、节点失效等故障,而常规的慢Hello机制检测耗时较长,且常用IGPISISOSPF)在默认配置情况下,收敛速度很慢,一般需要几十秒钟,会造成骨干电路的大量数据丢失,从而对用户的正常上网带来较大的影响。
cisco路由器为例,默认配置情况下OSPFISIS路由协议的hello timedead time参数如下:
可见,在默认配置情况下,故障时OSPFISIS最坏需要30/40秒才能完成网络重新收敛。在没有传输网络APSautomatic protection switching)保护的情况下,显然这种慢速收敛机制会大幅度降低网络的整体性能,从而降低用户可感知的网络质量。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

一般情况下,我们希望能在保证网络性能稳定的前提下,提供尽可能快速的流量保护机制。首先,需要明白网络的恢复周期是什么,可以用下来的图来进行简单说明:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
从恢复周期图可以看出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支持OSPFISISBGP等全部主流路由协议。当邻居关系建立后,路由器将告诉BFD协议去检测邻接连接状态。BFD检测报文在路由器的FIB表中具有高的优先级,并且通过unicast形式相互传播,可保证监测链路拥塞时也不会影响BFD报文的传送。
BFD协议可分为两种工作模式:异步模式、查询模式,另外还有一种辅助回声功能,它可以与这两种模式结合起来使用。异步模式和查询模式的本质区别在于检测的位置不同,异步模式下本端按一定的发送周期发送BFD控制报文,需要在远端检测本端系统发送的BFD控制报文;而在查询模式下检测本端发送的BFD控制报文是在本端系统进行的。
BFD已实现协议国际标准化,现在使用版本是draft-ietf-bfd-base-02.txt,目前主流网络设备已基本全部支持,并可实现不同厂家设备间协议互通。

3、IGP快速收敛技术简介

为解决IGP默认配置情况下收敛速度慢的问题,业界提出了各种解决方案,主要分为以下几部分:
1I-SPFIncremental SPF

I-SPF是指增量路由计算,顾名思义它每次只对变化的一部分路由进行计算,而不是对全部路由重新计算。I-SPF除了第一次计算时需要计算全部节点外,每次只计算影响的节点,而最后生成的最短路径树(shortest path treeSPT)与原来的算法所计算的结果相同,大大降低了CPU的占用率,提高了网络收敛速度。
2 PRCPartial Route Calculation

部分路由计算PRC的原理与I-SPF相同,都是只计算变化的那一部分。但PRC不需要计算节点路径,而是根据I-SPF算出来的SPT来更新叶子(路由)。PRCI-SPF配合使用可以将网络的收敛性能进一步提高,它是原始SPF算法的改进,所以已经代替了原有的算法。
3LSP快速扩散

LSPOSPF协议中叫LSAISIS协议中叫LSP,为简化说明,下文统一用LSP来表示)快速扩散特性改进了传统LSDB使用计时器同步方式,在收到一个或多个比较新的LSP时,在路由计算之前,先将小于指定数目的LSP扩散出去,加快LSDB的同步过程。这种方式在很大程度上可以提高整个网络的收敛速度。
4 智能定时器

为了加快网络收敛速度,又不至因网络变化频繁造成CPU资源耗尽,传统SPF计算前默认需要等待5秒用于收集LSA/LSP信息,而且连续两次SPF计算间隔为10秒。然而通常情况下,一个正常运行的网络是稳定的,发生大量的网络变动的几率很小,路由器不会频繁的进行路由计算,所以第一次触发的时间可以设置的非常短(毫秒级)。如果拓扑变化比较频繁,智能定时器会随着计算次数的增加,间隔时间也会逐渐延长,避免占用大量的CPU资源。
Cisco路由器上用于动态计算的这种定时器的算法基于指数back-off,并采用三个独立参数来进行速度与性能的调整。与SPF智能定时器类似的还有LSA/LSP生成智能定时器。这种指数增加算法有助于快速响应,同时还可以在网络元素不稳定时确保网络稳定。
ISIS协议的命令语法如下(OSPF语法类似):
Router <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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,这样可设置BFDhello报文周期为50ms,连续丢失3个报文即认为链路失效。当然,如果路由器性能支持,也可以设置BFDhello报文周期为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 g0/11/5/5

   bfd minimum-interval 50   # hello报文发送时间间隔为50ms

   bfd multiplier 3          # 连续丢失3bfd 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 2ispf功能

 lsp-gen-interval 5 20 100  #LSP初始产生时间20ms后续递增间隔100ms最大间隔时间5秒。

 spf-interval 5 50 200      #SPF初始时间50ms,后续递增间隔200ms,最大间隔时间5秒。
fast-flood 6              #在进行SPF计算先,先flood 6LSP

 

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 g0/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-P1E1/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检测机制,是可以达到前述业务指标要求的,从而明显提高网络的稳定质量。