网络时间协议如何工作?

Way*_*inn 41 time synchronization ntp

维基百科条目没有给出细节和RFC是太密集.这里有人知道NTP是如何工作的吗?

我正在寻找一个概述,解释如何使用Marzullo的算法(或其修改)将服务器上的时间戳转换为客户端上的时间戳.具体而言,使用什么机制来产生准确度,该准确度平均在10ms内,当通过具有高度可变等待时间的网络进行通信时,这通常是数倍.

Dav*_*vid 92

(这不是Marzullo的算法.只有高层服务器才能使用多个来源获得真正准确的时间.这就是普通客户只需一台服务器就能获得时间的方法)

首先,NTP时间戳存储为自1900年1月1日以来的秒数.秒数为32位,秒数为32位.

同步很棘手.客户端在发送请求时存储时间戳(例如A)(所有这些值以秒为单位).服务器发送一个回复,包括收到数据包时的"真实"时间(称为X)和发送数据包的"真实"时间(Y).客户端将收到该数据包并记录收到它的时间(B).

NTP假定在网络上花费的时间与发送和接收相同.在理智的网络上有足够的间隔,它应该是平均值.我们知道从发送请求到接收响应的总传输时间是BA秒.我们想要删除服务器处理请求(YX)所花费的时间,只留下网络遍历时间,这样就是BA-(YX).由于我们假设网络遍历时间是对称的,因此从服务器到客户端的响应所花费的时间是[BA-(YX)]/2.所以我们知道服务器在时间Y发送了它的响应,并且我们[BA-(YX)]/2秒响应该响应.

所以我们收到回复的真实时间是Y + [BA-(YX)]/2秒.这就是NTP的工作原理.

示例(在几秒钟内使数学变得容易):

  • 客户端在"错误"时间100发送请求.A = 100.
  • 服务器在"真实"时间150接收请求.X = 150.
  • 服务器很慢,因此它在"真实"时间160之前不发送响应.Y = 160.
  • 客户端在"错误"时间120接收请求.B = 120.
  • 客户端确定网络上花费的时间是BA-(YX)= 120-100-(160-150)= 10秒
  • 客户端假定从服务器到客户端的响应所花费的时间是10/2 = 5秒.
  • 客户端将该时间添加到服务器发送响应的"真实"时间,以估计它在"真实"时间165秒收到响应.
  • 客户现在知道它需要在其时钟上增加45秒.

在正确的实现中,客户端始终作为守护程序运行.在很长一段时间内有很多样本,NTP实际上可以确定计算机的时钟是慢还是快,并相应地自动调整它,即使以后断开网络也能保持合理的时间.与平均来自服务器的响应以及应用更复杂的思维一起,您可以获得非常准确的时间.

当然,还有更多适当的实现,但这是它的要点.

  • 谢谢,这正是我正在寻找的那种解释.做出的假设和一些约束有点令人惊讶.例如,服务器能够轻松地提供有关'Y'的可靠保证吗?另外,我想知道网络时间是如何对称的?似乎您可以在某种程度上使用Marzullo的算法来减少由这两种不确定性引起的误差. (2认同)

non*_*ont 6

  1. NTP客户端询问其所有NTP服务器的时间.
  2. 不同的服务器将给出不同的答案,具有不同的置信度,因为请求将花费不同的时间从客户端传送到服务器并返回.
  3. Marzullo的算法将找到与所提供的所有答案一致的最小时间值范围.
  4. 您可以对此算法的答案的准确性比对任何单个时间服务器的答案的准确性更有信心,因为几个集合的交集可能包含的元素少于任何单个集合.
  5. 您查询的服务器越多,您对可能的答案的约束就越多,您的时钟就越准确.

  • 我想知道如何计算这些置信区间. (2认同)