目录

TCP建立阶段

Idle

Connect

Active

BGP参数协商邻居建立阶段

OpentSent

OpenCofirm

Established

BGP邻居状态机


TCP建立阶段

Idle

BGP连接的第一个状态,也是初始化状态,复位TCP连接的重连计时器(通常是60s),准备发起TCP连接

发起连接的目的地址为邻居地址,源为本地更新源地址(本地更新源默认为去往邻居路由的下一跳)

一直停留在此状态的原因

无法发起 TCP连接

通常是没有去往邻居地址的路由

或者是BGP的AS号书写出现问题

Connect

当收不到邻居发来的TCP应答报文时,会停留在此状态。

在Connect状态,BGP发送第一个TCP连接,如果TCP连接的重连计时器(Connect-Retry)超时,就重新发起TCP连接,并继续保持在Connect状态。

如果TCP连接成功,就转为Opensent状态,如果TCP连接失败,就转为Active状态

一直停留在此状态的原因

通常是由于邻居缺乏到本端的路由

邻居回复的应答报文在中途被丢弃(可能网络的原因,也有可以是TTL的原因)

当无法收到邻居的TCP回应报文时

  1. 会卡在Connect状态
  2. 并且5s后重传一次TCP连接请求
  3. 再等待32s后,重新发起TCP连接请求

Active

当自身可以发送TCP连接,也可以收到邻居的应答报文,但是依然无法建立起TCP的三次握手,会进入此状态。

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

如果TCP连接的重连计时器超时,就退回到Connect状态

如果TCP连接建立成功,就转入到Opensent状态

如果TCP连接失败,重新发起TCP连接,并待在此状态

一直停留在此状态的原因

本端主动发起TCP连接的源地址和对端指定的邻居地址不匹配

本端与邻居配置的AS号可能有误(例如如果配置的是IBGP,但是两边AS号不一致等)


BGP参数协商邻居建立阶段

OpentSent

TCP连接建立成功后进入此状态,发送Open报文

Opensent状态,发送第一个Open报文,并等待接收邻居的Open报文

此阶段协商哪些信息

  • 协商BGP邻居的各项参数、功能,建立邻居关系
  • 部分参数协商会影响邻居建立,包括BGP版本号、认证、AS号等
  • 两端关于Keepalive的保活间隔如果不相同,则取最小值;不影响邻居建立
  • 功能协商不影响邻居建立,如果邻居不支持可选字段的某些功能(例如4字节等),则重新进行BGP协商,并且不再对此邻居发送该功能参数

一直停留在该状态的原因

BGP的认证方式或密码不匹配

BGP的版本号不一致

BGP的AS号有误

OpenCofirm

代表收到邻居的Open报文,并发送了Keepalive报文,等待接收邻居的Keepalive报文

Established

收到了邻居发来的Keepalive报文

之后可以通过Update报文通告路由信息  路径属性

通过Keeplive报文进行邻居保活(60s发一次,180s保活)

通过Route-refresh来进行BGP路由刷新功能


BGP邻居状态机

bgp邻居为什么一直处于idle bgp邻居状态一直处于connect_tcp/ip