概述
NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。提供NTP对时的服务器有很多,比如微软的NTP对时服务器,利用NTP服务器提供的对时功能,可以使我们的设备时钟系统能够正确运行。SNTP(Simple Network Time Protocal简单网络时间协议),用于跨广域网或局域网同步时间的协议,具有较高的精确度(几十毫秒)。SNTP是NTP协议的简化版,两者分别在RFC1305和RFC2030介绍。端口号为:123。
NTP帧格式
0 1 4 7 15 23 31 | |||||
LI | VN | Mode | Stratum | Poll | Precision |
Root Delay(32bits) | |||||
Root Dispersion(32bits) | |||||
Reference Identifier(32bits) | |||||
Reference Timestamp(64bits) | |||||
Originate Timestamp(64bits) | |||||
Receive Timestamp(64bits) | |||||
Transmit Timestamp(64bits) | |||||
Authenticator(96bits) |
帧中各字段含义参考如下:
1、LI - 闰秒标识器,2bits。
00:无警告
01:最后一分钟是61秒
10:最后一分钟是59秒
11:警告(时钟没有同步)
2、VN - NTP版本号,现在为3,3bits。
3、Mode - 模式,3bits。
000:保留
001:对称主动
010:对称被动
011:客户端
100:服务器
101:广播
110:保留为NTP控制信息
111:保留为用户定义
单播和多播模式,客户在请求时此字段设为3,服务器响应此字段设为4.广播模式,服务器此字段设为5。
4、Stratum - 系统时钟的层数,取值范围1~16,定义时钟准确度,1精确度最高依次递减,8bits。
5、Poll - 指示数据包的最大时间间隔,以秒为单位,作为2的指数方的指数部分,该字段只在服务器端有效。字段长度为8位整数,取值范围从4-17,即16秒到131,072秒。
6、Precision - 指示系统时钟的精确性,以秒为单位,作为2的指数方的指数部分,该字段只在服务器端有效。字段长度为8位符号整数,取值范围从-6到-20。
7、Root Delay - 指示与主时钟参考源的总共往返延迟,以秒为单位,该字段只在服务器端有效。字段长度为32位浮点数,小数部分在16位以后,取值范围从负几毫秒到正几百毫秒。
8、Root Dispersion - 指示与主时钟参考源的误差,以秒为单位,该字段只在服务器端有效。字段长度为32位浮点数,小数部分在16位以后,取值范围从零毫秒到正几百毫秒。
9、Reference Identifier - 指示时钟参考源的标记,该字段只在服务器端有效。对于一级服务器,字段长度为4字节ASCII字符串,左对齐不足添零。对于二级服务器,在IPV4环境下,取值为一级服务器的IP地址,在IPV6环境下,是一级服务器的NSAP地址。
10、Reference Timestamp - 参考时间戳,指示系统时钟最后一次校准的时间,该字段只在服务器端有效,64bits。
11、Originate Timestamp - 原始时间戳,指示客户向服务器发起请求的时间,64bits。
12、Receive Timestamp - 接受时间戳,指服务器收到客户请求的时间,64bits。
13、Transmit Timestamp - 传送时间戳,指示服务器向客户发时间戳的时间,64bits。
14、Authenticator - 认证符,当需要进行认证时,该字段包含密钥和信息加密码(可选项),96bits。
校时原理
主要是通过记录客户端向服务器发送数据包时的时间戳t1,服务器端接收到该数据包时的时间戳t2,服务器向客户端回应时的时间戳t3和最后客户端接收到服务器回应时的时间戳t4来计算客户端时间和服务器端时间的偏差,从而进行校时操作,如下图所示。
数据包在网络上传播的时间为:t3+((t4-t1)-(t3-t2))/2。
要点
NTP时间戳从1900年开始记秒数,而UNIX时间戳从1970年开始记秒数,即记录到NTP结构体中的时间要加上JAN_1970(1900到1970共70年的秒数),而从起获取出来需减掉JAN_1970。
#define JAN_1970 0x83AA7E80 //2208988800s
附SNTP服务器原代码下载地址:
https://download.csdn.net/download/GhostGuardian/12256739