NTP协议

概述
      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
LIVNModeStratumPollPrecision
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来计算客户端时间和服务器端时间的偏差,从而进行校时操作,如下图所示。

SNTP

数据包在网络上传播的时间为: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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值