电脑技术学习

网络支架—BGP

dn001
1. 概述 因特网,在20世纪60年代末,作为一个实验,开始于DARPA(美国国防部的高级研究项目治理局)。随着研究机构、学院和政府加入,形成了最早的ARPANET。后来,美国国家科学基金会又开发了NSFNET(1995年4月停用)。发展到现在,因特网成为了由商业提供者运营的的更分散的体系。而下一代因特网(NGI)的计划已于1997年10月启动,目前已推出的主要方案有Internet2,Abilene等。 出于治理和扩展的目的,因特网可以被分割成许多不同的自治系统(Autonomous System)。换句话说,因特网是由自治系统汇集而成的。 BGPv4(Border gateway protocol Version 4)——边缘网关协议(定义于RFC1771),是现行因特网的实施标准,就是用来连接自治系统,实现自治系统间的路由选择功能的。 2. IGP与EGP 所有的路由选择协议可以被分成IGP和EGP两种。要了解IGP和EGP的概念,应该首先了解自治系统(AS)的概念。传统的AS定义(RFC1771):AS是同一个技术治理下的一组路由器,它们使用一种内部网关协议和一致的度量尺度来对数据包进行AS内部的路由,而使用外部网关协议来对发向其它AS的数据包进行路由选择。发展到现在,已经答应并且时常采用在一个自治系统AS中使用多个内部网关协议,甚至多个路由选择的度量标准。所以,现在的自治系统被扩展的定义为:共享同一路由选择策略的一组路由器。 IGP(Interior gateway protocols)——内部网关协议,定义为在一个自治系统内部使用的路由协议(包括动态路由协议和静态路由)。IGP的功能是完成数据包在AS内部的路由选择,或者说,是讲述数据包如何穿过本地AS的。RIPv1&v2,IGRP,EIGRP,OSPF,ISIS都是典型的IGP。 EGP(Exterior gateway protocols)——外部网关协议,定义为在多个自治系统之间使用的路由协议。它主要完成数据包在AS间的路由选择,或者说,讲述数据包为了到达目的IP,需要通过哪些AS。BGP4就是一种EGP。 IGP只作用于本地AS内部,而对其他AS一无所知。它负责将数据包发到主机所在的网段(segment)。EGP作用于各AS之间,它只了解AS的整体结构,而不了解各个AS内部的拓扑结构。它只负责将数据包发到相应的AS中,余下的工作便交给IGP来做。 每个自治系统AS都有唯一的标识,称为AS号(AS number),由IANA(Internet Assigned Numbers Authority)来授权分配。这是一个16位的二进制数,范围为1~65535,其中65412~65535为AS专用组(RFC2270)。

网络支架—BGP(图一)

图一

3.BGP-4的基本概念 BGP-4是典型的外部网关协议,是现行的因特网实施标准。它完成了在自治系统AS间的路由选择。可以说,BGP协议是现代整个网络的支架。 BGP-4在RFC1771中作出了规定,并且还涉及其他很多的RFC文档。在这一新版本中,BGP开始支持CIDR(Classless interdomains routing)和AS路径聚合(Aggregation),这种新属性的加入,可以减缓BGP表中条目的增长速度。

网络支架—BGP(图二)

图二

