BGP是目前应用在因特网上的IP网络互联协议,为运营商之间的互联提供了稳定而安全的路由协议,具有丰富的路由控制机制。
为了更好地控制路由策略,当前大部分的运营商均将BGP部署到骨干路由器。随着网络的不断扩展、路由器数目的增多以及路由信息条目的激增,解决BGP的扩展性问题变得越来越重要。目前BGP的扩展性面临如下几个问题。
(1)I-BGP的Full-Mesh问题
BGP 路由协议分为I-BGP和E-BGP两个部分。I-BGP用于自治域内的路由器之间,E-BGP用于自治域间的路由器之间。为了防止产生环回路由,BGP 协议要求一个路由器通过I-BGP学到的路由,不再向其他I-BGP邻居广播,所以一个自治域内所有参加I-BGP协议的路由器都要与其他路由器建立会 话,从而保证路由信息能够正确地广播到每一个路由器。依照这个原则,一个自治域内总的I-BGP会话数为N×(N-1)/2(N为运行I-BGP的路由器 数),当N不断增大时,这个数字会大得惊人:如100台路由器,则会话数为4950。这对网络设备而言是个非常大的负担,而且还将使网络的管理与配置变得 异常复杂。而骨干网通常由大量的运行I-BGP的路由器组成,因此,这个问题是否能够解决,直接影响到网络规模的大小。
(2)更改路由策略时路由振荡的问题
BGP 属于增量更新的路由协议,当有新的路由要发布时,路由器会向邻居发送Update信息,而如果要删除某条路由时,就会发送Withdraw信息。BGP路 由的Flap的定义是:当一条路由在被收回(Withdraw)后,又被广播(Update)出来,视为一次Flap。由于任何一条路由的收回和更新都会 导致一台路由器整个路由表重新计算,因此当Flap的情况比较多时,对路由器设备的负载将产生巨大的压力。根据笔者在实际工作中的经验,一般情况下,一台 高端路由器在计算BGP路由的时候,CPU的负载基本上在80%~90%左右,有时甚至达到100%,占用了几乎所有的CPU资源。虽然目前大部分的高端 路由器都将路由计算的模块与转发模块分布在不同的硬件上,来减少主CPU忙导致的路由器性能下降的问题,但是路由表的频繁变化和更新,对整个设备的运行还 是有一定的影响的,而且这样的计算会随着路由的收回或广播,继续向自治域内部扩展,使内部的路由器产生同样的问题。
(3)其他需要考虑的问题
除了上面的两个问题会导致对路由器资源过量消耗之外,还有其他的一些因素,如路由的数目、BGP路由表的大小和路由计算的方式等,同样也会影响路由器的性能。
另外,网络越大,路由条目越多,配置和管理的工作也就越复杂,这就需要在网络设计的时候尽量简化配置,降低管理人员的工作强度,避免人为原因造成故障。
2 如何解决制约BGP扩展性的问题
针对以上问题,介绍一些相关的解决方法。
(1)解决I-BGP会话数瓶颈的方法
上面提到的I-BGP的会话数过多的问题,可以采取两种办法来解决:
1)联盟的方法(Confederations)
联 盟的工作原理是:将原来一个自治域的网络分成多个子自治域,通过Confederationsid将原AS号配置到每个路由器上。这样有两个好处:一是可 以保留原有的I-BGP属性,包括LocalPreference、MED和NEXT_HOP;二是能在Confederations的功能中自动实现, 无需管理员在网络的出口处配置过滤内部AS号信息的操作。
2)路由反射器(Route-Reflector)
采 用路由反射器是目前应用最广泛的方法,较之前面联盟的方法,具有更好的扩展性。路由反射器的工作原理是:将一个自治域内的路由器分成几个Cluster, 每个Cluster由Reflector和Client组成。Reflector之间形成FullMesh,运行常规的I-BGP;Client只与 Reflector运行I-BGP,对于Client来说,Reflector只是普通的邻居而已,Reflector则扮演了路由集散地的角色,将从其 他Reflector学到的I-BGP路由转发给Client,同时,将从Client学到的I-BGP路由转发给Cluster内的其他Clients 和Cluster外的其他Reflector,再借由Reflectors广播到其所在的Cluster。在实际的网络中,为了提高冗余度,通常一个 Client与多个Reflector建立邻居关系,而且不局限于Client所在Cluster的Reflector。
由 此可见,Client上的I-BGP会话数一般为1~2个,与联盟的方法相比,只要Reflector的性能足够高,Cluster就可以做得很大,而 Client的负载不会随Cluster的变化有太大的变化。对于前一种方法,由于一个子自治域的所有路由器还是要做到FullMesh,所以最低性能的 路由器决定了一个子自治域的大小;而路由反射器法则通常是一个或多个最高性能的路由器决定Cluster的大小,因此,具有更好的网络扩展性能。
另外,一个Reflector也可以成为另外一个Reflector的Client,形成层级结构,这特别适用于按照分层结构建设的网络,可以很容易地把平面的网络管理演变为分层管理。
当 然,在使用路由反射器的时候,也有一些需要注意的地方,比如:Reflector并不是纯粹的转发路由,所有收到的路由在Reflector上同样要经过 最优计算,然后将优选路由向外广播,所以Reflector的选择要依据网络结构而定,尽量使I-BGP邻居关系与实际的电路连接关系相对应。
(2)控制路由振荡
目 前,控制RouteFlap主要采取Damping的方法:一个BGP路由器对收到的E-BGP路由设定Penalty值,每一次路由Flap都会使该路 由的Penalty值增大,而路由稳定时,Penalty值会随时间而减小;当Penalty值超过预设的抑制限制时,该路由就不再被广播,而当 Penalty减小至低于重用限制时,该路由才会被重新向外广播。这种方法主要是针对E-BGP邻居而言的。这样,当一个网络内部发生路由振荡时,与之相 连的其他网络通过Damping可以有效地防御对各自网络的影响。
在 网络维护中,经常会遇到这样的情况:宁愿一条电路中断一段时间,也不希望它在不停地震荡。因为中断一段时间后,只要电路恢复,网络流量也会随之恢复;与此 相反,振荡的电路恢复后,需要等待一段时间才能恢复正常的流量(其他网络都在抑制振荡的路由)。Damping则可以有效地保证因特网的稳定,但同时也会 导致一些故障的延时恢复。
当前的设备基本都支持Damping的功能,而且提供可以配置的参数来精细控制Damping。一般情况下,设备提供的缺省配置能够满足大多数网络的需求,如果确有特殊需要,则一定要经过仔细计算,否则,不是没有效果,就是把别人的路由抑制后很长时间不能恢复。
(3)Peer Group的应用
在 实际的网络中,有一种非常普遍的现象,即一个路由器会有多个属于一类的BGPPeer。这里的“属于一类”是指BGP的策略相同或类似,当Peer比较多 时,BGP的配置会变得臃肿,同时,路由器的负载也会加重,因为一旦有路由的更新,路由器需要针对每个Peer做一次策略计算(虽然策略都相同)。另外, 应用PeerGroup还有一个好处,就是降低了对路由器设备的资源消耗,因为路由器对同一Group更新路由时,由于使用相同策略,因此只进行一次路由 计算,从而大大减少了占用CPU的时间。
在实际的网络维护中,即使当同一类的Peer很少时,一般也建议采用PeerGroup的方式,因为这样具有很好的扩展性。PeerGroup不但适用于I-BGP的Peer,也适用于E-BGP的Peer。
(4)关于routerefresh的措施
骨干网络维护中,经常会遇到修改BGP策略的情况,如更新某个Peer的as-path限制列表,在配置修改后需要使其生效,以前的做法是中断当前的BGP会话,然后重新建立,命令如下:
clear ip bgp x.x.x.x
这 么做主要是因为路由器在收到对方的BGP路由表后,先进行策略运算,然后将最优路由存储在本机的BGP路由表中,而不是把原始的路由统统保存。当策略改变 时,必须重新建立连接来获得对方的全部路由,然后利用新策略再次计算。这种方式的弊端显而易见,如网络阻断、大量消耗路由器的CPU资源等。
解决这个问题目前通常采用两种方法:一种方法是设法保存原始的BGP路由,这样,重新计算时就不需要重传了;另外一种方法是在启用新策略的时候,在不中断BGP会话的前提下,向对方请求重发全部BGP路由表。
第一种方法是利用软件配置实现的,配置的命令如下:
neighbor 1.1.1.1 soft-reconfiguration inbound
在启用新策略的时候输入命令:
clear ip bgp 1.1.1.1 soft [in|out]
这 样,所有的原始BGP路由就会被存储在另外一张路由表里面,在修改策略的时候,通过对这张路由表进行运算,就可以得到最优的BGP路由表,这样对路由产生 的资源消耗较小;而且有这样一张原始的路由表,可以在修改策略后、正式启用之前使用命令来检查策略修改后的效果。但这种方法需要额外的内存资源来存储路由 表。
第二 种方法是由路由器设备的BGP能力(BGPCapabilities)决定的,也就是系统软件本身内置的功能模块。在建立BGP会话的时候,这个参数通过 BGPOPEN在两个路由器间进行交换。一个设备是否支持BGP Refresh Capabilites,可以用命令下列来检查:
show ip bgp n x.x.x.x
如 果参与BGP的两个路由器都具备这个功能,那么不需要任何配置,当执行clear ip bgp n x.x.x.x in 时,本端BGP进程不会中断BGP会话,而是向对端请求重发全部的BGP路由表。相对于第一种方法,这种方法的好处是可以节省内存资源,缺点是网络管理员 无法了解对方发过来的原始路由,而且重发了全部路由表,效率上也没有第一种方法高。目前骨干网内的设备基本上都支持这个功能。
3 总结
以上对BGP扩展性相关的几个问题和相关的措施进行了论述,在实际的应用中还需要根据具体情况来部署。但是总的思路和原则都是一样的,即一方面要降低设备的资源消耗,另外一方面要简化维护管理,从硬件、软件两方面来提高网络的扩展性。
出处:[url]http://www.ser-t.cn/html/luyoujishu/IP-guganwangzhongde-BGP-luyouxieyikuozhanxingxiangxi-intro/[/url]