BGP的状态机:
另外,在除Idle 状态以外的其它五个状态出现任何Error 的时候,BGP状态机就会退回到Idle 状态。
Idle(空闲):Idle 是BGP连接的第一个状态,在空闲状态,BGP在等待一个启动事件,启动事件出现以后,BGP初始化资源,复位连接重试计时器(Connect-Retry),发起一条TCP连接,同时转入Connect(连接)状态。
Connect(连接):在Connect 状态,BGP发起第一个TCP连接,如果 连接重试计时器(Connect-Retry)超时,就重新发起TCP连接,并继续保持在Connect 状态,如果TCP 连接成功,就转入OpenSent 状态,如果TCP 连接失败,就转入Active 状态。
Active(活跃):在Active状 态,BGP总是在试图建立TCP 连接,如果连接重试计时器(Connect-Retry)超时,就退回到Connect 状态,如果TCP 连接成功,就转入OpenSent 状态,如果TCP 连接失败,就继续保持在Active状态,并继续发起TCP连接。
OpenSent(打开消息已发送):在OpenSent 状态,TCP连接已经建立,BGP也已经发送了第一个Open报文,剩下的工作,BGP就在等待其对等体发送Open 报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送 Keepalive 报文,并复位Keepalive 计时器,开始计时。同时转入OpenConfirm状态。
OpenConfirm(打开消息确认)状态:在OpenConfirm状态,BGP发送一个Keepalive 报文,同时复位保持计时器,如果收到了一个Keepalive 报文,就转入Established 阶段,BGP邻居关系就建立起来了。如果TCP连接中断,就退回到Idle 状态。
Established(连接已建立):在Established 状态,BGP 邻居关系已经建立,这时,BGP将和它的邻居们交换Update 报文,同时复位保持计时器。
BGP协议有限状态机有六个状态,它们之间的转换过程示意了BGP邻居关系建立的过程。
首先是Idle 状态,BGP协议 一旦Start ,状态机就进入Connect 状态 ,在Connect 状态 ,如果Connect- Retry 定时器超时,BGP状态机会停留在Connect 状态 ,同时, BGP 试图建立TCP 连接,如果TCP 连接建立失败,BGP 状态机进入Active 状态。 如果TCP 连接建立成功,BGP状态机就直接进入OpenSent 状态。在Active 状态,如果TCP 连接依然不能建立起来,那么BGP状态机就会一直停留在Active 状态,直到TCP 连接建立成功,才会进入OpenSent 状态。在OpenSent 状态 ,BGP一旦收到了一个正确的Open 报文,就会进入OpenConfirm 状态。在OpenConfirm 状态 ,如果KeepAlive 定时器超时,BGP状态机就会停留在OpenConfirm状态。直到BGP收到KeepAlive 报文,BGP状态机才会进入Established 状态。 这时BGP连接才算建立起来。
BGP的邻接状态机:
1、idle 空闲--查找是否有去往邻居的路由
2、connect 连接--建立TCP三次握手
3、Active 活动--协商还未成功
4、open sent 打开发送--互发参数进行协商,也就是发送open报文,确定能否建立邻居。
5、open confirm 打开确认--协商取得一致,开始发送和接受keepalive报文,成功后进入established状态
6、established 邻居建立完成并开始交换update数据包。
IDLE: State when BGP peer refuses any incoming connections.
n CONNECT: State in which BGP peer is waiting for its TCPconnection to be
completed.
n ACTIVE: State in which BGP peer is trying to acquire a peer by listening and
accepting TCP connection.
n OPENSENT: BGP peer is waiting for OPEN message from its peer.
n OPENCONFIRM: BGP peer is waiting for KEEPALIVE or NOTIFICATION
message from its peer.
n ESTABLISHED: BGP peer connection is established and exchanges UPDATE,
NOTIFICATION, and KEEPALIVE messages with itspeer.
只有当连接处于建立状态时,才能交换更新、存活和通知消息
如果一直停在idle状态,则可能:
1、没有去往邻居的路由
2、neighbor命令指错了邻居的地址
如果一直停在active状态,则可能:
1、邻居没有过来的路由
2、邻居没有指neighbor命令
3、邻居neighbor中指的地址错误
4、两端的AS号不匹配
BGP邻居的flaping
·路由器通过IGP学到对方loopback,并用looback建EBGP邻居
·又在BGP中通告此loopback。此时BGP邻居会出现flaping
如下图所示:
R1和R2之间运行一个IGP协议,比如说EIGRP。将环回口都宣告进去,这样R1和R2相互之间就有对方环回口的路由了,然后再用环回口建立EBGP邻居关系。最后再把2.2.2.0和1.1.1.0的环回口宣告进BGP。这时你会发现BGP邻居关系会发生flapping。