跳轉到

NTP

Network Time Protocol 說明如何讓各方裝置可以和中央的 NTP Server 進行校時的工作。

運作原理

NTP 運作原理
NTP 運作原理

NTP 是透過計算來回的時間差來得知節點和中原標準時間的差異, 要注意的是 NTP 在校時的時候是一次動一點然後逐漸靠近到正確時間(每秒 0.5ms)。

但是會有些問題:

  • 若相差過大(系統大部分都是預設 128ms),則會暫停同步並強制重設;
  • 去回的網路延遲差異過大會大幅降低校時的精準度;
  • 閏秒問題;
  • VM 的石英震盪器是虛擬的,也就是會受到 CPU 影響,而降低準確性
  • NTP Server 的錯誤設定
  • 防火牆擋住和 NTP 的連線。

另外 NTP 是基於阜口 123 的 UDP 進行傳輸。

演進

NTP 演進
Version Year RFC Desc.
v0 1981 RFC 958 NTP 概念首次提出,定義準確度、預估可能的誤差和相對時鐘的特性
v1 1988 RFC 1059 提出實作規則、相關演算法和 client-server 與 peer-to-peer 的模式
v2 1989 RFC 1119 提供驗證和控制訊息
v3 1992 RFC 1305 校時機制、上游時鐘的選擇和過濾演算法並支援廣播時間資訊,被廣泛使用的版本
v4 2010 RFC 5905 支援 IPv6 和提供加密和驗證手段來強化安全性

參考 Info-Finder

閏秒

由於 UTC 時間透過原子鐘做計算,以此可以精準得出過了多少時間,但是和一般使用的曆法會有所衝突。

衝突就來自於一般曆法是透過觀測太陽來設計出一整年有 365.25 天。但實際地球自轉和公轉的週期是有些微變化的,也就是,透過原子鐘計算的時間會和曆法時間會有不規則的差異。

不規則性

地球自轉速度減慢的主要原因是潮汐摩擦, 僅此一項就將使一天每世紀延長 2.3ms。 其他促成因素包括地球地殼相對於其核心的運動, 地函對流的變化,以及導致巨大質量再分配的任何其他事件或過程。

這些過程改變了地球的慣性矩,由於角動量守恆而影響了自轉速率。 其中一些重分配會提高地球的自轉速度,縮短太陽日,並對抗潮汐摩擦。 例如,冰河反彈將太陽日縮短了 0.6ms / 世紀, 2004 年發生在印度洋的地震和海嘯被認為縮短了 2.68 微秒。

為了消彌這項差異,閏秒被設計出來了。

閏秒可加可減

閏秒會被加進原子鐘算出的 UTC 時間,理論上可以是增加或減少。 但歷史上(自從 1972 年以後)只增加過閏秒。

抹黑在閏秒附近的時間

「抹黑在閏秒附近的時間」是維基百科的翻譯,英文為 leap smear。這是 Google 提出的技術,主要為了避免使用傳統方式會造成的系統錯誤。

傳統方式是在 0 點前的那一秒多等待一秒,也就是那一秒會需要兩秒的時間來完成,這個機制會在許多的地方出現錯誤判定,尤其是依賴時間的系統,甚至影響應用程式的判斷。Leap smear 就是把這一秒隨機分散給當天的每一秒,讓被分配到的秒要跑久一點點,讓系統幾乎感受不到今天多了一秒。

廢除

最近(2022/08)有聽到要廢除閏秒的風聲,例如 Meta(以前稱 Facebook)工程在 It’s time to leave the leap second in the past 提到的,未來的一千年(millennium)若忽略閏秒的影響,仍然能平衡電腦時間和曆法時間的差異而忽略其帶來的影響,至少機率上來說是如此。

已經經過決議(2022/11/18)確定廢除閏秒了,並將於 2035 年後開始實施。 原因是目前地球自轉正加速中(每天的秒數將減少,儘管理論上應該受到月球引力而減慢),所以長遠來看,歷來只增加過的閏秒將會被平衡。

Referrer

  1. Time, technology and leaping seconds
  2. The One-second War