什么是 NTP 弥散以及如何控制它?

什么是 NTP 弥散以及如何控制它?

我们在隔离网络上部署了 Ubuntu 14.04 服务器,运行 ntpd 4.2.6p5,配置为使用客户提供的多个 NTP 服务器(无法访问 pool.ntp.org)。我们的哑终端客户端设备运行旧版本的 BusyBox(1.00-rc2)和ntp客户端 2010来自拉里·杜立特。

多年来,这种设置一直运行良好,但最近我们遇到了新客户的阻碍。他们为我们提供了 5 个内部 NTP 服务器地址,就ntpdate-debianLinux 服务器而言,这些地址本身似乎运行良好。然而,在 BusyBox 方面,ntpclient却抱怨“分散度太高”。从调试输出中,ntpclient从 NTP 服务器获取“1217163.1”,但它支持的最大值是绝对值 (65536)。

$ /usr/sbin/ntpclient -s -i 15 -h 10.17.162.250 -d
Configuration:
  -c probe_count 1
  -d (debug)     1
  -g goodness    0
  -h hostname    10.17.162.250
  -i interval    15
  -l live        0
  -p local_port  0
  -q min_delay   800.000000
  -s set_clock   1
  -x cross_check 1
Listening...
Sending ...
recvfrom
packet of length 48 received
Source: INET Port 123 host 10.17.162.250
LI=0  VN=3  Mode=4  Stratum=4  Poll=4  Precision=-20
Delay=60745.2  Dispersion=1346801.8  Refid=10.31.10.21
Reference 3668859928.942079
(sent)    3668859928.708371
Originate 3668859928.708371
Receive   3668859928.963271
Transmit  3668859928.963369
Our recv  3668859928.708371
Total elapsed:      0.00
Server stall:      93.09
Slop:             -93.09
Skew:          255443.94
Frequency:             0
 day   second     elapsed    stall     skew  dispersion  freq
42463 56728.708  rejected packet: abs(DISP)>65536

这些都是位于同一局域网上的设备,所以坦白说,我感到震惊不已,甚至有些震惊。

以下是ntpq -pnUbuntu 14.04 服务器的输出:

user@host:~$ ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 127.127.1.0     .LOCL.          10 l 1025   64    0    0.000    0.000   0.000
 10.17.162.249   10.17.6.10       5 u   23 1024   37    0.865  1381.07 697.260
 10.31.10.22     .LOCL.           1 u 1044 1024   17   29.586  -838.06 397.342
 10.17.6.10      10.31.10.21      4 u 1065 1024   17    0.366  105.245 402.999
*10.31.10.21     132.246.11.238   3 u    5 1024   37   29.418  794.292 616.796
 10.17.6.11      10.31.10.21      4 u 1038 1024   17    0.408  120.030 381.058

我的问题是:

  1. 什么是色散以及什么可以改变其价值?
  2. 我可以运行哪些命令来从 NTP 服务器获取更多详细信息?
  3. 问题是否出在 Ubuntu 服务器端,是不是设置不当ntp.conf?其实那里没什么特别的。
  4. 在这种情况下,切换到 chrony 会改变什么吗?

答案1

我发现这里的答案有些令人困惑。首先,ntpclient至少在-s模式下,它不是完整的 NTP 客户端,它只是发送和接收一包,因此不存在“最后收到的 8 个数据包”。它实际上根本没有估计自己的分散度。

相反,它打印的值是服务器返回的数据包中称为“根散度”(rootdisp) 的值,它是该服务器与正确时间之间的总误差/方差的估计值。计算方法非常简单:每个 NTP 服务器要么从外部时钟(例如无线电或 GPS 接收器)获取时间,要么从另一个 NTP 服务器获取时间。如果服务器从外部时钟获取时间,则其根散度是该时钟的估计最大误差。如果它从另一个 NTP 服务器获取时间,则其根散度是该服务器的根散度它们之间的网络链接所增加的弥散。

这里容易让人混淆的是,ntpq 和 chrony 以秒为单位显示离散度和根离散度,这是人们习惯看到的,而 ntpclient 则以秒为单位显示。微秒无论如何,1217163 这个值仍然相当高。一个好的 NTP 服务器可以在几毫秒内知道时间;一个坏的 NTP 服务器可以在几十或几百毫秒内知道时间。你的服务器告诉你,它的时间只能在 +/- 1.2 秒内被信任。

-x 0实际上,您可以通过传递或-t选项(取决于 ntpclient 的版本)让ntpclient 同步到此服务器,这将禁用 NTP 健全性检查。如果您只需要大致准确的时间(精确到几秒钟),这可能就足够了。但是,ntpclient 拒绝同步到如此糟糕的服务器是相当合理的。您ntpq在 ubuntu 机器上的输出显示其所有服务器的抖动都为数百毫秒,即使它们的延迟很低,这表明网络非常不可靠,或者存在全部服务器提供不稳定的时间,或者服务器本身存在基本计时问题。

令我担心的是,服务器 10.31.10.22 正在通告 refid LOCL(无纪律的本地时钟),但其层级为 1。通常,本地时钟被伪造为层级 10,因此它仅用作最后的同步源,以防止群体分散。要么是 10.31.10.22 配置错误,为网络的其余部分提供了错误的时间,要么是它被 NTP 控制之外的某个程序调整为正确时间,在这种情况下,错误配置只是它在通告 refid LOCL;它应该被覆盖为例如GPS或任何提供其时间的东西。

答案2

“什么是色散?”的部分答案:

典型的 NTP 往返:

client |        | server
    t1 |------->| t2
    t3 |<-------| t4

这会产生两个值,偏移量(客户端和服务器之间的时间差)和延迟(本质上是网络传输时间),其公式如下:

offset= ((t4 - t3) + (t1 - t2)) / 2
delay = (t4 - t1) - (t3 - t2)

客户端从收到的最后 8 个数据包中选择当前偏移量,并选择延迟最小的数据包。

同样的 8 个数据包用于计算分散通过对这 8 个偏移量与上一步中选择的偏移量的差值进行加权平均,其中延迟用作加权因子,延迟越小,权重越大。它是对值“分布”的度量,用于计算时间服务器的质量,特别是当您有多个可供选择时。

答案3

您的分散和偏差非常大,本地时钟与该对​​等点之间的偏移非常大。您应该将偏移与本地时钟进行比较date,然后手动设置时钟。

运行 ntpd 并ntpq -p使用所有对等点从主机显示。它将选择更好的。

答案4

根据这个思科文档,”分散以秒为单位报告,是本地时钟和服务器时钟之间观察到的最大时钟时间差”。对于未完全损坏的 ntp 服务器,不应出现高偏差。唯一可行的情况是当您的客户端启动 ntp 并且到目前为止只有本地时钟可用时。即使在这种情况下,您报告的偏差也相当于时钟偏差超过两周

这应该足以确保本地时钟在开始时不会相差太远(即使几个小时也是可以接受的),可以通过在 BIOS 中调整时钟(甚至日期!)或在客户端ntpdate启动之前发出一次。ntpd

相关内容