1.1 理解BGP的特性
BGP设计与实现
在过去的几十年里,Internet经历了令人瞩目的增长。目前,Internet的BGP路由选择表已经拥有超过10万条的路由表项。许多企业也部署了BGP来互连他们自己的网络。如此广泛的部署证明了BGP对大型和复杂网络的支持能力。
BGP在今天的Internet中,之所以具有这样重要的地位,是因为它具有以下这些特性:
- 可靠性;
- 稳定性;
- 可扩展性;
- 灵活性。
以下将详细地描述每一种特性。
1.1.1 可靠性
可以从几个角度来考察BGP的可靠性:
连接的建立;
连接的保持;
路由选择信息的精确性。
BGP利用了传输控制协议(Transmission Control Protocol,TCP)提供的可靠传输服务。这消除了BGP实现更新数据包的分段、重传、确认和先后顺序问题的需要,因为TCP已经完成了这些功能。另外,任何TCP使用的认证方法也可以用于BGP。
会话建立之后,BGP就使用通常的保活(keepalive)消息来维护会话的完整性。Update消息也可以重置保持计时器(hold timer),这一计时器的典型的值是保活计时器(keepalive timer)的值的3倍。如果连续3次收不到Keepalive消息,也没有收到Update消息,那么BGP会话就会被关闭。
精确的路由选择信息是可靠转发的重要前提。BGP使用了几种方法来提高精确性。当路由器接收更新数据包时,为了检测环路,它将检查AS_PATH属性(一种BGP属性,列出了路由所经过的自治系统)。如果更新数据包来自于当前AS,或者已经经过了当前AS,那么它将被拒绝。入站过滤(inbound filter)可被应用于所有更新,以确保符合本地路由策略。在一条BGP路由被认为有效之前,路由器通常会验证下一跳的可达性。
为了维护路由选择信息的精确性,及时删除不可达的路由也是很重要的。当某些路由变得不可达时,BGP会迅速地从它的对等体中撤回这些不可达路由。
1.1.2 稳定性
路由选择协议的稳定性在一个大型网络中是十分关键的。例如在当今Internet这样大小的网络中,大量路由的震荡将会对网络产生灾难性的影响。
通过使用各种不同的计时器,BGP可以抑制网络上出现的接口或路由起/宕(Up/Down)事件所产生的影响。例如,一个BGP宣告者(speaker)只有到达最小的通告时间间隔(Minimal Advertisement Interval)后,才可以生成更新。Cisco IOS软件中,这个时间间隔对于外部BGP(eBGP)会话来说是30秒,对于内部BGP(iBGP)会话来说是5秒。此外,可以增加一些时间偏差抖动(jitter)来避免更新的同步问题。有关eBGP和iBGP对比的主题将在第2章“理解BGP的构件块”中讨论。
路由衰减(route dampening)是BGP抑制不稳定性的另一个特性。路由器可以跟踪一条路由的震荡历史纪录。不稳定的路由将会受到惩罚,并被抑制。路由衰减将在本书后面的相关章节中讲述。
在路由策略发生变化时,如果会话不是必须被重置,那么就会提升BGP的稳定性。例如第3章中讲述的温和重配置(soft reconfiguration)和路由刷新(route refresh)两个特性,它们对于不重置BGP会话而改变BGP策略是十分有用的。这两个特性使得路由器可以动态地请求或发送新的更新。
如果BGP会话必须被重置,那么所有与该会话相关的BGP路由选择和转发信息都会被清除。这在一个新的转发数据库被建造之前,有可能导致数据包的丢失。当这些会话正被重置的时候,不中断转发(Nonstop Forwarding,NSF)或优雅重启动(Graceful Restart)特性将允许路由器利用现有的信息(从原有会话保留下来的信息)继续转发数据包。第3章将详细讨论NSF。
收敛(convergence)是指网络中发生某种变化后,整个网络同步于相同的路由选择信息的过程。没有收敛的网络可能会导致数据包的丢失或转发环路。但是,如果网络一直处于不断收敛的状态,那么也会降低稳定性。在稳定性和收敛之间达成适当的平衡,可能依赖于网络所提供的服务。例如,当在一个共享的多协议标签交换(Multiprotocol Label Switching,MPLS)网络上,使用BGP来提供虚拟专用网(Virtual Private Network,VPN)服务时,更应该注重收敛性。第10章将会对这一主题做详细的讨论。第3章详细地讨论了BGP收敛的调整。
1.1.3 可扩展性
你可以从两个方面来评估BGP的可扩展性:对等会话(peer session)的数量和路由的数量。基于路由器的配置、硬件性能(CPU和内存)以及Cisco IOS软件的版本,BGP已经被证明可以支持数百个对等会话,并能很好地维护超过10万条的路由。
有几种方法可以用来增强BGP的可扩展性。这些方法或者可以减少被维护的路由/路径的数量,或者可以减少所生成的更新的数量。
作为距离矢量(distance vector)协议的一种形式,BGP仅仅把它使用的路径去更新它的对等体。换句话说,BGP只会通告最佳路径给它的对等体。当最佳路径发生变化时,新的路径将会被通告,这样就可以使对等体被告知使用新的最佳路径去替换早先的最佳路径。这是一个对早先通告的最佳路径的隐含撤回动作。
当BGP被用来在同一个AS内部交换路由可达性信息时,需要所有的BGP宣告者全连接(fully meshed)。全连接的网络往往会限制BGP的可扩展性,这是因为每一台路由器可能会维护大量的会话,而且可能会生成大量的更新。路由反射和联盟是增强BGP网络的可扩展性的两种方法。第7章、第8章和第10章详细讨论了这两种方法。
路由聚合是BGP使用的另一个工具,可以用来减少通告的前缀数量和增加BGP的稳定性。事实上,根据第6章中的讨论,Internet需要适当的路由聚合。
减少生成更新的数量,就能够减少对CPU的利用率,并加快网络的收敛速度。在IOS中,具有相同出站策略的对等体可以被编组到同一个对等体组(peer group)或更新组(update group)。这样只需要生成一份更新,就可以为整个组而被复制。第3章将详细讨论使用更新分组机制来增强网络性能的主题。
1.1.4 灵活性
BGP是路径矢量(path vector)协议,它是距离矢量协议的一种形式,BGP为每一个目的地构造了一个基于自治系统的概要图。BGP的灵活性可以通过路径属性的数量来说明,这些路径属性是用来定义路由策略并描述BGP前缀的特性的参数。正是由于这些属性才使BGP成为一种独特的路由选择协议,因此,整本书都将讨论它们。
你可以定义两种类型的BGP策略:路由选择(routing)策略和管理(administrative)策略。这两种类型的策略在功能上经常是重叠的。
你既可以为入境(inbound)方向,也可以为出境(outbound)方向定义BGP路由选择策略,来影响路由或者路径的选择。例如,可以定义一个入境路由过滤策略,用于仅仅接受那些始发于直接上游服务提供商的路由和该服务提供商的客户的路由。通过适当地设置某些属性,可以使一条路径变得比其他路径更优先。本书后面的章节将会提供设置路由选择策略的详细例子。
BGP管理策略对进入或离开AS的路由定义了管理控制策略。例如,一个AS可能希望通过限制允许自己接收的最大前缀数目,来保护它的边界路由器。作为另一个例子,在出境方向上,一个多宿主(multihomed)AS的边界路由器可以选择通过这样一种方式来设置它的属性——就是只通告本地始发的路由。
为了执行策略,BGP使用了3个步骤:
1.输入策略引擎(input policy engine);
2.路径选择(path selection);
3.输出策略引擎(output policy engine)。
图1-1演示了这个处理过程。
当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base,RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径,第2章将详细讨论这种算法。
得出的最佳路径被存储到本地BGP RIB(Loc-RIB)中,然后被提交给本地IP路由选择表(IP-RIB),以用作安装考虑。第2章将讨论IP-RIB的路由安装过程。
如果启用了多径(multipath)特性,最佳路径和所有等成本路径都将被提交给IP-RIB考虑。
除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的,locally sourced),并被选择为最佳路径的BGP前缀。Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB(Adj-RIB-Out)中。
这里对RIB的讨论仅仅是概念上的概括描述。实际的更新处理过程依赖于BGP的软件实现和配置而变化。在Cisco IOS软件中,BGP表或BGP RIB(命令show ip bgp的输出内容)包含了所有输入策略引擎所允许的路由,这其中包括了那些没有被选择为最佳路径的路由。如果启用了入站温和重置(inbound soft reset)的IOS特性(温和重配置,soft reconfiguration),那么,那些被输入策略引擎所拒绝的路由也会被保留(被标记为“仅仅接收”,receive only),但不会被路径选择过程所考虑。温和重配置的使用将在第3章中讨论。