1、idle
BGP初始状态,一旦配置了BGP的peer以后,或者重置了已存在的peer之后,就会进入这个状态,在这个状态下BGP不会向这个peer发送TCP三次握手,同时也会拒绝这个peer发来的TCP三次握手。
在进入这个状态时有一个start事件,这个事件会维持32秒,在这个之后才开始建立该peer的TCP三次握手,开始建立TCP连接,发送SYN以后,进入到connect状态。
常见的几种idle状态的原因:
1.1 如果没有去往peer的路由,那么就无法发送SYN,此时该peer会一直卡在idle状态。
1.2 收到了错误信息之后回退到idle
1.3 手动挂起邻居 peer 12.1.1.2 ignore idle(admin)这个状态表示是管理员置为无效。
2、connect(连接状态)
在这个状态下,BGP会启动连接重传定时器(connect retry默认32秒),等待TCP三次握手完成。
2.1 向邻居发起SYN以后就会进入这个状态,在这个状态要完成TCP三次握手。
2.2 如果TCP三次握手完成,则向邻居发送open报文,然后转到open sent状态。
2.3 如果TCP三次握手失败,则将会把这个peer状态改为active状态。
2.4 如果重传定时器超时,BGP没有收到邻居的响应,那么会卡在connect状态。
常见的几种connect状态原因:
1、邻居没有给我响应。
2、我的SYN在沿途中遇到了阻碍,没有到达对方(也有可能是在沿途中没有到达的路由所致)。
3、EBGP邻居没有配置TTL多跳。
总的来说就是SYN没有被邻居响应。
3、Active(活跃的)
当TCP三次握手失败,才会进入到这个状态。
在这个状态下,BGP总是视图去建立TCP三次握手。
3.1 如果在多次尝试下,TCP三次握手成功了,那么BGP会向该peer发送open报文,关闭重传定时器,转至open sent状态。
3.2 如果在多次尝试下,TCP三次握手失败了,那么BGP会将改peer停留在active状态。
3.3 如果重传定时器超时(32s),且没有得到该peer的响应,那么会转至connect状态。
4、open sent(open报文已发送)
在这个状态下,BGP已经向该peer发送了open报文,在等待对方给我发送open报文。
4.1 如果收到了对方发来的open报文,参数协商成功,则回向该peer发送keepalive报文,然后转到open confirm状态。
4.2 如果收到了对方发来的open报文,参数协商失败,则会发送notification报文,然后转到idle状态。
5、open confirm(open报文已确认 )
5.1 在这个状态下BGP等待对方的keep alive报文,如果收到了对方的Keep alive报文则转换为established状态。
5.2 在这个状态下BGP如果收到了notification报文,则转换为idle状态。
6、established(连接已建立)
在这个状态下说明邻居建立完毕,在这个状态下可以交互的报文有:undate、notification、Keep alive、route-refresh。
6.1 如果在这个状态下,收到正确的update和Keep alive报文,那么BGP会认为邻居处于正常的运行状态,会继续保持。
6.2 如果在这个状态下,收到错误的update和Keep alive报文,那么BGP会认为处于异常状态,会发送notification报文,并且转到idle状态。
route-refresh报文的发送是不会影响邻居关系的。