一. BGP协议概述
BGP用于在不同的自治系统(AS)之间交换路由信息。当两个AS需要交换路由信息时,每个AS都必须指定一个运行BGP的节点,来代表AS与其他的AS交换路由信息。通常是路由器来执行BGP。两个AS中利用BGP交换信息的路由器也被称为边界网关(Border Gateway)或边界路由器(Border Router)。 (http://127.0.0.1/bgp_basic.jpg)
二. BGP的基本概念
AS(Autonomous System)自治系统:
自治系统就是处于一个管理机构控制之下的路由器和网络群组。在一个自治系统中的所有路由器必须相互连接,运行相同的路由协议,同时分配同一个自治系统编号。
BGP发言者(BGP Speaker):
发送BGP消息的路由器称为BGP发言者,它接收或者产生新的路由信息,并发布给其他BGP发言者。
Router ID(RID):
用来在自治系统中唯一标识一台路由器。Router ID可以是手工配置或这是路由协议自动选举。
BGP对等体(BGP Peer):
相互交换消息的BGP发言者之间互称对等体(Peer),也可以称为BGP邻居。
IBGP对等体(Internal BGP Peer):
如果BGP对等体处于同一自治系统内,被称为IBGP对等体,要求TCP可达。为了防止环路,BGP协议规定BGP发言者从IBGP获得的路由不向它的IBGP对等体发布。
EBGP对等体(External BGP Peer):
BGP对等体处于不同自治系统时,被称为EBGP对等体,一般物理直连。BGP Speaker从EBGP对等体获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP);同时为了防止环路,他不会将学习到的路由再向原发布者发布。
AS-PATH:
BGP的路由可能会从一个AS发往另外一个AS,从而穿越多个AS,可能在经过转发之后,又回到了最初的AS之中,最终形成路由环路,出于防止环路的目的考虑,BGP在将路由发往其它AS(EBGP邻居)时,需要在路由中写上自己的AS号码,下一个AS收到路由后,除了保留之前的AS号码之外,也要添加上自己的AS号码,这样的写在路由中的AS被称为AS-path,如果BGP收到的路由的AS_PATH中包含自己的AS号码,就认为路由被发了回来,以此断定出现了路由环路。 (http://127.0.0.1/bgp_as_path.jpg)
三.BGP工作过程
BGP邻居建立
-
Idle状态:初始空闲状态,不接受任何BGP连接,等待start事件的产生。 -
Connect状态:连接状态。 -
Active状态:活跃状态。 -
Opensent状态:OPEN消息已发送。 -
OpenConfirm状态:OPEN消息确认。 -
Established状态:连接建立。 (http://127.0.0.1/bgp_connect.jpg) -
Open消息:用于BGP对等体之间建立连接并进行参数协商。内容包括使用的BGP版本号、自己所属的AS号、路由器ID、Hold Time值、认证信息等信息。 -
Keepalive消息:BGP会周期性(30s)向对等体发出Keepalive消息,主要作用就是保持邻居关系的稳定;另外一个作用就是对收到的Open消息的回应。 (http://127.0.0.1/bgp_open_message.jpg)
BGP路由表导入
默认情况下,任何路由都不会自动进入BGP路由表,BGP路由表的路由获得有多种方式,可以从BGP邻居获得,也可以手工将IGP路由导入BGP路由表,还可以将其它路由重分布进BGP。
BGP路由更新和撤销
- UPdate消息:主要用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以发布不可达路由消息。
- Notification消息:如果检测到对方发过来的消息有错误或者主动断开BGP链接,都会发出Notification消息来通知BGP邻居,并关闭链接回到idle状态;接收端也会变为idle状态。
- Route-refresh消息:Route-refresh用来要求对等体重新发送指定地址族的路由信息。
(http://127.0.0.1/bgp_update_message.jpg)
四.BGP路径属性
公认必遵属性:ORIGIN、AS-PATH、NEXT_HOP
是公认所有BGP实现都必须识别的属性,这些属性被传递给BGP邻居。
ORIGIN:
来源属性就反映出了路由是如何进入BGP路由表的。 0表示IGP,通过network命令导入AS内部的IGP路由; 1表示EGP,通过EGP学习的路由; 2表示INCOMPLETE,通过其他方式学习的路由;
AS-PATH:
路由到达一个目的地所经过的一系列自制系统号码的有序列表,用于防止环路。BGP发言者在向EBGP邻居发送路由更新时修改AS_PATH属性,向IGP邻居发送时不修改该属性。
NEXT_HOP:
路由信息的下一跳信息。 1、BGP发言者把自己产生的路由发给所有邻居时,下一跳为自己接口地址; 2、BGP发言者把从EGP邻居得到的路由发给IBGP邻居时,不修改下一跳属性; 3、BGP发言者把收到的路由发给EBGP对等体时,把下一跳属性设置为本地与对端连接的接口地址。
公认可选属性:LOCAL—PREF、ATOMIC_AGGREGATE
是公认所有BGP实现都必须识别的属性,但是为路由写入公认自选属性并不是必须的。
LOCAL_PREF:
用于AS内IBGP邻居选择离开本地AS时的最佳路由,表明的是BGP路由的优先级,该 属性只在AS内部传播,不传递到AS外。
ATOMIC_AGGREGATE(原子聚合):
是用来通告路由接收者,该路由是经过聚合的。它实际上是一种警告,因为发布更粗略的路由意味着更精细的路由信息在发布过程中丢失了。在进行路由聚合时,对于聚合的路由信息会添加ATOMIC-AGGREGATE属性。
可选传递属性:COMMUNITY、AGGREGATOR
并不是所有的BGP路由器都能识别的属性,也并不一定能保留和传递该属性。
COMMUNITY(团体):
此属性指共享一个公共属性的一组路由器。
AGGREGATOR(聚合者)::
此属性标明了实施路由聚合的BGP路由器ID和聚合路由的路由器的AS号。
可选不可传递属性:MED、CLUSTER-LIST、ORIGINATOR-ID
只有特定的BGP路由器才理解和支持可选不可传递属性,并且可选不可传递属性理论上是不能手工设置的,这些属性也不能任意传递,只可以传递到特定的BGP路由器。
MED(MULTI-EXIT-DISC 多出口区分):
MED就是BGP路由中的metric,是被设计用来影响在多个下一跳都为eBGP邻居时,如何选择最优路径,MED越小优先级越高,默认值为0。
CLUSTER_LIST(簇列表):
此属性显示了采用的反射路径,类似AS_PATH。当一台RR向另外一台RR放射路由时会加上cluster-list属性,一般是自己的cluster id号来填充。
ORIGINATOR_ID(起源ID):
路由反射器会附加到这个属性上,它携带本AS路由器的路由器ID,用以防止环路。
五.BGP路由优选
- 优选Preferred_value(Weight)值最大的路由;
- 优选本地优先级(LOCAL_PREF)最大的路由;
- 依次选择network命令生成的路由、import-route命令引入的路由、聚合路由;
- 优选AS路径(AS_PATH)最短的路由;
- 依次选择ORIGIN属性为IGP、EGP、Incomplete的路由;
- 优选MED值最低的路由;
- 依次选择从EBGP、IBGP学来的路由;
- 优选下一跳度量值(Metric)最低的路由;
- 优选CLUSTER_LIST长度最短的路由;
- 优选ORIGINATOR_ID最小的路由;
- 优选Router ID最小的路由器发布的路由;
- 优选IP地址最小的对等体发布的路由;
六.BGP基本配置
R1和R2建立IBGP邻居,IGP协议使用OSPF; R2和R3之间建立EBGP邻居; R2上通过network引入环回口路由11.1.1.1/32,通过重分布引入直连路由; R1上通过IBGP学习到R2引入的直连路由; R3上通过EBGP学习到R2引入的环回口路由和直连路由; (http://127.0.0.1/bgp_topo.jpg)
配置:
结果:
|