ntp靠谱吗?

NTP是网络时间协议,用于校准时间的一种算法,具体历史可以参考维基百科

看网上的各种公式证明,好像都是逆向思维,完全看不懂。好在我老婆是数学系的,利用初中数学设未知数的方法,几分钟便解开了谜题。

证明NTP

背景:

有A和B两台电脑,它们的时间不一样,A想调整成B的时间,它们之间有网络可以通讯。

NTP的校准流程是这样的:

  • A将当前时间T1(A看自己的钟表),通过网络发送给B。
  • B收到请求时的时间是T2(B看自己的钟表)。
  • B发回给A之前的时间是T3(B看自己的钟表),并将T2,T3都发回给A。
  • A收到B的回应的时间是T4(A看自己的钟表)。

最终A会得到4个时间戳,T1、T2、T3、T4。

校准时间的思路是计算出A和B之间的时差,因为A和B的表一起往前走,所以只需要将A的时间加上时差就和B时间一致了。那么,怎么计算时差呢?

假设A和B的时差是未知数x,A和B之间的单次网络传输耗时为t,B从收到请求到返回请求之间的处理时间是d(B接收很多校准请求,负载略高),那么:

  1. T2 = T1 + x + t(补齐时差+传输期间的时间)
  2. T3 = T1 + x + t + d(补齐时差+A->B传输期间+处理响应请求期间)
  3. T4 = T1 + t + t + d(补齐2次传输途中+B响应请求期间的时间)

用公式a+b,可以得到公式d:

T2 + T3 = 2T1 + 2x + 2t + d

用公式d-c可以得到:

T2 + T3  – T4 = T1 + 2x

经过整理可以得到:

x = ( (T2 – T1) + (T3 – T4) ) / 2

也就是得到了时差x的值,接着把x带入到a中,可以求出2t(往返总延迟):

2t = (T4 – T1) + (T2 – T3)

问题

网络延迟不是对称的,就会导致x计算不停的在变,需要多次执行剔除异常值,再进行估算选值。

 

由调用链trace想到的ntp协议,所以好奇了解一下。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~