BGP协议介绍

BGP协议

1、什么是bgp路由协议

BGP是一种基于距离矢量的路由协议,用于实现不同AS之间的路由可达。

BGP协议的基本特点:

(1)BGP是一种外部网关协议,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由;

(2)BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性;

(3)BGP是一种距离矢量路由协议,在设计上就避免了环路的发生;

(4)BGP提供了丰富的路由策略,能够实现路由的灵活过滤和选择;

(5)BGP采用触发式增量更新,而不是周期性的更新;

2、如何建立bgp对等体

(1)TCP连接建立

(2)BGP路由器发送OPEN报文协商参数

(3)BGP路由器发送keepalive报文完成对等体建立

(4)参数协商正常后双方相互发送keepalive报文,收到对方的keepalive报文后对等体建立成功,同时后续定期发送keepalive报文用于保持连接。

(5)BGP对等体关系建立好了,就可以通过BGP update 报文通告路由到对等体。收到对方的keepalive报文后对等体建立成功,同时后续定期发送keepalive报文用于保持连接。 image.png

3、bgp的报文类型

image.png

4、bgp状态变化

(1)Idle状态是BGP初始状态。

在Idle状态下,BGP拒绝对等体发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。

Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。

任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。

(2)Connect状态

在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。

  • 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
  • 如果TCP连接失败,那么BGP转至Active状态。
  • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。

(3)Active状态

在Active状态下,BGP总是在试图建立TCP连接。

  • 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
  • 如果TCP连接失败,那么BGP停留在Active状态。
  • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。

(4)Opensent状态、openconfirm状态

TCP三次握手建立成功后,发送open报文建立对等体关系,此时的状态为

opensent状态,当收到对端回应的open报文,并且参数检查无误,在发送keepalive报文后进入openconfirm状态。

(5)established状态

进入openconfirm状态后,收到对端的keepalive报文后进入established状态。

5、bgp的路由生成

BGP路由是通过BGP命令通告而成的,而通告BGP路由的方法有两种:network和Import。

(1)network方式:

使用network命令可以将当前设备路由表中的路由(非BGP)发布到BGP路由表中并通告给邻居,和OSPF中使用network命令的方式大同小异,只不过在BGP宣告时,只需要宣告网段+掩码数即可,如:network 12.12.0.0 16。

(2)Import方式:

使用Import命令可以将该路由器学到的路由信息重分发到BGP路由表中,是BGP宣告路由的一种方式,可以引入BGP的路由包括:直连路由、静态路由及动态路由协议学到的路由。其命令格式与在RIP中重分发OSPF差不多。

6、BGP通告原则

BGP设备会将最优路由加入BGP路由表,形成BGP路由。

BGP设备与对等体建立邻居关系后,采用以下交互原则:

  • 从IBGP对等体获得的BGP路由,BGP设备只传递给它的EBGP对等体。
  • 从EBGP对等体获得的BGP路由,BGP设备传递给它所有EBGP和IBGP对等体(对等体是IBGP只能传递一跳,对等体是EBGP则不限制)
  • 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
  • 路由更新时,BGP设备只发送更新的BGP路由
  • 所有对等体发送的路由,BGP设备都会接收
  • 所有EBGP对等体在传递过程中下一跳改变
  • 所有IBGP对等体在传递过程中下一跳不变(需要特别注意)
  • 默认EBGP传递时 TTL值为1(需要特别注意)
  • 默认IBGP传递时 TTL值为255
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计