7

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

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

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

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

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

4

1 回答 1

5

详尽地回答问题:

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

需要 90 页的文档:网络时间协议第 4 版,参考和实施指南。我将尝试在这里总结一个答案。

简而言之,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)仅使用一个服务器时钟,但没有官方参考实现。

于 2015-04-19T08:23:14.787 回答