ntp服务器ntp协议时间戳,计算机的时钟(一):NTP 协议[通俗易懂]

ntp服务器ntp协议时间戳,计算机的时钟(一):NTP 协议[通俗易懂]本系列文章主要介绍计算机系统中时钟的处理。主要内容包含NTP,Lamport逻辑时钟,向量时钟,TrueTime等。本文是第一篇,介绍NTP协议。电脑的时钟不知道你注意过没有,假如隔了好几天打开你的电脑,任务栏的时间依然是显示正确的,即使你的电脑没有联网,这是如何做到的?post-quartz.png计算机的主板上有一个石英晶体振荡器和一个纽扣电池。石英晶体振荡器的频率是32768Hz每秒。在通电…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

本系列文章主要介绍计算机系统中时钟的处理。主要内容包含NTP,Lamport逻辑时钟,向量时钟,TrueTime等。本文是第一篇,介绍NTP协议。

电脑的时钟

不知道你注意过没有,假如隔了好几天打开你的电脑,任务栏的时间依然是显示正确的,即使你的电脑没有联网,这是如何做到的?

39e465a3b250

post-quartz.png

计算机的主板上有一个石英晶体振荡器和一个纽扣电池。石英晶体振荡器的频率是32768Hz每秒。在通电的时候,石英晶体每振动32768次,电路就会传出信息,表示1秒钟到了,通过这种方式来记录时间。但是石英晶体会有误差,正常情况下,每天的计时误差在正负1秒钟。而且在极端温度下,比如零下二十度,误差会变大。

NTP协议架构

正是因为石英晶体误差比较大,所以1985年特拉华大学的David L. Mills设计了网络时间协议NTP(Network Time Protocol)来同步不同计算机系统之间的时钟。

NTP协议的目标是将所有计算机的时间同步到几毫秒误差内。实际上广域网可以达到几十毫秒的误差,局域网误差可以在1毫米内。NTP协议是一种主从式架构协议,使用分层的时钟源系统,每一层称为Stratum,阶层的上限是15,阶层16表示未同步设备。常见的阶层如下:

39e465a3b250

post-stratum.png

阶层0

参考(基准)时钟,主要由高精度计时设备,比如铯或铷原子钟、GPS时钟、无线电时钟。它们生成非常精确的脉冲信号,触发计算机上的中断和时间戳。

阶层1

主时间服务器,这些服务器与阶层0设备相连,在几微秒误差内同步系统时钟。阶层1服务器之间可以互相连接,进行完整性检查和备份。

阶层2

这些计算机通过网络和阶层1服务器同步。每个计算机可以查询多个阶层1服务器,阶层2计算机之间也可以互相连接。

阶层3

这些计算机与阶层2的服务器同步。

NTP协议流程

NTP协议的时钟同步过程如下:

39e465a3b250

post-ntp-sequence.png

客户端A发送NTP消息给服务器B,消息中包含发送时间戳 T1

服务器B收到NTP消息后,将接收时间 T2 写入消息中

服务器B发送该NTP消息给客户端A,发送时间 T3 写入消息中

客户端A收到该NTP消息的时间为 T4

从上面的流程中可以很容易地计算出:

AB之间的网络往返时间RTT(Round Trip Time):δ = (T4 – T1) – (T3 – T2)

AB之间的时间偏移:θ = ( (T2 – T1) + (T3 – T4) ) / 2

推导过程:A从发送请求消息到收到响应的时间间隔是 T4 – T1,其中 T3 – T2 是B的处理时间,所以网络往返时间

δ = (T4 – T1) – (T3 – T2)。

假设A和B的时间偏差为θ,那么 T3 – θ = T3`。

T4和T3` 的间隔是半个RTT:T4 – T3` = δ / 2

把T3`和δ代入上面这个等式,得到:θ = ( (T2 – T1) + (T3 – T4) ) / 2。

NTP协议格式

NTP协议使用UDP协议来传输,端口为123,报文格式如下:

0 1 2 3

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|LI | VN |Mode | Stratum | Poll | Precision |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Root Delay |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Root Dispersion |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Reference ID |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| |

+ Reference Timestamp (64) +

| |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| |

+ Origin Timestamp (64) +

| |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| |

+ Receive Timestamp (64) +

| |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| |

+ Transmit Timestamp (64) |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| |

+ Optional (96) |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

各个字段的含义如下:

LI Leap Indicator: 2比特,用来警告是否有闰秒或者未和上级同步。具体定义如下:

+——-+—————————————-+

| Value | Meaning |

+——-+—————————————-+

| 0 | no warning |

| 1 | last minute of the day has 61 seconds |

| 2 | last minute of the day has 59 seconds |

| 3 | unknown (clock unsynchronized) |

+——-+—————————————-+

VN Version Number: 3比特,协议版本,目前是4。

Mode: 3比特,工作模式,具体定义如下:

+——-+————————–+

| Value | Meaning |

+——-+————————–+

| 0 | reserved |

