weizefeng

基本概念

l  BGP是一种外部网关协议,与内部网关协议(IGP)不同,不在于发现和计算路由,而在于AS之间选择最佳路由和控制路由的传递。

l  动态路由协议分为两类,一类是IGP(内部网关协议)例如rip、ospf、isis等。

                                           一类是BGP(外部网关协议)例如BGP等。

l  BGP支持VLSM(变长子网掩码)、CIDR(无类域间路由)、自动手动路由汇总。BGP定义了多种路径属性。路径属性影响BGP路由的优选。

l  BGP使用TCP作为传输协议。在传输层采用TCP封装,使用目的TCP端口179,本地端口随意

增量更新路由更新时,只发送更新的路由。(只在初始化时通告自身所有路由信息)

无环路:从设计上就避免了环路。(追问)

  1. AS-path属性防止AS之间环路的
  2. IBGP水平分割,防止AS内部环路的
  3. 在路由反射器中有两个,第一个是Originator-ID,是用来防止集群内产生环路的。
  4. 第二个是Cluster_List 是用来防止集群间产生环路的。

路由策略丰富:有13条选路原则

可防止路由振荡 (需要补充)

易于拓展:通过TLV进行拓展

简述工作流程:AS之间两台互为对等体的BGP路由器首先会建立TCP连接,随后协商各项参数并建立对等体关系。初始情况下双方会同步双方的BGP路由表。同步完成之后,路由器不会周期性地发送BGP路由更新,而只发送增量更新或在需要时进行触发性更新。减小带宽损耗。这是因为BGP往往被用于大批量路由信息,不能像IGP那样时时更新。

l  学习目标:

  1. 了解BGP的应用场景及协议特点。
  2. 熟悉BGP对等体关系的类型及区别。
  3. 熟悉BGP各种报文的功能及格式
  4. 理解BGP对等体关系的建立过程。
  5. 理解IBGP水平分割的原理。
  6. 理解BGP路由黑洞问题,了解其解决办法。

 

 1、BGP对等体关系类型

将建立BGP邻居关系的路由器称为BGP对等体。BGP对等体关系有两种,一种是EBGP,另一种是IBGP。

两台路由器具备有IP连通性,并且能够顺利地基于TCP179端口建立连接,就可以建立BGP对等体关系,因此是可以跨设备连接的


 

1.EBGP对等体关系

如果两台BGP路由器位于不同AS,它们之间的关系成为EBGP对等体关系

每条BGP路由都携带多个属性,这些属性称为路径属性

通常情况下,EBGP对等体关系基于直连接口建立。因为缺省情况下BGP协议报文的TTL值为1,所以只能被传送1跳。

当然,如果要在两台非直连的路由器之间建立EBGP,那么就要手动修改TTL的值了。


 

2.IBGP对等体关系

l  位于同一个AS,则成为IBGP对等体关系。不要求必须直连。但是要依赖AS中的IGP协议(如ospf等)来发现对方路由从而建立TCP,成为IBGP对等体关系。

 

2、IBGP水平分割

用于解决BGP路由在一个同AS内传递时,防止环路。因为AS_Path在AS内是不会变化的。BGP规定,当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体关系,这就是BGP水平分割规则。

缺点:当同AS内会有部分BGP路由器学习不到路由的问题(例如R5)。这个问题有很多种解决办法。

 

方法一:IBGP全互联模型

  AS内部的所有路由器都两两之间建立IBGP对等体关系。缺点:这种方法只使用于规模较小的AS。

  如果规模大路由器多,两两之间都建立IBGP对等体会对网络及设备带来很大的负担。

       好在还有其他两种解决方法。分别是路由反射器联盟。后面会讲。

 3、路由黑洞问题及BGP同步规则

由于BGP路由器之间无需直连也可建立对等体关系,然而会带来一个麻烦,例如路由黑洞。(务必做实验进一步了解)

