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.