ntp网络时间同步笔记

今天看webrtc的卡尔曼滤波算法,里面有点小知识涉及到了: ntp网络时间的同步.

特意写此篇文章记录一下:

在这里插入图片描述

如上图:
我们有2个设备A和B,A的时间是10::00:00am ,B的时间是11::00::00,现在我们要把A和B的时间统一.

首先我们以B的时间为统一的时间源,这样时间才好统一.

实际上我们要统一时间,我们需要计算的是,A和B之间的时间差(一个小时).

我们把问题转化为数学题:

1.Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)

2.当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)

3.当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)

4.当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)

所以我们需要求:

1.这个ntp往返一次所需要花费的时间?

两种解法:
第一种解法:
t = [ T(2) - (T1) ] + [T(3) - T(4)];
t = (11:00::01 - 10::00::00) + (11::00::02 - 10::00::03) = 2s

但是这种结算对计算理解起来很不友好,因为设计到双方时间的转化,但是比较我们自己比较好理解.

在计算机中我们主要我们采用这种写法:

t = [T(4) - T(1)] - [T(3) - T(2)] = 2秒

意思是:
T(4) - T(1)是报文从发送到收到总的花费时间, T(3) - T(2)为报文在B设备里处理花费的时间.

所以T(4) - T(1)] - [T(3) - T(2)]就是报文往返的耗费时间. (官方上的叫法叫rtt).

2.设备A相对设备B的时间差.
这个更容易:

offset = [T(2) - T(1) + T(3) - T(4)] / 2

上面的计算其实不精准,还应该减去往返数据的时间差rtt

offset = [T(2) - T(1) + T(3) - T(4)] - t (第一步计算得出) / 2.

猜你喜欢

转载自blog.csdn.net/zhangkai19890929/article/details/85239220