BGP邻居状态机

idle 
connect ( 已经建立完成了TCP三次握手 ) 
open sent 
open confirm 
establish 
connect 和 active 都是 TCP 连接阶段, active 是发起方, connect 是应答方 


Idle State
1 BGP 通常以 Idle State 开始( 此时拒绝接收所有入连接 )。当一个开始事件出现, BGP 过程初始化所有BGP 资源打开重试连接 ( ConnectRetry ) 计时器, 初始化到邻居的TCP 连接, 接听来自邻居的TCP 初始化消息并将它的状态转到 Connect State
2 开始事件是由一个操作者配置一个BGP 过程, 或者重置一个已经存在的过程或者路由器软件重置 BGP 过程引起
3 一个差错的出现会将 BGP 过程的状态转为 Idle State,  路由器可能会试图发起另外一个开始事件, 为了防止在持续差错条件下导致的摆动, 在第一次转回到 Idle State 后, 路由器会自动开启重试连接计时器, 当计时器终止后, 路由器就会放弃重新开始 BGP. 重试计时器第一次的时间为60s, 下一次为前一次的2 倍120s, 成指数形式增加

Connect State
此状态下BGP 过程会等到 TCP 连接完成以后再决定后续的动作 
1 如果 TCP 连接建立成功, BGP 连接将 ConnectRetry 清零, 完成初始化并给邻居发送一个 Open Message 转移到 Open send State
2 如果 TCP 连接建立失败, BGP 继续监听由邻居发起的连接, 重置 ConnectRetry 计时器并转移到 Active State
3 如果在连接状态下, ConnectRetry 超时, 计时器将重新开始, 并再一次试图与邻居建立 TCP 连接, BGP 保持  Connect State, 此时如果有任何其他输入事件, 转入 Idle State

Active State
在此状态, BGP 过程试图与邻居建立一个TCP 连接
1 如果连接成功, BGP 过程将 ConnectRetry 计时器清零, 完成初始化, 给邻居发送一个Open Message 并转移到 Open send State, Hold 计时器设置为 4mins
2 如果在激活状态, ConnectRelay 计时器超时, 将回到 Connect State 并且重置 ConnectRelay 计时器.也发起一个到对等的 TCP 连接并继续监听来自对等体的连接.
3 如果邻居试图与一个未知IP 建立TCP 会话, 同时ConnectRelay 计时器重置, 连接被拒绝并保持在 Active State
4 任何一个事件(除开始事件)都回导致状态转向 idle State一直处于 Active State :

Open send State   
在此状态下, 已经发送了 Open Message, BGP 等待邻居发来的 Open Message
1 当收到一个 Open Message, 如果发现差错, 将给邻居发一个 Notification Message 并转入 Idle State
2 如果收到的 Open Message 没有差错, 将给邻居发送一个 Keepalive Message 并将 Keepalive 计时器清零此时协商一个较短的 holdtime , 如果 holdtime = 0, 则没有启动 holdtime 和 keepalive 计时器, 根据 AS 号选择 IBGP 或者 EBGP, 同时将状态转移到 OpenConfirm State
3 如果收到一个TCP 断开消息, 本地断开BGP 连接, 重置 ConnectRetry 计时器, 并转入Active State

Open Confirm State 此状态下BGP 会等待一个Keepalive Message 或者  Notification Message  1 如果收到一个 Keepalive Message , 转移到 Establish State 2 如果收到一个  Notification Message , 转入 Idle State, 并断开 TCP 连接 3 如果 hold 计时器超时, 检测到一个差错或出现 stop 事件, BGP 将给邻居发送一个 Notification Message并断开连接转入 Idle State Establish State 此状态下, BGP 对等体间的连接已经完全建立 可以交换 Update Message , Keepalive Message , Notification  Message 如果收到 Notification Message 转入 Idle State , 并中断连接