Ⅰ 計算機的時鍾(一):NTP 協議
本系列文章主要介紹計算機系統中時鍾的處理。主要內容包含NTP,Lamport邏輯時鍾,向量時鍾,TrueTime等。本文是第一篇,介紹NTP協議。
不知道你注意過沒有,假如隔了好幾天打開你的電腦,任務欄的時間依然是顯示正確的,即使你的電腦沒有聯網,這是如何做到的?
計算機的主板上有一個石英晶體振盪器和一個紐扣電池。石英晶體振盪器的頻率是32768Hz每秒。在通電的時候,石英晶體每振動32768次,電路就會傳出信息,表示1秒鍾到了,通過這種方式來記錄時間。但是石英晶體會有誤差,正常情況下,每天的計時誤差在正負1秒鍾。而且在極端溫度下,比如零下二十度,誤差會變大。
正是因為石英晶體誤差比較大,所握枝以1985年特拉華大學的David L. Mills設計了網路時間協議NTP(Network Time Protocol)來同步不同計算機系統之間的時鍾。
NTP協議的目標是將所有計算機的時間同步到幾毫秒誤差內。實際上廣域網可以達到幾十毫秒的誤差,區域網誤差可以在1毫米內。NTP協議是一種主從式架構協議,使用分層的時鍾源系統,每一層稱為Stratum,階層的上限是15,階層16表示未同步設備。常見的階層如下:
參考(基準)時鍾,主要由高精度計時設備,比如銫或銣原子鍾、GPS時鍾、無線電時鍾。它們生成非常精確的脈沖信號,觸發計算機上的中斷和時間戳。
主時間伺服器,這些伺服器與階層0設備相連,在幾微秒誤差內同步系統時鍾。階層1伺服器之間可以互相連接,進行完整性檢查和備份。
這些計算機通過網路和階層1伺服器同步。每個計算機可以查詢多個階層1伺服器,階層2計算機之間也可以互相連接。
這些計算機與階層2的伺服器同步。
NTP協議的時鍾同步過程如下:
從上面的流程中可以很容易地計算出:
AB之間的網路往返時間RTT(Round Trip Time):δ = (T4 - T1) - (T3 - T2)
AB之間的時間偏移:θ = ( (T2 - T1) + (T3 - T4) ) / 2
推導過程:A從發送請求消息到收到響應的時間間隔是 T4 - T1,其中 T3 - T2 是B的處理時間,所以網路往返時間
δ = (T4 - T1) - (T3 - T2)。
假設A和B的時間偏差為θ,那麼 T3 - θ = T3`。
T4和T3` 的間隔是半個RTT:T4 - T3` = δ / 2
把T3`和δ代入上攜皮腔面這個等式,得到:θ = ( (T2 - T1) + (T3 - T4) ) / 2。
NTP協議使用UDP協議來傳輸,埠為123,報文格式如下:
各個欄位的含義如下:
NTP協議在廣域網可以達到幾十毫秒的誤差,區域網誤差可以在1毫米內。誤差最大的一個原因是發送請求和接收響應這兩個階段的網路時間可能是不一樣的。前面我們推導時間偏移公式的時候,假設網路往返發送和接收階段的時間是一樣的,但是實際網路中,這兩個階段走的路由可能是不一樣的,所花的時間也可能不一樣,計算的時間偏移也不準確,這樣就造成了廣域網的誤差可能達到幾十毫秒甚至更高。區域網中因為網路比較穩定,經過的路由器也比較少,所以誤辯衫差可以到1毫米內。
rfc5905
網路時間協議
NTP 協議簡單分析