NTP协议详解
1、前言
NTP(Network Time Protocol)网络时间协议,他是用来同步网络中各计算机的时间的协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
2、NTP报文格式
2.1 报文结构
2.2 字段含义
NTP报文格式如上图所示,它的字段含义参考如下:
LI( 闰秒标识器 ),占用2bits,值为“11”时表示告警状态,时钟未被同步;其他值时NTP本身不做处理
1:no warning 未告警
2:last minute of the day has 61 seconds 最后一分钟有61秒
3:last minute of the day has 59 seconds 最后一分钟有59秒
4:unknown (clock unsynchronized) 未知(时钟未同步)
VN( 版本号 ),占用3bits,表示NTP的版本号,目前最新版本为4.
Mode( 模式 ),占用3bits,表示NTP的工作模式;不同的值所表示的含义分区是:
0:reserved 未定义
1:symmetric active 表示主动对等模式
2:symmetric passive 表示被动对等模式
3:client 表示客户模式
4:server 表示服务器模式
5:broadcast 表示广播模式或组播模式
6:NTP control message 表示此报文NTP控制报文
7:reserved for private use 预留给内部使用
Stratum( 层 ),系统时钟的层数,占用8bits;
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( 轮询间隔 ),占用8bits,表示两个NTP报文之间的最大时间间隔,以log2秒为单位,默认最小和最大的轮询间隔为6和10。
Precision( 精度 ),占用8bits,表示系统时钟的精度,以log2秒为单位
Root Delay( 根时延 ),占用8bits,表示在到参考时钟的总往返的时延
Root Dispersion( 根离散 ),占用8bits,表示到参考时钟的总色散
Reference Identifier( 参考时钟标识符),占用32bits,用来标识特殊的参考源
Reference Timestamp( 参考时间戳 ),占用64bits,系统时钟最后一次被修改的本地时间
Origin Timestamp( 原始时间戳 ),占用64bits,NTP请求报文离开发送端时发送端的本地时间
Receive Timestamp( 接受时间戳 ),占用64bits,NTP请求报文到达接收端的本地时间
Transmit Timestamp( 传送时间戳 ),占用64bits,NTP应答报文离开应答者时的应答者本地时间
Destination Timestamp( 目的时间戳 ),NTP应答包从服务器到达客户端的时间,(注:该字段不在标题字段中,它在数据包到达时确定,并在数据包缓冲区数据包结构中体现。)
Extension Field 2 ( 扩展字段,可变 )
Key Identifier ( 密钥标识符 ):客户端和服务器用于指定128位MD5哈希值
dgst( Message Digest,消息摘要 ):NTP数据包头和扩展字段
3、NTP工作模式
3.1 单播客户端/服务器模式
1) 客户模式:运行在客户模式的主机定期向服务器端发送报文,报文中的Mode字段被设置为3(客户模式),不管服务器端是否可达及服务器端的层数。运行在这种模式的主机,通常是网络内部的工作站,它可以依照对方的时钟进行同步,但不会修改对方的时钟。
·2)服务器模式:运行在服务器模式的主机接收并回应报文,报文中的Mode字段设置为4(服务器模式),运行在服务器模式的主机,通常是网络内部的时间服务器,它可以向客户端提供同步信息,但不会修改自己的时钟。
运行在客户模式的主机在重新 启动时和重新启动后定期向运行在服务器模式的主机发送NTP报文;服务器收到客户端的报文后,首先将报文的目的IP地址和目的端口号分别与其源IP地址和源端口号相互相互交换,在填写所需要的信息,然后把报文发送给客户端。服务器在客户端发送请求之间无需保留任何状态信息,客户端根据本地情况自由管理发送报文的时间间隔。
3.2 对等体模式
对等体模式下,主动对等体和被动对等体可以互相同步,等级第(层数大)的对等体向等级高(层数小)的对等体同步,主动对等体和被动对等体之间首先交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文。
1)主动对等体:运行在这一模式下的主机定期发送报文,报文中的Mode设置为1(主动对等体)。在不考虑它的对等体是否可达以及对等体的层数,运行在这一模式下的主机可以向对方提供同步信息,也可以依照对方的时间信息同步本地时钟。
2)被动对等体:运行在这一模式的主机接收并回应报文,报文中的Mode字段设置为2(被动对等体)。运行在被动对等体模式的主机可以向对方提供同步信息,也可以依照对方的时间信息同步本地时钟。
3)运行被动对等体模式的必备条件:本机接收的报文来自一个运行在主动对等体模式下的对等体,且该对等体的层数等于或低于本机并路由可达
注:被动对等体模式运行在同步子网中层次较低层上时:这种模式下,不需要预先知道对等体的特性,因为只有当本机收到NTP报文时才建立连接及相关的状态变量。
3.3 广播模式
1)运行在广播模式下,周期性向广播地址“255.255.255.255”发送时钟同步报文,报文中的Mode字段设置为5(广播/组播模式)。不管它的对等体是否可达或层数为多少。运行在广播模式的主机通常是网络内运行高速广播介质的时间服务器,向所有对等体提供同步信息,但不会修改自己的时钟。
2)客户端侦听来自服务器的广播消息包。当接收到第一个广播消息包后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,即客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息,以获得客户端与服务器间的网络延迟。之后恢复广播模式,继续侦听广播消息包的到来,根据导来的广播消息包对本地时钟再次进行同步。
广播模式应用在有多台工作站、不需要很高的准确度的高速网络。典型的情况是网络中的一台或多态时间服务器定期向工作站广播报文,广播报文在毫秒级的延迟基础上确定时间。
3.4 组播模式
1)服务器端周期向组播地址发送时钟同步报文,报文中的Mode字段设置为5(广播/组播模式)。运行组播模式的主机通常是网络内运行高速广播戒指的时间服务器,向所有对等体提供同步信息,但不会修改自己的时钟。
2)客户端侦听来自服务器的组播消息包,当接收导第一个组播消息包后,当客户端接收到第一个组播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,即客户端先启用一个短暂的服务器/客户模式与远程服务器交换消息,以获得客户端与服务器间的网络延迟,之后,客户端恢复组播模式,继续侦听组播消息包的到来,根据到来的组播消息包对本地时钟进行同步。
3)组播模式适用于有大量客户端分布在网络中的情况。通过在网络中使用NTP组播模式,NTP服务器发送的组播消息包可以到达网络中所有的客户端,从而降低由于NTP报文过多而给网络的造成的压力。
3.5 Kiss-o`-Death(KOD)
KOD报文为客户端提供状态报告和接入控制等信息。在服务器上是能KOD后,服务器回向客户端发送DENY和RATE kiss码。
1)当客户端接收到DENY kiss码,客户端将断开与服务器的所有连接,并停止向服务器发送报文。
2)当客户端接收到RATE kiss码,客户端将立即缩短与该服务器的轮询时间间隔,且以后每次接收到RATE kiss码,轮询时间间隔都会进一步缩短。
4、NTP工作原理
NTP工作原理图
1. 客户端发送一个NTP消息包给服务器,该消息包携带该包离开客户端时的时间戳。假设该时间戳为10:00:00am(T1)
2. 当此NTP消息包到达服务器时,服务器加上自己的时间戳,假设该时间戳为11:00:01am(T2)
3. 当次NTP消息包离开服务器时,路由器在加上该包离开自己的时间戳,假设该时间戳为11:00:02am(T3)
4. 当客户端接收到该响应消息包是,加上一个新的时间戳,假设该时间戳为10:00:03am(T4)
至此,客户端已经拥有足够的信息来计算两个重要的参数:
NTP消息来回一个周期的实验Delay=(T4-T1)-(T3-T2);
客户端相对于服务端的时间差Offset=((T2-T1)-(T4-T3))/2
综上所述,客户端就能根据这些信息来设定自己的时钟,使之与服务器的时钟同步。
今天的文章NTP协议分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/56864.html