【问题标题】:How does NTP Clock Discipline work?NTP 时钟纪律如何工作?
【发布时间】:2013-10-21 13:49:42
【问题描述】:

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

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

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

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

如果有人也能解释其背后的逻辑,那就太好了。

【问题讨论】:

  • 我在发布问题之前尝试阅读两者,但我无法理解这些参考文献中描述的 FLL/PLL 的机制。我认为 rfc 比论文和演示文稿更容易​​消化。主要是因为它使用“读者会知道它为什么存在”的数学。还有其他建议吗?谢谢。
  • 你试过米尔斯教授的书吗?
  • @dfc 抱歉回复晚了;能否请您提一下书名?

标签: logic rfc ntp


【解决方案1】:

详尽回答问题:

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

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

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

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

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

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

反馈控制系统

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

图 1:时钟规则反馈循环

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

theta_c 表示模拟为可变频率振荡器 (VFO) 的系统时钟的控制相位。

V_d是相位差theta_r - theta_c

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

V_c是环路滤波器产生的信号,它结合了PLL和FLL,如第二张图所示。

图 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 协议(​​Simple NTP)仅使用一个服务器时钟,但没有官方参考实现。

【讨论】:

  • 我的主要问题是它如何计算相对于服务器的 phase_offset 和 frequency_offset。 (阶段部分是你写的 V_d = (theata_r - theata_c)。但是频率偏移量是如何计算的?我有一个想法;但不确定它是对还是错。无论如何,这个答案将帮助任何试图理解 NTP 的人,所以gj :)
  • @OrtomalaLokni 我知道在文档中它说 SNTP 只能同步到一台服务器,但是当我在 arch 上配置 ntp (本周按照安装指南安装)时,它让我相信我正在安装 SNTP ;但它允许我配置多个服务器。也许这是因为,正如您所说,没有官方参考实现,而 linux 实现选择允许多个来源?或者,如果出现某种故障,他们可能只是转到列表中的下一个来源?
  • @Assimilater 我认为你应该为此发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2015-05-20
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多