实施主NTP服务器(GPS接收器)

时间:2017-07-04 04:14:46

标签: c server ntp

我正在尝试实施基于NMEA GPS接收器的NTP服务器。我不知道用什么来填充根延迟字段。

我已经阅读了NTPv4 specification并且写了根延迟是参考时钟的总往返延迟。

如果我正在使用辅助服务器,则可以根据与参考服务器发出数据包请求时的时间戳之间的时间差来计算根延迟(我是否正确?)。

但是,如果我使用GPS接收器作为参考时钟,我不确定要填写什么,我应该用0填充吗?

1 个答案:

答案 0 :(得分:1)

这在很大程度上取决于您如何通过GPS在服务器中设置时间。如果您正在阅读NMEA句子,解释它并设置时钟,则根延迟将是执行此操作所需的时间。但它不是一个非常好的时钟;在读取RS232时会有很多非确定性延迟(抖动)(假设你是如何连接到GPS的)。

您可以使用GPS接收器的每秒1脉冲输出来解决这个问题。它通常位于数据载波检测引脚上。使用正确的RS232端口(不是USB端口)可以让服务器的时钟与之同步(DCD可用于产生中断),因此现在可以很好地与GPS时间对齐。这当然可以在Solaris(内核的本机部分)和Linux中完成(http://support.ntp.org/bin/view/Support/ConfiguringNMEARefclocks)。如果您正在执行此操作,那么我认为根延迟会很小,但是操作系统和硬件对中断的响应时间也是如此。

修改

根据this NTP docs page

  

Root Delay

     

这是主参考源的总往返延迟   同步子网的根,以秒为单位。请注意这一点   变量可以取正值和负值,具体取决于   时钟精度和偏差。

因此,1PPS的价格会相当低。据我所知,它是一个辅助NTP服务器用来告诉其客户端对参考时钟的延迟是什么的字段。因此,如果你有一个1PPS锁定的GPS时间源,你就是一个参考时钟。在这种情况下,也许零是正确的;我不认为NTP可以比计算机的IRQ响应时间更好地实现跨网络时间同步精度(最好1毫秒)(&lt; 50us希望有一个好的CONFIG_PREEMPT_RT linux内核,没有其他任何事情发生)。< / p>