網路時間的那些事及 ntpq 詳解
命令 "ntpq -q" 輸出下面這樣的一個表:
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) .LOCL. 10 l 96h 64 0 0.000 0.000 0.000
*ns2.example.com 10.193.2.20 2 u 936 1024 377 31.234 3.353 3.096
更多細節
表頭
- remote – 用於同步的遠程節點或伺服器。「LOCAL」表示本機 (當沒有遠程伺服器可用時會出現)
- refid – 遠程的伺服器進行同步的更高一級伺服器
- st – 遠程節點或伺服器的 Stratum(級別,NTP 時間同步是分層的)
- t – 類型 (u: unicast(單播) 或 manycast(選播) 客戶端, b: broadcast(廣播) 或 multicast(多播) 客戶端, l: 本地時鐘, s: 對稱節點(用於備份), A: 選播伺服器, B: 廣播伺服器, M: 多播伺服器, 參見「Automatic Server Discovery「)
- when – 最後一次同步到現在的時間 (默認單位為秒, 「h」表示小時,「d」表示天)
- poll – 同步的頻率:rfc5905建議在 NTPv4 中這個值的範圍在 4 (16秒) 至 17 (36小時) 之間(即2的指數次秒),然而觀察發現這個值的實際大小在一個小的多的範圍內 :64 (2 6 )秒 至 1024 (2 10 )秒
- reach – 一個8位的左移移位寄存器值,用來測試能否和伺服器連接,每成功連接一次它的值就會增加,以 8 進位顯示
- delay – 從本地到遠程節點或伺服器通信的往返時間(毫秒)
- offset – 主機與遠程節點或伺服器時間源的時間偏移量,offset 越接近於0,主機和 NTP 伺服器的時間越接近(以方均根表示,單位為毫秒)
- jitter – 與遠程節點同步的時間源的平均偏差(多個時間樣本中的 offset 的偏差,單位是毫秒),這個數值的絕對值越小,主機的時間就越精確
欄位的統計代碼
表中第一個字元(統計代碼)是狀態標識(參見 Peer Status Word),包含 " ","x","-","#","+","*","o":
- " " – 無狀態,表示:
- 沒有遠程通信的主機
- "LOCAL" 即本機
- (未被使用的)高層級伺服器
- 遠程主機使用的這台機器作為同步伺服器
- 「x」 – 已不再使用
- 「-」 – 已不再使用
- 「#」 – 良好的遠程節點或伺服器但是未被使用 (不在按同步距離排序的前六個節點中,作為備用節點使用)
- 「+」 – 良好的且優先使用的遠程節點或伺服器(包含在組合演算法中)
- 「*」 – 當前作為優先主同步對象的遠程節點或伺服器
- 「o」 – PPS 節點 (當優先節點是有效時)。實際的系統同步是源於秒脈衝信號(pulse-per-second,PPS),可能通過PPS 時鐘驅動或者通過內核介面。
refid
refid 有下面這些狀態值
- 一個IP地址 – 遠程節點或伺服器的 IP 地址
- .LOCL. – 本機 (當沒有遠程節點或伺服器可用時)
- .PPS. – 時間標準中的「Pulse Per Second」(秒脈衝)
- .IRIG. – Inter-Range Instrumentation Group 時間碼
- .ACTS. – 美國 NIST 標準時間 電話調製器
- .NIST. –美國 NIST 標準時間電話調製器
- .PTB. – 德國 PTB 時間標準電話調製器
- .USNO. – 美國 USNO 標準時間 電話調製器
- .CHU. – CHU (HF, Ottawa, ON, Canada) 標準時間無線電接收器
- .DCFa. – DCF77 (LF, Mainflingen, Germany) 標準時間無線電接收器
- .HBG. – HBG (LF Prangins, Switzerland) 標準時間無線電接收器
- .JJY. – JJY (LF Fukushima, Japan) 標準時間無線電接收器
- .LORC. – LORAN-C station (MF) 標準時間無線電接收器,註: 不再可用 (被 eLORAN 廢棄)
- .MSF. – MSF (LF, Anthorn, Great Britain) 標準時間無線電接收器
- .TDF. – TDF (MF, Allouis, France)標準時間無線電接收器
- .WWV. – WWV (HF, Ft. Collins, CO, America) 標準時間無線電接收器
- .WWVB. – WWVB (LF, Ft. Collins, CO, America) 標準時間無線電接收器
- .WWVH. – WWVH (HF, Kauai, HI, America) 標準時間無線電接收器
- .GOES. – 美國靜止環境觀測衛星;
- .GPS. – 美國 GPS;
- .GAL. – 伽利略定位系統歐洲 GNSS;
- .ACST. – 選播伺服器
- .AUTH. – 認證錯誤
- .AUTO. – Autokey (NTP 的一種認證機制)順序錯誤
- .BCST. – 廣播伺服器
- .CRYPT. – Autokey 協議錯誤
- .DENY. – 伺服器拒絕訪問;
- .INIT. – 關聯初始化
- .MCST. – 多播伺服器
- .RATE. – (輪詢) 速率超出限定
- .TIME. – 關聯超時
- .STEP. – 間隔時長改變,偏移量比危險閾值小(1000ms) 比間隔時間 (125ms)大
操作要點
一個時間伺服器只會報告時間信息而不會從客戶端更新時間(單向更新),而一個節點可以更新其他同級節點的時間,結合出一個彼此同意的時間(雙向更新)。
初次啟動時:
除非使用 iburst 選項,客戶端通常需要花幾分鐘來和伺服器同步。如果客戶端在啟動時時間與 NTP 伺服器的時間差大於 1000 秒,守護進程會退出並在系統日誌中記錄,讓操作者手動設置時間差小於 1000 秒後再重新啟動。如果時間差小於 1000 秒,但是大於 128 秒,會自動矯正間隔,並自動重啟守護進程。
當第一次啟動時,時間頻率文件(通常是 ntp.drift 文件,記錄時間偏移)不存在,守護進程進入一個特殊模式來矯正頻率。當時鐘不符合規範時這會需要 900 秒。當校正完成後,守護進程創建時間頻率文件進入普通模式,並分步校正剩餘的偏差。
NTP 0 層(Stratum 0 )的設備如原子鐘(銫,銣),GPS 時鐘或者其他標準時間的無線電時鐘為 1 層(Stratum 1)的時間伺服器提供時間信號。NTP 只報告UTC 時間(統一協調時,Coordinated Universal Time)。客戶端程序使用時區從 UTC 導出本地時間。
NTP 協議是高精度的,使用的精度小於納秒(2的 -32 次方)。主機的時間精度和其他參數(受硬體和操作系統限制)使用命令 「ntpq -c rl」 查看(參見 rfc1305 通用變數和 rfc5905)。
「ntpq -c rl」輸出參數
- precision 為四捨五入值,且為 2 的冪數。因此精度為 2 precision (秒)
- rootdelay – 與同步網路中主同步伺服器的總往返延時。注意這個值可以是正數或者負數,取決於時鐘的精度。
- rootdisp – 相對於同步網路中主同步伺服器的偏差(秒)
- tc – NTP 演算法 PLL (phase locked loop,鎖相環路) 或 FLL (frequency locked loop,鎖頻迴路) 時間常量
- mintc – NTP 演算法 PLL/FLL 最小時間常亮或「最快響應
- offset – 由結合演算法得出的系統時鐘偏移量(毫秒)
- frequency – 系統時鐘頻率
- sys_jitter – 由結合演算法得出的系統時鐘平均偏差(毫秒)
- clk_jitter – 硬體時鐘平均偏差(毫秒)
- clk_wander – 硬體時鐘偏移(PPM – 百分之一)
Jitter (也叫 timing jitter) 表示短期變化大於10HZ 的頻率, wander 表示長期變化大於10HZ 的頻率 (Stability 表示系統的頻率隨時間的變化,和 aging, drift, trends 等是同義詞)
操作要點(續)
NTP 軟體維護一系列連續更新的頻率變化的校正值。對於設置正確的穩定系統,在非擁塞的網路中,現代硬體的 NTP 時鐘同步通常與 UTC 標準時間相差在毫秒內。(在千兆 LAN 網路中可以達到何種精度?)
對於 UTC 時間,閏秒 leap second 可以每兩年插入一次用於同步地球自傳的變化。注意本地時間為夏令時時時間會有一小時的變化。在重同步之前客戶端設備會使用獨立的 UTC 時間,除非客戶端使用了偏移校準。
閏秒發生時會怎樣
閏秒發生時,會對當天時間增加或減少一秒。閏秒的調整在 UTC 時間當天的最後一秒。如果增加一秒,UTC 時間會出現 23:59:60。即 23:59:59 到 0:00:00 之間實際上需要 2 秒鐘。如果減少一秒,時間會從 23:59:58 跳至 0:00:00 。另見 The Kernel Discipline.
那麼… 間隔閾值(step threshold)的真實值是多少: 125ms 還是 128ms? PLL/FLL tc 的單位是什麼 (log2 s? ms?)?在非擁塞的千兆 LAN 中時間節點間的精度能達到多少?
感謝 Camilo M 和 Chris B的評論。 歡迎校正錯誤和更多細節的探討。
謝謝 Martin
附錄
- NTP 的紀元 從 1900 開始而 UNIX 的從 1970開始.
- 時間校正 是逐漸進行的,因此時間的完全同步可能會畫上幾個小時。
- 節點狀態 可以被記錄到 summarise/plot time offsets and errors
- RMS – 均方根
- PLL – 鎖相環路
- FLL – 鎖頻迴路
- PPM – 百萬分之一,用於描述頻率的變化
- man ntpq (Gentoo 簡明版本)
- man ntpq (長期維護版本)
- man ntpq (Gentoo 長期維護版本)
另見
- ntpq – 標準 NTP 查詢程序
- The Network Time Protocol (NTP) 分布
- NTP 的簡明歷史
- 一個更多細節的簡明歷史 「Mills, D.L., A brief history of NTP time: confessions of an Internet timekeeper. Submitted for publication; please do not cite or redistribute」 (pdf)
- NTP RFC 標準文檔
- Network Time Protocol (Version 3) RFC – txt, or pdf. Appendix E, The NTP Timescale and its Chronometry, p70, 包含了對過去 5000 年我們的計時系統的變化和關係的有趣解釋。
- 維基百科: Time 和 Calendar
- John Harrison and the Longitude problem
- Clock of the Long Now – The 10,000 Year Clock
- John C Taylor – Chronophage
- Orders of magnitude of time
- Greenwich Time Signal
其他
SNTP (Simple Network Time Protocol, RFC 4330,簡單網路協議)基本上也是NTP,但是少了一些基於 RFC 1305 實現的 NTP 的一些不再需要的內部演算法。
Win32 時間 Windows Time Service 是 SNTP 的非標準實現,沒有精度的保證,並假設精度幾乎有 1-2 秒的範圍。(因為沒有系統時間變化校正)
還有一個PTP (IEEE 1588) Precision Time Protocol(精準時間協議)。見維基百科:Precision Time Protocol。軟體程序為 PTPd。蟲咬的功能是這是一個 LAN 高精度主從同步系統,精度在毫秒級,使用 International Atomic Time (TAI, monotonic,無閏秒)。數據報時間戳需要在網卡中啟用。支持 PTP 的網路會對數據報記錄時間戳以減少交換機路由器的影響。也可以在不記錄時間戳的網路中使用 PTP 但可能應為時間偏差太大而無法同步。因此使用這個需要對網路進行設置。
更老的時間同步協議
- DTSS – DEC公司的數字時間同步服務, 被 NTP 所取代。例子: DTSS VMS C code c2000。 (哪裡有關於 DTSS 的文章或文檔嗎?)
- DAYTIME protocol,使用 TCP 或 UDP 13 埠同步
- ICMP Timestamp 和 ICMP Timestamp Reply,使用 ICMP 協議同步
- Time Protocol,使用 TCP 或 UDP 37 號埠同步
via: http://nlug.ml1.co.uk/2012/01/ntpq-p-output/831
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive