BGP技术介绍


BGP

BGP概述

BGPBorder Gateway Protocol,边界网关协议)是一种用于ASAutonomous System,自治系统)之间的动态路由协议。AS是拥有同一选路策略,在同一技术管理部门下运行的一组路由器。

早期发布的三个版本分别是BGP-1RFC 1105)、BGP-2RFC 1163)和BGP-3RFC 1267),当前使用的版本是BGP-4RFC 1771,已更新至RFC 4271)。BGP-4作为事实上的Internet外部路由协议标准,被广泛应用于ISPInternet Service Provider,因特网服务提供商)之间。

&  说明:

下文中若不做特殊说明,所指的BGP均为BGP-4

 

BGP特性描述如下:

l              BGP是一种外部网关协议(Exterior Gateway ProtocolEGP),与OSPFRIP等内部网关协议(Interior Gateway ProtocolIGP)不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由。

l              BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。

l              BGP支持CIDRClassless Inter-Domain Routing,无类别域间路由)。

l              路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。

l              BGP路由通过携带AS路径信息彻底解决路由环路问题。

l              BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。

l              BGP易于扩展,能够适应网络新的发展。

发送BGP消息的路由器称为BGP发言者(BGP Speaker),它接收或产生新的路由信息,并发布(Advertise)给其它BGP发言者。当BGP发言者收到来自其它自治系统的新路由时,如果该路由比当前已知路由更优、或者当前还没有该路由,它就把这条路由发布给自治系统内所有其它BGP发言者。

相互交换消息的BGP发言者之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peer group)。

BGP在路由器上以下列两种方式运行:

l              IBGPInternal BGP):当BGP运行于同一自治系统内部时,被称为IBGP

l              EBGPExternal BGP):当BGP运行于不同自治系统之间时,称为EBGP

BGP的消息类型

1. 消息头格式

BGP5种消息类型:OpenUpdateNotificationKeepaliveRoute-refresh。这些消息有相同的报文头,其格式如1所示。

图1 BGP消息的报文头格式

主要字段的解释如下:

l              Marker16字节,用于标明BGP报文边界,所有比特均为“1”。

l              Length2字节,BGP消息总长度(包括报文头在内),以字节为单位。

l              Type1字节,BGP消息的类型。其取值从15,分别表示OpenUpdateNotificationKeepaliveRoute-refresh消息。其中,前四种消息是在RFC 1771中定义,而Type5的消息则是在RFC 2918中定义的。

2. Open

Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。其消息格式如2所示。

图2 BGP Open消息格式

主要字段的解释如下:

l              VersionBGP的版本号。对于BGP-4来说,其值为4

l              My autonomous system:本地AS号。通过比较两端的AS号可以确定是EBGP连接还是IBGP连接。

l              Hold time:保持时间。在建立对等体关系时两端要协商Hold Time,并保持一致。如果在这个时间内未收到对端发来的Keepalive消息或Update消息,则认为BGP连接中断。

l              BGP identifierBGP标识符。以IP地址的形式表示,用来识别BGP路由器。

l              Opt Parm LenOptional Parameters Length):可选参数的长度。如果为0则没有可选参数。

l              Optional parameters:可选参数。用于多协议扩展(Multiprotocol Extensions)等功能。

3. Update

Update消息用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以撤销不可达路由信息。其消息格式如3所示。

图3 BGP Update消息格式

一条Update报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRINetwork Layer Reachable Information,网络层可达信息)字段中,Path Attributes字段携带了这些路由的属性,BGP根据这些属性进行路由的选择;同时Update报文还可以携带多条不可达路由,被撤销的路由放在Withdrawn Routes字段中。

主要字段的解释如下:

l              Unfeasible routes length:不可达路由字段的长度,以字节为单位。如果为0则说明没有Withdrawn Routes字段。

l              Withdrawn routes:不可达路由的列表。

l              Total path attribute length:路径属性字段的长度,以字节为单位。如果为0则说明没有Path Attributes字段。

l              Path atributes:与NLRI相关的所有路径属性列表,每个路径属性由一个TLVType-Length-Value)三元组构成。BGP正是根据这些属性值来避免环路,进行选路,协议扩展等。

l              NLRINetwork Layer Reachability Information):可达路由的前缀和前缀长度二元组。

4. Notification

BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。其消息格式如4所示。

图4 BGP Notification消息格式

主要字段的解释如下:

l              Error code:差错码,指定错误类型。

l              Error subcode:差错子码,错误类型的详细信息。

