如 NTP rfc 中所定义
“NTP 算法的目标是最小化 UTC 和系统时钟之间的时间差和频率差。”
我可以理解“时差”,但NTP 尝试同步的“频差”是什么?
频率差异是您的时钟和 NTP 时钟(实际上被认为是完美的)之间的速度差异。
如果您的时钟每小时增加一分钟(与 NTP 服务器时钟相比),那就是频率差异。它也被称为漂移。
一个极端的简化示例:
假设您在每小时(00:00
, 01:00
, ...)的顶部与 NTP 同步,但是您的时钟非常糟糕,并且在那一小时内失去了十分钟。
如果您在午夜与 NTP 同步,以便您的两个时钟都设置为00:00
那时,那么当(真实的)01:00
到来时,您的时钟将读取00:50
(您已经失去了十分钟)。
这意味着您将在 0 到 10 分钟之间失步。
那么你将如何以简单的方式解决这个问题?
如果同步将您的时钟设置00:05
为(真正的)午夜会怎样。你会在五分钟后离开,但 NTP 时钟会逐渐爬上你,00:30
在它开始领先你之前完美匹配。
然后在 (real) 01:00
,您将处于00:55
这样的状态,因此错误不会超过五分钟。
现在 NTP 将尝试避免立即将您的时间从 更改为 之类的事情00:55
,01:05
因为很多软件(如cron
)不会对它太友好。
更有可能在午夜将时钟同步在一起,然后在一个小时内逐渐将本地时间向前移动以保持它们对齐(比如每五分钟增加一秒,这将有效地恢复非直觉中在一小时内失去的十分钟 -痛苦的方式)。
频率差是时间差随...时间变化的程度。
也就是说,NTP 不仅试图将两个时钟拉得更近,而且实际上将它们保持在一起。
它实际上利用了模糊的上下文知识,即计算机时钟是使用以一定速率振荡的石英晶体实现的——“时钟频率”。这是时钟“滴答”发生的频率。