1. 介绍
BGP是自治系统间的路由协议。BGP交换的网络可达性信息提供了足够的信息来检测路由回路并根据性能优先和策略约束对路由进行决策(要点见RFC 1104[2])。非凡地,BGP交换包含全部AS path的网络可达性信息,按照配置信息执行路由策略。
随着近年来互联网的进步和增长,它也不得不面对一些严重的规模问题,包括:
-B类网络地址空间的耗尽。该问题的主要原因之一,是缺少适于中型组织的中等大小的网络;C类网络,最多拥有254个主机地址,实在太少,而B类网络答应最多65534个地址,却又太大无法充分使用。
-互联网路由器中路由表的增长使目前的软件(和人们)无法有效治理。
-32位IP地址空间的耗竭。
很明显,前两个问题和最后一个问题可能分别在今后一两年内和三年内变得急迫。无类别域间路由(CIDR)试图解决这些问题,设计相应机制来降低路由表和对新IP网络分配需求的增长速度。它并没有解决更具长期性的第三个问题,而是努力让近期问题推迟使得互联网仍能有效运作,同时着手远期的解决方案。
BGP-4对BGP-3做了扩展,支持路由信息的聚合及基于无类别域间路由体系(CIDR)[3]的路由减少。本备忘录论述了BGP-4在互联网中的应用。
本文档的所有讨论基于如下假设:互联网是一些随意连接的自治系统的集合。也就是说,互联网可以建模成一张一般的网络图,图上节点是AS,边是每对AS间的连接。
自治系统的经典定义是,一组路由器在统一治理之下,在AS内使用内部网关协议和统一度量来路由数据包,而通过外部网关协议将数据包路由到其他AS。该经典定义尚在发展,一些AS在其内部使用多种内部网关协议和度量。在此,强调一下自治系统在本文档中的含义,即使它采用多种IGP和度量,它的治理区别于其他 AS,其内部路由是一致的,当路由穿越它时,它在图上视作一个节点。
每个AS由一个治理机构治理,至少在外部看来它代表着该系统的路由信息。
2. BGP拓扑模型
当我们说一个在两个AS之间的连接时,意味着两件事:
物理连接:两个AS之间存在一条共享的数据链路子网,并且在该子网上,每个AS至少有一台自己的边界网关路由器。因此,每个AS的边界网关路由器可以转发数据包到其他AS的边界网关路由器,无需借助于AS内到AS间的路由。
BGP连接:在各个AS的BGP发言人之间有一个BGP会话进程,通过会话沟通路由,经过声明的AS到达某目标网络。
本文档中,我们对构成BGP连接的BGP发言人加以额外限制:他们必须是自己直接共享数据链路子网。因此,相邻AS间的BGP会话无需AS内或AS间的路由。超出本文范围的案例可能与该限制不符。
因此,在每个连接中,每个AS拥有一个以上的BGP发言人和边界网关路由器,这些BGP发言人和边界网关路由器分布在共享数据链路子网上。注重到, BGP发言人不一定是边界网关路由器,反之亦然。一条连接上一个AS的BGP发言人声明的路径可以被同一个共享子网上其他AS的边界网关路由器使用,也就是非直接的邻居是答应的。
一个AS内的流量,要么是源于该AS,要么是终于该AS(也就是说,IP数据包的源IP或目的IP在该AS内)。符合以上描述的流量称为"本地流量",否则称为"过渡流量"。BGP使用的主要目的是控制过渡流量。
按照某AS如何处理过渡流量,AS可以分为以下几类:
末端AS:只连接到一个其他AS。自然地,末端AS只运输本地流量。
多宿主AS:连接到超过一个的其他AS,但不运输过渡流量。
过渡AS:连接到超过一个的其他AS,可以运输本地和过渡流量。
一个完整的AS path提供了有效和简捷的方式来避免路由回路、消除伴随距离向量算法的"计数到无穷"问题,因此,BGP没有对AS之间的连接拓扑加以任何限制。
3. 互联网中的BGP
3.1 拓扑学考虑
互联网拓扑可以视作过渡AS、多宿主AS和末端AS的任意互连。为了尽可能减少对目前互联网结构的影响,末端和多宿主AS不一定要使用BGP。这些AS 可以运行其他的协议(比如,EGP)来与过渡AS交换网络可达性信息。使用BGP的过渡AS将对这些信息做标记,以表明其学习自BGP以外的方法。BGP 不一定运行于末端或多宿主AS,这就不会对源于或终于末端AS或多宿主AS的数据包的AS间路由质量产生负面影响。
然而,仍然建议在末端和多宿主AS上使用BGP。在这些情况下,BGP相比其他目前使用的协议(比如EGP),可以提供更优的带宽和性能。另外,这将减少默认路由的使用,为多宿主AS的AS间路由提供更好选择。
3.2 BGP的整体特性
整体水平上,BGP用来在多个自治系统间传递路由信息。其信息流如下图示:
+-----------++------------+
BGP BGP BGP BGP BGP
-------------------+ +--------------------------++----------
IGP IGP
+------------++-----------+
<-AS A--<--AS B-
这张图表说明,在AS间只用BGP传输信息,而在AS内BGP和IGP均可以传输信息。确保AS内BGP和IGP间路由信息的兼容性,是一个重大问题,最后将在附录A中具体讨论。
3.3 BGP邻居关系
互联网视作随意连接的AS的集合。通过BGP直接连接的路由器就是BGP发言人。BGP发言人可以在同一AS内,也可以在不同AS内。每个AS的BGP 发言人互相通信,遵照每个AS建立的策略,交换网络可达性信息。对某BGP发言人,假如与其他BGP发言人通信而且那个BGP发言人在不同的AS,则那个其他 BGP发言人称为外部对等体,而假如在相同的AS内,则称为内部对等体。
在一个AS内可以有许多BGP发言人并被认为是需要的。通常,假如一个 AS与其他AS有多个连接,则需要多个BGP发言人。所有BGP发言人代表着相同AS,对外保持统一形象。这就要求他们之间保持一致的路由信息。这些路由器可以通过BGP或其他方法互相通信。在同一AS内的所有BGP发言人的策略约束必须一致。一些技术,如使用带标记的IGP(参见A.2.2),可以用来探测可能的矛盾。
对于外部对等体,对等体分别属于不同的AS,但共享同一数据链路子网。这共同的子网用来在对等体之间运输BGP信息。假如BGP使用通过一个干预的AS,则将使AS path信息无效。自治系统号必须在BGP中使用,用来标明BGP发言人所在的自治系统。
4. 路由聚合的需要
当路由信息由各部分聚合时,一致的BGP-4实现需要对其声明。例如,一个在自治系统边界的BGP发言人必须能产生某目标IP集合的聚合路由(在BGP -4 术语中该目标IP集合称为网络层可达性信息,NLRI),在它基础上进行治理(包括路由器自身代表的地址),即使当这些地址不是同时全部可达的。
当聚合的NLRI产生时,一致实现应能给予声明。
当NLRI解聚合时,一致实现应能给予声明。
当出现重叠路由时,一致实现应能支持如下选项:
-安装聚合和具体的路由
-只安装具体路由
-安装聚合路由
-均不安装
一定的路由策略可能依靠于NLRI(比如,"研究"与"商业")。因此,一个运行路由聚合的BGP发言人,可能的情况下,应该能认知聚合NLRI时路由策略的潜在实现。
5. BGP的策略生成
BGP通过各种路由参数选择和约束,实现策略。策略并不直接编入协议。而是,策略通过BGP的配置信息来实现。
BGP实现策略的途径有,影响从多条路径中的选择,控制路由信息的下步传递。策略由AS的治理者决定。
路由策略与政治、安全或经济考虑有关。
例如,假如一个AS不愿意将流量运输到其他AS,它可以制定策略来禁止。如下是一些能够改变BGP使用的路由策略的例子:
1. 一个多宿主AS可以拒绝成为其他AS的过渡AS。(它只告知那些目标网络在自己AS内部的路由。)
2. 一个多宿主AS可以指定成为几个相邻AS的过渡AS,也就是说,一部分而不是全部AS,可以把该多宿主AS作为过渡AS。(它只把它的路由信息告知被答应的AS。)
3. 一个AS向外运输流量时,可以决定是否偏爱特定的AS。
BGP应用可以控制许多性能相关的标准:
1. 一个AS可以最少化过渡AS的数目。(AS path越短,越可能被采用。)
2. 过渡AS的权重。假如一个AS决定,两个以上的AS path可以用来到达目标网络,那么,AS可以使用多种方法来决定采纳哪个候选AS path。一个AS的权重值由以下几个因素决定:径向距离,链路速度,容量,拥塞的趋势,和运行质量。这些性能值可以由BGP以外的方法决定。
3. 优先考虑内部路由,而不是外部路由。
为了一个AS的统一性,那些产自策略和/或正常路由选择过程的等值路径,必须以一致的方式解决。
BGP的基础,是这样一个规则:一个AS只把自己使用的路由通知给相邻的AS。该规则反映了目前互联网常用的"一跳接一跳"的路由方式。
6. BGP的路径选择
BGP 发言人的一项主要任务,是评价诸条从自身出发到那些用网络前缀表达的目的地的路径,从中选出最优,应用合适的策略约束,然后将它通知给所有的BGP邻居。要害问题是如何评价和比较这些不同的路径。传统的距离向量协议(比如RIP)中,每条路径只有一个度量。因此,不同路径的比较简化为两个值的比较。AS间路由的复杂性,源自人们在如何评价外部路由的问题上缺少共同认可的度量。于是,每个AS拥有自己的一套对路径的评价指标。
BGP发言人构建的路由数据库,由所有可用的路径和每条路径可达的目标集合(表达为网络前缀)组成。为了达到前面讨论的目的,考虑目标网络所对应的可用路径,是有用的。大多数情况下,我们期望找到唯一一条可用路径。但是,当不是这样时,所有可用的路径应当保存,当主要路径缺失时,保存能以最快的速度适应,(产生新的主要路径)。任何时候,只有主要路径才会被广播。
路径选择过程可以形式化为,对所有可用路径及相对应的目标IP,定义完整的优先级。定义这种优先级的一种方法,是定义一个函数,将每条完整的AS path映射成一个非负整数,用来表示该路径的优先级。路径选择于是简化为,将该函数应用到所有可用路径,再选择最高的优先级。
在真实的BGP实现中,为路径分配优先级的标准在配置信息中说明。
为路径分配优先级的过程源于以下几个信息:
1. 整条AS path显示的信息
2. 由AS path和BGP以外信息(比如,配置信息中的路由策略约束)引申出来的混合信息。
为路径分配优先级的可能的标准为:
-AS数目。AS越少,该条路径越好。
-策略考虑。BGP对基于策略路由的支持,源于对分布式路由信息的控制。一个BGP发言人可能知道几条策略约束(包括自身AS的内外),进行合适的路径选择。不遵从策略要求的路径不被考虑。
-某些AS是否在路径中存在。依靠BGP以外的信息,一个AS可以知道某些AS的一些性能特点(比如,带宽,MTU,AS间径向距离),然后选择偏爱程度。
-路径起源。由BGP学习而来的整条路径(也就是说,路径终点与路径的上一个AS在BGP内部)相比那些部分学习自EGP及其他方法的路径,是更优的。
-AS path子集。通往同一目的地,一个较长AS path的子集将受到偏爱。在该较短AS path中存在的任何问题都也是较长AS path的问题。
-链路动态。稳定的路径比不稳定的路径更受欢迎。注重,这个标准应被小心使用,避免出现路由抖动。一般来说,任何依靠于动态信息的标准都可能引发路由不稳定,所以应谨慎对待。
7. 支持路由策略的必备集合
BGP策略以配置信息的形式实现。该信息不直接编入协议。因此,BGP可以提供非常复杂的路由策略。但是,并不要求所有的BGP实现支持这些策略。
我们不试图将路由策略标准化使其适用于每个BGP实现,强烈鼓励所有的实现支持如下的路由策略集:
1. BGP实现应答应一个AS控制向相邻AS广播由BGP学习来的路由。实现还应支持对地址前缀大小的控制。实现还应支持对自治系统大小的控制,不管该自治系统是起源,还是邻居。假如某路由对某外部对等体按上述控制声明,则需注重该路由不能向那个对等体通告。非凡地,本地系统必须明确向那个对等体通告,该路由现在不可用。
2. BGP实现应答应一个AS对某条路径优先考虑(当存在多条可用路径时)。实现至少具备以下相同功能,答应治理者对来自邻居的路由设置优先级。优先级的大小应在0到2^(31)-1之间。
3. BGP实现应答应一个AS忽略某些在AS_PATH属性中存在特定AS的路由。该功能的实现,可以使用[2]中说明的技术,设置这些AS的"weight"为"infinity"。路由选择过程必须忽略那些"weight"为"infinity"的路由。
8. 与其他外部路由协议的关系
本部分建议的指导方针与[3]中陈述的指导方针一致。
一个AS应通告它内部目标网络的最小聚合及与实际使用的地址空间的关系。这可以被非BGP-4的AS的治理者用来决定从某条聚合路由可以解聚出多少路由。
一个携带ATOMIC_AGGREGATE路径属性的路由,不应传递于BGP-3或EGP2,除非这种传递不出现路由NLRI的解聚。
8.1 与EGP2交换信息
本文档对于BGP-4与EGP2间的路由信息交换,建议如下方针。
为过渡顺利,一个BGP发言人EGP2和BGP-4都可以参与。因此,一个BGP发言人接收IP可达性信息,可能产自EGP2,也可能产自BGP-4。由 EGP2产生的信息,将ORIGIN路径属性设为1后,可插入BGP-4。同样地,由BGP-4产生的信息也可以插入EGP2。但是,第二种情况,当从 BGP-4接收来的IP前缀代表连续的A/B/C类网络集合时,应清楚潜在的解聚信息。由BGP-4接收的NLRI代表IP子集,插入时,要求BGP发言人将相应的网络插入EGP2。本地系统将提供控制EGP2与BGP-4之间可达性信息交换的机制。非凡地,当把来自BGP-4的可达性信息插入EGP2 时,一个一致实现要求支持所有如下选项:
-插入默认的(0.0.0.0),不传递其他NLRI
-答应受控的解聚,但只对特定路由;
-答应传递非聚合的NLRI
-答应只传递非聚合的NLRI
在一个参与BGP-4的BGP发言人和一个单纯的EGP2发言人之间以EGP2交换路由信息的情况,只可能发现在域(自治系统)边界。
8.2 与BGP-3交换信息
本文档对于BGP-4与BGP-3间的路由信息交换,建议如下方针。
为过渡顺利,一个BGP发言人BGP-3和BGP-4都可以参与。因此,一个BGP发言人接收IP可达性信息,可能产自BGP-3,也可能产自BGP-4。
一个BGP发言人可能按如下方式将来自BGP-4的信息插入到BGP-3。
假如一条BGP-4路由的AS_PATH属性带有AS_SET路径段,那么,BGP-3路由的AS_PATH属性应为将此AS_SET段视作 AS_SEQUENCE段,最后的AS_PATH为单纯的一个AS_SEQUENCE。这个过程损失了set/sequence信息,但不影响预防路由回路,但可能影响策略,假如策略是建立在AS_PATH属性的内容或顺序上的话。
把源自BGP-4的NLRI插入BGP-3,当从BGP-4接收来的IP前缀代表连续的A/B/C类网络集合时,应清楚潜在的解聚信息。由BGP-4接收的NLRI代表IP子集,插入时,要求BGP发言人将相应的网络插入BGP-3。本地系统将提供控制BGP-3与BGP-4之间可达性信息交换的机制。非凡地,当把来自BGP-4的可达性信息插入BGP-3时,一个一致实现要求支持所有如下选项:
-插入默认的(0.0.0.0),不传递其他NLRI
-答应受控的解聚,但只对特定路由;
-答应传递非聚合的NLRI
-答应只传递非聚合的NLRI
在一个参与BGP-4的BGP发言人和一个单纯的BGP-3发言人之间以BGP-3交换路由信息的情况,只可能发现在自治系统边界。在一个单独的自治系统内部,所有BGP发言人的会话必须要么是BGP-3,要么是BGP-4,不能是混合体。
9. 在虚拟交换线路上的运作
BGP使用在虚拟交换子网(SVC)上,被要求产生尽可能少的流量。非凡地,可能被要求消除由周期性KEEPALIVE消息所产生的流量。BGP包含了一个机制,在虚拟交换线路(SVC)服务运作时,避免SVCs始终开启,答应它终止周期性KEEPALIVE消息的发送。
本部分论述了如何在没有周期性KEEPALIVE消息的条件下,使用智能的SVC治理,使SVC使用最少。所提议的方案也适用于"永久"线路,"永久"线路支持类似链路质量监测的特性,或者可以显示请求来决定链路连接的状态。
9.1 建立BGP连接
通过在OPEN消息中设定Hold Time为0来实现
9.2 线路治理器特性
线路治理必须具备足够的功能来弥补周期性KEEPALIVE消息的缺失:
-必须能够在失败发生的可预见的有限时间内,确定链路层的不可达性。
-关于确定不可达性,应该:
-开启一个配置死寂的计数器(与典型的保持计数器值相比)。
-试图重建链路层连接。
-假如死寂计数器终止,应该:
-发送一个内部线路DEAD指示给TCP。
-假如连接重建,应该
-取消死寂计数器
-发送一个内部线路UP指示给TCP。
9.3 TCP特性
TCP须做一点修改,来处理来自线路治理器的内部通告:
-DEAD:清除发送队列,取消TCP连接。
-UP:发送任何队列数据,或者答应向进程传递TCP调用
9.4 混合特性
一些应用可能无法保证BGP进程和线路治理器统一工作;也就是说,当一个停止或崩溃时,另一个仍独立存在。
假如这是事实,在BGP进程和线路治理器之间周期性的双向握手就需要实现。假如BGP进程发现线路治理器死亡,它就关闭所有相关的TCP连接。假如线路治理器发现BGP进程死亡,它将关闭所有与BGP进程相关的连接,拒绝新连接。
10. 结论
BGP协议为域间路由提供高度的控制和柔韧性,执行策略约束,避免路由回路。在此说明的指导方针为BGP使用提供了一个起点,随着BGP增长,它将提供更多高级和可治理的路由方法。
附录
A.BGP与IGP的关系
本部分概述了BGP与IGP交换路由信息的方法。这些方法此处不提议作为标准BGP使用的一部分。这些方法仅是信息补充。应用在引入IGP信息时,可能需要考虑这些方法。
这是适用于一般IGP的概述信息。
BGP与某特定IGP的关系不在此部分讨论。特定IGP的方法应在其他文档论述,在将来应成为标准化用法。
概论
根据定义,所有过渡AS必须能运输那些源于或终于该AS的流量。这要求在BGP和那个特定AS使用的内部网关协议(IGP)之间具有一定的联系和协调。一般来说,源于外部AS的流量将同时穿越内部网关(只支持IGP)和边界网关(支持IGP和BGP)。所有内部网关都通过IGP从一个以上的边界网关那儿接收有关外部路由的信息。
依靠在一个AS内传播BGP信息的机制,BGP和IGP之间的一致性须得到非凡关注,因为状态的改变可能以不同的速度在AS 内传播。可能出现时间窗,两个时刻分别为:在某边界网关(A)从相同AS内的另一台边界网关(B)获取新的BGP路由信息;AS的IGP能够路由过渡流量到边界网关(B)。在这两个时刻之间,错误路由和"黑洞"均可能发生。
为了尽可能减轻这个路由问题,在AS的所有内部网关预备好将目标为外部 IP 的流量发往正确出口边界网关(B)之前,边界网关(A)不应该向外部对等体广播那些通过边界网关(B)运往外部目标网络的路由。换句话说,内部路由须会聚一个合适的出口网关,然后才能广播通过该出口网关前往外部对等体的路由。
A.2 实现稳定关系的方法
下面的讨论概述了几个能实现在AS内BGP和IGP之间稳定关系的技术。
A.2.1 通过IGP传递BGP信息
BGP 提供自己的机制在AS内传递BGP信息,同样,只要IGP支持全部路由信息的洪泛(提供分散BGP信息的机制)和一条通路的会聚(使得机制有效原子化),就可以用来传输BGP信息。假如一个IGP用来传递BGP信息,前述的异步时间将不复存在,因为AS内部的BGP信息传递与IGP同步,IGP的会聚或多或少与新路由信息的到来同步。注重,IGP只运输BGP信息,不对其解析或处理。
A.2.2 标记的内部网关协议
当向外的路由在 AS内传递时,一定的IGP可以用它们的出口点给它们做标记。每个边界网关应使用同一的标记声明外部路由信息(通过BGP接收),不管这些路由信息是进入 IGP还是传递到其他的内部对等体(拥有相同AS号的对等体)。边界网关产生的标记必须唯一对应那个特定的边界网关——不同的边界网关必须使用不同的标记。
在一个AS内的所有边界网关必须遵守如下两条规则:
1. 假如边界网关A从内部对等体接收到信息声称某些目标网络不可达,则它必须向所有外部对等体传递该信息。
2. 假如边界网关A从内部对等体接收到关于某些可达目标网络X的信息,则它必须拥有到X的IGP路由,而且IGP和BGP的路由信息都有对应标记,否则无法将这些信息传递到任何外部对等体。
这些规则保证了除非IGP正确支持,否则不向外声明路由信息。它也可以部分避免"黑洞"。
在AS内标记BGP和IGP的一种方法是使用出口边界网关的IP地址。这种情况下,BGP的UPDATE消息的"gateway"域将用作标记。
A.2.3 封装
封装为运输AS间过渡流量提供了最简单的机制(关于IGP和BGP的联系)。用这种方法,过渡流量封装在一个地址为出口网关的IP数据包内。这种方法对IGP的唯一要求是能够支持同一AS内边界网关间的路由。
前往某些外部目标网络X的出口网关A的地址,通过A向同一AS内其他边界网关发送的BGP OPEN消息中的BGP标识符进行声明。为了路由流量到目标X,AS内的每个边界网关都封装流量到以网关A为地址的IP数据包。然后,网关A解封装,将原始数据包发送到外部AS的对应网关。
因为封装不依靠IGP来运输外部路由信息,所以在BGP和IGP之间无需同步。
一些方法用来标识包含封装IP的数据包,如用IP协议类型码,必须在使用前定义。
注重,假如一个封装后的数据包的长度非常接近MTU,这个数据包将被那个执行封装的网关分片。
A.2.4 遍布的BGP
假如一个AS内的所有路由器都是BGP发言人,那么就没有必要联系BGP和IGP。这种情况下,AS内的所有路由器拥有BGP路由的全部信息。IGP只用来在AS中路由,不再有BGP路由被导入成IGP。
假如路由器按此方式工作,它们必须能够完成对路由表的循环查找。第一次查找将使用一条BGP路由来建立出口路由器,第二次查找将决定前往出口路由器的IGP路径。
这种情形下,IGP不携带任何外部信息,所有BGP发言人一旦获得路由的新信息,该AS内的路由器将很快会聚。因为不存在为IGP的会聚延迟,一个应用能广播这些路由,而没有延迟。
A.2.5 其他情况
有些AS的IGP,可能既无法传输BGP信息,也无法标记外部路由(比如,RIP)。另外,封装可能不可行或不被接受。这些情况下,以下两条规则须被遵守:
(1). 假如边界网关A从内部对等体接收到信息声称某些目标网络不可达,则它必须向所有外部对等体传递该信息。
(2). 假如边界网关A从内部对等体接收到关于某些可达目标网络X的信息,则它必须拥有到X的IGP路由,而且有足够的时间使IGP路由会聚,否则无法将这些信息传递到任何外部对等体。
以上规则只说明了传递BGP路由信息到其他AS的必要(但不充分)条件。与标记的IGP相比,这些规则不能保证,在传递路由到其他AS之前,到出口网关的内部路由存在。
假如IGP会聚时间比某小值X还小,IGP和BGP不同步造成的时间窗也将小于X,那么,路由不稳定是异常短暂的,这个问题就可以忽略。至于这个X的合理取值,尚待研究,但至少应小于1秒。
假如IGP会聚时间无法忽略,就需要不同的方法。适合这种情形的机制和技术尚待深入研究。