跳到主要内容

6.8.1. State Variables (状态变量)

6.8.1. State Variables (状态变量)

需要跟踪会话的最少信息量, 以实现此处描述的过程要素。以下是一组有助于描述 BFD 机制的状态变量。可以使用任何跟踪此状态的方式, 只要协议行为如描述的那样。

当文本提到初始化状态变量时, 这仅在创建会话 (和相应的状态变量) 时发生。状态变量随后由状态机操纵, 并且永远不会重新初始化, 即使会话失败并重新建立。

一旦创建了会话状态, 并且至少从远端接收到一个 BFD 控制包, 它必须在接收到最后一个 BFD 控制包之后至少一个检测时间 (参见第 6.8.4 节) 内保留, 无论会话状态如何。这保留了时序参数, 以防会话抖动。系统可以保留会话状态更长时间。当没有从远程系统接收到此会话的 BFD 控制包时, 会话状态的保留或销毁超出了本规范的范围。

本规范中的所有状态变量都采用 "bfd.Xx" 的形式, 不应与协议数据包中携带的字段混淆, 这些字段总是拼写出来以匹配第 4 节中的名称。

bfd.SessionState

会话的感知状态 (Init, Up, Down, 或 AdminDown)。会话状态改变时采取的确切操作超出了本规范的范围, 尽管预期此状态变化 (特别是到 Up 状态和从 Up 状态) 被报告给系统的其他组件。此变量必须初始化为 Down。

bfd.RemoteSessionState

远程系统在 BFD 控制包的 State (Sta) 字段中最后报告的会话状态。此变量必须初始化为 Down。

bfd.LocalDiscr

此 BFD 会话的本地鉴别器, 用于唯一标识它。它在此系统上的所有 BFD 会话中必须是唯一的, 并且非零。它应该设置为随机 (但仍然唯一) 的值以提高安全性。该值在其他方面超出了本规范的范围。

bfd.RemoteDiscr

此 BFD 会话的远程鉴别器。这是远程系统选择的鉴别器, 对本地系统完全不透明。这必须初始化为零。如果在一个检测时间内没有从远程系统接收到有效的经过认证的 BFD 数据包, 则此变量必须设置为零。

bfd.LocalDiag

诊断代码, 指定本地会话状态最近更改的原因。这必须初始化为零 (无诊断)。

bfd.DesiredMinTxInterval

本系统当前希望在传输 BFD 控制包时使用的最小间隔 (以微秒为单位), 减去任何应用的抖动 (参见第 6.8.2 节)。实际间隔在两个系统之间协商。根据第 6.8.3 节中描述的规则, 这必须初始化为至少一秒 (1,000,000 微秒) 的值。此变量的设置在其他方面超出了本规范的范围。

bfd.RequiredMinRxInterval

此系统要求的接收 BFD 控制包之间的最小间隔 (以微秒为单位), 减去发送方应用的任何抖动 (参见第 6.8.2 节)。此变量的设置超出了本规范的范围。值为零表示此系统不希望接收任何周期性 BFD 控制包。详细信息请参见第 6.8.18 节。

bfd.RemoteMinRxInterval

从远程系统在 BFD 控制包中接收的 Required Min RX Interval 的最后一个值。此变量必须初始化为 1。

bfd.DemandMode

如果本地系统希望使用按需模式, 则设置为 1, 否则设置为 0。

bfd.RemoteDemandMode

如果远程系统希望使用按需模式, 则设置为 1, 否则设置为 0。这是最后接收到的 BFD 控制包中 Demand (D) 位的值。此变量必须初始化为零。

bfd.DetectMult

本地系统上 BFD 控制包所需的检测时间乘数。协商的控制包传输间隔乘以此变量, 将是此会话的检测时间 (由远程系统看到)。此变量必须是非零整数, 在其他方面超出了本规范的范围。有关更多信息, 请参见第 6.8.4 节。

bfd.AuthType

此会话使用的认证类型, 如第 4.1 节中定义, 如果没有使用认证则为零。

bfd.RcvAuthSeq

包含接收到的密钥 MD5 或 SHA1 认证的最后序列号的 32 位无符号整数。初始值不重要。

bfd.XmitAuthSeq

包含要传输的密钥 MD5 或 SHA1 认证的下一个序列号的 32 位无符号整数。此变量必须初始化为随机 32 位值。

bfd.AuthSeqKnown

如果已知预期接收的密钥 MD5 或 SHA1 认证的下一个序列号, 则设置为 1, 如果未知则设置为 0。此变量必须初始化为零。

在此会话上至少两倍检测时间内未接收到数据包后, 此变量必须设置为零。这确保如果远程系统重新启动, 序列号可以重新同步。