l  去往:R1把1.0.0.0/8发布到BGP中,R3通过IBGP对等体直接通告给了R7(R3在BGP路由中的Next_hop设置为它自己的地址),R7再通告给R2,最终R2学到1.0.0.0/8的路由。

   回来:R2把数据包发往R7。R7收到后发现下一跳是R3,但是它必须先传给R4或者R6,但这两台路由器并没有配置BGP,所以丢失。产生了路由黑洞。

l  为了避免路由黑洞,BGP引入了同步规则(缺省情况下是关闭的)当一台路由器通过IBGP对等体学习到一条BGP路由时,不能用这条路由或把这条路由通告给自己的EBGP对等体。

  要求BGP路由引入IGP路由中,实现IGP和BGP同步。同步规则主要用于规避BGP路由黑洞问题。

l  避免路由黑洞的方法。

        第一种方法IBGP全互联

       AS内的所有路由器都运行BGP,并实现IBGP对等体关系全互联。缺点:不适合规模庞大的拓扑。

        第二种方法:重分发

       R3将BGP路由引入AS中的OSPF。满足了同步规则缺点是BGP信息量巨大的情况下,引入IGP协议是非常危险的操作。可以用路由策略进行过滤再进行重分发。

        第三种方法:MPLS多协议标签交换

       在报文的数据帧头部和IP头部中间插入一个标签头部,因为IP头部“躲藏”了在标签头部之后。因此只需根据标签头部中的标签进行选路,即使转发设备没有到达目的的网络的路由也不会影响数据转发。此时是基于标签进行选路及转发。而不是基于目的IP地址。

        第四种方法:RR反射器 (实际情况中,最好的方法)

        第五种方法:联盟

          在诸多成熟方案可供选择的情况下,依然激活同步规则也就显得没有意义了

对等体交互原则

BGP对等体交互原则:

  1. 只将最优的路由通告给BGP对等体
  2. 2.     从EBGP对等体学习到BGP路由,通告给所有EBGP和 IBGP对等体。
  3. 从自己的IBGP对等体学习到BGP路由时,只发给EBGP对等体,它不会将这些路由通告给其他IBGP对等体————IBGP的水平分割
  4. 4.     只发送更新的BGP路由。——增量更新
  5. 当一台路由器从自己的IBGP对等体学习到BGP路由时,如果BGP同步被激活(默认关闭),则路由器只有从IGP协议也学习到相应的路由时,才会将这些BGP路由通告给EBGP对等体。如果BGP同步关闭,即使没有从IGP协议学习到相应路由,它也会将这些BGP路由通告给EBGP对等体。

 4、Router-ID

BGP Router-ID是网络设备的标识符,长度32bit,与IPv4格式一样。在规划BGP网络时,需确保设备的Router-id的唯一性。

Router-ID可让BGP自动选取也可以手工配置。建议手工配置。

报文类型及格式

 

标记:用于协议兼容性,16字节,固定为1

长度:BGP报文的长度(包括头部在内)

类型:BGP报文类型

          1.Open报文、2.Update报文、3.Notification报文、4.Keepalive报文、5.Route-Refresh



Open报文

      是TCP连接建立后发送的第一个消息。用于建立BGP对等体之间的连接关系,对等体在接收到Open报文并协商成功后,

      将发送Keepalive报文确认并保持连接的有效性。确认后,对等体之间就可以进行其他报文的交换了。

版本

BGP的版本,BGPv4则值为4

AS号

BGP报文发送方所处AS号

保活时间

(Hold time)

在建立对等体时要协商Hold time,双方保持一致,不一致则以较小的作为协商结果。如果保持时间为0,则标识不发生Keepalive报文。如果在这个时间内没有收到Keepalive报文或Update报文,则认为BGP中断。(以秒为单位)

路由标识符

BGP Identifiter

BGP路由器的Router ID ,以32bit IP形式表示,用于标识路由器。

可选参数长度

BGP报文中,可选参数的长度

可选参数

Open报文可含多个可选参数,每个可选参数使用类型(Type)、长度(Length)及值(Value)的三元组格式描述。可选参数用于告诉和协商对等体的某些拓展能力特征。


 

