时间是什么 Link to heading

时间从哪里来 Link to heading

时间如何被更新 Link to heading

如何在不同的机器中协调一致 Link to heading

NTP 协议

NTP协议的原理:

要说明NTP的流程,我们需要增加一个假设,就是机器 A 与机器 B 的时间差是稳定的。我们假设 为了便于理解,你可以认为我们在同步地球和月球时间的两台服务器时间。

    graph TB
        T1--请求-->fT2
        fT3--回复-->T4
        subgraph 机器A
        T1(T1)
        T4(T4)
        end
        subgraph 机器B
        fT2("f(T2)") -- 内部处理 --> fT3("f(T3)") 
        end

在同一的机器中,时间戳是可比的,不同机器间,比如机器 B 的时间戳和机器 A 的时间戳不是可比较的。同一机器上时间戳的差,也就是所用的实际时间,是可以被其他机器认可的(也就是说其他参与者认可其时间测量准确,但不认可其时间戳本身是准确的)。

在机器 A 的视角中看来,从发出请求到接收到 B 的回复,用时 T4 - T1。这两个时间戳都来自于机器 A,自然也是可以相间减的。

那么,机器 A 所观测的时间差肯定是包括了网络数据的一来、一回、以及在机器 B 中内部的处理所用时间。T3 -T2,那么我们可以将其减去,那么也就是说在机器A看来,数据包单纯在太空网络中的总滞留时间是 T4-T1-(T3-T2)

那么,我们假设网络的来回的时间是稳定的。那么事实上机器 A 是可以预判机器 B 将在什么时候接收到请求包的 。也就是说,对于机器 B 接收到包的事件,机器 A 是可以通过预判得到时间的。那么我们可以同时在机器 A 和机器 B 中记录对于同一事件发生时间的不同时间戳。显而易见,这个时间戳的差值,就是我们得到(修正)的时间偏移。

也就是说,机器 A 发起请求后,经过(T4-T1-(T3-T2) )/2 的时间,可以认为与机器 B 记录的 T2 是同一时刻。

T1 +(T4-T1-(T3-T2)) /2)=== T2;

这里我用三个等于号代表他们是在不同的时间坐标系的值,但是他们是同一时刻。所以他们的差值。就是要求得的 timediff 了。

timediff + T2 = T1 +(T4-T1-(T3-T2)) /2

不过 NTP 的标准公式是更进一步的: T3, T4 和 T1, T2 是一样的道理。

T3 + timediff = T4 -(T4-T1-(T3-T2)) /2
T2 + timediff = T1 +(T4-T1-(T3-T2)) /2
>> 2 * timediff = T1 - T2 + T4 - T3
>> timediff =  (T1 - T2 - T3 + T4) / 2