网络时间的那些事及 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.mzph.cn/news/281918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端芝士树】Javascript的原型与原型链

【前端芝士树】Javascript的原型、原型链以及继承机制 前端的面试中经常会遇到这个问题,自己也是一直似懂非懂,趁这个机会整理一下0. 为什么会出现原型和原型链的概念 1994年,网景公司(Netscape)发布了Navigator浏览器…

C# 反射之Activator用法举例

概述程序运行时,通过反射可以得到其它程序集或者自己程序集代码的各种信息,包括类、函数、变量等来实例化它们,执行它们,操作它们,实际上就是获取程序在内存中的映像,然后基于这个映像进行各种操作。Activa…

MyBatis批量插入

转载于:https://blog.51cto.com/12701034/1929672

狐狸文│区块链发展的正路

(图片出自网络,版权归原作者所有)最近看了一本书:《美国增长的起落》。这本书是大部头,但看起来很过瘾。通过对这本书的阅读,我更新了自己对区块链发展的理解。这一年,“区块链”很热&#xff0…

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…

ResourceManager中的Resource Estimator框架介绍与算法剖析

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文由宋超发表于云社区专栏 本文首先介绍了Hadoop中的ResourceManager中的estimator service的框架与运行流程,然后对其中用到的资源估算算法进行了原理剖析。 一. Resource Estimator Service…

几十款 WPF 控件 - UI 库,总有一款适合你

几十款 WPF 控件 - UI 库,总有一款适合你独立观察员 2022 年 10 月 16 日引言众所周知,使用 WPF 框架能够开发出功能强大、界面美观的桌面端应用。能够达到这个效果,各种 WPF 的控件库、UI 库功不可没。所以,想着能不能收集一下目…

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…

Atcoder 084D - Small Multiple(最短路径+思维)

分析&#xff1a;这题脑洞新奇...居然是最短路...将0到k-1看做k个点&#xff0c;第t个点向(10*t0,1,2...,9)%k连一条长度为0,,1,2,..,9的边&#xff0c;然后枚举s1,2,...,9,算出所有从s到0的最短路&#xff0c;答案就是最短路s的最小值。 1 #include<iostream>2 #include…

Blazor学习之旅(5)数据绑定

【Blazor】| 总结/Edison Zhou大家好&#xff0c;我是Edison。最近在学习Blazor做全栈开发&#xff0c;因此根据老习惯&#xff0c;我会将我的学习过程记录下来&#xff0c;一来体系化整理&#xff0c;二来作为笔记供将来翻看。本篇&#xff0c;我们来了解下在Blazor中数据是如…

chrome开启touch屏幕点击事件

2019独角兽企业重金招聘Python工程师标准>>> 在chrome浏览器输入 chrome://flags/#top-chrome-md 找到属性 UI Layout for the browsers top chrome 选择Hybrid&#xff0c;重启chrome&#xff0c;如下图&#xff1a; 转载于:https://my.oschina.net/swingcoder/blo…

Linux服务器重启后crs_stat -t 命令无法正常使用以及解决思路

前提&#xff1a;在Linux系统中安装ASM&#xff0c;安装完ASM和Oracle数据库时都是正常使用的&#xff0c;但在重启服务器后Oracle相关命令不识别。1、[gridudevasm:/home/grid]$crsctl status res -t -bash: crsctl: command not found2、查看环境变量是否正常&#xff0c;命令…

python 打开某个exe_python定时检查启动某个exe程序(如果exe挂了)

详见代码如下&#xff1a;import threadingimport timeimport osimport subprocessdef get_process_count(imagename):p os.popen(tasklist /FI "IMAGENAME eq %s" % imagename)return p.read().count(imagename)def timer_start():t threading.Timer(120,watch_fu…

Google发布了Tensorflow Lite,用于移动电话的神经网络库

Google的工程副总Dave Burke宣布了一个专门针对移动电话而优化的Tensorflow新版本。\\这一新的软件库称为Tensorflow Lite&#xff0c;允许开发人员在用户的移动电话上实时地运行人工智能应用。据Burke介绍&#xff0c;该库在设计上力求更快和更小的同时&#xff0c;依然支持最…

4. ZooKeeper 基本操作

ZooKeeper的数据模型及其API支持以下九个基本操作&#xff1a; 操作描述create在ZooKeeper命名空间的指定路径中创建一个znodedelete从ZooKeeper命名空间的指定路径中删除一个znodeexists检查路径中是否存在znodegetChildren获取znode的子节点列表getData获取与znode相关的数据…

微软正式发布Azure Functions 2.0

微软正式发布Azure Functions的第二个版本&#xff0c;这是一个事件驱动的、按需计算的Azure平台服务。与版本1相比&#xff0c;新版本的Azure Functions包含的多项特性使开发人员可以更轻松地构建可伸缩的无服务器应用程序。2016年初&#xff0c;微软首次推出Azure Functions预…