Update报文

      Update报文用于在对等体之间通告路由信息。在一个Update报文中通告一条或多条相同路径属性的路由。

      拥有不同的路径属性的BGP路由需使用不同的Update报文来通告。还能够用于撤销一条或多条BGP路由。

撤销路由的长度

用于标识撤销路由的条目数。

包含0条、1条或者多条准备撤销的BGP路由,

撤销的路由条目

用于存放需要被撤销的BGP路由前缀。

每条BGP路由前缀包含两元,分别是前缀长度及路由前缀

如果有多条BGP路由,那么这个字段将包含一个BGP路由前缀列表。

总路径属性长度

指示了Update报文中路径属性的总长度

路径属性

当BGP路由器用Update报文向邻居通告BGP路由时就会包含路径属性字段。

网络层可达信息

用于存放需要被通告的BGP路由。

每条BGP路由前缀包含两元,分别是前缀长度路由前缀

如果有多条BGP路由,那么这个字段将包含一个BGP路由前缀列表。

 

 


 

 Keepalive报文

对等体之间会周期性发送Keepalive报文来了解存活情况。前面在Open报文内说过,BGP路由器会为对等体维护一个保活计时器(Hold timer),

如果保活计时器超时,则BGP对等体视为不可达。此时则需重新建立。对等体之间交互的keepalive报文会刷新保活计时器,防止超时。

保活计时器的时间缺省为180s,keepalive报文周期性发送间隔为60s,也就是1/3。Keepalive报文还用于确认对方发送过来的Open报文。里面只包含头部信息


Notification报文

当BGP检测到一个错误时,就用Notification报文来告知对等体。

 

错误代码

该字段的值是一个无符号整数,指示了错误的类型

错误子代码

在错误代码上进一步指示了错误的类型

数据

用于描述错误的原因

 

 错误类型可查看“报文格式大全”进行进一步细看。


Route-Refresh报文

通告Open消息告诉BGP邻居本地支持路由刷新能力

在BGP路由器有Route-Refresh能力下,在刷新路由时,如果是基于入口(impot)刷新,

本地BGP路由器会向对等体发送一个Route-Refresh报文,收到该报文的对等体将重新发给本地BGP路由器。

这样可以在不中BGP连接的情况下,对BGP路由表进行动态刷新。(注意:大规模不要使用)

<R1>refresh bgp all import    

(Export:是向对方发   Import:是让对方发)

 

5、查看对等体

 

在路由器上使用display bgp peer命令查看BGP对等体的邻居情况。

 

 

 从上图可以看到,R1存在2个IBGP对等体关系(因AS都相同),且两对等体之间的状态为Establish,说明已经完成对等体关系的建立

 

6、BGP路由表

 

存储着设备发现的所有BGP路由,当设备收到BGP路由后,如果有路由策略,则执行完后,被处理过的路由才会被加载到BGP路由表中。

当设备发现多条到达相同目的网段的BGP路由时,只有最优的才会被选择。(没有配置BGP路由负载分担的情况下)。

使用display bgp routing-table命令可以查看BGP路由表。例如:

 

从图中可以看到被发现的BGP路由。每条路由都会被执行可用性检查。也就是查询到去往Next hop的路由(IGP),

有则视为可用(Valid),否则视为不可用(Invalid)。在表中,可用的在行首有星号“*”标记,反之没有。

 图中还可以看到去往172.16.1.0/24的有两条路由,路由器会选择最优的那条。最优的路由在行首有尖括号“>”标记

图中的下一跳1.1.1.1的为最优。Next_Hop不可达的不可用路由是不会参加最优路由器竞争的。

 从IBGP对等体学习到的路由会标记“i”,如果是从EBGP学习到的则没有。

查看某一条路由的详细信息可以用display bgp routing-table 172.16.1.0 查询。

 

 

 

 

 

分类:

技术点:

相关文章:

  • 2021-09-06
  • 2021-06-25
  • 2021-05-17
  • 2021-11-25
  • 2021-12-31
  • 2021-04-15
  • 2021-05-19
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-16
  • 2021-12-07
  • 2021-12-13
  • 2021-10-22
  • 2021-10-01
相关资源
相似解决方案