时间是什么 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