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

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

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

?

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 年我們的計時系統的變化和關系的有趣解釋。維基百科的文章 Time 和 Calendar 提供了更宏觀的視角。

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

?
  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)大

?

操作要點

一個時間服務器只會報告時間信息而不會從客戶端更新時間(單向更新),而一個節點可以更新其他同級節點的時間,結合出一個彼此同意的時間(雙向更新)。

初次啟動時:

除非使用 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

?

附錄

  • 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

作者: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 協議規定轉載,敬請在正文中標注并保留原文/譯文鏈接和作者/譯者等信息。

轉載于:https://my.oschina.net/u/3362827/blog/909323

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281918.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281918.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281918.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前端芝士樹】Javascript的原型與原型鏈

【前端芝士樹】Javascript的原型、原型鏈以及繼承機制 前端的面試中經常會遇到這個問題,自己也是一直似懂非懂,趁這個機會整理一下0. 為什么會出現原型和原型鏈的概念 1994年,網景公司(Netscape)發布了Navigator瀏覽器…

神奇的幻方2015提高組d1t1

題目描述 幻方是一種很神奇的N*N矩陣:它由數字1,2,3,……,N*N構成,且每行、每列及兩條對角線上的數字之和都相同。 當N為奇數時,我們可以通過以下方法構建一個幻方: 首先將1寫在第一行的中間。 之后,按如下方式從小到大…

goldengate mysql_使用GoldenGate實現MySQL到Oracle的數據實時同步

step 1: 配置mysql修改配置文件my.ini#for goldengatelog-bin "C:/mysql/logbin/logbin.log"binlog-format ROWlog-bin-index "C:\mysql\logindex"binlog_cache_size32mmax_binlog_cache_size512mmax_binlog_size512m添加數據庫用戶ggs,具有…

C# 反射之Activator用法舉例

概述程序運行時,通過反射可以得到其它程序集或者自己程序集代碼的各種信息,包括類、函數、變量等來實例化它們,執行它們,操作它們,實際上就是獲取程序在內存中的映像,然后基于這個映像進行各種操作。Activa…

MyBatis批量插入

轉載于:https://blog.51cto.com/12701034/1929672

狐貍文│區塊鏈發展的正路

(圖片出自網絡,版權歸原作者所有)最近看了一本書:《美國增長的起落》。這本書是大部頭,但看起來很過癮。通過對這本書的閱讀,我更新了自己對區塊鏈發展的理解。這一年,“區塊鏈”很熱&#xff0…

mysql 一主一備_Mysql一個主一備

Mysql主從復制 -- 一主一備主從復制原理:Mysql的主從復制是mysql本身自帶的一個功能,不需要額外的第三方軟件可以實現,其復制功能并不是copy文件實現的,而是借助binlog日志文件里面的SQL命令實現的主從復制,可以理解為…

解決安裝Weblogic domain卡住問題(Primeton BPS)

這兩天一直有一個問題困擾我,在suse10weblogic(920,923,100,103)上安裝bpm產品失敗。有些版本是創建domain的時候卡在create security information上,有些版本卡在安裝包start weblogic上。但是在winXPweblogic10.3bpm安裝成功。 經過幾番GOOGLE,終于找到…

cocos2d-js 熱更新具體解釋(一)

本文將會具體解說cocos2d-js下的熱更新機制。這篇內容先給大家介紹一下兩個manifest文件就當熱身了。首先介紹project.manifest: 舉個樣例 {"packageUrl" : "http://192.168.1.108/games/dragon_gold","remoteManifestUrl" : "…

Qt之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)

簡述 QBoxLayout可以在水平方向或垂直方向上排列控件,由QHBoxLayout、QVBoxLayout所繼承。 QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。 QVBoxLayout:垂直布局,在垂直方向上排列控…

Optaplanner終于支持多線程并行運行 - Multithreaded incremental solving

Optaplanner 7.9.0.Final之前,啟動引擎開始對一個Problem進行規劃的時候,只能是單線程進行的。也就是說,當引擎對每一個possible solution進行分數計算的過程中,細化到每個步驟(Caculation),都只能排隊在同一個線程中依…

python棋盤格_干貨必看 | Python的turtle庫之經典棋盤格

國際棋盤格是一個由9橫9縱的線組成的格子正方形,用Python的turtle庫進行繪制的時候,先做9橫9縱的線,再填上灰色小正方形,這就可以完成一個棋盤格了,下面是具體的操作步驟。(一)整體代碼1、import turtleimport turtle2…

一位技術老人給.NET初學者的一些建議

.NET平臺應用領域眾多,隨著這些年的不斷更新迭代,日趨臻善,也受到越來越多的開發者青睞。自從2000 年6 月22 日 微軟推出Microsoft.NET 戰略 ,至今已有22載,這些年新技術,新框架層出不窮,目不暇…

android 本地數據庫sqlite的封裝

單機android sqlite數據庫的實現,這個數據庫可與程序一起生成在安裝包中一、下載sqlite3.exe文件二、運行 cmd 轉到sqlite3.exe 所在目錄 運行 sqlite3.exe 數據庫名.db然后會出現sqlite>的命令提示符輸入創建表的語句, create table 表名&#xf…

ResourceManager中的Resource Estimator框架介紹與算法剖析

歡迎大家前往騰訊云社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由宋超發表于云社區專欄 本文首先介紹了Hadoop中的ResourceManager中的estimator service的框架與運行流程,然后對其中用到的資源估算算法進行了原理剖析。 一. Resource Estimator Service…

幾十款 WPF 控件 - UI 庫,總有一款適合你

幾十款 WPF 控件 - UI 庫,總有一款適合你獨立觀察員 2022 年 10 月 16 日引言眾所周知,使用 WPF 框架能夠開發出功能強大、界面美觀的桌面端應用。能夠達到這個效果,各種 WPF 的控件庫、UI 庫功不可沒。所以,想著能不能收集一下目…

mysql將系統權限授予用戶_mysql創建用戶并授予權限

1、create schema [數據庫名稱] default character set utf8 collate utf8_general_ci;--創建數據庫采用create schema和create database創建數據庫的效果一樣。2、create user ‘[用戶名稱]‘‘%‘ identified by ‘[用戶密碼]‘;--創建用戶密碼8位以上,包括&#…

Android Studio導出jar包

Eclipse直接有個Export,可以直接導出jar包。AS相對Eclipse變化很大,編譯腳本變成了Gradle,各種導包操作都有差異。 下面是AS導出jar的過程: 第一步,修改app下的build.grade。 apply plugin: com.android.application修改為 apply …

GitHub Actions構建鏡像并部署服務

目的通過GitHub的Actions來(白嫖)部署.Net服務到阿里云服務器。環境準備需要一個阿里云服務器并且該服務器還安裝了docker環境,如果環境安裝不清楚可以查看之前的文章。創建鏡像倉庫在阿里云的容器鏡像服務中,創建一個鏡像倉庫用來存儲我們測試的鏡像&am…

20165232 緩沖區溢出漏洞實驗

緩沖區溢出漏洞實驗 實驗準備 實驗環境需要32位的Linux系統,需要下載安裝一些用于編譯 32 位 C 程序的軟件包,代碼如下: $ sudo apt-get update$ sudo apt-get install -y lib32z1 libc6-dev-i386$ sudo apt-get install -y lib32readline-gp…