自治系统(Autonomous System,AS):由一个单一的机构组成所管理的一系列IP网络及设备所构成的集合。可以简单地将AS理解为一个独立的机构或者企业所管理的网络。

根据工作范围的不同,动态路由协议可以分为两类:

IGP(Interior Gateway Protocol)内部网关协议,如RIP、OSPF、IS-IS等

EGP(Exterior Gateway Protocol)外部网关协议,如BGP

IGP协议用于帮助路由器发现到达本AS内的路由,从而实现AS内部的数据互通,一个AS通常采用一种IGP协议。

一个由多个AS构成的大规模的网络中,还需要EGP协议来完成AS之间的路由交互,而IGP就是最为大家熟知和使用最广泛的一种EGP协议。

BGP协议 as_path Bgp协议属于内部网关协议_对等体

BGP(Boeder Gateway Protocol)边界网关协议,几乎是当前唯一被用于在不同AS之间实现路由交互的EGP协议。

BGP使用TCP作为传输层协议,这使得协议报文的交互更加可靠和有序。BGP使用的目的TCP端口179,两台BGP路由器首先会建立TCP连接,随后同步双发的BGP路由表,在BGP路由表同步完成后,路由器不会周期性地发送BGP路由更新,而只发送增量更新或在需要时进行触发更新,这大大地减小了设备的负担及网络带宽损耗。

BGP对等体关系类型:

IGP协议以OSPF为例,当在两台直连路由器的直连接口激活OSPF后,这两个接口就开始收发Hello报文,在通过Hello报文发现了直连链路上的邻居后,一个邻接关系的建立过程也就开始了。IGP协议要求需要建立邻居关系的两台路由器必须是直连的,然而BGP则大不相同。我们将建立BGP邻居关系的路由器成为BGP对等体(Peer),BGP的对等体关系并不要求设备必须直连,BGP采用TCP作为传输层协议,两台路由器只要具备IP连通性,并且能够顺利地基于TCP179端口建立连接,就可以建立BGP对等体关系,因此BGP的对等体关系是可以跨设备建立的。BGP对等体可以分为两类,EBGP和IBGP

BGP协议 as_path Bgp协议属于内部网关协议_IBGP_02

1、EBGP对等体关系(External BGP Peer)

如果建立对等体关系的两台BGP路由器位于不同的AS,那么它们之间的关系被称为EBGP对等体关系。如上体,R1及R2、R3及R4运行了BGP并且两者建立了EBGP对等体关系。

BGP协议 as_path Bgp协议属于内部网关协议_BGP协议 as_path_03

AS200中的10.1.1.0/24路由发布到BGP,它将这条路由通过BGP通告给自己的EBGP对等体R1。每条BGP路由都携带着多个属性,这些属性被称为路径属性,其中一个非常重要的路径属性就是AS_Path,AS_Path是每条BGP路由都会携带的属性,它描述了一条BGP路由在传递过程中所经过的AS的号码。R2将始发于AS200的路由10.1.1.0/24通告给R1时,将该路由的AS_Path设置为200,而R1将这条路由通告给自己的IBGP对等体R3时,路由的AS_Path不发生改变。R3将该路由通告给EBGP对等体R4时,则将路由的AS_Path修改为100 200,也就是在原有的AS_Path基础上,插入自己所处AS的号码,当R4收到这条BGP路由更新时,它便知道要到达该目的网段,需要经过100、200这两个AS,而R4到R2建立EBGP显然更近,因此AS_Path的长度会影响路由器对BGP路径的优选。

另外,路由在EBGP对等体之间传递时,AS_Path还用于防止出现环路。R4从R3收到10.1.1.0/24路由后,如果它与R2之间存在EBGP对等体关系,那么它会将该路由通告给R2,此时路由的AS_Path为300 100 200,R2从R4收到该路由后,会忽略这条路由更新,因为它在收到的路由中看到了自己本地的AS号码,便意识到网络中出现了环路。

