Author basilguo@163.com

Date Aug. 21, 2023

Description BGP协议---基于RFC4271标准。

RFC4271是最新的BGPv4版本的协议。虽然直接看协议是非常晦涩难懂的,而且104页的全英文,真的很难完全阅读下来,但如果理解有出入,还是看RFC最为标准了。

第1、2、3章自己就可以看懂了,唯一的就是可能缩写比较多,但是知道英文应该问题也不大。

第4章,介绍BGP的4类报文格式,分别是OPEN、UPDATE、NOTIFICATION、KEEPALIVE,以及他们的公共头格式。

  • OPEN:在TCP连接建立后,OPEN报文用于宣告此BGP支持的能力CAPABILITY,虽然能力是可选的。
  • UPDATE:用于宣告以及撤销路由。BGP的大部分功能都和UPDATE报文有关。
  • KEEPALIVE:保活报文,以确保Hold Timer不会过期,BGP不使用任何基于TCP的保活机制。
  • NOTIFICATION:一般是用作错误处理,告知对方哪里出问题了。

第5章开始介绍Path Attribute,如果要看已经分配的所有的Path Attribute,需要去看IANA。这一章值得好好研究,重点关注Well-Known类型的。

第6章是消息错误处理机制。基本上都能通过NOTIFICATION报文看出来发给peer的报文到底是哪里出问题了,进而可以排查。最多的可能就是配置的问题。

第7章在说version的问题,目前应该都是在用BGPv4吧。

第8章定义了BGP有限状态机(FSM)。状态机,也就是根据条件xxx触发从状态yyy迁移到状态zzz。有限状态机,就是状态的个数是有限制的。BGP协议的状态可以分为:

  • IDLE:BGP的开始状态,等待ManualStart事件或者AutomaticStart事件。
  • CONNECT:初始化后,BGP router向peer发起TCP连接请求。tcp三次握手完成后还继续保持该状态。
  • ACTIVE:不常见的状态,除非initial connect失败了。
  • OpenSent:发送OPEN报文呗。
  • OpenConfirm:发出BGP-OPEN报文后进入该状态,收到了KEEPALIVE报文,就可以进入ESTABLISHED状态。
  • ESTABLISHED:可以开始交换路由了。这才是我们需要的状态。

image.png

第9章介绍了UPDATE消息处理,主要就是BGP优选,这块了解不是很深,可以参考[思科],也可以参考华为

第10章是BGP的各类定时器。