跳到主要内容

8.1. BGP FSM 的事件

8.1. BGP FSM 的事件 (Events for the BGP FSM)

8.1.1. 与 Optional Session Attribute 关联的 Optional Event (Optional Events Linked to Optional Session Attributes)

BGP FSM 的 input 是 event. event 可以是 mandatory, 也可以是 optional. 一些 optional event 与 optional session attribute 关联. optional session attribute 会启用若干组 FSM functionality.

FSM functionality, event 和 optional session attribute 之间的关联如下所述.

Group 1: Automatic Administrative Events (Start/Stop)

Optional Session Attribute: AllowAutomaticStart, AllowAutomaticStop, DampPeerOscillations, IdleHoldTime, IdleHoldTimer

Option 1: AllowAutomaticStart

Description: BGP peer connection 可以通过 administrative control 启动和停止. 这种 administrative control 可以是 manual, 基于 operator intervention, 也可以由特定于 BGP implementation 的 logic 控制. 术语 "automatic" 指当此类 logic 判定应重启 BGP peer connection 时, 向 BGP peer connection FSM 发出的 start.

AllowAutomaticStart attribute 指定此 BGP connection 支持 BGP connection 的 automatic starting.

如果 BGP implementation 支持 AllowAutomaticStart, peer 可能被反复重启. 另外三个 option 控制 automatic restart 发生的速率: DampPeerOscillations, IdleHoldTime 和 IdleHoldTimer.

DampPeerOscillations option 指定 implementation 采用附加 logic, 在 automatic start 和 automatic stop 序列面前抑制 BGP peer oscillation. IdleHoldTime 指定在允许下一次 automatic restart 之前, BGP peer 保持在 Idle state 的时长. IdleHoldTimer 是将 peer 保持在 Idle state 的 timer.

DampPeerOscillations logic 的一个例子是: 如果 BGP peer 在一段时间内反复出现 connectivity oscillation (connected/disconnected), 则增加 IdleHoldTime value. 为触发此 logic, peer 可以在 5 分钟内连接和断开 10 次. IdleHoldTime value 会从 0 重置为 120 秒.

Values: TRUE 或 FALSE

Option 2: AllowAutomaticStop

Description: 此 BGP peer session optional attribute 表示 BGP connection 允许 "automatic" stopping. "automatic" stop 定义为由 implementation-specific logic 控制的 stop. implementation-specific logic 不在本 specification 范围内.

Values: TRUE 或 FALSE

Option 3: DampPeerOscillations

Description: DampPeerOscillations optional session attribute 表示 BGP connection 正在使用一种 logic, 用于在 Idle State 中抑制 BGP peer oscillation.

Value: TRUE 或 FALSE

Option 4: IdleHoldTime

Description: IdleHoldTime 是设置到 IdleHoldTimer 中的值.

Values: time in seconds

Option 5: IdleHoldTimer

Description: IdleHoldTimer 有助于控制 BGP peer oscillation. IdleHoldTimer 用于将 BGP peer 在 Idle 中保持特定 duration. IdleHoldTimer_Expires event 在 Section 8.1.3 中描述.

Values: time in seconds

Group 2: Unconfigured Peers

Optional Session Attribute: AcceptConnectionsUnconfiguredPeers

Option 1: AcceptConnectionsUnconfiguredPeers

Description: BGP FSM 可选地允许接受来自未预先配置 neighbor 的 BGP peer connection. "AcceptConnectionsUnconfiguredPeers" optional session attribute 允许 FSM 支持相应 state transition, 使 implementation 能够接受或拒绝这些 unconfigured peer.

AcceptConnectionsUnconfiguredPeers 具有 security implication. 细节请参考 BGP Vulnerabilities document [RFC4272].

Value: TRUE 或 FALSE

Group 3: TCP processing

Optional Session Attribute: PassiveTcpEstablishment, TrackTcpState

Option 1: PassiveTcpEstablishment

Description: 此 option 表示 BGP FSM 将被动等待 remote BGP peer 建立 BGP TCP connection.

Value: TRUE 或 FALSE

Option 2: TrackTcpState

Description: BGP FSM 通常跟踪 TCP connection attempt 的最终结果, 而不是单独的 TCP message. 可选地, BGP FSM 可以支持与 TCP connection negotiation 的额外交互. 与 TCP event 的交互可能增加 BGP peer connection 所需的 logging 量以及 BGP FSM change 的数量.

