在机器之间将时间同步到毫秒精度和精度的最佳方法是什么?

时间:2020-03-06 14:23:56  来源:igfitidea点击:

据我了解,PC上的晶体因时钟偏斜而臭名昭著。如果时钟总是歪斜,那么在毫秒精度和精确度的机器之间同步时钟的最佳方法是什么?根据我的发现,NTP和PTP是可能的解决方案,但是我想知道是否有人在stackoverflow.com上有任何经验!

我了解NTP是最受欢迎的选择,但我想知道是否有人对PTP(IEEE1588)有任何经验

解决方案

NTP绝对是必经之路。只要我们让它离开本地主机上的防火墙(通常是防火墙或者路由器计算机),基本上就是一劳永逸。

正如我们已经建议的那样,NTP是解决此问题的行业标准解决方案,但它或者需要Internet连接,或者需要第0层数据源(精确的硬件时钟,例如带有计算机接口的GPS接收器)。

如果使用Internet连接,请考虑使用NTP池。

只需运行标准的NTP守护程序。

它确实具有从多个GPS设备获取输入以及与网络服务器对话的选项。

编辑:我指的是http://www.ntp.org/,而不是Windows附带的那个。

对于哪种NTP客户端最适合Windows,我没有任何建议,但是对于Unix计算机,没有真正的理由不运行NTP。

我在公司的整个网络中都使用NTP,它工作得很好。关键是在本地网络上有一台权威服务器,并使网络上的每台计算机都与其同步。最好是在该服务器上安装一个无线电时钟。 NTP之所以出色,是因为它不仅会不时地校正时钟,而且实际上会计算并校正时钟频率,从而使其更加准确。

一旦我在网络上设置了NTP,就可以像打开五个VNC会话一样打开另一台服务器,坐在那里观看时钟。所有服务器上的时钟都以毫秒为单位同步,这是在设置后立即进行的。它运行时变得更加准确。

基于NTP或者SNTP的解决方案可以很好地工作,但是在很大程度上取决于客户端的实现方式。

当然,如果我们想获得亚秒精度,则此问题的答案是不使用默认的Windows时间服务。众所周知,它无法在机器上保持稳定的时基,并且通常会超出校正范围,甚至不稳定,尤其是在机器的开始时基非常不准确的情况下。假设Window的工具内置的标准可以在所有机器之间可靠地保持准确度,通常只有几秒钟,而且即使我们调整注册表设置,我通常也可以看到机器之间的摆动时间多达30秒。

免费软件工具Achron是一个不错的解决方案,可以降低到正负500毫秒的范围。要做到更好,将需要更多的工业强度解决方案,例如Greyware的解决方案

我们无法通过交换数据将计算机同步到毫秒级,因为任何数据交换本身已经花费了至少毫秒的时间,因此会破坏结果!即使协议尝试先测量一次数据传输需要多长时间然后发送时间信息(考虑到所测量的延迟)也比平均水平稍好一点,但它们仍然不好,因为并非每次数据传输都花费相同的时间只需不断地对Internet上的服务器执行ping操作,然后查看每次ping操作都有不同的延迟)。

真正同步毫秒级范围内的两台计算机的唯一方法是让它们都通过无未知或者不断变化的延迟的传输方法从同一源获取时间。例如。如果两个都接收到卫星信号,则广播时间。信号将始终具有恒定的延迟(从卫星到地球),并且它们几乎都在同一纳秒内接收到该信号。

例如,德国有无线电时间。在该国的某个地方是原子钟(其正确的时间可以达到纳秒级的数百年),并且一些发送方在全国范围内以给定的频率永久广播当前时间。存在可以接收该时间并与之永久同步的闹钟,甚至手表,(不是真正永久性的,大多数型号每24小时才这样做一次,以节省电池运行时间)。这样的接收器设备也存在于计算机中,并带有可以使计算机时钟与该时间信号永久同步的软件。

据我所知,GPS还发送时间信息(或者可以通过GPS信息以某种方式计算时间,我对GPS协议不太熟悉)。因此,将GPS接收器连接到两台计算机都可以使它们同步到毫秒。但是,如果同步是通过Internet完成的,那么不要比一台最多关闭20毫秒的计算机有更好的同步。

要更新评论者,
NTP不如人们喜欢在这里声称的那么准确:

NTP can usually maintain time to within tens of milliseconds over the
  public Internet, and can achieve better than one millisecond accuracy
  in local area networks under ideal conditions.

资料来源:维基百科

我宁愿保持它们之间的同步而不涉及任何网络,并且还要保持它们与官方GMT时间保持同步,在这里GPS可能是在所有机器上获得真正准确结果的唯一方法(而且不仅限于毫秒,实际上到微秒)。

同样要记住,如果我们正在谈论服务器计算机,则仅在计算机启动时才读取硬件系统时钟(即不准确的时钟),因此不会浪费时间。