Network programming 在网络上以最大精度同步时钟

Network programming 在网络上以最大精度同步时钟,network-programming,conceptual,Network Programming,Conceptual,假设我们有一个带有滴答作响的时钟的服务器(只是一个整数变量,它保存了从epoch开始的毫秒数,并且每次系统时间改变时都会被更新) 每个客户端都应该能够将自己的时钟(不是系统时钟!只是一个抽象计时器,一个随时间增加的整数值)与服务器的时钟同步 例如,客户端可以发送一个“同步”请求,服务器将用其当前时钟值进行响应 问题是我们无法确切知道发送和接收数据需要多少时间。我们知道从发送请求到接收数据所经过的时间,我们可以将此差值除以2,并将其添加到从服务器接收到的值中,但这不是非常准确 在服务器和客户端之间

假设我们有一个带有滴答作响的时钟的服务器(只是一个整数变量,它保存了从epoch开始的毫秒数,并且每次系统时间改变时都会被更新)

每个客户端都应该能够将自己的时钟(不是系统时钟!只是一个抽象计时器,一个随时间增加的整数值)与服务器的时钟同步

例如,客户端可以发送一个“同步”请求,服务器将用其当前时钟值进行响应

问题是我们无法确切知道发送和接收数据需要多少时间。我们知道从发送请求到接收数据所经过的时间,我们可以将此差值除以2,并将其添加到从服务器接收到的值中,但这不是非常准确


在服务器和客户端之间同步时钟是否有一个共同的概念,在执行之后,双方的值差异最小?

我建议使用NTP(网络时间协议),因为这只是在整个网络中同步时钟的方法


几乎所有的操作系统(我管理Linux、Solaris、BSD和Windows)都有NTP客户端和服务器。该协议具有处理网络延迟的内置功能

你不使用ntp有什么原因吗?ntp有什么问题吗?ntp没有什么问题。问题是关于概念的,该算法用于在两台机器之间同步时间并考虑延迟。在本例中,我不是在谈论系统时钟,只是程序中的一个抽象计时器,应该在网络上的两个实例之间同步。我需要理解这些协议背后的概念。我不需要同步系统时钟。NTP只是application.NTP中的一个抽象计时器,它解决了这类问题,并使用了许多非常好的想法。您始终可以在NTP的RFC中获得详细说明: