NTP 同步仍未实现

NTP 同步仍未实现

通常,当一台机器完全失去连接时,ntpd 会错过几次轮询并将所有源标记为失败。这似乎很合乎逻辑。但我遇到过一种情况,当服务器的覆盖范围变为 0 时,它仍被标记为当前时间源。

服务器与目标机器部署在同一个子网中,提供非常低的延迟、偏移和抖动。这种情况是通过物理关闭连接来模拟的:只需从客户端机器上拔下电源线即可。我尝试重新创建这种情况,但从那时起,同一台机器在 5-6 次轮询失败后总是会很好地失去同步状态。

真正的问题是:当连接丢失时,究竟是什么决定了同步状态?

答案1

RFC-1305中对到达寄存器有明确的解释:

可达性寄存器向左移动一位,用零替换空出的位。如果此寄存器的所有位均为零,则调用清除过程来清除时钟滤波器并重新选择同步源(如有必要)。如果初始化过程未配置关联,则解除关联。

然而 RFC-1305 已经被 RFC-5905 取代,而 RFC-5905 并不那么具有决定性:

接下来,使用第 13 节中描述的轮询过程中的 8 位 p.reach 移位寄存器来确定服务器是否可访问且数据是否新鲜。发送数据包时,寄存器左移一位,最右边的位设置为零。当有效数据包到达时,最右边的位设置为 1。如果寄存器包含任何非零位,则认为服务器可访问;否则,服务器不可访问。

第 13 节中没有提到明确的程序。但看起来无法连接的对等方在某些时候应该会失去其同步状态。

我已成功重建同步状态,并达到 0 的情况,以确保这种情况很少见,而且根本不是永久性的。这需要在服务器配置中禁用“突发”,并在同步后立即断开连接。

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 91.198.10.4     194.190.168.1    2 u   20   64  177   51.137   -2.192  11.049
 192.168.1.1     193.67.79.202    2 u   65   64   77    0.459   -1.818   0.922
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*91.198.10.4     194.190.168.1    2 u   21   64  177   51.137   -2.192  11.049
+192.168.1.1     193.67.79.202    2 u    -   64  177    0.449   -3.192   1.828

范围是 177,用二进制表示为 01111111。因此需要 7 次轮询才能建立同步。

然后在这个位置同步丢失:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+91.198.10.4     194.190.168.1    2 u  574   64    0   63.846   -9.652   0.756
*192.168.1.1     193.67.79.202    2 u  553   64    0    0.449   -3.192   0.505
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 91.198.10.4     194.190.168.1    2 u  575   64    0   69.871  -10.409   0.002
 192.168.1.1     193.67.79.202    2 u  554   64    0    0.449   -3.192   0.505

当数字有点奇怪时,例如 64*9 = 576 而不是 575,但我猜,表示可能不准确 1 秒。考虑到这一点,需要 9 次不成功的轮询才能打破同步状态。

因此,从理论和实践两个角度考虑,将 0 覆盖范围的源视为当前时间源似乎是可能的,但也很罕见且是暂时的。

相关内容