NTP协议
一、NTP数据帧格式
下图所示是NTP数据帧的帧头格式:
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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Seconds | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Seconds Fraction | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 原始时间戳(64) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 接收时间戳(64) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 传送时间戳 (64) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 参考时间戳(64) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1、LI 闰秒标识器:使用两个比特表示,用来预警最近一分钟插入一秒或者删除一秒。 LI Value 含 义 00 0 无预告
01 1 最近一分钟有61秒 10 2 最近一分钟有59秒
11 3 警告状态(时钟未同步) 2、VN 版本号:用三个比特表示的当前NTP的版本。 3、Mode 模式:用三个比特来表示模式 mode 含 义 0 保留
1 对称性激活 2 被动的对称性 3 客户端 4 服务器 5 广播
6 为NTP控制性系保留 7 为自用保留
在点对点模式下,客户端机在请求中设置此字段为3,服务器在回答时设置此字段为4;在广播模式下,服务器在回答时设置此字段为5。
4、stratum(层):这是一个8bits的整数(无符号),表示当前时钟的层次水平,
stratum 含 义
0 未指定或难以获得 1 主要参考(如无线电时钟钟,校正的原子时钟) 2-255 第二参考(via NTP)
5、 Poll(轮询)间隔:八位signed integer,表示连续信息之间的最小间隔,用2的二次幂来表示,比如值为6的话表示最小间隔为64秒。
6、Precision 精度:八位signed integer,表示本地时钟精度,用最接近的2的二次幂来表示,比如50Hz(20ms)或者60Hz(16.67ms)可以表示成值 -5(31.25ms)
原始时间戳:客户端发送的时间,64bits,如果该客户端不可达,值设为0; 接收时间戳:服务端接受到的时间,64bits,如果该客户端不可达,值设为0; 传送时间戳:服务端送出应答的时间,64bits;
参考时间戳:本地时钟被修改的最新时间,64bits,如果WTP从未被同步,值设为0。
时间戳会记录四个关键时刻的本地时间,但是在某些时刻时间戳是不可得到的,比如主机重启、协议第一次启动,在这种情况下,64个比特被设为0,标识这个值是无效的或者没定义的。
NTP时间戳的帧格式:
NTP的时间戳使用一个64比特的无符号定点数来表示,前32比特表示整数部分,后32比特表示分数部分(Seconds Fraction )。时间戳的记录以秒的形式从1900年1月1日的0:0:0算起,在Seconds Fraction 部分,无意义的低位应设置为0。这种格式方便于表示多精度算法和用于UDP/TIME 的表示(单位:秒)的变换。它精度是大约是200皮秒。实际实现中NTP提供的时间精度在WAN为数十毫秒,在局域网上则为亚毫秒级或者更高。在Internet上绝大多数能 提供了1-50 ms 的精确度,精确度的大小取决于同步源和网络路径等特性
232 21 0 2-1 2-32
+ + + + + + ...+ + + + + + + 。+ + + + + + ... + + + + + +
前32位表示整数 后32位表示分数 时间戳共计64比特
具体记录时,计算当前时间与1900年1月1日0:0:0的时间间隔,以秒为单位写成二进制形式,整数部分填入前32位,分数部分填入后32位,无意义的低位设置为0.
比如当前时间为1902年1月1日1:1:1,与1900的参考时间相差(365*2*24*60*60+3661)63075661秒,转换成二进制为00000011110000100111010101001101. Xxxxxxxxx
因为1s?10ps,所以因为只有
32
122-32?1012?232ps
2036
年时数据会溢出
位表示秒数,所以当到
(2秒?60?60?24?365?136年)。所以以136年为一个周期置零,会用一些外部的方法来表示是相对1900年的时间还是2036年的时间。
32二、NTP的通信模型
互联网中运用NTP进行时间同步和分配所涉及的设备和通路的集合称为时间同步子网络。时间同步子网络以分层主从结构模式运行,其结构示意图见于图1。在这种结构中,少许几个高层设备可以为大量的低层设备提供同步信息。 第0级设备处于该子网络的特殊位置,是时间同步网络的基准时间参考源。它位于子网络的顶端,目前普遍采用全球卫星定位系统,即由GPS播发的UTC时间代码,本身并不具有NTP。
出于对精确度和可靠性的考虑,下层设备同时引用若干个上层设备作为参考源;而且也可以引用同层设备作为参考源。NTP能够时间参考源中选择最好的几个时间源来推断现行时间。在同层设备配置为互为参考时,NTP会在两个对等机间进行自动选择,以精确度高者作为两者共同的参考源,而绝非两者互相引用。
NTP工作在时间同步子网络1级以下的其他各级设备中。图1中,在第1级和第2级上用机盒图式表示的设备是网络时间服务器,或者称为NTP时间服务器;用计算机主机和工作站图式表示的是一般互联网中的对应物,在时间同步子网络中它们均被视为时间服务器的时间客户机(下面简称服务器和客户机)。服务器可以是专用设备,也可以是备有专用时钟电路的通用计算机。出于对精确度和可靠性的考虑,下层设备同时引用若干个上层设备作为参考源;而且也可以引用同层设备作为参考源。
NTP以客户机和服务器方式进行通信。每次通信共计两个包。客户机发送一个请求数据包,服务器接收后回送一个应答数据包。两个数据包都带有时间戳。NTP根据这两个数据包代的时间戳确定时间误差,并通过一系列算法来消除网络传输的不确定性的影响。 在数据包的传送方式上,有客户机和服务器一对一的点对点方式,还有多个客户机对一个服务器的广播/多播方式。两者工作方法基本相同。处于两种方式下的客户机在初始时和服务器进行如同点对点的简短信息交换,据此对往返延时进行量化判断。此后广播/多播客户机只接收广播/多播消息的状态,并根据第一次信息交换的判断值修正时间。不同之处在于时间服务器在广播方式下周期性地向广播地址发送时间刷新信号;而在多播方式下周期性地向多播地址发送时间刷新信号。在广播/多播方式下一个服务器可以为大量的客户机提供时间,但精度较低。
三、NTP的通信模式
NTP在以下5个模式中运行,用host-mode(peer.mode)变量来表示:symmetric active, symmetric passive, client, server and broadcast这五种模式 1.服务器/客户端模式
在服务器/客户端模式中,客户端向服务器发送时钟同步报文,报文中的Mode字段设置为3(客户模式)。服务器端收到报文后会自动工作在服务器模式,并发送应答报文,报文中的Mode字段设置为4(服务器模式)。客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器。在该模式下,客户端能同步到服务器,而服务器无法同步到客户端。 2.对等体模式
在对等体模式中,主动对等体和被动对等体之间首先交互Mode字段为3(客户端模式)和4(服务器模式)的NTP报文。之后,主动对等体向被动对等体发送时钟同步报文,报文中的Mode字段设置为1(主动对等体),被动对等体收到报文后自动工作在被动对等体模式,并发送应答报文,报文中的Mode字段设置为2(被动对等体)。经过报文的交互,对等体模式建立起来。主动对等体和被动对等体可以互相同步。如果双方的时钟都已经同步,则以层数小的时钟为准。 3.广播模式
在广播模式中,服务器端周期性地向广播地址255.255.255.255发送时钟同步报文,报文中的Mode字段设置为5(广播模式)。客户端侦听来自服务器的广播报文。当客户端接收到第一个广播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。之后,客户端就进入广播客户端模式,继续侦听广播报文的到来,根据到来的广播报文对系统时钟进行同步。
相关推荐: