0%

NTP报文格式

简介

NTP是从时间协议(Time Protocol)和ICMP时间戳报文(ICMP TimeStamp Message)演变而来,在准确性和健壮性方面进行了特殊的设计,理论上精度可达十亿分之一秒。
NTP协议应用于分布式时间服务器和客户端之间,实现客户端和服务器的时间同步,从而使网络内所有设备的时钟基本保持一致。
NTP协议是基于UDP进行传输的,使用端口号为123。

报文格式

图1 NTP数据报文格式

1.png

字段名 长度(比特) 含义
LI(Leap Indicator) 2比特 这是一个两位的代码,表示在NTP时间标尺中将要插入的下一跳情况。值为“11”时表示告警状态,时钟不能被同步。
VN(Version Number) 3比特 NTP的版本号。
Mode 3比特 NTP的工作模式。不同值表示的含义如下:
0:reserved,保留。
1:symmetric active,主动对等体模式。
2:symmetric passive,被动对等体模式。
3:client,客户模式。
4:server,服务器模式。
5:broadcast,广播模式。
6:reserved for NTP control messages,NTP控制报文。
7:reserved for private use,内部使用预留。
Stratum 8比特 时钟的层数,定义了时钟的准确度。层数为1的时钟准确度最高,从1到15依次递减。
Poll Interval 8比特 轮询时间,即发送报文的最小间隔时间。
Precision 8比特 时钟的精度。
Root Delay 32比特 到主参考时钟的总往返延迟时间。
Root Dispersion 32比特 本地时钟相对于主参考时钟的最大误差。
Reference Identifier 32比特 标识特定参考时钟。
Reference Timestamp 64比特 本地时钟最后一次被设定或更新的时间。如果值为0表示本地时钟从未被同步过。
Originate Timestamp 64比特 NTP报文离开源端时的本地时间。
Receive Timestamp 64比特 NTP报文到达目的端的本地时间。
Transmit Timestamp 64比特 目的端应答报文离开服务器端的本地时间。
Authenticator 96比特 (可选)验证信息。

图2 NTP控制报文格式

2.png

字段名 长度 含义
0 2比特 保留位。NTP本身不做处理。
VN(Version Number) 3比特 NTP的版本号,目前值为3。
6 3比特 表明是控制报文。
REM 3比特 R:0表示命令,1表示响应。
E:0表示发送正常响应,1表示发送错误响应。
M:0表示最后一个分片,1表示其他。
Op 5比特 操作码,表明命令的类型。
Sequence 16比特 发送或接受到报文的顺序号。
Status 16比特 表明当前系统的状态。
Association ID 16比特 连接标示。
Offset 16比特 偏移量。
Count 16比特 数据域的长度。
Data 最大468比特 包括发送报文或接受报文中的数据信息。
Padding 16比特 填充字段。
Authenticator 96比特 (可选)验证信息。

报文示例

图3 NTP报文(Broadcast)

3.png

图4 NTP报文(client)

4.png

图5 NTP报文(server)

5.png

Arduino库文件

https://github.com/arduino-libraries/NTPClient.git