当两者都尝试建立 TCP 连接时,在 FSM 中具有两种不同的状态有什么意义?
BGP 的连接状态和活动状态有什么区别?
BGP 对等体以空闲状态开始。在空闲状态下,对等体已被配置为彼此形成邻接关系,但尚未发起或接收任何通信。
BGP 使用 TCP 作为传输协议。所以要建立BGP邻接关系,首先要建立TCP连接。当两个对等体都处于空闲状态时,它们每个都会以独立的时间间隔(基于 BGP 对等配置实际完成的时间)定期尝试启动 TCP 连接。
当一个对等方使用 SYN发起TCP 三向握手时,该对等方转换为活动状态。此状态表示本地路由器正在主动尝试发起 TCP 连接。
当另一个对等方收到来自其对等方的 TCP SYN 时,它将转换为连接状态。此状态表示本地路由器已收到来自其他路由器的 TCP 启动,并且正在/已使用 SYN ACK 进行响应。
从那里,两个对等点继续通过其余状态:打开发送、打开确认、建立。
总结一下:
- 活动状态 - 本地路由器刚刚发送了一个 TCP SYN
- 连接状态 - 本地路由器刚刚从它的对等方接收到一个 TCP SYN
“发起” BGP 说话者的状态转换以形成邻接将是:
Idle
, Active
, Open Sent
, Open Received
,Established
“响应” BGP 说话者形成邻接的状态转换将是:
Idle
, Connect
, Open Sent
, Open Received
,Established
注意,只有发起 TCP 握手的对等方通过Active
状态。并且只有没有发起 TCP 握手的对等方通过该Connect
状态。
添加一些证明行为的调试。这是 Cisco 路由器代码版本 15.4(1)T。
这是来自 R1 (9.9.12.1) 和 R2 (9.9.12.2) 之间的 BGP 对等会话。
R2 是此 TCP 会话的发起方:
router1# show ip bgp neighbors | i ^BGP|host
BGP neighbor is 9.9.12.2, remote AS 2323, external link
Local host: 9.9.12.1, Local port: 179
Foreign host: 9.9.12.2, Foreign port: 43876
在另一台路由器上确认:
router2# show ip bgp neighbors | i ^BGP|host
BGP neighbor is 9.9.12.1, remote AS 1111, external link
Local host: 9.9.12.2, Local port: 43876
Foreign host: 9.9.12.1, Foreign port: 179
这是发起者 R2 上的(过滤的)调试:
$ cat BGP-Peering_Initiator.txt | grep -e "TCP src" -e "went from"
*Oct 28 17:06:36.971: BGP: 9.9.12.1 active went from Idle to Active
*Oct 28 17:06:36.972: TCP src=43876, dst=179, seq=1526684246, ack=0, win=16384 SYN
*Oct 28 17:06:36.975: TCP src=179, dst=43876, seq=2072809595, ack=1526684247, win=16384 ACK SYN
*Oct 28 17:06:36.975: TCP src=43876, dst=179, seq=1526684247, ack=2072809596, win=16384 ACK
*Oct 28 17:06:36.977: BGP: 9.9.12.1 active went from Active to OpenSent
*Oct 28 17:06:36.982: TCP src=43876, dst=179, seq=1526684247, ack=2072809596, win=16384 ACK PSH
*Oct 28 17:06:36.985: TCP src=179, dst=43876, seq=2072809596, ack=1526684304, win=16327 ACK
*Oct 28 17:06:36.985: TCP src=179, dst=43876, seq=2072809596, ack=1526684304, win=16327 ACK PSH
*Oct 28 17:06:36.985: BGP: 9.9.12.1 active went from OpenSent to OpenConfirm
*Oct 28 17:06:36.985: TCP src=43876, dst=179, seq=1526684304, ack=2072809653, win=16327 ACK PSH
*Oct 28 17:06:36.987: TCP src=179, dst=43876, seq=2072809653, ack=1526684304, win=16327 ACK PSH
*Oct 28 17:06:36.987: BGP: 9.9.12.1 active went from OpenConfirm to Established
这是响应方 R1 上的(过滤的)调试:
$ cat BGP-Peering_Responder.txt | grep -e "TCP src" -e "went from"
*Oct 28 17:06:36.973: TCP src=43876, dst=179, seq=1526684246, ack=0, win=16384 SYN
*Oct 28 17:06:36.974: TCP src=179, dst=43876, seq=2072809595, ack=1526684247, win=16384 ACK SYN
*Oct 28 17:06:36.976: TCP src=43876, dst=179, seq=1526684247, ack=2072809596, win=16384 ACK
*Oct 28 17:06:36.976: BGP: 9.9.12.2 passive went from Idle to Connect
*Oct 28 17:06:36.983: TCP src=43876, dst=179, seq=1526684247, ack=2072809596, win=16384 ACK PSH
*Oct 28 17:06:36.984: TCP src=179, dst=43876, seq=2072809596, ack=1526684304, win=16327 ACK
*Oct 28 17:06:36.984: BGP: 9.9.12.2 passive went from Connect to OpenSent
*Oct 28 17:06:36.984: BGP: 9.9.12.2 passive went from OpenSent to OpenConfirm
*Oct 28 17:06:36.985: TCP src=179, dst=43876, seq=2072809596, ack=1526684304, win=16327 ACK PSH
*Oct 28 17:06:36.986: TCP src=179, dst=43876, seq=2072809653, ack=1526684304, win=16327 ACK PSH
*Oct 28 17:06:36.986: TCP src=43876, dst=179, seq=1526684304, ack=2072809653, win=16327 ACK PSH
*Oct 28 17:06:36.986: BGP: 9.9.12.2 passive went from OpenConfirm to Established
TCP 在两个对等体之间建立连接,BGP 使用 TCP。一个 TCP 对等体将尝试连接到另一个 TCP 对等体,这就是connect
状态。一个对等方可能会侦听连接(尤其是在其连接尝试失败之后),这就是active
状态。
BGP 有多种状态,每个状态都清楚地记录在RFC 4271,边界网关协议 4 (BGP-4) 中。状态的描述和从一个移动到另一个(和/或返回)的描述实在是太大了,无法在这里讨论。下面是描述 BGP 有限状态机 (FSM) 的图像:
RFC 完整描述了 FSM 的各种状态以及每个阶段发生的情况。
从空闲状态开始,当系统上发生 ManualStart 或 AutomaticStart 事件时,它会将其状态更改为 Connect,但这些事件的被动版本(ManualStart_with_PassiveTcpEstablishment 或 AutomaticStart_with_PassiveTcpEstablishment)发生,然后将其状态更改为 Active。基本上,当它被告知连接到对等点时,它会更改为 Connect,但是当被告知要侦听对等点时,它会更改为 Active。
当处于 Connect 状态时,如果 TCP 连接失败,它会将其状态更改为 Active 以侦听来自对等方的连接。
当处于 Active 状态,并且 ConnectRetryTimer_Expires 事件发生时,它会尝试 TCP 连接并进入 Connect 状态。
确实有更多的东西,但它对于这样的网站来说太大了。