状态流程
工作步骤:
- 首先在使能BGP相关配置后,两台BGP发言者会通过更新源地址互相建立TCP三次握手。
PS:此时由于BGP配置时在两端都进行了对等体的互指,都会触发start事件,则会双方相互建立TCP三次握手,由于TCP本身就是双方的连接,所以要断开一方,保留RID大的一方 - TCP建立完成后直接发送Open报文来协商BGP相关参数用来确定BGP是否能够建立,若协商完成后,且BGP稳定后,互相通告keep alive报文来维护对等体关系,
○ 此时若需要通告或删除路由时,则通过Update报文进行承载传输(TLV的形式承载)
○ 路由如果出现变化,由于BGP收敛较慢,则可以通过route-refresh报文进行刷新 - 若当本地BGP运行时发现错误则发送notification报文通知对等体解除邻居关系
状态解析
Idle
BGP协议初始时是处于Idle状态。在这个状态时,系统不分配任何资源,也拒绝所有进入的BGP连接。只有收到Start Event 时,才分配BGP资源,启动ConnectRetry计时器,启动对其它 BGP对等体的传输层连接,同时也侦听是否有来自其它对等体 的连接请求。
停留原因:目的地址路由不可达;EBGP始发报文TTL=1
Connect
这个状态下,BGP等待TCP完成连接。若连接成功,本地清空 ConnectRetry计时器,并向对等体发送OPEN报文,然后状态改变 为OpenSent状态;否则,本地重置ConnectRetry计时器,侦听是 否有对等体启动连接,并移至Active状态。
停留原因:对端没有回应,可能原因对端没有回程路由,中间有防火墙等
Active
这个状态下,BGP初始化TCP连接来获得一个对等体。如果连接 成功,本地清空ConnectRetry计时器,并向对等体发送OPEN报 文,并转至OpenSent状态。
停留原因:TCP三次握手失败,比如没有更新源,对端回应RESET。
OpenSent
这个状态下,BGP等待对等体的OPEN报文。收到报文后对报文进 行检查,如果发现错误,本地发送NOTIFICATION报文给对等体, 并改变状态为IDLE。如果报文正确,BGP发送KEEPALIVE报文, 并转至OpenConfirm状态。
没有在时间内收到open 超时后则发送错误报文 回到Idle状态
OpenConfirm
这个状态下,BGP等待KEEPALIVE或NOTIFICATION报文。如 果收到KEEPALIVE报文,则进入Established状态,如果收到 NOTIFICATION报文,则变为Idle状态。
Established
这个状态下, BGP可以和其他对等体交换UPDATE, NOTIFICATION,KEEPALIVE报文。如果收到了正确的UPDATE或 KEEPALIVE报文,就认为对端处于正常运行状态,本地重置Hold Timer。如果收到NOTIFICATION报文,本地转到Idle状态。如果收 到错误的UPDATE报文,本地发送NOTIFICATION报文通知对端, 并改变本地状态为Idle。如果收到了TCP拆链通知,本地关闭BGP 连接,并回到Idle状态。