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

GMT (Greenwich Mean Time)格林威治時間
UTC (Coordinated Universal Time) 協調世界時
IAT (International Atomic Time),TAI 國際原子時
CST (Chinese Standard Time), 北京時間

 

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

我還沒見到關於這個命令的說明文檔,所以這裏對此做一個總結,能夠補充進 "man ntpq" man page 中。更多的細節見這裏 「ntpq – 標準 NTP 請求程序」(原做者),和 其餘關於 man ntpq 的例子.node

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

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

想了解更多有關時間和 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 提供了更宏觀的視角。github

命令 "ntpq -q" 輸出下面這樣的一個表:redis

 
  1. remote refid st t when poll reach delay offset jitter
  2. ==============================================================================
  3. LOCAL(0) .LOCL. 10 l 96h 64 0 0.000 0.000 0.000
  4. *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)大

 

操做要點

一個時間服務器只會報告時間信息而不會從客戶端更新時間(單向更新),而一個節點能夠更新其餘同級節點的時間,結合出一個彼此贊成的時間(雙向更新)。ide

初次啓動時:

除非使用 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中國 榮譽推出

編譯自:http://nlug.ml1.co.uk/2012/01/ntpq-p-output/831 做者: Martin L
原創:LCTT https://linux.cn/article-4664-1.html 譯者: liaosishere

本文由 LCTT 原創翻譯,Linux中國首發。也想加入譯者行列,爲開源作一些本身的貢獻麼?歡迎加入 LCTT
翻譯工做和譯文發表僅用於學習和交流目的,翻譯工做遵守 CC-BY-NC-SA 協議規定,若是咱們的工做有侵犯到您的權益,請及時聯繫咱們。
歡迎遵守 CC-BY-NC-SA 協議規定轉載,敬請在正文中標註並保留原文/譯文連接和做者/譯者等信息。

相關文章
相關標籤/搜索