Value: TRUE 或 FALSE

Group 4: BGP Message Processing

Optional Session Attribute: DelayOpen, DelayOpenTime, DelayOpenTimer, SendNOTIFICATIONwithoutOPEN, CollisionDetectEstablishedState

Option 1: DelayOpen

Description: DelayOpen optional session attribute 允许 implementation 被配置为在特定 time period (DelayOpenTime) 内延迟发送 OPEN message. 该 delay 给 remote BGP Peer 时间发送第一条 OPEN message.

Value: TRUE 或 FALSE

Option 2: DelayOpenTime

Description: DelayOpenTime 是设置到 DelayOpenTimer 中的 initial value.

Value: time in seconds

Option 3: DelayOpenTimer

Description: DelayOpenTimer optional session attribute 用于延迟在 connection 上发送 OPEN message. DelayOpenTimer_Expires event (Event 12) 在 Section 8.1.3 中描述.

Value: time in seconds

Option 4: SendNOTIFICATIONwithoutOPEN

Description: SendNOTIFICATIONwithoutOPEN 允许 peer 在未先发送 OPEN message 的情况下发送 NOTIFICATION. 没有此 optional session attribute 时, BGP connection 假定 peer 必须先发送 OPEN message, 然后才能发送 NOTIFICATION message.

Value: TRUE 或 FALSE

Option 5: CollisionDetectEstablishedState

Description: 通常, Detect Collision (见 Section 6.8) 在 Established state 中会被忽略. 此 optional session attribute 表示该 BGP connection 会在 Established state 中处理 collision.

Value: TRUE 或 FALSE

Note: optional session attribute 用于澄清 BGP implementation 既有 feature 对应的 BGP FSM 描述. 对于现有正确 implementation, optional session attribute 可以由 implementation 预定义, 且不能通过 management interface 读取. 随着较新的 BGP MIB (version 2 及以后版本) 被支持, 这些 field 将可通过 management interface 访问.

8.1.2. Administrative Events

administrative event 是 operator interface 和 BGP Policy engine 向 BGP finite state machine 发信号, 要求启动或停止 BGP state machine 的 event. 基本 start 和 stop 指示由 optional connection attribute 扩展, 这些 attribute 向 BGP FSM 指示某种特定类型的 start 或 stop mechanism. 这种组合的一个例子是 Event 5, AutomaticStart_with_PassiveTcpEstablishment. 通过此 event, BGP implementation 向 BGP FSM 指示该 implementation 正在使用 Automatic Start, 并带有使用 Passive TCP Establishment 的 option. Passive TCP establishment 表示该 BGP FSM 将等待 remote side 启动 TCP establishment.

注意, 只有 Event 1 (ManualStart) 和 Event 2 (ManualStop) 是 mandatory administrative event. 所有其他 administrative event 都是 optional (Event 3-8). 下面每个 event 都有 name, definition, status (mandatory 或 optional), 以及每个阶段 SHOULD 设置的 optional session attribute. 为 BGP FSM 生成 Event 1 到 Event 8 时, 会验证 "Optional Attribute Status" 小节中指定的 condition. 如果任一 condition 不满足, local system should 记录 FSM error.

在某些 implementation 中, optional session attribute 的设置可以是 implicit 的, 因此可能不会由 external operator action 显式设置. Section 8.2.1.5 描述这些 optional session attribute 的 implicit setting. 下面描述的 administrative state 在某些 implementation 中也可以是 implicit 的, 并且不能由 external operator 直接配置.

Event 1: ManualStart

Definition: local system administrator 手动启动 peer connection.

Status: Mandatory

Optional Attribute Status: PassiveTcpEstablishment attribute SHOULD 设置为 FALSE.

Event 2: ManualStop

Definition: local system administrator 手动停止 peer connection.

Status: Mandatory

Optional Attribute Status: 不与任何 optional attribute 交互.

Event 3: AutomaticStart

Definition: local system 自动启动 BGP connection.

Status: Optional, 取决于 local system

Optional Attribute Status:

  1. 如果此 event 发生, AllowAutomaticStart attribute SHOULD 设置为 TRUE.
  2. 如果支持 PassiveTcpEstablishment optional session attribute, 它 SHOULD 设置为 FALSE.
  3. 如果支持 DampPeerOscillations, 则此 event 发生时它 SHOULD 设置为 FALSE.

Event 4: ManualStart_with_PassiveTcpEstablishment

Definition: local system administrator 手动启动 peer connection, 但已启用 PassiveTcpEstablishment. PassiveTcpEstablishment optional attribute 表示 peer 会在建立 connection 之前 listen.

Status: Optional, 取决于 local system

Optional Attribute Status:

  1. 如果此 event 发生, PassiveTcpEstablishment attribute SHOULD 设置为 TRUE.
  2. 此 event 发生时, DampPeerOscillations attribute SHOULD 设置为 FALSE.

Event 5: AutomaticStart_with_PassiveTcpEstablishment

Definition: local system 在启用 PassiveTcpEstablishment 的情况下自动启动 BGP connection. PassiveTcpEstablishment optional attribute 表示 peer 会在建立 connection 之前 listen.

Status: Optional, 取决于 local system

Optional Attribute Status:

  1. AllowAutomaticStart attribute SHOULD 设置为 TRUE.
  2. PassiveTcpEstablishment attribute SHOULD 设置为 TRUE.
  3. 如果支持 DampPeerOscillations attribute, 则 DampPeerOscillations SHOULD 设置为 FALSE.

Event 6: AutomaticStart_with_DampPeerOscillations

Definition: local system 在启用 peer oscillation damping 的情况下自动启动 BGP peer connection. 抑制 persistent peer oscillation 的确切方法由 implementation 确定, 不在本文档范围内.

Status: Optional, 取决于 local system.

Optional Attribute Status:

  1. AllowAutomaticStart attribute SHOULD 设置为 TRUE.
  2. DampPeerOscillations attribute SHOULD 设置为 TRUE.
  3. PassiveTcpEstablishment attribute SHOULD 设置为 FALSE.

Event 7: AutomaticStart_with_DampPeerOscillations_and_PassiveTcpEstablishment

Definition: local system 在启用 peer oscillation damping 和 PassiveTcpEstablishment 的情况下自动启动 BGP peer connection. 抑制 persistent peer oscillation 的确切方法由 implementation 确定, 不在本文档范围内.

Status: Optional, 取决于 local system

Optional Attribute Status:

  1. AllowAutomaticStart attribute SHOULD 设置为 TRUE.
  2. DampPeerOscillations attribute SHOULD 设置为 TRUE.
  3. PassiveTcpEstablishment attribute SHOULD 设置为 TRUE.

Event 8: AutomaticStop

Definition: local system 自动停止 BGP connection.

automatic stop event 的一个例子是: 对给定 peer 的 prefix 数量超过限制, local system 自动断开该 peer.

Status: Optional, 取决于 local system

Optional Attribute Status:

  1. AllowAutomaticStop attribute SHOULD 为 TRUE.

8.1.3. Timer Events

Event 9: ConnectRetryTimer_Expires

Definition: ConnectRetryTimer 过期时生成的 event.

Status: Mandatory

Event 10: HoldTimer_Expires

Definition: HoldTimer 过期时生成的 event.

Status: Mandatory

Event 11: KeepaliveTimer_Expires

Definition: KeepaliveTimer 过期时生成的 event.

Status: Mandatory

Event 12: DelayOpenTimer_Expires

Definition: DelayOpenTimer 过期时生成的 event.

Status: Optional

Optional Attribute Status: 如果此 event 发生:

  1. DelayOpen attribute SHOULD 设置为 TRUE.
  2. DelayOpenTime attribute SHOULD 被支持.
  3. DelayOpenTimer SHOULD 被支持.

Event 13: IdleHoldTimer_Expires

Definition: IdleHoldTimer 过期时生成的 event, 表示 BGP connection 已完成等待 back-off period, 以防止 BGP peer oscillation.

IdleHoldTimer 仅在通过将 DampPeerOscillations optional attribute 设置为 TRUE 来启用 persistent peer oscillation damping function 时使用.

未实现 persistent peer oscillation damping function 的 implementation 可能没有 IdleHoldTimer.

Status: Optional

Optional Attribute Status: 如果此 event 发生:

  1. DampPeerOscillations attribute SHOULD 设置为 TRUE.
  2. IdleHoldTimer SHOULD 刚刚过期.

8.1.4. TCP Connection-Based Events

Event 14: TcpConnection_Valid

Definition: 表示 local system 收到一个 TCP connection request, 其 source IP address, TCP port, destination IP address 和 TCP Port 均有效. invalid source 和 invalid destination IP address 的定义由 implementation 确定.

BGP 的 destination port SHOULD 是 IANA 定义的 port 179.

TCP connection request 由 local system 收到 TCP SYN 表示.

Status: Optional

Optional Attribute Status:

  1. 如果此 event 发生, TrackTcpState attribute SHOULD 设置为 TRUE.

Event 15: Tcp_CR_Invalid

Definition: 表示 local system 收到一个 TCP connection request, 其 source address 或 port number 无效, 或 destination address 或 port number 无效.

BGP destination port number SHOULD 是 IANA 定义的 179.

local system 收到 TCP SYN 时发生 TCP connection request.

Status: Optional

Optional Attribute Status:

  1. 如果此 event 发生, TrackTcpState attribute should 设置为 TRUE.

Event 16: Tcp_CR_Acked

Definition: 表示 local system 请求建立到 remote peer 的 TCP connection.

local system 的 TCP connection 已发送 TCP SYN, 收到 TCP SYN/ACK message, 并发送 TCP ACK.

Status: Mandatory

Event 17: TcpConnectionConfirmed

Definition: 表示 local system 已收到确认, 即 remote site 已建立 TCP connection.

remote peer 的 TCP engine 已发送 TCP SYN. local peer 的 TCP engine 已发送 SYN, ACK message, 并且现在已收到最终 ACK.

Status: Mandatory

Event 18: TcpConnectionFails

Definition: 表示 local system 已收到 TCP connection failure notice.

remote BGP peer 的 TCP machine 可能已发送 FIN. local peer 会以 FIN-ACK 响应. 另一种可能是 local peer 指示 TCP connection timeout 并关闭 connection.

Status: Mandatory

8.1.5. BGP Message-Based Events

Event 19: BGPOpen

Definition: 收到有效 OPEN message 时生成 event.

Status: Mandatory

Optional Attribute Status:

  1. DelayOpen optional attribute SHOULD 设置为 FALSE.
  2. DelayOpenTimer SHOULD 未运行.

Event 20: BGPOpen with DelayOpenTimer running

Definition: 对于已成功建立 transport connection 且当前正在延迟发送 BGP open message 的 peer, 当收到有效 OPEN message 时生成 event.

Status: Optional

Optional Attribute Status:

  1. DelayOpen attribute SHOULD 设置为 TRUE.
  2. DelayOpenTimer SHOULD 正在运行.

Event 21: BGPHeaderErr

Definition: 收到的 BGP message header 无效时生成 event.

Status: Mandatory

Event 22: BGPOpenMsgErr

Definition: 收到带有 error 的 OPEN message 时生成 event.

Status: Mandatory

Event 23: OpenCollisionDump

Definition: 处理 incoming OPEN message 时检测到 connection collision, 且此 connection 被选择为要断开时, administratively 生成的 event. 关于 collision detection 的更多信息见 Section 6.8.

Event 23 是由 implementation logic 生成的 administrative action, 该 logic 根据 Section 6.8 的规则确定此 connection 是否需要被丢弃. 如果 FSM 实现为两个 linked state machine, 则可能发生此 event.

Status: Optional

Optional Attribute Status: 如果 state machine 要在 Established state 中处理此 event:

  1. CollisionDetectEstablishedState optional attribute SHOULD 设置为 TRUE.

请注意: OpenCollisionDump event 可以在 Idle, Connect, Active, OpenSent 和 OpenConfirm 中发生, 而无需设置任何 optional attribute.

Event 24: NotifMsgVerErr

Definition: 收到带有 "version error" 的 NOTIFICATION message 时生成 event.

Status: Mandatory

Event 25: NotifMsg

Definition: 收到 NOTIFICATION message 且 error code 不是 "version error" 时生成 event.

Status: Mandatory

Event 26: KeepAliveMsg

Definition: 收到 KEEPALIVE message 时生成 event.

Status: Mandatory

Event 27: UpdateMsg

Definition: 收到有效 UPDATE message 时生成 event.

Status: Mandatory

Event 28: UpdateMsgErr

Definition: 收到无效 UPDATE message 时生成 event.

Status: Mandatory