分类: 网络与安全
2012-10-15 17:35:16
在构建实际运营的BGP网络中,由于需要考虑到性能参数对网络效率的影响,往往需要对BGP的一些参数进行仔细的斟酌,本文主要以对一些与网络性能相关的参数与特性的设置进行讲解,供读者在后续设计及优化BGP网络时参考。
邻居PMTU检测BGP协议是运行在TCP之上的,所以TCP的参数设置会影响BGP的性能。在路由数目比较少的情况下TCP的参数调整可能对BGP性能影响不大,但是当路由数目比较巨大的时候调整TCP参数可以起到优化性能的作用。下面我们开始分析具体的优化方法。
首先我们来了解一下BGP协议包发送的方法,请看下图1:
与TCP数据传输格式
BGP首先需要把自己需要发送的数据告诉TCP,然后TCP根据数据的长度进行分段,分段大小由TCP协商的MSS值的大小决定,每个TCP分段对应着一个发出去的IP包。所以MSS参数的设置对于BGP数据传输的性能起着关键作用,如果设置过大可能会造成中间某台设备的IP层分片,BGP协议报文的传输其实是一个端到端的传输过程,如果数据被分片了那么必然还需要重新组合恢复回来,这样会给接收者的CPU带来一定的负担,组包的过程降低了处理效率;如果MSS值设置过小,那么又会使网络的有效利用率很低,发送端和接收端对能够一次处理的报文进行多次处理,降低了效率。
通过BGP邻居PMTU检测可以解决前面提到的问题,在建立BGP邻居之前,路由器会自动发送一个PMTU报文来检测路径上的最大MTU,当得到这个值后TCP协议可以根据这个值来设定MSS的大小,发送报文时按照PMTU探测的结果,进而达到性能的最优。
3 BGP路由更新定时器在BGP的RFC4271上定义了BGP的路由更新的定时器,该定时器只能对同一地址族的相同前缀的路由起作用,其主要作用是防止网络中的某条路由震荡过于频繁,同时也是对CPU的一种保护。用文字对该特性进行描述可能过于晦涩,所以我们用图2来做简单的介绍:
路由更新定时器说明
如图2红色与蓝色的箭头代表相同前缀的路由,但是从不同邻居学习而来,而且蓝色的路由优于红色的;黑色的坐标轴代表路由发送与接收的时间,每个单位距离为10秒。我们假设RA上配置的更新定时器时间为30秒。那么RB路由收敛过程如下:
Ø RA接收到红色路由后立刻发送给RB,同时RA上启动更新定时器(30秒);
Ø 10秒以后RA接收到更优的蓝色路由,由于定时器没有超时暂时不发送给RB,但是更新本地路由表,在第10秒RA完成路由收敛;
Ø 第30秒RA上更新定时器超时,所以发送蓝色路由给RB并且更新掉红色路由,RB在第30秒完成收敛。
从上面的分析我们可以看出RB的收敛时间比RA会慢上20秒左右,由于BGP是距离矢量路由协议这种延迟可以可能对于整个网络的BGP路由器都会有一定影响,所以在设计BGP网络中对该参数的设计需要有一定考虑,如果对自己设备的路由处理能力有足够信心的话可以把该定时器的值设置为最小。
这里需要说明一下,路由惩罚(Dampening)也有类似的情况,如果希望网络发生路由震荡后可以尽快的收敛,那么完全可以不设置Dampening参数。
BFD协议联动上一节所介绍的功能只能使路由的收敛时间限制在秒级,但是对于一个运营商(SP)的网络来说,往往需要更快地感知路由的变化或者BGP邻居的状态变化。但是IBGP邻居状态的感知往往由于邻居非直连的原因,需要依靠IGP的收敛或者BGP自身的KEEPALIVE报文来感知邻居的状态,这样最多可能会需要180秒来完成收敛。
Bidirectional Forwarding Detection(BFD)是一个简单的“Hello”协议,和路由协议的邻居检测部分相似。一对系统在它们之间所建立会话的通道上周期性的发送检测报文,如果某个系统在足够长的时间内未收到对端的检测报文,则认为在这条到相邻系统的双向通道的某个部分发生了故障。BFD目前存在两个版本:VER 0和VER 1,并且两个版本不能互相兼容。
BGP的BFD就是利用了这个特性,配置BGP与BFD关联后,一旦BGP邻居建立后,BFD自动和BGP邻居关系进行关联,并在每单位时间发送探测数据,这个单位时间一般为几十毫秒,当超过3倍的时间没有收到探测报文BFD会通知BGP断开邻居关系,这样可以迅速的完成路由收敛。