BGP协议是一种距离矢量(Distance vector)的路由协议,但是比起RIP等典型的距离矢量协议,又有很多增强的性能。BGP使用TCP作为传输协议,使用端口号179。在通信时,要先建立TCP会话,这样数据传输的可靠性就由TCP协议来保证,而在BGP的协议中就不用再使用差错控制和重传的机制,从而简化了复杂的程度。另外,BGP使用增量的、触发性的路由更新,而不是一般的距离矢量协议的整个路由表的、周期性的更新,这样节省了更新所占用的带宽。BGP还使用“保留”信号(Keepalive)来监视TCP会话的连接。而且,BGP还有多种衡量路由路径的度量标准(称为路由属性),可以更加准确的判定出最优的路径。 与传统的内部路由协议相比,BGP还有一个有趣的特性,就是使用BGP的路由器之间,可以被未使用BGP的路由器隔开。这是因为BGP在独立的内部路由协议之上工作,所以通过BGP会话连接的路由器能被多个运行内部路由协议的路由器分开。 建立了BGP会话连接的路由器被称作对等体(peers or neighbors),对等体的连接有两种模式:IBGP(Internal BGP)和EBGP(External BGP)。IBGP是指单个AS内部的路由器之间的BGP连接,而EBGP则是指AS之间的路由器建立BGP会话。 网络支架—BGP(图三) 图三 前面已经提到,BGP是用来完成AS之间的路由选择的,所以对于BGP来说,每一个AS都是一个原子的跳度。那么,IBGP又起什么样的作用呢?IBGP是用来在AS内部完成BGP更新信息的交换。虽然这种功能也可以由“再分布” (Redistribution)技术来完成——将EBGP传送来的其他AS的路由“再分布”到IGP中,然后将其“再分布”到EBGP传送到其他AS。但是相比之下,IBGP提供了更高的扩展性、灵活性和治理的有效性。比如,IBGP提供了选择本地AS外出点的方式。 IBGP的功能是维护AS内部连通性。BGP规定,一个IBGP的路由器不能将来自另一IBGP路由器的路由发送给第三方IBGP路由器。这也可以理解为通常所说的Split-horizon规则。当路由器通过EBGP接收到更新信息时,它会对这个更新信息进行处理,并发送到所有的IBGP及余下的EBGP对等体;而当路由器从IBGP接收到更新信息时,它会对其进行处理并仅通过EBGP传送,而不会向IBGP传送。所以,在AS中,BGP路由器必须要通过IBGP会话建立完全连接的网状连接,以此来保持BGP的连通性。假如没有在物理上实现全网状(full meshed)的连接,就会出现连通性上的问题(这在大型网络中会碰到扩展性的问题,将在下面“扩展性”一节中作讨论。)
AS在BGP看来是一个整体,AS内部的BGP路由器都必须将相同的路由信息发送给边界的EBGP路由器。路由信息在通过IBGP链路时不会发生改变,只有通过EBGP链路时,路由信息才会发生变化。在AS内部,通过IBGP连接的路由器都有相同的BGP路由表(BGP路由表(BGP Routing Table)用于存放BGP路由信息,不同于IGP路由表,两个表之间的信息可以通过“再分布”(Redistribution)技术进行交换)。 4. BGP的路由选择 BGP的消息报头由三个部分组成:标记、长度和类型。标记段占16个字节,用于安全检测和同步检测;长度段占2个字节,标明整个BGP消息的长度;类型段占一个字节,标明消息的类型。报头的后面可以不接数据部分,如Keepalive消息。 BGP消息有四种类型:OPEN,UPDATE,NOTIFICATION和KEEPALIVE,分别用于建立BGP连接,更新路由信息,差错控制和检测可到达性。 OPEN消息是在建立TCP连接后,向对方发出的第一条消息,它包括版本号、各自所在AS的号码(AS Number)、BGP标识符(BGP Identifier)、协议参数、会话保持时间(Hold timer)以及可选参数、可选参数长度。其中,BGP标识符用来标识本地路由器,在连接的所有路由器中应该是唯一的。这个标识符一般都使用接口上的最大的IP地址(经常使用loopback接口来防止地址失效)。而会话保持时间,是指在收到相继的Keepalive或者Update信号之间的最大间隔时间。假如超过这个时间路由器仍然没有收到信号,就会认为对应的连接中断了。假如把这个保持时间的值设为0,那么表示认为连接永远存在。UPDATE消息由不可到达路由(Withdrawn Route)、路由属性(Route Attributes)和网络层可到达性(Network Layer Reachability Information—NLRI)组成。 BGP路由属性是BGP 路由的核心概念。它是一组参数,在UPDATE消息中被发给连接对等体。这些参数记录了BGP路由信息,用于选择和过滤路由。它可以被看作选择路由的度量尺度(metric)。路由属性被分为四类:公认强制(Well-known mandatory attributes)、公认自由选择(Well-known discretionary attributes)、可选传递(Optional transitive attributes)和可选非传递(Optional nontransitive attributes)。公认的(Well-known)属性对于所有的BGP路由器来说都是可辨别的;每个UPDATE消息中都必须包含强制(mandatory)属性,而自由选择的(discretionary)属性则是可选的,可包括也可不包括。对于可选的(Optional)属性,不是所有的BGP工具都支持它。当BGP不支持这个属性时,假如这个属性是过渡性的(transitive),则会被接受并传给其他的BGP对等体;假如这个属性是非传递性的(nontransitive),则被忽略,不传给其他对等体。 在技术文档RFC1771定义了1~7号的BGP路由属性,依次是:1,ORIGIN(产生该路由信息的AS);2,AS_PATH(包已通过的AS集或序列);3,NEXT_HOP(要到达该目的下一跳的IP地址,IBGP连接不会改变从EBGP发来的NEXT_HOP);4,MULTI_EXIT_DISC(本地路由器使用,区别到其他AS的多个出口);5,LOCAL-PREF(在本地AS内传播,标明各路径的优先级);6,ATOMIC_AGGREGATE;7,AGGREGATOR。RFC1997还定义了8,COMMUNITY。其中,1、2号属性是公认强制;3、5、6是公认可选;7、8是可选过渡;4是可选非过渡。这些属性在路由的选择中,考虑的优先级是不同的,仅就这8个属性来说,其中优先级最高的是LOCAL-PREF,接下来是ORIGIN和AS_PATH。 BGP所使用到的路由属性并不仅仅是这8个,其他的具体内容可以参阅RFC文档(RFC1771、1996、1997、1966、1863、2283)。 网络层可到达性(NLRI)包含了<长度,前缀>这样的二维数组,使用CIDR(Classless Interdomain Routing)技术,来聚合路由,以减缓BGP表的增长速度。 BGP工作流程如下:首先,在要建立BGP会话的路由器之间建立TCP会话连接,然后通过交换OPEN信息来确定连接参数,如运行版本等。建立对等体连接关系后,最开始的路由信息交换将包括所有的BGP路由,也就是交换BGP表中所有的条目。初始化交换完成以后,只有当路由条目发生改变或者失效的时候,才会发出增量的触发性的路由更新。所谓增量,就是指并不交换整个BGP表,而只更新发生变化的路由条目;而触发性,则是指只有在路由表发生变化时才更新路由信息,而并不发出周期性的路由更新。比起传统的全路由表的定期更新,这种增量触发的更新大大节省了带宽。路由更新都是由UPDATE消息来完成。UPDATE包含了发送者可到达的目的列表和路由属性。当没有路由更新传送时,BGP会话用KEEPALIVE消息来验证连接的可用性。由于KEEPALIVE包很小,这也可以大量节省带宽。在协商发生错误时,BGP会向双方发送NOTIFICATION消息来通知错误。 5.BGP与IGP的互操作 BGP路由表是独立于IGP路由表的,但是这两个表之间可以进行信息的交换,这就是前面提到的“再分布”技术(Redistribution)。 信息的交换有两个方向:从BGP注入IGP,以及从IGP注入BGP。前者是将AS外部的路由信息传给AS内部的路由器,而后者是将AS内部的路由信息传到外部网络,这也是路由更新的来源。 把路由信息从BGP注入IGP涉及到一个重要概念——同步(Synchronization)。同步规则,是指当一个AS为另一个AS提供了过渡服务时,只有当本地AS内部所有的路由器都通过IGP的路由信息的传播收到这条路由信息以后,BGP才能向外发送这条路由信息。当路由器从IBGP收到一条路由更新信息时,在转发给其他EBGP对等体转之前,路由器会对同步性进行验证。只有IGP熟悉这个更新的目的时(即IGP路由表中有相应的条目),路由器才会将其通过EBGP转发;否则,路由器不会转发该更新信息。 同步规则的主要目的是为了保证AS内部的连通性,防止路由循环的黑洞。但是在实际的应用中,一般都会将同步功能禁用,而使用AS内IBGP的全网状连接结构来保证连通性,这样即可以避免向IGP中注入大量BGP路由,加快路由器处理速度,又可以保证数据包不丢失。要安全的禁用同步,需要满足以下两个条件之一:1,所处的AS是单口的,或者说是末端AS(Stub AS)――即是指只有一个点与外界网络连接。2,虽然所处的AS是过渡型的(指一个AS可以通过本地AS,与第三方AS建立连接的),但是在AS内部的所有路由器都运行BGP。第2种情况是很常见的,因为AS内所有的路由器都有BGP信息,所以IGP只需要为本地AS 传送路由信息。大部分的网络设备在实现BGP时,都提供了禁用同步的开关。
将IGP路由信息注入BGP,是路由更新的来源。它直接影响到因特网的路由稳定性。信息注入有两种方式:动态和静态。 动态注入又分为完全注入和选择性注入。完全动态注入是指将所有的IGP路由再分布(Redistribution)到BGP中。这种方式的优点是配置简单,但是可控性弱,效率低。选择性的动态注入则是将IGP路由表中的一部分路由信息注入BGP(如使用CiscoIOS中的network子命令)。这种方式会先验证地址及掩码,大大增强了可控性,提高了效率,可以防止错误的路由信息注入。 但是无论哪种动态注入方式,都会造成路由的不稳定。因为动态注入完全依靠于IGP信息,当IGP路由发生路由波动时,不可避免的会影响到BGP的路由更新。这种路由的不稳定会发出大量的更新信息,浪费大量的带宽。对于这种缺陷,可以使用在边界处使用路由衰减和聚合(BGP4的新增特性CIDR)来改善。 静态注入就可以有效解决路由不稳定的问题。它是将静态路由的条目注入到BGP中去。静态路由存在于IGP路由表中。由于静态路由条目是人为的加入的,不会受到IGP波动的影响,所以很稳定。它的稳定性防止了路由波动引起的反复更新。但是,静态注入也会产生数据流阻塞等问题。 所以,在选择注入方式时,需要根据网络的实际状况来作出选择。 BGP还提供选择不同路由策略(Policy)的方法来控制BGP更新信息的数据流。具体的说,可以改变治理距离(Administrative distance)来确定使用哪一个路由协议的更新信息;可以使用BGP过滤(如route maps)来控制更新数据流;还可以用CIDR和地址聚合来改变更新信息;也可以使用路由反射器(Route Reflectors)来改变路由更新信息的转发方式,从而改变对BGP内部网络的物理拓扑的全网状要求。 6.针对大型网络的扩展特性 前面已经提到,由于IBGP的Split-horizon特性,为了保证连续性,就必须在AS内实现全网状的(full meshed)连接。但是,对于一个X个节点的网络来说,全网状的拓扑要求((X-1)X/2)个连接。当X的值很大的时候,就会带来过多的花费,以及庞大的配置任务。这是很不经济和低效的。 为了减少对IBGP链路的要求,在RFC1966、RFC1965中,分别提出了路由反射器(Route Reflection)和联盟(Confederations)技术。 路由器可以配置成路由反射器,路由反射器答应将一个IBGP传来的BGP路由传到另一个IBGP链路上。这样就缓解了对全网状拓扑的需求。但是并不是所有情况下,路由反射器都是一种最佳选择,因为这样会加大作为反射器的路由器的系统开销,从而减慢处理速度,甚至造成数据丢失。而且,假如路由反射器出现问题,那么所有的连接都会被中断。为了防止中断出现,增加冗余度,一般可以配置多个路由反射器。 网络支架—BGP(图四) 图四 联盟则是将AS再划分成子AS(sub AS),在sub AS中运行IBGP,使用全网状结构;而在sub AS之间使用EBGP,这样也可减少对IBGP连接的需求。联盟同样也存在缺陷,如路由选择等。所以和路由反射器一样,一般只在存在很多IBGP连接时才会使用联盟技术。 7.BGP的使用 BGP的功能是在各AS之间完成路由选择。它主要用于ISP(Internet Service Provider)之间的连接和数据交换。 但是,并不是所有情况下BGP都适用。使用BGP会大大增加路由器的开销,并且大大增加规划和配置的复杂性。所以,使用BGP协议需要先做好需求分析。 一般来说,假如本地的AS与多个外界AS建立了连接,并且有数据流从外部AS通过本地AS到达第三方的AS,那么可以考虑使用BGP来控制数据流。 假如本地AS与外界只有一个连接(通常说的stub AS),而且并不需要对数据流进行严格控制,那就不必使用BGP协议,而可以简单的使用静态路由(Static route)来完成与外部AS的数据交换。另外,硬件和线路的原因也会影响到BGP的选择。如前所说,使用BGP会加大路由器的开销,并且BGP路由表也需要很大的存储空间,所以当路由器的CPU或者存储空间有限时,或者带宽太小时,不宜使用BGP路由协议。 8.总结 BGP的主要功能是连接各个AS,提供AS之间的信息交换。各个BGP系统之间交换路由信息,来保证得到一个无环路的路由结构。BGP还提供了在AS的水平上的路由策略的选择方式,以优化路由选择。 作为整个互联网的整体支架,BGP提供了一个功能强大的连接AS的工具,但是它在使用中也存在一定的局限性,所以在决定使用之前一定要作认真分析,以确定是否使用BGP以及具体实施方案。