通常情况下,EBGP对等体关系必须基于直连接口建立,此时双方便可以使用直连接口来建立EBGP对等体关系。BGP之所以要设定这样的规则,是因为缺省情况下,EBGP对等体之间发送的BGP协议报文的TTL值为1,这使得这些协议报文只能够被传送1跳。当然,在某些特殊的场景中我们可能需要在两台非直连的路由器之间建立EBGP对等体关系,那么就需要修改EBGP对等体的跳数限制,通过这个操作来修改协议报文中的TTL值。

2、IBGP对等体关系(Internal BGP Peer)

如果建立对等体关系的两台BGP路由器位于相同的AS,那么它们之间的关系被称为IBGP对等体关系。上图中,AS100内存在两台运行着BGP的路由器:R1及R3,由于它们同属一个AS,因此它们之间建立的关系为IBGP对等体关系。

值得注意的是,在两台路由器之间建立IBGP对等体关系时,并不要求它们必须直连,AS100中R1与R3并未直连,得益于AS100中运行着IGP协议,如ospf,使得R1、R3能够发现到达对方的路由,从而两者能够借助这些路由建立TCP连接,并进一步建立IBGP对等体关系。

不同的BGP对等体关系,对路由的操作是有区别的:

BGP路由在EBGP对等体之间传递时,AS_Path属性会发生改变,路由的发送方会在该条BGP路由原有的AS_Path的基础上,插入自己所处AS的号码。而BGP路由在IBGP对等体之间传递时,AS_Path不会发生改变。

IBGP水平分割规则

AS_Path属性可以防止BGP路由在EBGP对等之间传递时发生环路,然而当路由在IBGP对等体之间传递时,AS_Path属性的值不会发生改变,也就是说当BGP路由在一个AS内传递时,时无法依赖AS_Path提供的防环能力的,那么此时路由环路就可能发生,IBGP水平分割规则就是用于解决这个问题的。

路由通告

BGP路由在对等体之间交互时,主要存在以下几个原则:

1、当一台路由器发现了多条可到达同一个目的网段的BGP路由时,该路由器会通过一个路由选择进程在这些路由中选择一条最优(best)的路由。通常情况下,路由器只将最优的路由加载到路由表中使用(激活了负载分担功能的情况除外),而且只会将最优的路由通告给BGP对等体。

2、当一台路由器从自己的EBGP对等体学习到BGP路由时,缺省时它会将这些路由通告给所有IBGP对等体及所有EBGP对等体。

3、当一台路由器从自己的IBGP对等体学习到BGP路由时,它不会将这些路由通告给其他IBGP对等体——IBGP的水平分割规则使然。

4、当一台路由器从自己的IBGP对等体学习到BGP路由时,如果BGP同步被激活,则路由器只有从IGP协议也学习到了相应的路由时,才会将这些BGP路由通告给EBGP对等体;如果BGP同步被关闭,则即使没有从IGP学习到相应的路由,它也会将这些BGP路由通告给EBGP对等体。

Router-ID

BGP Router-ID是网络设备的BGP协议标识符,长度为32bit,与IPv4地址格式相同。在规划BGP网络时,需要确保设备的Router-ID的唯一性。

BGP Router-ID可以通过两种方式获取,其一是让BGP自动选取,另一种方式则是通过手工配置的方式为设备指定。当然,从网络可靠性的角度考虑,在实际部署时,建议采用手工配置的方式指定设备的Router-ID

查看BGP对等体

两台BGP路由器需要首先建立对等体关系,然后才能够正常交互BGP路由。在BGP中,一台设备的BGP对等体需要网络管理员通过命令手工指定,也就是说BGP无法自动发现其他对等体。当两台需要建立对等体关系的BGP路由器完成配置后,双方需首先建立TCP连接,TCP连接建立完成后双方开始叫唤Open报文,如果一方认可对方发送过来的Open报文,则使用Keepalive报文进行回应。