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