Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logic NTP时钟规程是如何工作的?_Logic_Rfc_Ntp - Fatal编程技术网

Logic NTP时钟规程是如何工作的?

Logic NTP时钟规程是如何工作的?,logic,rfc,ntp,Logic,Rfc,Ntp,我阅读rfc是为了更好地理解ntp使用的机制。到目前为止,基本想法似乎很简单。但我有点不明白怎么做 在NTPv4中,它表示混合PLL/FLL用于调节时钟。根据我的理解-PLL锁定到服务器阶段,并以更新间隔调整客户端时钟。FLL锁定时钟频率,并以更新间隔调整客户端时钟 它还说,如果有更多的网络抖动(延迟峰值),PLL工作得更好 如果时钟漂移是问题(不同的时钟频率/漂移),则FLL工作得更好 我可以理解如何使用反馈控制来调整它们,也可以从NTP rfc中包含的图表了解它们是如何工作的。但有人能解释N

我阅读rfc是为了更好地理解ntp使用的机制。到目前为止,基本想法似乎很简单。但我有点不明白怎么做

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

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

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


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

详尽地回答这个问题:

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

需要90页的文档:。我将尝试在这里总结一个答案

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

PLL和FLL都可以使用,但文件上说

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

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

反馈控制系统

时钟规程作为反馈控制系统实现,如图1所示

图1:时钟规程反馈回路

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

θc表示建模为变频振荡器(VFO)的系统时钟的控制相位

V_d是相位差θr-θ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\u 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\u select
功能,仅在此之后调用
clock\u update
功能

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


SNTP协议(简单NTP)只使用一个服务器时钟,但没有正式的参考实现。

请阅读或David L.Mills的文章。在发布问题之前,我尝试阅读了这两篇文章,但我无法理解这些参考文献中描述的FLL/PLL机制。我认为rfc比论文和演讲更容易理解。主要是因为它使用了“读者会知道它为什么存在”的数学。还有其他建议吗?谢谢。你有没有试过米尔斯教授的书?@dfc很抱歉没有及时回复;你能提到这本书的名字吗?我的主要问题是它如何计算服务器的相位偏移和频率偏移。(相位部分是你写的V_d=(theata_r-theata_c)。但是频率偏移量是如何计算的?我有一个想法,但不确定它是对是错。不管怎样,这个答案将帮助任何试图理解NTP的人,所以gj:)@OrtomalaLokni我在文档中知道SNTP只能同步到一台服务器,但是当我在arch上配置ntp(本周按照安装指南安装)时,它让我相信我正在安装SNTP;但它允许我配置多个服务器。也许这是因为,正如您所说,没有官方的参考实现,linux实现选择允许多个源代码?或者,如果出现某种失败,他们可能会转到列表中的下一个来源?@assimilator我想你应该为此发布一个新问题。