l              Data:用于辅助发现错误的原因,它的内容依赖于具体的差错码和差错子码,记录的是出错部分的数据,长度不固定。

5. Keepalive

BGP会周期性地向对等体发出Keepalive消息,用来保持连接的有效性。其消息格式中只包含报文头,没有附加其他任何字段。

6. Route-refresh

Route-refresh消息用来要求对等体重新发送指定地址族的路由信息。其消息格式如5所示。

图5 BGP Route-refresh消息格式

主要的字段解释如下:

l              AFIAddress Family Identifier,地址族标识。

l              Res.:保留,必须置0

l              SAFISubsequent Address Family Identifier,子地址族标识。

BGP的路由属性

1. 路由属性的分类

BGP路由属性是一组参数,它对特定的路由进行了进一步的描述,使得BGP能够对路由进行过滤和选择。

事实上,所有的BGP路由属性都可以分为以下四类:

l              公认必须遵循(Well-known mandatory):所有BGP路由器都必须能够识别这种属性,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错。

l              公认可选(Well-known discretionary):所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来选择。

l              可选过渡(Optional transitive):在AS之间具有可传递性的属性。BGP路由器可以不支持此属性,但它仍然会接收带有此属性的路由,并通告给其他对等体。

l              可选非过渡(Optional non-transitive):如果BGP路由器不支持此属性,该属性被忽略,且不会通告给其他对等体。

BGP路由几种基本属性和对应的类别如1所示。

表1 路由属性和类别

属性名称

类别

ORIGIN

公认必须遵循

AS_PATH

公认必须遵循

NEXT_HOP

公认必须遵循

LOCAL_PREF

公认可选

ATOMIC_AGGREGATE

公认可选

AGGREGATOR

可选过渡

COMMUNITY

可选过渡

MULTI_EXIT_DISC (MED)

可选非过渡

ORIGINATOR_ID

可选非过渡

CLUSTER_LIST

可选非过渡

 

2. 几种主要的路由属性

(1)        源(ORIGIN)属性

ORIGIN属性定义路由信息的来源,标记一条路由是怎么成为BGP路由的。它有以下三种类型:

l              IGP:优先级最高,说明路由产生于本AS内。

l              EGP:优先级次之,说明路由通过EGP学到。

l              incomplete:优先级最低,它并不是说明路由不可达,而是表示路由的来源无法确定。例如,引入的其它路由协议的路由信息。

(2)        AS路径(AS_PATH)属性

AS_PATH属性按一定次序记录了某条路由从本地到目的地址所要经过的所有AS号。当BGP将一条路由通告到其他AS时,便会把本地AS号添加在AS_PATH列表的最前面。收到此路由的BGP路由器根据AS_PATH属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。如6所示。

图6 AS_PATH属性

通常情况下,BGP不会接受AS_PATH中已包含本地AS号的路由,从而避免了形成路由环路的可能。

同时,AS_PATH属性也可用于路由的选择和过滤。在其他因素相同的情况下,BGP会优先选择路径较短的路由。比如在6中,AS 50中的BGP路由器会选择经过AS 40的路径作为到目的地址8.0.0.0的最优路由。

在某些应用中,可以使用路由策略来人为地增加AS路径的长度,以便更为灵活地控制BGP路径的选择。

通过AS路径过滤列表,还可以针对AS_PATH属性中所包含的AS号来对路由进行过滤。

(3)        下一跳(NEXT_HOP)属性

BGP的下一跳属性和IGP的有所不同,不一定就是邻居路由器的IP地址。

下一跳属性取值情况分为三种,如所示。

l              BGP发言者把自己产生的路由发给所有邻居时,将把该路由信息的下一跳属性设置为自己与对端连接的接口地址;

l              BGP发言者把接收到的路由发送给EBGP对等体时,将把该路由信息的下一跳属性设置为本地与对端连接的接口地址;

l              BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并不改变该路由信息的下一跳属性。如果配置了负载分担,路由被发给IBGP邻居时则会修改下一跳属性。

图7 下一跳属性

(4)        MEDMULTI_EXIT_DISC

MED属性仅在相邻两个AS之间交换,收到此属性的AS一方不会再将其通告给任何其他第三方AS

MED属性相当于IGP使用的度量值(metrics),它用于判断流量进入AS时的最佳路由。当一个运行BGP的路由器通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。如8所示,从AS 10AS 20的流量将选择Router B作为入口。

图8 MED属性

