一、BGP简介

BGP的前身EGP设计得非常简单,只能在AS之间简单地传递路由信息,不会对路由进行任何优选,也没有考虑如何在AS之间避免路由环路等问题,因而EBP最终被BGP取代。
相比于EGP,BGP更具有路由协议的特征,如下:

  • 邻居的发现与邻居关系的建立;
  • 路由的获取,优选和通告;
  • 提供路由环路避免机制,并能够高效传递路由,维护大量的路由信息;
  • 在不完全信任的AS之间提供丰富的路由控制能力。
    使用BGP作为传递路由的协议,则用户的路由域被作为一个整体和其他路由域进行路由交换,这个路由域即AS。AS的概念是若干台路由器以及这些路由器组成的网络集合,这些路由器均属于同一个管理机构,并执行统一的路由策略。
    运行BGP协议需要一个统一的自治系统号来标识路由域,即AS编号。每个自治系统都有唯一的一个编号,这个编号由IANA分配。009年1月之前,只能使用最多2字节长度的AS号码,即1-65535。其中1-64511为公有AS,64512-65534为私有AS。在2009年1月之后,IANA决定使用4字节长度AS,范围是65536-4294967295。
    BGP可以跨越多跳路由器建立邻居关系。
    因为是在AS之间传递路由,为保证数据的可靠性,BGP使用TCP作为其承载协议建立连接。因此与IGP逐跳路由器建立邻居不同,BGP可以跨越多跳路由器建立邻居关系。AS之间的路由器是不完全相互信任的。
    BGP协议被设计运行在AS之间传递路由,AS之间是广域网链路,数据包在广域网上传递是可能出现不可预测的链路拥塞或丢失等情况,因此BGP使用TCP作为其承载协议来保证可靠性。
    BGP使用TCP封装建立邻居关系,端口号为179,TCP采用单播建立连接,因此BGP协议并不像RIP和OSPF一样使用组播发现邻居。单播建立连接也使BGP只能手动指定邻居。
    运行在不同AS之间的BGP路由器建立的邻居关系为EBGP邻居关系。
    运行在相同AS内的BGP路由器建立的邻居关系为IBGP邻居关系。
    配置步骤:
    1、配置Router ID(标识路由器);
    2、配置EBGP邻居关系(AS之间传递路由);
    3、配置IBGP邻居关系(AS内部传递路由)。
    如果没有配置Router ID,BGP路由器会按一定规则自动选举Router ID,选举规则如下:
  • 路由器在它的所有LoopBack接口上选择数值最高的IP地址;
  • 如果没有LoopBack接口,路由器会在它的所有物理接口上选择数值最高的IP地址。
  • 配置命令:router id X.X.X.X

BGP底层路由协议为什么要配置rip bgp路由协议如何产生路由_IP


BGP邻居关系的类型主要靠配置的AS号区别,peer关键字后面是对端邻居的接口IP地址,as-number后面是邻居路由器所在的AS号,AS号相同则为IBGP邻居关系;AS号不同,则为EBGP邻居关系。

建立EBGP邻居关系时,一般使用直连接口的IP地址,因为EBGP是跨AS建立邻居关系,邻居关系建立之前非直连接口之间的路由不可达。建立IBGP邻居关系时,一般使用Loopback接口的IP地址。

BGP通过报文的交互完成邻居建立、路由更新等操作,共有Open、Update、Notification、Keepalive和Route-refresh等5种报文类型。

Open报文:是TCP连接建立后发送的第一个报文,用于建立BGP邻居之间的连接关系。BGP邻居在接收到Open报文并协商成功后,将发送Keepalive报文确认并保持连接的有效性。确认后,BGP邻居间可以进行Update、Notification、Keepalive和Route-refresh报文的交换。

Update报文:用于在BGP邻居之间交换路由信息。Update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。

Notification报文:当BGP路由器检测到错误状态时,就向邻居发出Notification报文,之后BGP连接会立即中断。

Keepalive报文:BGP路由器会周期性的向邻居发出Keepalive报文,用来保持连接的有效性。

Route-refresh报文:Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。

生成BGP路由的方式有两种:第一种是使用配置命令network,第二种是使用配置命令import。BGP路由封装在Update报文中通告给邻居,BGP在邻居关系建立后才开始通告路由信息。