| 1 | symmetric active |

| 2 | symmetric passive |

| 3 | client |

| 4 | server |

| 5 | broadcast |

| 6 | NTP control message |

| 7 | reserved for private use |

+——-+————————–+

Stratum: 8比特,阶层,具体定义如下:

+——–+—————————————————–+

| Value | Meaning |

+——–+—————————————————–+

| 0 | unspecified or invalid |

| 1 | primary server (e.g., equipped with a GPS receiver) |

| 2-15 | secondary server (via NTP) |

| 16 | unsynchronized |

| 17-255 | reserved |

+——–+—————————————————–+

Poll: 8比特,轮询间隔时间,两个NTP报文之间的时间间隔,用2的幂表示。

Precision: 8比特,系统的时钟精度,用2的幂表示。

Root Delay: 32比特,本地到主时钟源的往返时间RTT。

Root Dispersion: 32比特。

Reference Identifier: 32比特,上层时钟源的标识。

Reference Timestamp: 64比特,本系统时钟最后一次被设置的时间。

Originate Timestamp: 64比特,NTP报文离开发送端时发送端本地时间,也即前面图中的T1。

Receive Timestamp: 64比特,NTP报文到达接收端时接收端端本地时间,也即前面图中的T2。

Transmit Timestamp: 64比特,NTP报文离开接收端时接收端本地时间,也即前面图中的T3。

NTP的误差

NTP协议在广域网可以达到几十毫秒的误差,局域网误差可以在1毫米内。误差最大的一个原因是发送请求和接收响应这两个阶段的网络时间可能是不一样的。前面我们推导时间偏移公式的时候,假设网络往返发送和接收阶段的时间是一样的,但是实际网络中,这两个阶段走的路由可能是不一样的,所花的时间也可能不一样,计算的时间偏移也不准确,这样就造成了广域网的误差可能达到几十毫秒甚至更高。局域网中因为网络比较稳定,经过的路由器也比较少,所以误差可以到1毫米内。

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182948.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 全球vps交流网站超级vps管理器_phpyun采集

    全球vps交流网站超级vps管理器_phpyun采集今天在写《请珍惜免费资源》这篇文章的时候无意中又发现一款无限流量免费PHP空间「FreeWebHostingArea」,搜索了一下已经有14年的时间,下面老俍就来介绍一下这款免费主机的申请及使用说明。FreeWebHostingArea是美国的一个老牌的免费空间服务商,从2005年开始提供免费PHP空间服务。距今已有14年的时间,真没想到一款免费主机能活这么长时间。FreeWe…

    2022年10月8日
    0
  • CreateMutex互斥量

    CreateMutex互斥量C++API CreateMutex找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。CreateMutex()函数可用来创建一个有名或无名的互斥量对象。HANDLECreateMutex(  LPSECURITY_ATTRIBUTES lpMutexAttributes,//指向安全属性的指针  BOOL bInitialOwner,//

    2022年10月4日
    0
  • 备忘录模式实例_iphone语音备忘录无法分享

    备忘录模式实例_iphone语音备忘录无法分享备忘录模式 Motivation动机模式定义实例结构要点总结笔记动机在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯对象之前处于某个点时的状态.如果使用一些共有接口来让其他对象得到对象的状态,便会暴露对象的实现细节.如何实现对象状态的良好保存与回复?但同时又不会因此而破坏对象的封装性模式定义在不破坏封装性的前提下.捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态实例朴素class Memento{ stri

    2022年8月11日
    1
  • Optimal Keypad[通俗易懂]

    Optimal Keypad[通俗易懂]Description OptimusMobilesproducesmobilephonesthatsupportSMSmessages.TheMobileshaveakeypadof12keys,numbered1to12.Thereisacharacterstringassignedtoeachkey.Totypeinthe

    2022年4月28日
    31
  • Eurake分区理解

    Eurake分区理解Eurake分区理解大型项目如果存在多个机房,例如北京机房,上海机房,杭州机房等,上千个服务注册在Eurake上面,我们的事例也分别部署在各个区域。这时候,由于机房存在不同的区域,北京的一个服务如果调用上海的一个服务,就可能发生延迟,服务的响应速度也会慢很多,这时候,我们可能期望,北京的服务生产者调用北京的服务消费着,这该怎么去操作?Eurake其实有个分区功能,什么是分区,就是北京有一个注册…

    2022年6月12日
    35
  • poj 1088 记忆化搜索||动态规划

    poj 1088 记忆化搜索||动态规划poj1088    记忆化搜索也也是采用递归深搜的对数据进行搜索,但不同于直接深搜的方式,记忆化搜索是在每次搜索时将得到的结果保存下来,避免了重复计算,这就是所谓的记忆化。记忆化应该是属于动态规划。   举个例子,比如我们搜索最长最长连续增子序列,1 234567,当然这个例子比较特殊,但足以说明情况。   对于这种问题,我们可以先搜索以1开始的

    2022年7月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号