6.8.4. Calculating the Detection Time (计算检测时间)
6.8.4. Calculating the Detection Time (计算检测时间)
检测时间 (没有接收到 BFD 数据包后会话被确定失败的时间段) 不在协议中明确携带。相反, 它在每个方向上由接收系统根据协商的传输间隔和检测乘数独立计算。请注意, 每个方向上可能有不同的检测时间。
当处于按需模式与异步模式时, 检测时间的计算略有不同。
在异步模式下, 本地系统计算的检测时间等于从远程系统接收的 Detect Mult 值, 乘以远程系统的商定传输间隔 (bfd.RequiredMinRxInterval 和最后接收的 Desired Min TX Interval 中的较大值)。Detect Mult 值是 (粗略地说, 由于抖动) 必须连续丢失的数据包数量才能声明会话关闭。
如果按需模式未激活, 并且等于检测时间的时间段内未从远程系统接收到 BFD 控制包, 并且 bfd.SessionState 为 Init 或 Up, 则会话已关闭——本地系统必须将 bfd.SessionState 设置为 Down, 并将 bfd.LocalDiag 设置为 1 (控制检测时间到期, Control Detection Time Expired)。
在按需模式下, 本地系统计算的检测时间等于 bfd.DetectMult 乘以本地系统的商定传输间隔 (bfd.DesiredMinTxInterval 和 bfd.RemoteMinRxInterval 中的较大值)。bfd.DetectMult 是 (粗略地说, 由于抖动) 必须连续丢失的数据包数量才能声明会话关闭。
如果按需模式激活, 并且在启动轮询序列 (传输设置了 Poll 位的第一个 BFD 控制包) 后, 等于检测时间的时间段过去了, 则会话已关闭——本地系统必须将 bfd.SessionState 设置为 Down, 并将 bfd.LocalDiag 设置为 1 (控制检测时间到期)。
(请注意, 对于检测时间到期的目的, 只有在根据第 6.8.6 节的规则未被 "丢弃" 的情况下, 才认为数据包已被接收)。