網絡時間的那些事及 ntpq 詳解

jopen 9年前發布 | 13K 次閱讀 ntpq

Gentoo(也許其他發行版也是?)中 "ntpq -p" 的 man page 只有簡短的描述:“打印出該服務器已知的節點列表和它們的狀態概要信息。

我還沒見到關于這個命令的說明文檔,因此這里對此作一個總結,可以補充進 "man ntpq" man page 中。更多的細節見這里 “ntpq – 標準 NTP 請求程序”(原作者),和 其他關于 man ntpq 的例子.

NTP 是一個設計用于通過 udp 網絡 (WAN 或者 LAN) 來同步計算機時鐘的協議。引用 Wikipedia – NTP

網絡時間協議(英語:Network Time Protocol,NTP)一種協議和軟件實現,用于通過使用有網絡延遲的報文交換網絡同步計算機系統間的時鐘。最初由美國特拉華大學的 David L. Mills 設計,現在仍然由他和志愿者小組維護,它于 1985 年之前開始使用,是因特網中最老的協議之一。

想了解更多有關時間和 NTP 協議的知識,可以參考 “The NTP FAQ, Time, what Time?”和 RFCs for NTP。早期的“Network Time Protocol (Version 3) RFC” (txt, or pdf, Appendix E, The NTP Timescale and its Chronometry, p70) 包含了對過去 5000 年我們的計時系統的變化和關系的有趣解釋。維基百科的文章 TimeCalendar 提供了更宏觀的視角。

網絡時間的那些事及 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 (26 )秒 至 1024 (210 )秒
  • reach – 一個8位的左移移位寄存器值,用來測試能否和服務器連接,每成功連接一次它的值就會增加,以 8 進制顯示
  • delay – 從本地到遠程節點或服務器通信的往返時間(毫秒)
  • offset – 主機與遠程節點或服務器時間源的時間偏移量,offset 越接近于0,主機和 NTP 服務器的時間越接近(以方均根表示,單位為毫秒)
  • jitter – 與遠程節點同步的時間源的平均偏差(多個時間樣本中的 offset 的偏差,單位是毫秒),這個數值的絕對值越小,主機的時間就越精確

字段的統計代碼

表中第一個字符(統計代碼)是狀態標識(參見 Peer Status Word),包含 " ","x","-","#","+","*","o":

  • " " – 無狀態,表示:
    • 沒有遠程通信的主機
    • "LOCAL" 即本機
    • (未被使用的)高層級服務器
    • 遠程主機使用的這臺機器作為同步服務器
  • x” – 已不再使用
  • -” – 已不再使用
  • #” – 良好的遠程節點或服務器但是未被使用 (不在按同步距離排序的前六個節點中,作為備用節點使用)
  • +” – 良好的且優先使用的遠程節點或服務器(包含在組合算法中)
  • “*” – 當前作為優先主同步對象的遠程節點或服務器
  • o” – PPS 節點 (當優先節點是有效時)。實際的系統同步是源于秒脈沖信號(pulse-per-second,PPS),可能通過PPS 時鐘驅動或者通過內核接口。

參考 Clock Select Algorithm.

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 的冪數。因此精度為 2precision (秒)
  • 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

附錄

另見

其他

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 但可能應為時間偏差太大而無法同步。因此使用這個需要對網絡進行設置。

更老的時間同步協議


via: http://nlug.ml1.co.uk/2012/01/ntpq-p-output/831

作者:Martin L 譯者:Liao 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!