Linux中國

網路時間的那些事及 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 時鐘驅動或者通過內核介面。

參考 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 的冪數。因此精度為 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

附錄

另見

其他

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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國