跳到主要内容

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) 启动和停止. 这种管理控制可以是手动的 (manual), 基于运营者干预 (operator intervention), 也可以由特定于 BGP 实现的逻辑 (logic) 控制. 术语 "automatic" 指当此类逻辑判定应重启 BGP 对等连接时, 向 BGP 对等连接 FSM 发出的启动 (start).

AllowAutomaticStart 属性指定此 BGP 连接支持 BGP 连接的自动启动 (automatic starting).

如果 BGP 实现支持 AllowAutomaticStart, 对等体可能被反复重启. 另外三个选项控制自动重启 (automatic restart) 发生的速率: DampPeerOscillations, IdleHoldTime 和 IdleHoldTimer.

DampPeerOscillations 选项指定实现采用附加逻辑, 在自动启动和自动停止 (automatic stop) 序列面前抑制 BGP 对等体振荡 (peer oscillation). IdleHoldTime 指定在允许下一次自动重启之前, BGP 对等体保持在空闲状态 (Idle state) 的时长. IdleHoldTimer 是将对等体保持在空闲状态的定时器.

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

Values: TRUE 或 FALSE

Option 2: AllowAutomaticStop

Description: 此 BGP 对等会话可选属性表示 BGP 连接允许 "automatic" 停止 (stopping). "automatic" 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 中的值 (value).

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 对等连接. "AcceptConnectionsUnconfiguredPeers" 可选会话属性允许 FSM 支持相应的状态转换 (state transition), 使实现能够接受或拒绝这些未配置 (unconfigured) 的对等体.

AcceptConnectionsUnconfiguredPeers 具有安全影响 (security implication). 细节请参考 BGP 漏洞 (BGP Vulnerabilities) 文档 [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 消息. 可选地, BGP FSM 可以支持与 TCP 连接协商 (connection negotiation) 的额外交互. 与 TCP 事件的交互可能增加 BGP 对等连接所需的日志记录 (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 可选会话属性允许实现被配置为在特定时间段 (time period, DelayOpenTime) 内延迟发送 OPEN 消息. 该延迟 (delay) 给远端 BGP 对等体时间发送第一条 OPEN 消息.

Value: TRUE 或 FALSE

Option 2: DelayOpenTime

Description: DelayOpenTime 是设置到 DelayOpenTimer 中的初始值 (initial value).

Value: time in seconds

Option 3: DelayOpenTimer

Description: DelayOpenTimer 可选会话属性用于延迟在连接上发送 OPEN 消息. DelayOpenTimer_Expires 事件 (Event 12) 在 8.1.3 节中描述.

Value: time in seconds

Option 4: SendNOTIFICATIONwithoutOPEN

Description: SendNOTIFICATIONwithoutOPEN 允许对等体在未先发送 OPEN 消息的情况下发送 NOTIFICATION. 没有此可选会话属性时, BGP 连接假定对等体必须先发送 OPEN 消息, 然后才能发送 NOTIFICATION 消息.

Value: TRUE 或 FALSE

Option 5: CollisionDetectEstablishedState

Description: 通常, 检测冲突 (Detect Collision, 见 6.8 节) 在已建立状态 (Established state) 中会被忽略. 此可选会话属性表示该 BGP 连接会在已建立状态中处理冲突 (collision).

Value: TRUE 或 FALSE

Note: 可选会话属性用于澄清 BGP 实现既有特性 (feature) 对应的 BGP FSM 描述. 对于现有正确的实现, 可选会话属性可以由实现预定义, 且不能通过管理接口 (management interface) 读取. 随着较新的 BGP MIB (版本 2 及以后版本) 被支持, 这些字段将可通过管理接口访问.

8.1.2. Administrative Events​

管理事件 (administrative event) 是操作员接口 (operator interface) 和 BGP 策略引擎 (Policy engine) 向 BGP 有限状态机发信号, 要求启动或停止 BGP 状态机的事件. 基本启动和停止指示由可选连接属性 (optional connection attribute) 扩展, 这些属性向 BGP FSM 指示某种特定类型的启动或停止机制 (mechanism). 这种组合的一个例子是事件 5, AutomaticStart_with_PassiveTcpEstablishment. 通过此事件, BGP 实现向 BGP FSM 指示该实现正在使用自动启动 (Automatic Start), 并带有使用被动 TCP 建立 (Passive TCP Establishment) 的选项. 被动 TCP 建立表示该 BGP FSM 将等待远端 (remote side) 启动 TCP 建立.

注意, 只有事件 1 (ManualStart) 和事件 2 (ManualStop) 是强制 (mandatory) 管理事件. 所有其他管理事件都是可选 (optional) 的 (事件 3-8). 下面每个事件都有名称 (name), 定义 (definition), 状态 (status, mandatory 或 optional), 以及每个阶段 SHOULD 设置的可选会话属性. 为 BGP FSM 生成事件 1 到事件 8 时, 会验证 "Optional Attribute Status" 小节中指定的条件 (condition). 如果任一条件不满足, 本地系统 (local system) 应 (should) 记录 FSM 错误 (error).

在某些实现中, 可选会话属性的设置可以是隐式 (implicit) 的, 因此可能不会由外部操作员动作 (external operator action) 显式设置. 8.2.1.5 节描述这些可选会话属性的隐式设置 (implicit setting). 下面描述的管理状态 (administrative state) 在某些实现中也可以是隐式的, 并且不能由外部操作员直接配置.

Event 1: ManualStart

Definition: 本地系统管理员 (local system administrator) 手动启动对等连接 (peer connection).

Status: Mandatory

Optional Attribute Status: PassiveTcpEstablishment 属性 SHOULD 设置为 FALSE.

Event 2: ManualStop

Definition: 本地系统管理员手动停止对等连接.

Status: Mandatory

Optional Attribute Status: 不与任何可选属性交互.

Event 3: AutomaticStart

Definition: 本地系统自动启动 BGP 连接.

Status: Optional, 取决于本地系统

Optional Attribute Status:

  1. 如果此事件发生, AllowAutomaticStart 属性 SHOULD 设置为 TRUE.
  2. 如果支持 PassiveTcpEstablishment 可选会话属性, 它 SHOULD 设置为 FALSE.
  3. 如果支持 DampPeerOscillations, 则此事件发生时它 SHOULD 设置为 FALSE.

Event 4: ManualStart_with_PassiveTcpEstablishment

Definition: 本地系统管理员手动启动对等连接, 但已启用 PassiveTcpEstablishment. PassiveTcpEstablishment 可选属性表示对等体会在建立连接之前侦听 (listen).

Status: Optional, 取决于本地系统

Optional Attribute Status:

  1. 如果此事件发生, PassiveTcpEstablishment 属性 SHOULD 设置为 TRUE.
  2. 此事件发生时, DampPeerOscillations 属性 SHOULD 设置为 FALSE.

Event 5: AutomaticStart_with_PassiveTcpEstablishment

Definition: 本地系统在启用 PassiveTcpEstablishment 的情况下自动启动 BGP 连接. PassiveTcpEstablishment 可选属性表示对等体会在建立连接之前侦听.

Status: Optional, 取决于本地系统

Optional Attribute Status:

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

Event 6: AutomaticStart_with_DampPeerOscillations

Definition: 本地系统在启用对等体振荡抑制 (peer oscillation damping) 的情况下自动启动 BGP 对等连接. 抑制持续对等体振荡 (persistent peer oscillation) 的确切方法由实现确定, 不在本文档范围内.

Status: Optional, 取决于本地系统.

Optional Attribute Status:

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

Event 7: AutomaticStart_with_DampPeerOscillations_and_PassiveTcpEstablishment

Definition: 本地系统在启用对等体振荡抑制和 PassiveTcpEstablishment 的情况下自动启动 BGP 对等连接. 抑制持续对等体振荡的确切方法由实现确定, 不在本文档范围内.

Status: Optional, 取决于本地系统

Optional Attribute Status:

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

Event 8: AutomaticStop

Definition: 本地系统自动停止 BGP 连接.

自动停止事件的一个例子是: 对给定对等体的前缀数量超过限制, 本地系统自动断开该对等体.

Status: Optional, 取决于本地系统

Optional Attribute Status:

  1. AllowAutomaticStop 属性 SHOULD 为 TRUE.

8.1.3. Timer Events​

Event 9: ConnectRetryTimer_Expires

Definition: ConnectRetryTimer 过期时生成的事件.

Status: Mandatory

Event 10: HoldTimer_Expires

Definition: HoldTimer 过期时生成的事件.

Status: Mandatory

Event 11: KeepaliveTimer_Expires

Definition: KeepaliveTimer 过期时生成的事件.

Status: Mandatory

Event 12: DelayOpenTimer_Expires

Definition: DelayOpenTimer 过期时生成的事件.

Status: Optional

Optional Attribute Status: 如果此事件发生:

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

Event 13: IdleHoldTimer_Expires

Definition: IdleHoldTimer 过期时生成的事件, 表示 BGP 连接已完成等待退避周期 (back-off period), 以防止 BGP 对等体振荡.

IdleHoldTimer 仅在通过将 DampPeerOscillations 可选属性设置为 TRUE 来启用持续对等体振荡抑制功能 (persistent peer oscillation damping function) 时使用.

未实现持续对等体振荡抑制功能的实现可能没有 IdleHoldTimer.

Status: Optional

Optional Attribute Status: 如果此事件发生:

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

8.1.4. TCP Connection-Based Events​

Event 14: TcpConnection_Valid

Definition: 表示本地系统收到一个 TCP 连接请求 (connection request), 其源 IP 地址 (source IP address), TCP 端口, 目的 IP 地址 (destination IP address) 和 TCP 端口均有效. 无效源 (invalid source) 和无效目的 IP 地址的定义由实现确定.

BGP 的目的端口 (destination port) SHOULD 是 IANA 定义的端口 179.

TCP 连接请求由本地系统收到 TCP SYN 表示.

Status: Optional

Optional Attribute Status:

  1. 如果此事件发生, TrackTcpState 属性 SHOULD 设置为 TRUE.

Event 15: Tcp_CR_Invalid

Definition: 表示本地系统收到一个 TCP 连接请求, 其源地址或端口号 (port number) 无效, 或目的地址或端口号无效.

BGP 目的端口号 SHOULD 是 IANA 定义的 179.

本地系统收到 TCP SYN 时发生 TCP 连接请求.

Status: Optional

Optional Attribute Status:

  1. 如果此事件发生, TrackTcpState 属性 should 设置为 TRUE.

Event 16: Tcp_CR_Acked

Definition: 表示本地系统请求建立到远端对等体的 TCP 连接.

本地系统的 TCP 连接已发送 TCP SYN, 收到 TCP SYN/ACK 消息, 并发送 TCP ACK.

Status: Mandatory

Event 17: TcpConnectionConfirmed

Definition: 表示本地系统已收到确认, 即远端站点 (remote site) 已建立 TCP 连接.

远端对等体的 TCP 引擎 (engine) 已发送 TCP SYN. 本地对等体的 TCP 引擎已发送 SYN, ACK 消息, 并且现在已收到最终 ACK.

Status: Mandatory

Event 18: TcpConnectionFails

Definition: 表示本地系统已收到 TCP 连接失败通知 (failure notice).

远端 BGP 对等体的 TCP 机器 (machine) 可能已发送 FIN. 本地对等体会以 FIN-ACK 响应. 另一种可能是本地对等体指示 TCP 连接超时 (timeout) 并关闭连接.

Status: Mandatory

8.1.5. BGP Message-Based Events​

Event 19: BGPOpen

Definition: 收到有效 OPEN 消息时生成事件.

Status: Mandatory

Optional Attribute Status:

  1. DelayOpen 可选属性 SHOULD 设置为 FALSE.
  2. DelayOpenTimer SHOULD 未运行.

Event 20: BGPOpen with DelayOpenTimer running

Definition: 对于已成功建立传输连接 (transport connection) 且当前正在延迟发送 BGP open 消息的对等体, 当收到有效 OPEN 消息时生成事件.

Status: Optional

Optional Attribute Status:

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

Event 21: BGPHeaderErr

Definition: 收到的 BGP 消息报头 (message header) 无效时生成事件.

Status: Mandatory

Event 22: BGPOpenMsgErr

Definition: 收到带有错误 (error) 的 OPEN 消息时生成事件.

Status: Mandatory

Event 23: OpenCollisionDump

Definition: 处理传入 OPEN 消息时检测到连接冲突 (connection collision), 且此连接被选择为要断开时, 管理式 (administratively) 生成的事件. 关于冲突检测 (collision detection) 的更多信息见 6.8 节.

Event 23 是由实现逻辑 (implementation logic) 生成的管理动作 (administrative action), 该逻辑根据 6.8 节的规则确定此连接是否需要被丢弃. 如果 FSM 实现为两个链接的状态机 (linked state machine), 则可能发生此事件.

Status: Optional

Optional Attribute Status: 如果状态机要在已建立状态 (Established state) 中处理此事件:

  1. CollisionDetectEstablishedState 可选属性 SHOULD 设置为 TRUE.

请注意: OpenCollisionDump 事件可以在 Idle, Connect, Active, OpenSent 和 OpenConfirm 中发生, 而无需设置任何可选属性.

Event 24: NotifMsgVerErr

Definition: 收到带有 "version error" 的 NOTIFICATION 消息时生成事件.

Status: Mandatory

Event 25: NotifMsg

Definition: 收到 NOTIFICATION 消息且错误代码不是 "version error" 时生成事件.

Status: Mandatory

Event 26: KeepAliveMsg

Definition: 收到 KEEPALIVE 消息时生成事件.

Status: Mandatory

Event 27: UpdateMsg

Definition: 收到有效 UPDATE 消息时生成事件.

Status: Mandatory

Event 28: UpdateMsgErr

Definition: 收到无效 UPDATE 消息时生成事件.

Status: Mandatory