状态变迁过程
状态名称及用途(概述):
1)Idle:开始准备 TCP 的连接并监视远程对等体,当启用 BGP 时,要准备足够的资源;
2)Connect:正在进行 TCP 连接,等待完成中。认证也是在该 TCP 建立期间完成的;
3)Active:当建立 TCP 失败时,进入 Active 状态,并反复尝试连接;
4)OpenSent:TCP 连接已经建立成功,开始发送 Open 报文,Open 报文携带参数协商对等体的建立;
5)OpenConfirm:参数、能力特性协商成功。自己发送 Keepalive 包,等待对方的 Keepalive 包
6)Established:已收到对方的 Keepalive 包,双方能力特性经协商发现一致,开始使用 Update 通告路由信息
Idle
Idle 状态是 BGP 初始状态;在任何状态中,若收到 Notification 报文或 TCP 拆链通知等 Error 事件,BGP 都会转至 Idle 状态;
在 Idle 状态下,BGP 拒绝 Peer 发送的连接请求。只有在收到本设备的 Start Event 后,BGP 才开始尝试和其它 BGP Peer 进行 TCP 连接,并转至 Connect 状态。Start Event 是由一个操作者配置一个 BGP 过程,或者重置一个已经存在的过程或者路由器软件重置 BGP 过程引起的;
出于 Idle 状态的原因:
1)当配置 BGP Peer 信息后,设备将尝试建立 TCP 连接,而此时若无法发起 TCP 连接(比如 缺少去往 BGP Peer 的路由、对端完全未响应而超时 等等);
Connect ⇒ Active
当配置完 BGP Peer,并成功查找到去往 Peer 地址的路由后,会发起 TCP 三次握手:
1)在建立 TCP 过程中,处于 Connect 状态,
2)如果 TCP 建立失败(收到错误),则进入 Active 状态;
在 Connect 状态下,BGP 启动连接重传定时器(Connect Retry),等待 TCP 完成连接;
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态;
如果 TCP 连接失败,那么 BGP 转至 Active 状态;
如果连接重传定时器超时,BGP 仍没有收到 BGP 对等体的响应,那么 BGP 继续尝试和其它 BGP 对等体进行 TCP 连接,停留在 Connect 状态;
在 Active 状态下,BGP 总是在试图建立 TCP 连接;
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,关闭连接重传定时器,并转至 OpenSent 状态;
如果 TCP 连接失败,那么 BGP 停留在 Active 状态;
如果连接重传定时器超时,BGP 仍没有收到 BGP 对等体的响应,那么 BGP 转至 Connect 状态;
Open Sent ⇒ Open Confirm
当建立 TCP 连接后,发送 Open 报文建立对等体关系,此时进入 Open Sent 状态;
当收到 Peer 回应的 Open 报文,并且参数检查无误,Local 在发送 Keepalive 报文后,Local 进入 Open Confirm 状态;
Established
当处于 Open Confirm 状态时,BGP Router 如果收到 Peer 发送的 Keeaplive 报文,则进入 Established 状态,对等体关系建立过程就此完成;
STEP 01. TCP Connection
先启动 BGP 的一端先发起 TCP 连接,假如 R1 R2 路由器,如果 R1 先启动 BGP 服务,则 R1 使用随机端口号向 R2.TCP.Port=179 发起 TCP 连接,完成 TCP 连接的建立;
两个 TCP 连接
对等体都会发起 TCP 三次握手,所以会建立两个 TCP 连接,但是实际 BGP 只会保留其中一个 TCP 连接。方法如下:
1)从 Open 报文中获取对端 BGP Identifier 后,BGP Peer 会比较 Local Router ID 和 Remote Router ID 大小;
2)如果 Local Router ID < Remote Router ID,则会关闭该 TCP 连接,并使用(或等待)对端主动发起的 TCP 连接来进行 BGP 交互;
在环境中,有两个路由器(10.1.12.1, Router-ID=10.1.1.1)、(10.1.12.2, Router-ID=10.2.2.2),其 BGP 交互过程如图所示:
1)10.1.12.1(Router ID 10.1.1.1) 先发起 TCP 连接,并成功;
2)然后 10.1.12.1 发送首个 Open 报文;
3)10.1.12.2(Router ID 10.2.2.2)收到后,发现对方 Router ID 较小,直接 FIN ACK 关闭连接;
4)然后 10.1.12.2 又主动向 10.1.12.1 发起连接;
STEP 02. Open Packet
当三次握手建立完成后,R1、R2 间相互发送 Open 报文,携带参数用于对等体建立;
其中 Open 报文携带:
My Autonomous System:自身 AS Number
Hold Time:用于协商后续 Keepalive 报文发送时间;KeepAlive 发送时间 1min,Hold Time 为 3min;
BGP Identifier:自身 Router ID
当参数协商正常后,双方相互发送 Keepalive 报文,收到对端发送的 Keepalive 报文后对等体建立成功;
STEP 03. Keepalive Packet
同时双方定期发送 Keepalive 报文,以保持连接;
STEP 04. Update Packet
BGP 对等体关系建立之后,BGP 路由器发送 BGP Update(更新)报文通告路由到对等体;
邻居关系建立失败的原因
BGP 邻居关系建立失败的原因有:
1)远端设备的 loopback0 接口不可达
现象:BGP 报文发送和接收数量都是 0,因此怀疑是由于远端设备的 loopback0 接口不可达导致;
2)本设备或远端设备 AS 号配置错误
3)非直连 EBGP 邻居关系未设置多跳
4)Router ID 冲突