NTP是计算机系统中的时钟同步协议。它属于TCP / IP协议套件的最老部分之一,是基于用户数据报协议(UDP),端口号是123。
对于同步过程,NTP依赖于协调世界时(UTC),该时间是从分层系统中的各个客户端和服务器获得的。
NTP数据报文格式为:
NTP消息的标头字段如下:
LI:
0: 无leap秒调整
1: 一天的最后一分钟为61秒
2: 一天的最后一分钟为59秒
3:时钟未同步
VN:
NTP版本号 (3 bits) (当前版本为4),
Mode:
0:保留
1:对称主动
2:对称被动
3:客户端
4:服务器
5:广播
6:NTP控制消息
7:保留供私人使用
Strat:
0:未指定或无效
1:主服务器
2 – 15:辅助服务器
16:未同步
17 –255:保留
Poll:轮询间隔(8位有符号整数)连续NTP消息之间的最大间隔的2值,以秒为单位。
Precision: 时钟精度(8位有符号整数)。
Root Delay:本地到主参考时钟源的往返时间。
Root Dispersion:系统时钟相对于主参考时钟的最大误差。
Reference Identifier:参考时钟标识符,占用8个bits,用来标识特殊的参考源。
Reference Timestamp:该字段是上次设置或纠正系统时钟的时间,格式为64位时间戳。
Originate Timestamp:该值是请求离开服务器客户端的时间,采用64位时间戳格式。
Receive Timestamp: 该值是客户端请求以64位时间戳格式到达服务器的时间。
Transmit Timestamp:此值是服务器回复离开服务器的时间,采用64位时间戳格式。
NTP的四种工作模式,我们主要讲服务器 / 客户模式(server / client) 这种模式只需要在客户端配置,服务器端除了配置NTP 主时钟外,不需要进行其他专门配置。并且,只能是客户端同步到服务器,服务器不会同步到客户端。
发送内容为
23 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
接收内容为
24 02 03 E9
00 00 00 84 //root delay 到主参考时钟的往返延迟时间
00 00 05 B0 //root dispersion 本地时钟相对于主参考时钟的最大误差
64 7A 24 C4 //reference identifier 表示特定参考时钟
E9 7E 76 17 96 D6 79 F3 //本地时钟最后一次被设定或者更新时间,0表示未更新
00 00 00 00 00 00 00 00 //NTP报文离开源端时的本地时间
E9 7E 76 59 F9 76 8F 48 //NTP报文到达目的端的本地时间
E9 7E 76 59 F9 77 D0 C7 //目的端应答报文离开服务器的本地时间
wireshark抓包如图:
时间验证,
注意这里时间戳转换,自动转成了北京时间。
参考文献