像OSPF一样,BGP邻居之间在交互路由信息之前,必须先建立邻居关系。不同的是,BGP不使用广播和组播地址去发现BGP邻居。BGP邻居必须手动配置,BGP使用tcp的179端口进行连接。

BGP邻居建立过程会存在如下五个状态:

  1. Idle:这个是BGP邻居的起始状态,使用neighbor命令配置邻居的时候,会处于该状态,或者当我们重置一对邻居的时候也会处于该状态。在起始状态后,BGP会为邻居初始化一些资源,复位重连定时器,初始化与remote的TCP连接,同时也会监听远端邻居(BGP采用的是同时邻居的方式,既会监听邻居连接请求,也会主动去连接邻居)。启动三次握手后,转入connect状态。失败的话继续处于Idle状态。记住:这里仅仅是指启动三次握手,即调用connect函数之前。
  2. connect:该状态是在启动TCP三次握手,等待成功时处于的状态。三次握手成功后转入,发送open报文,转入OpenSent 状态。三次握手失败的话,转入active状态,等待ConnectRetry定时器超时,进行重新三次握手。重连次数超过规定次数后,转入Idle状态。
  3. active:该状态是一个失败态,首次三次握手失败后会进入该状态,等待ConnectRetry定时器超时,转入connect状态,进行重新三次握手。重连次数超过规定次数后,转入Idle状态。一旦连接成功,则发送open报文,转入OpenSent状态。也就是说该状态是在等待ConnectRetry定时器超时的一个状态。
  4. OpenSent:该状态是在三次握手成功后,发送了open报文后,等待对端回应open报文时的状态。收到对端open报文后,会进行校验,如果校验失败的话,发送一个notify报文给对端,转入Idle状态。校验成功后,这个时候会获取到对端的很多信息,能力协商,持续定时时间等,初始化保活定时器,发送keepalive报文,转入OpenConfirm状态。
  5. OpenConfirm:该状态,BGP等待对端的keepalive报文,收到后,转入Established状态,邻居关系正式建立,启动hold定时器,相互发送保活报文,三次超时或者发生错误,收到notify消息,将会重新进入Idle状态。
  6. Established:邻居关系建立成功后的稳定状态,相互发送update报文交互路由信息,每次收到keepalive和update报文时,会重置hold定时器。收到notify报文后转入Idle状态。

下面的图很形象的说明了BGP邻居建立过程的状态转换关系,称之为BGP FSM(Finite State Machine):

BGP可以重连多少次 bgp 连接状态_三次握手