计算机的时钟(一):NTP 协议
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机的时钟(一):NTP 协议相关的知识,希望对你有一定的参考价值。
参考技术A 本系列文章主要介绍计算机系统中时钟的处理。主要内容包含NTP,Lamport逻辑时钟,向量时钟,TrueTime等。本文是第一篇,介绍NTP协议。不知道你注意过没有,假如隔了好几天打开你的电脑,任务栏的时间依然是显示正确的,即使你的电脑没有联网,这是如何做到的?
计算机的主板上有一个石英晶体振荡器和一个纽扣电池。石英晶体振荡器的频率是32768Hz每秒。在通电的时候,石英晶体每振动32768次,电路就会传出信息,表示1秒钟到了,通过这种方式来记录时间。但是石英晶体会有误差,正常情况下,每天的计时误差在正负1秒钟。而且在极端温度下,比如零下二十度,误差会变大。
正是因为石英晶体误差比较大,所以1985年特拉华大学的David L. Mills设计了网络时间协议NTP(Network Time Protocol)来同步不同计算机系统之间的时钟。
NTP协议的目标是将所有计算机的时间同步到几毫秒误差内。实际上广域网可以达到几十毫秒的误差,局域网误差可以在1毫米内。NTP协议是一种主从式架构协议,使用分层的时钟源系统,每一层称为Stratum,阶层的上限是15,阶层16表示未同步设备。常见的阶层如下:
参考(基准)时钟,主要由高精度计时设备,比如铯或铷原子钟、GPS时钟、无线电时钟。它们生成非常精确的脉冲信号,触发计算机上的中断和时间戳。
主时间服务器,这些服务器与阶层0设备相连,在几微秒误差内同步系统时钟。阶层1服务器之间可以互相连接,进行完整性检查和备份。
这些计算机通过网络和阶层1服务器同步。每个计算机可以查询多个阶层1服务器,阶层2计算机之间也可以互相连接。
这些计算机与阶层2的服务器同步。
NTP协议的时钟同步过程如下:
从上面的流程中可以很容易地计算出:
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协议使用UDP协议来传输,端口为123,报文格式如下:
各个字段的含义如下:
NTP协议在广域网可以达到几十毫秒的误差,局域网误差可以在1毫米内。误差最大的一个原因是发送请求和接收响应这两个阶段的网络时间可能是不一样的。前面我们推导时间偏移公式的时候,假设网络往返发送和接收阶段的时间是一样的,但是实际网络中,这两个阶段走的路由可能是不一样的,所花的时间也可能不一样,计算的时间偏移也不准确,这样就造成了广域网的误差可能达到几十毫秒甚至更高。局域网中因为网络比较稳定,经过的路由器也比较少,所以误差可以到1毫米内。
rfc5905
网络时间协议
NTP 协议简单分析
以上是关于计算机的时钟(一):NTP 协议的主要内容,如果未能解决你的问题,请参考以下文章