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的工作原理.
示例(在几秒钟内使数学变得容易):
在正确的实现中,客户端始终作为守护程序运行.在很长一段时间内有很多样本,NTP实际上可以确定计算机的时钟是慢还是快,并相应地自动调整它,即使以后断开网络也能保持合理的时间.与平均来自服务器的响应以及应用更复杂的思维一起,您可以获得非常准确的时间.
当然,还有更多适当的实现,但这是它的要点.
归档时间: |
|
查看次数: |
19959 次 |
最近记录: |