目录
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回应报文时
- 会卡在Connect状态
- 并且5s后重传一次TCP连接请求
- 再等待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路由刷新功能