NTP Clock Discipline如何运作?

时间:2013-10-14 02:41:25

标签: logic rfc ntp

我正在阅读NTPv4 rfc以更好地理解ntp使用的机制。所以,基本的想法似乎很简单。但我对NTP Clock Discipline works的方式感到有些困惑。

在NTPv4中,它表示混合PLL / FLL用于训练时钟。根据我的理解 - PLL锁定服务器阶段并在更新间隔调整客户端时钟。 FLL锁定时钟频率并以更新间隔调整客户端时钟。

它还说如果有更多的网络抖动(延迟峰值),PLL工作得更好 如果时钟漂移是问题(不同的时钟频率/漂移),FLL工作得更好

我可以理解使用反馈控制来调整它们,也可以从NTP rfc中包含的图表中了解它们的工作原理。但是,任何人都可以解释NTP如何仅从服务器收到的数据包中实现FLL / PLL混合时钟规则?

如果有人能够解释其背后的逻辑,那将是很棒的。

1 个答案:

答案 0 :(得分:4)

彻底回答问题:

  

NTP如何仅从服务器收到的数据包中实现FLL / PLL混合时钟规则?

需要文档的90页:Network Time Protocol Version 4, Reference and Implementation Guide。我将在这里总结一下答案。

简而言之,NTP客户端从一个或多个服务器接收时间戳并估计要应用的相位校正。然后逐渐应用校正以避免时钟跳跃。

可以使用PLL或FLL,但文档说

  

当网络抖动占主导地位时,PLL通常效果更好   当振荡器漂移占主导地位时,FLL效果更好。

与NTPv3相反,在NTPv4中,PLL和FLL同时使用并组合使用。

反馈控制系统

时钟规则是作为图1所示的反馈控制系统实现的。

enter image description here 图1:时钟规则反馈循环

theta_r 表示由组合算法生成的参考相位,表示相对于服务器组的系统时钟偏移的最佳估计值。

theta_c 表示系统时钟的控制阶段,建模为可变频率振荡器(VFO)。

V_d 是相位差theta_r - theta_c

V_s 是时钟滤波算法的输出,用于选择最佳偏移样本。

V_c 是环路滤波器产生的信号,它将PLL和FLL组合在一起,如第二幅图所示。

enter image description here 图2:时钟规则环路滤波器

===更新===

要了解相位偏移和频率偏移计算的细节,您必须深入了解参考实现。一个好的开始是packet()函数

/*
* packet() - process packet and compute offset, delay and
* dispersion.
*/

在广播服务器模式下,计算如下

offset = LFP2D(r->xmt - r->dst);
delay  = BDELAY;
disp   = LOG2D(r->precision) + LOG2D(s.precision) + PHI * 2 * BDELAY;

其中r是收到的数据包指针,s是系统结构。 然后调用clock_filter函数

/*
* The clock filter contents consist of eight tuples (offset,
* delay, dispersion, time). Shift each tuple to the left,
* discarding the leftmost one. As each tuple is shifted,
* increase the dispersion since the last filter update. At the
* same time, copy each tuple to a temporary list. After this,
* place the (offset, delay, disp, time) in the vacated
* rightmost tuple.
*/

clock_filter本身会调用clock_select函数,只有在此之后调用clock_update函数。

重要的是要记住,这些算法与多个时钟同步,而不是只与一个服务器时钟同步。这引入了一层复杂性和问题如何与一台服务器同步?没有直接的答案,因为算法是为了与多个时钟同步而构建的。

SNTP协议(简单NTP)仅使用一个服务器时钟,但没有官方参考实现。