如何使用多个服务器进行完整的NTP呼叫?

时间:2015-11-18 16:24:39

标签: python ntp

我需要独立检查当前时间(顺便提一下,用系统提供的时间进行交叉检查),我想使用NTP协议。

有一个NTP模块(ntplib),可以查询一个 NTP服务器:

>>> import ntplib
>>> import time
>>> time.ctime(ntplib.NTPClient().request('europe.pool.ntp.org', version=3).tx_time)
'Wed Nov 18 17:17:16 2015'

我想使用NTP功能将来自多个NTP服务器的响应组合起来以获得optimum response

  

[NTP协议]使用Marzullo算法的修改版本   选择准确的时间服务器,旨在减轻影响   可变网络延迟。

在Python(理想情况下是3.x)中利用它的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

  

在Python(理想情况下是3.x)中利用它的正确方法是什么?

基本上,您必须在Python中实现Marzullo的算法。

一旦你查询了两台服务器,你将如何确定哪个时钟更接近原子钟呢?

确定“最佳响应”(a.k.a。最准确的时间源)是棘手的事情。

你要找的是NTP implementation,除非你想在python中自己动手。

维基页面上讨论的NTP协议正在讨论NTP Reference Implementation。这包括在所有服务器上运行的ntp守护程序。 ntp守护程序跟踪远程引用服务器,哪些是活动的,并且是最准确的。然后,Ntp守护进程将您的时钟转换或步进以匹配远程时钟。

也许最简单的方法可以实现您想要的目标,就是在客户端模式下运行服务器上的ntp守护程序(即使用参考实现)。在您的ntp.conf中,列出您尝试用来查找“最佳响应”的所有时间服务器。当你运行ntpd时,守护进程将为你确定最低层,最准确和可用的参考服务器。

您需要做的就是ntpq -p,时间最准确的远程服务器将是旁边带星号的服务器。

以下是一些示例输出:

    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        .LOCL.          10 l  96h   64    0    0.000    0.000   0.000
*ns2.example.com 10.193.2.20      2 u  936 1024  377   31.234    3.353   3.096