通常情况下,BGP只比较来自同一个AS的路由的MED属性值。

(5)        本地优先(LOCAL_PREF)属性

LOCAL_PREF属性仅在IBGP对等体之间交换,不通告给其他AS。它表明BGP路由器的优先级。

LOCAL_PREF属性用于判断流量离开AS时的最佳路由。当BGP的路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择LOCAL_PREF属性值较高的路由。如9所示,从AS 20AS 10的流量将选择Router C作为出口。

图9 LOCAL_PREF属性

(6)        团体(COMMUNITY)属性

团体属性用来简化路由策略的应用和降低维护管理的难度。它是一组有相同特征的目的地址的集合,没有物理上的边界,与其所在的AS无关。公认的团体属性有:

l              INTERNET:缺省情况下,所有的路由都属于INTERNET团体。具有此属性的路由可以被通告给所有的BGP对等体。

l              NO_EXPORT:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS

l              NO_ADVERTISE:具有此属性的路由被接收后,不能被通告给任何其他的BGP对等体。

l              NO_EXPORT_SUBCONFED:具有此属性的路由被接收后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS

BGP的选路规则

1. BGP选择路由的策略

在目前的实现中,BGP选择路由时采取如下策略:

l              首先丢弃下一跳(NEXT_HOP)不可达的路由;

l              优选Preferred-value值最大的路由;

l              优选本地优先级(LOCAL_PREF)最高的路由;

l              优选聚合路由;

l              优选AS路径(AS_PATH)最短的路由;

l              依次选择ORIGIN类型为IGPEGPIncomplete的路由;

l              优选MED值最低的路由;

l              依次选择从EBGP、联盟、IBGP学来的路由;

l              优选下一跳Cost值最低的路由;

l              优选CLUSTER_LIST长度最短的路由;

l              优选ORIGINATOR_ID最小的路由;

l              优选Router ID最小的路由器发布的路由。

l              优选地址最小的对等体发布的路由。

&  说明:

l      CLUSTER_ID为路由反射器的集群IDCLUSTER_LISTCLUSTER_ID序列组成,反射器将自己的CLUSTER_ID加入CLUSTER_LIST中,若反射器收到路由中CLUSTER_LIST中包含有自己的CLUSTER_ID,则丢弃该路由,从而避免群内环路的发生。

l      如果配置了负载分担,并且有多条到达同一目的地的路由,则根据配置的路由条数选择多条路由进行负载分担。

 

2. 应用BGP负载分担时的选路

BGP中,由于协议本身的特殊性,它产生的路由的下一跳地址可能不是当前路由器直接相连的邻居。常见的一个原因是:IBGP之间发布路由信息时不改变下一跳。这种情况下,为了能够将报文正确转发出去,路由器必须先找到一个直接可达的地址(查找IGP建立的路由表项),通过这个地址到达路由表中指示的下一跳。在上述过程中,去往直接可达地址的路由被称为依赖路由,BGP路由依赖于这些路由指导报文转发。根据下一跳地址找到依赖路由的过程就是路由迭代(recursion)。

目前系统支持基于迭代的BGP负载分担,即如果依赖路由本身是负载分担的(假设有三个下一跳地址),则BGP也会生成相同数量的下一跳地址来指导报文转发。需要说明的是,基于迭代的BGP负载分担在系统上始终启用。

在实现方法上,BGP的负载分担与IGP的负载分担有所不同:

l              IGP是通过协议定义的路由算法,对到达同一目的地址的不同路由,根据计算结果,将度量值(metric)相等的(如RIPOSPF)路由进行负载分担,选择的标准很明确(按metric)。

l              BGP本身并没有路由计算的算法,它只是一个选路的路由协议,因此,不能根据一个明确的度量值决定是否对路由进行负载分担,但BGP有丰富的选路规则,可以在对路由进行一定的选择后,有条件地进行负载分担,也就是将负载分担加入到BGP的选路规则中去。

&  说明:

l      BGP只对AS_PATH属性、ORIGIN属性、LOCAL_PREFMED值完全相同的路由进行负载分担。

l      BGP负载分担特性适用于EBGPIBGP以及联盟之间。

l      如果有多条到达同一目的地的路由,则根据配置的路由条数选择多条路由进行负载分担。

 

图10 BGP负载分担示意图

