

BGP(边界网关协议)是一种广泛使用的路由协议,用于在不同的自治系统之间交换网络可达性信息。BGP通过建立邻居关系来交换路由信息,而邻居状态机则是描述BGP邻居关系建立过程的状态转换图。
一、idle初始状态
在进入idle状态,会触发华为的start事件,这个事件时间为32秒
在这个事件之后,才开始建立peer的三次握手,建立tcp连接,
在发送syn之后,进入到connect状态
二、connect状态(连接状态)
在这个状态下,bgp会启动连接重传定时器(connect retry默认为32秒),
用于等待tcp完成三次握手
1.向邻居发起syn后,就会进入到这个状态,在这个状态完成TCP三次握手
2.如果TCP三次握手完成,则向该邻居发送OPEN报文,然后转到opensent状态
3.如果TCP三次握手失败,会把这个peer状态改为active
4.如果重传定时器超时,bgp没收到邻居的响应,卡在connect状态
常见的connect状态的原因
1.邻居没有给我响应
2.我发出的syn在沿途中遇到了障碍,没有到达对方--沿途路由不可达
3.ebgp邻居没有配置ttl多跳
总结:就是邻居没有给我响应
三、active状态(活跃状态)
当TCP三次握手失败时,才会进入这个状态
1.如果在多次尝试下,TCP三次握手成功了,那么bgp会向该peer发送open报文。
关闭重传定时器,转到opensent状态
2.如果在多次尝试下,TCP三次握手仍然失败,将停留在active
3.如果重传定时器32秒超时,并且没有得到该peer的响应将会转到connect状态
四、opensent状态(OPEN报文已发送状态)
在这个状态下,BGP已经向该peer发送了open报文,在等待对方给我发送open报文
1.如果收到了对方发来的open报文并且参数协商成功,则会向该peer发送keepalive报文。
转到openconfirm状态
2.如果收到了对方发来的open报文参数,协商失败,则会向该peer发送notification报文,
转到idle状态
五、openconfirm(open协商成功状态)
在这个状态bgp等待对方的keepalive报文,如果收到了对方发来的keepalive报文,
转到Established
如果收到了notification报文,转到idle状态
六、Established(链接已建立)
在这个状态下说明邻居已经建立完毕,这个状态下可以交互报文:
update报文
notification报文
keepalive报文
route-refresh报文
1.如果在这个状态下收到正确的update和keepalive报文,bgp会认为邻居处于正常状态
继续保持
2.如果在这个状态下收到错误的update和keepalive报文,bgp会认为邻居处于异常状态
会发送notification报文,转到idle状态
route-refresh报文不影响邻居关系
通过了解BGP邻居状态机的各个状态和转换条件,我们可以更好地理解BGP邻居关系建立的过程,并能够更快、更准确地诊断和解决BGP邻居关系出现的问题。同时,对于网络工程师来说,掌握BGP邻居状态机也是非常重要的基础知识之一。