![]() |
1
83
(这不是Marzullo的算法。这只是高层服务器使用的,通过使用多个资源来获得真正准确的时间。这就是普通客户机只使用一台服务器获得时间的方式) 首先,NTP时间戳从1900年1月1日起存储为秒。32位表示秒数,32位表示秒分数。 同步很棘手。客户机在发送请求时存储时间戳(比如a)(所有这些值都以秒为单位)。服务器发送一个包含“真”时间的回复,当它接收到数据包时(称为X),以及“真”时间,它将发送数据包(Y)。客户机将接收该数据包并记录其接收时间(b)。 NTP假定在网络上花费的时间与发送和接收相同。在健全的网络上有足够的时间间隔,这应该是平均的。我们知道从发送请求到接收响应的总传输时间是B-A秒。我们想删除服务器处理请求所花费的时间(y-x),只留下网络遍历时间,所以这是b-a-(y-x)。因为我们假设网络遍历时间是对称的,所以从服务器到客户机的响应所用的时间量是[b-a-(y-x)]/2。所以我们知道服务器在Y时发送了它的响应,我们花了[B-A-(Y-X)]/2秒的时间才得到响应。 所以我们收到响应的真实时间是y+[b-a-(y-x)]/2秒。这就是NTP的工作原理。 示例(为了使数学更简单,只需整秒钟):
在适当的实现中,客户机始终作为守护进程运行。在长时间内,有许多样本,NTP实际上可以确定计算机的时钟是慢还是快,并自动相应地调整它,允许它保持合理的良好时间,即使它后来从网络断开。通过平均服务器的响应,以及应用更复杂的思想,您可以获得难以置信的准确时间。 当然,正确的实现比这要多得多,但这就是它的要点。 |
![]() |
2
6
|
![]() |
3
0
如果使用时间戳来决定排序,则可能不需要特定的时间。你可以使用 lamport clocks 相反,与网络同步相比,这不是一件痛苦的事情。它可以告诉你什么是“第一”,但不是确切的时间差异。它不在乎计算机的时钟到底是怎么说的。 |
![]() |
4
-1
诀窍是有些数据包速度很快,而这些快速的数据包给您时间上的严格限制。 |
![]() |
NameOfTheRose · ntpd在同步之前分配时间 7 年前 |
|
zeluqa · 实现主NTP服务器(GPS接收器) 8 年前 |
![]() |
Webster · 如何使用我们自己的证书使用自动密钥配置NTP 9 年前 |
![]() |
Ignacio Verona · Ansible ntp服务器+多个客户端部署 10 年前 |
![]() |
Daksh Shah · 从org.apache进口 11 年前 |