1、概述

BGP(Border Gateway Protocol,边界网关协议)是一种用于AS(Autonomous System,自治系统)之间的动态路由协议。AS是拥有同一选路策略,在同一技术管理部门下运行的一
 
组路由器。
 
BGP特性描述如下:
BGP是一种外部网关协议(Exterior Gateway Protocol,EGP),与OSPF、RIP等内部网关协议(Interior Gateway Protocol,IGP)不同,其着眼点不在于发现和计算路由,而在
 
于控制路由的传播和选择最佳路由。
 
BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。
 
BGP支持CIDR(Classless Inter-Domain Routing,无类别域间路由)。
 
路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
 
2  BGP的消息类型
 
BGP有5种消息类型:Open、Update、Notification、Keepalive和Route-refresh。这些消息有相同的报文头
 
Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。
 
Update消息用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以撤销不可达路由信息。
 
当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
 
BGP会周期性地向对等体发出Keepalive消息,用来保持连接的有效性。其消息格式中只包含报文头,没有附加其他任何字段。
 
Route-refresh消息用来要求对等体重新发送指定地址族的路由信息。
 
3、几种主要的属性
 
(1) 源(ORIGIN)属性
 
ORIGIN属性定义路由信息的来源,标记一条路由是怎么成为BGP路由的。它有以下三种类型:
 
 IGP:优先级最高,说明路由产生于本AS内。
 
 EGP:优先级次之,说明路由通过EGP学到。
 
 incomplete:优先级最低,它并不是说明路由不可达,而是表示路由的来源无法确定。例如,引入的其它路由协议的路由信息。
 
(2) AS路径(AS_PATH)属性
 
AS_PATH属性按一定次序记录了某条路由从本地到目的地址所要经过的所有AS号。当BGP将一条路由通告到其他AS时,便会把本地AS号添加在AS_PATH列表的最前面。收到此路由的
 
BGP路由器根据AS_PATH属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
 
(3) 下一跳(NEXT_HOP)属性
 
BGP的下一跳属性和IGP的有所不同,不一定就是邻居路由器的IP地址。
 
下一跳属性取值情况分为三种,如图1-7所示。
 
 BGP发言者把自己产生的路由发给所有邻居时,将把该路由信息的下一跳属性设置为自己与对端连接的接口地址;
 
 BGP发言者把接收到的路由发送给EBGP对等体时,将把该路由信息的下一跳属性设置为本地与对端连接的接口地址;
 
 BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并不改变该路由信息的下一跳属性,如果配置了负载分担,等价路由被发给IBGP邻居时则会修改下一跳属性为自己与其连接
 
的接口地址
 
 
 
(4) MED(MULTI_EXIT_DISC)
 
MED属性仅在相邻两个AS之间交换,收到此属性的AS一方不会再将其通告给任何其他第三方AS。
 
MED属性相当于IGP使用的度量值(metrics),它用于判断流量进入AS时的最佳路由。当一个运行BGP的路由器通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时
 
,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。如图1-8所示,从AS 10到AS 20的流量将选择Router B作为入口。
 
 
(5) 本地优先(LOCAL_PREF)属性
 
LOCAL_PREF属性仅在IBGP对等体之间交换,不通告给其他AS。它表明BGP路由器的优先级。
 
LOCAL_PREF属性用于判断流量离开AS时的最佳路由。当BGP的路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择LOCAL_PREF属性值较高的路由
 
(6)团体(COMMUNITY)属性
 
团体属性也是跟随路由一起发送出去的一组特殊数据。根据需要,一条路由可以携带一个或多个团体属性值(每个团体属性值用一个四字节的整数表示)。接收到该路由的路由器
 
就可以根据团体属性值对路由作出适当的处理(比如决定是否发布该路由、在什么范围发布等),从而能够简化路由策略的应用和降低维护管理的难度。
 
 
4、 BGP选择路由的策略
在目前的实现中,BGP选择路由时采取如下策
 
首先丢弃下一跳(NEXT_HOP)不可达的路由;
 
优选Preferred-value值最大的路由;
 
优选本地优先级(LOCAL_PREF)最高的路由;
 
优选聚合路由;
 
优选AS路径(AS_PATH)最短的路由;
 
依次选择ORIGIN类型为IGP、EGP、Incomplete的路由;
 
优选MED值最低的路由;
 
依次选择从EBGP、联盟、IBGP学来的路由;
 
优选下一跳Cost值最低的路由;
 
优选CLUSTER_LIST长度最短的路由;
 
优选ORIGINATOR_ID最小的路由;
 
优选Router ID最小的路由器发布的路由。
 
优选地址最小的对等体发布的路由。
 
 
 
5、BGP发布路由的策略
在目前的实现中,BGP发布路由时采用如下策略:
 
存在多条有效路由时,BGP发言者只将最优路由发布给对等体;
 
BGP发言者只把自己使用的路由发布给对等体;
 
BGP发言者从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体);
 
BGP发言者从IBGP获得的路由不向它的IBGP对等体发布;
 
BGP发言者从IBGP获得的路由发布给它的EBGP对等体(关闭BGP与IGP同步的情况下,IBGP路由被直接发布;开启BGP与IGP同步的情况下,该IBGP路由只有在IGP也发布了这条路由时
 
才会被同步并发布给EBGP对等体);
 
连接一旦建立,BGP发言者将把自己所有的BGP路由发布给新对等体。