1. 程式人生 > >ntp網路時間同步筆記

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.