为了防止其他路由被引入到BGP中,需要配置ip-prefix进行精确匹配,调用route-policy在BGP引入路由时进行控制。

Update消息主要用来公布可用路由和撤销路由,Update中含有以下信息:

1、网络层可达信息(NLRI):用来公布IP前缀和前缀长度。

2、路径属性:为BGP提供环路检测,控制路由优选。

3、撤销路由:用来描述无法到达且从业务中撤销的路由前缀和前缀长度。

BGP通告原则:

1、存在多条有效路由时,BGP路由器只将自己最优的路由发布给邻居。

2、BGP路由器通过EBGP获得的最优路由会发布给所有的BGP邻居(包括EBGP邻居和IBGP邻居)。

3、BGP路由器通过IBGP获得的最优路由不会发布给其他的IBGP邻居。

4、BGP的通告原则:一条从IBGP邻居学来的路由在发布给一个BGP邻居之前,通过IGP必须知道该路由,即BGP与IGP同步。

IP路由表(IP_RIB):全局路由信息库,包括所有的IP路由信息。

BGP路由表(Local_RIB):BGP路由信息库,包括本地BGP路由器选择的路由信息,邻居表,邻居清单列表。

收到BGP邻居发来的Update报文,路由器会执行算法进行路径选择,确定每一条前缀的最佳路径,并将计算出的最佳路径存储到本地BGP路由表(Local_RIB)中。

如果启用了多路径特性,最佳路径和所有等值路径都被提交给IP_RIB,考虑是否安装。除了从BGP邻居接收的最佳路径外,Local_RIB也包含当前路由器注入的路由(被称为本地发起的路由)。

在Local_RIB中,只有被选为最优的前缀才会被封装到Update报文中通告给自己的BGP邻居。

路由在AS之间传递时记录传播路径,防止环路的产生。

公认属性:所有BGP路由器都必须识别并支持的属性。

公认必遵:BGP的Update消息中必须包含的属性。

公认任意:不必存在于BGP的Update消息中,可以根据需求自由选择的属性。

可选属性:不要求所有的BGP路由器都能够识别的属性。

可选过渡:BGP不能识别该属性,但可以接收该属性并将其发布给它的邻居的属性。

可选非过渡:BGP可以忽略包含该属性的消息并且不向它的邻居发布。

BGP底层路由协议为什么要配置rip bgp路由协议如何产生路由_IP_02


local_pref属性仅在IBGP邻居之间有效,不通告给其他AS。他表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。

Community属性分为两类:一类是公认团体属性,另一类是扩展的团体属性。

Preference_Value是BGP的私有属性(华为私有属性),Preference_Value相当于BGP路由规则中Weight值,仅在本地路由器生效,Preference_Value值越大,越优先。

手动聚合的优先级高于自动聚合。在使用路由聚合时需要注意,自动聚合只能对引入的BGP路由进行聚合,手动聚合可以对存在于BGP路由表中的路由进行聚合,后续在BGP路由聚合中详细介绍。上述场景中,因为需要聚合的路由都是引入的路由,所以使用自动聚合与手动聚合都可以实现聚合的目的。如果BGP路由表中既有引入的路由又有network宣告的路由时,只能采用手动聚合实现。

EBGP邻居的路由优与IBGP邻居的路由。

BGP路由聚合方法:

1、静态

2、自动聚合

3、手动聚合

路由聚合解决了两类问题,一是减轻了设备传输和计算路由所需资源的负担,二是隐藏了具体的路由信息,减少了路由震荡的影响。但是路由聚合后,AS_Path属性丢失,存在产生环路的风险。

为了解决BGP路由聚合带来的问题,设置了两个AS_Path属性:

Atomic-Aggregate:公认任意属性,用于警告下游路由器出现了信息丢失,如图所示,AS 200内设置了路由聚合的路由器在聚合后发生了路径丢失的现象,此时该路由器通过Update报文携带该属性通知自己的邻居发生了路径丢失。

Aggregator:可选过度属性,该属性包含发起聚合的路由器的AS号和Router-ID,表明发生聚合的位置。

AS_Path属性有两种类型:

AS_Sequence:表示AS_Path内的AS号是一个有序的列表。

AS_Set:表示AS_Path内的AS号是一个无序的列表。