10中,Router DRouter ERouter CIBGP对等体。当Router ARouter B同时向Router C通告到达同一目的地的路由时,如果用户在Router C配置了负载分担(如balance 2),则当满足一定的选路规则后,并且两条路由具有相同的AS_PATH属性、ORIGIN属性、LOCAL_PREFMED值时,Router C就把接收的两条路由同时加入到转发表中,实现BGP路由的负载分担。Router C只向Router DRouter E转发一次该路由,AS_PATH不变,但NEXT_HOP属性改变为Router C的地址,而不是原来的EBGP对等体地址。其它的BGP过渡属性将按最佳路由的属性传递。

3. BGP发布路由的策略

在目前的实现中,BGP发布路由时采用如下策略:

l              存在多条有效路由时,BGP发言者只将最优路由发布给对等体;

l              BGP发言者只把自己使用的路由发布给对等体;

l              BGP发言者从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体);

l              BGP发言者从IBGP获得的路由不向它的IBGP对等体发布;

l              BGP发言者从IBGP获得的路由发布给它的EBGP对等体(关闭BGPIGP同步的情况下,IBGP路由被直接发布;开启BGPIGP同步的情况下,该IBGP路由只有在IGP也发布了这条路由时才会被同步并发布给EBGP对等体);

l              连接一旦建立,BGP发言者将把自己所有的BGP路由发布给新对等体。

IBGPIGP同步

同步是指IBGPIGP之间的同步,其目的是为了避免出现误导外部AS路由器的现象发生。

如果一个AS中有非BGP路由器提供转发服务,经该AS转发的IP报文将可能因为目的地址不可达而被丢弃。如11所示,Router E通过BGPRouter D可以学到Router A的一条路由8.0.0.0/8,于是将到这个目的地址的报文转发给Router DRouter D查询路由表,发现下一跳是Router B。由于Router DIGP学到了到Router B的路由,所以通过路由迭代,Router D将报文转发给Router C。但Router C并不知道去8.0.0.0/8的路由,于是将报文丢弃。

图11 IBGPIGP同步

如果设置了同步特性,在IBGP路由加入路由表并发布给EBGP对等体之前,会先检查IGP路由表。只有在IGP也知道这条IBGP路由时,它才会被发布给EBGP对等体。

在下面的情况中,可以关闭同步特性。

l              AS不是过渡AS11中的AS 20就属于一个过渡AS

l              AS内所有路由器建立IBGP全连接

大规模BGP网络所遇到的问题

1. 路由聚合

在大规模的网络中,BGP路由表十分庞大,使用路由聚合(Routes Aggregation)可以大大减小路由表的规模。

路由聚合实际上是将多条路由合并的过程。这样BGP在向对等体通告路由时,可以只通告聚合后的路由,而不是将所有的具体路由都通告出去。

目前系统支持自动聚合和手动聚合方式。使用后者还可以控制聚合路由的属性,以及决定是否发布具体路由。

2. BGP路由衰减

BGP路由衰减(Route Dampening)用来解决路由不稳定的问题。路由不稳定的主要表现形式是路由振荡(Route flaps),即路由表中的某条路由反复消失和重现。

发生路由振荡时,路由协议就会向邻居发布路由更新,收到更新报文的路由器需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。

在多数情况下,BGP协议都应用于复杂的网络环境中,路由变化十分频繁。为了防止持续的路由振荡带来的不利影响,BGP使用衰减来抑制不稳定的路由。

BGP衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。路由每发生一次振荡(路由从激活状态变为未激活状态,称为一次路由振荡),BGP便会给此路由增加一定的惩罚值(1000,此数值为系统固定,不可修改)。当惩罚值超过抑制阈值时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。

被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(Half-life)。当惩罚值降到再使用阈值时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。

图12 BGP衰减示意图

3. 对等体组

对等体组(Peer Group)是一些具有某些相同属性的对等体的集合。当一个对等体加入对等体组中时,此对等体将获得与所在对等体组相同的配置。当对等体组的配置改变时,组内成员的配置也相应改变。

在大型BGP网络中,对等体的数量会很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令,利用对等体组在很多情况下可以简化配置。

将对等体加入对等体组中,对等体与对等体组具有相同的路由更新策略,提高了路由发布效率。

4. 团体

对等体组可以使一组对等体共享相同的策略,而利用团体可以使多个AS中的一组BGP路由器共享相同的策略。团体是一个路由属性,在BGP对等体之间传播,它并不受到AS范围的限制。

BGP路由器在将带有团体属性的路由发布给其它对等体之前,可以改变此路由原有的团体属性。

除了使用公认的团体属性外,用户还可以使用团体属性列表自定义扩展团体属性,以便更为灵活地控制路由策略。

