Ntpd 极不准确

Ntpd 极不准确

我已设置 ntpd(Windows 7 客户端上的 Meinberg ntp-4.2.6p5@london 版 Windows 版),并选择了一组附近的服务器,以获得较低的 ping 时间(通常为 10-20ms ping)。然而,我的时钟似乎只能精确到 100ms 或更短,而且随着时间的推移并没有变得更好。我原本以为它可以得到很多更多的比 ping 时间更精确,这令人失望。如何让它更好地工作?

ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+pool-test.ntp.o 216.218.254.202  2 u  259 1024   17   12.920  -106.39 111.972
+palpatine.steve 208.201.242.2    3 u  239 1024   17   16.959  -102.84 112.056
+grom.polpo.org  127.67.113.92    2 u  259 1024   17   17.362  -184.43  74.468
+paladin.latt.ne 204.123.2.72     2 u  378 1024    3   24.211  -106.97  61.825
+public-ntp1.iso 204.13.164.164   3 u  259 1024   17   33.080  -100.17  65.970
+nist1.symmetric .ACTS.           1 u  214 1024   17   17.548  -108.30 111.951
*nist1-sj.ustimi .ACTS.           1 u  245 1024   17   21.826  -111.02  63.313

抖动和偏移量怎么会比延迟大这么多?ping 时间为 12 毫秒,而偏移量却有 100 毫秒,这看起来太荒谬了,我理解错了吗?

事实上,我不确定 ntp 是否会改变我的时钟 - 它似乎得到有时间但不一定什么都没有。我该如何检查?

更多信息:

ntpdc> sysinfo
system peer:          nist1-sj.ustiming.org
system peer mode:     client
leap indicator:       00
stratum:              2
precision:            -11
root distance:        0.02182 s
root dispersion:      0.15431 s
reference ID:         [216.171.124.36]
reference time:       d4dae2b5.3c32ce54  Fri, Mar  1 2013  0:17:57.235
system flags:         auth monitor ntp kernel stats
jitter:               0.045776 s
stability:            0.000 ppm
broadcastdelay:       0.000000 s
authdelay:            0.000000 s

more "c:\Program Files (x86)\NTP\etc\ntp.drift"
192.049

more "c:\Program Files (x86)\NTP\etc\ntp.conf"
driftfile "C:\Program Files (x86)\NTP\etc\ntp.drift"
server nist1.symmetricom.com iburst
server nist1-sj.ustiming.org iburst
server 149.20.68.17 iburst
server 173.230.144.109 iburst
server 65.19.178.219 iburst
server 204.2.134.162 iburst
server 173.230.144.109 iburst
server 207.115.64.229 iburst

理想情况下,我希望时间与配置服务器的中值之间的差值不超过 50ms,如果差值过大,我希望它能够逐步增加。是否有任何配置选项可以设置,让 ntp 做到这一点?

答案1

抖动(旧版 NTP 中也称为分散)会随时间发生很大变化。特别是当您与 NTP 服务器之间的连接拥塞时。您需要频繁运行“ntpq -p”(大约每“轮询”秒一次)来监控抖动,或者打开性能文件(ntp.conf 文件中的“statsdir”和“statistics”行)。

http://www.ntp.org/ntpfaq/NTP-s-sw-clocks-quality.htm http://www.ntp.org/ntpfaq/NTP-s-trouble.htm

理想情况下,我希望时间与配置服务器的中值之间的差值不超过 50ms,如果差值过大,我希望它能够逐步增加。是否有任何配置选项可以设置,让 ntp 做到这一点?

NTP 并非如此。它从列表中挑选一台服务器,在“ntpq -p”输出的第一列中用“*”(星号,又称参考时间源)标记它,并尝试跟踪它。如果参考时间源无法访问,它将回退到跟踪“+”(合格候选)服务器之一。

我建议:

  1. 没有在每一台服务器上使用 iburst
  2. 选择最佳服务器,在该服务器上使用 iburst 并将其标记为首选,即“server tick.example.com iburst prefer”。
  3. 仅手工挑选 3 个距离较近的服务器。
  4. 其余部分更多地使用区域池 DNS 名称(例如 [0-3].us.poo.ntp.org)。
  5. 总共至少要有 4 个参考服务器,但不要超过 9 个。
  6. 切勿配置“服务器 127.127.1.0”(又名本地时钟)或“fudge”行。

默认情况下,“slew”与“step”的选择是 128ms。如果时间偏移 > 128ms,它将步进而不是slew。请参阅“ntpd”的“-x”参数(除非您的软件在时钟步进时会失灵,否则永远不要使用)。

除了“ntpq -p”之外,您可能还想查看“ntpdc -c loopinfo”。

答案2

NTP 的设计目标是在几乎所有网络上获得 1 秒内的准确时间。因此,在这方面 100 毫秒是正常运行的。在当今的实际使用中,NTP 通常可以在几乎所有硬件上将时间保持在 20 毫秒以内,在具有稳定 RTC 的硬件上将时间保持在 5-10 毫秒以内。

如果您的服务器持续偏离一致的数字(与对等服务器相比),那么它的 RTC 可能存在很大的抖动。NTP 可以通过不断敲打对等服务器以不断获得“正确”时间来弥补这一点。但是,我们不建议这样做,而且这对您与之对等的服务器来说也不是很礼貌。

NTP 不会“设置”时钟(默认情况下)。它会“调整”时钟,使其运行得更快或更慢,直到时钟达到目标时间。然后重新调整调整率以补偿“漂移”(NTP 计算出的 RTC 与对等点相比快或慢的量)。

此外,我同意 tgharold 的答案中的所有建议。

相关内容