原文链接:https://blog.csdn.net/zhangkai19890929/article/details/85239220
假设我们有2个设备A和B,A的时间是10::00:00am ,B的时间是11::00::00am,现在我们要把A和B的时间统一.
首先我们以B的时间为统一的时间源,这样时间才好统一.
实际上我们要统一时间,我们需要计算的是,A和B之间的时间差(一个小时).
我们把问题转化为数学题:
- Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am( t 1 t_1 t1)
- 当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am( t 2 t_2 t2)
- 当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am( t 3 t_3 t3)
- 当Device A接收到该响应报文时,Device A的本地时间为10:00:03am( t 4 t_4 t4)
所以我们需要求:
1.这个ntp往返一次所需要花费的时间?
两种解法:
第一种解法:
t
=
(
t
2
−
t
1
)
+
(
t
3
−
t
4
)
;
t = ( t_2 -t_1 ) + (t_3 - t_4);
t=(t2−t1)+(t3−t4);
t
=
(
11
:
00
:
:
01
−
10
:
:
00
:
:
00
)
+
(
11
:
:
00
:
:
02
−
10
:
:
00
:
:
03
)
=
2
s
t = (11:00::01 - 10::00::00) + (11::00::02 - 10::00::03) = 2s
t=(11:00::01−10::00::00)+(11::00::02−10::00::03)=2s
但是这种结算对计算理解起来很不友好,因为设计到双方时间的转化,为了我们自己比较好理解.
在计算机中我们主要我们采用这种写法:
t = ( t 4 − t 1 ) − ( t 3 − t 2 ) = 2 s t = (t_4 - t_1) - (t_3 - t_2)= 2s t=(t4−t1)−(t3−t2)=2s
意思是:
t
4
−
t
1
t_4 - t_1
t4−t1是报文从发送到收到总的花费时间,
t
3
−
t
2
t_3 - t_2
t3−t2为报文在B设备里处理花费的时间.
所以 ( t 4 − t 1 ) − ( t 3 − t 2 ) (t_4 - t_1) - (t_3 - t_2) (t4−t1)−(t3−t2)就是报文往返的耗费时间. (官方上的叫法叫rtt).
2.设备A相对设备B的时间差.
这个更容易:
o
f
f
s
e
t
=
(
t
2
−
t
1
+
t
3
−
t
4
)
/
2
offset = (t_2 - t_1 + t_3 - t_4) / 2
offset=(t2−t1+t3−t4)/2
上面的计算其实不精准,还应该减去往返数据的时间差rtt
o f f s e t = ( t 2 − t 1 + t 3 − t 4 − t ( 第 一 步 计 算 得 出 ) ) / 2 offset = (t_2 - t_1 + t_3 - t_4 - t (第一步计算得出)) / 2 offset=(t2−t1+t3−t4−t(第一步计算得出))/2
offset 就是A设备和B设备的时间偏移;
webrtc中通过rtcp的SR和RR包进行NTP时间同步;