5. 路由反射器

为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2。当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。

利用路由反射可以解决这一问题。在一个AS内,其中一台路由器作为路由反射器RRRoute Reflector),其它路由器作为客户机(Client)与路由反射器之间建立IBGP连接。路由反射器在客户机之间传递(反射)路由信息,而客户机之间不需要建立BGP连接。

既不是反射器也不是客户机的BGP路由器被称为非客户机(Non-Client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。如13所示。

图13 路由反射器示意图

路由反射器和它的客户机组成了一个集群(Cluster)。某些情况下,为了增加网络的可靠性和防止单点故障,可以在一个集群中配置一个以上的路由反射器。这时,位于相同集群中的每个路由反射器都要配置相同的Cluster_ID,以避免路由循环。如14所示。

图14 多路由反射器

在某些网络中,路由反射器的客户机之间已经建立了全连接,它们可以直接交换路由信息,此时客户机到客户机之间的路由反射是没有必要的,而且还占用带宽资源。目前,系统支持配置相关命令来禁止在客户机之间反射路由。

&  说明:

禁止客户机之间的路由反射后,客户机到非客户机之间的路由仍然可以被反射。

 

6. 联盟

联盟(Confederation)是处理AS内部的IBGP网络连接激增的另一种方法,它将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立联盟内部EBGP连接关系。如15所示。

图15 联盟示意图

在不属于联盟的BGP发言者看来,属于同一个联盟的多个子自治系统是一个整体,外界不需要了解内部的子自治系统情况,联盟ID就是标识联盟这一整体的自治系统号,如15中的AS 200就是联盟ID

联盟的缺陷是:从非联盟方案向联盟方案转变时,要求路由器重新进行配置,逻辑拓扑也要改变。

在大型BGP网络中,路由反射器和联盟可以被同时使用。

BGP GR

基于BGPGR Restarter为了与BGP对等体建立一个BGP会话连接,首先要发送一个包含了GR能力的OPEN消息到对端,BGP对等体收到该消息后,得知发送方已具有GR能力。这样,通过OPEN消息交互GR能力,GR Restarter与其BGP对等体之间协商建立起GR Session连接。如果双方都没有交换GR能力的信息,建立起的会话也就不具备GR能力。

对于分布式设备,当进行主备倒换时,会话项将丢失,此时具备GR感知能力的BGP对等体会将所有与该GR Restarter有关的路由进行失效标记。但在GR Time内仍按照这些路由进行报文转发,这样确保了在从BGP对等体重新收集路由信息的过程中没有报文丢失。

对于分布式设备,主备倒换后,GR Restarter会重新与BGP对等体建立GR Session连接,同时发送新的GR消息以宣告其重启完毕。此时两个BGP对等体间进行路由信息交换。交换完成后,GR Restarter根据新的路由转发信息更新路由表和转发表,删除失效的路由,完成BGP协议收敛。

MP-BGP

1. MP-BGP概述

传统的BGP-4只能管理IPv4单播路由信息,对于使用其它网络层协议(如IPv6等)的应用,在跨自治系统传播时就受到一定限制。

为了提供对多种网络层协议的支持,IETFBGP-4进行了扩展,形成MP-BGP,目前的MP-BGP标准是RFC 4760Multiprotocol Extensions for BGP-4BGP-4的多协议扩展)。

支持BGP扩展的路由器与不支持BGP扩展的路由器可以互通。

2. MP-BGP的扩展属性

BGP-4使用的报文中,与IPv4地址格式相关的三条信息都由Update报文携带,这三条信息分别NLRI、路径属性中的NEXT_HOP、路径属性中的AGGREGATOR(该属性中包含形成聚合路由的BGP发言者的IP地址)。

为实现对多种网络层协议的支持,BGP-4需要将网络层协议的信息反映到NLRINEXT_HOPMP-BGP中引入了两个新的路径属性:

l              MP_REACH_NLRIMultiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。

l              MP_UNREACH_NLRIMultiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由

这两种属性都是可选非过渡(Optional non-transitive)的,因此,不提供多协议能力的BGP发言者将忽略这两个属性的信息,不把它们传递给其它邻居。

3. 地址族

MP-BGP采用地址族(Address Family)来区分不同的网络层协议,关于地址族的一些取值可以参考RFC 1700Assigned Numbers)。目前,系统实现了多种MP-BGP扩展应用,包括对VPN的扩展、对IPv6的扩展等。

 

附件下载

联系我们