NTP数据报(NTP Packet)是NTP协议进行时间同步的核心数据单元,其基础结构固定为48字节(不包含扩展字段时),包含多个关键字段,用于传递时间信息、时钟状态及同步参数。以下是NTP数据报的详细结构(按字节顺序从前往后排列):

1. 前8字节:控制与状态字段(共8字节)

字段名称

位数

含义

LI(Leap Indicator)

2位

闰秒指示符,用于通知客户端是否需要插入/删除闰秒:

- 00:无闰秒

- 01:插入1秒(正闰秒)

- 10:删除1秒(负闰秒)

- 11:告警(时钟未同步)

VN(Version Number)

3位

NTP版本号(当前主流为版本4,即100)。

Mode

3位

操作模式,指示报文的角色:

- 0:保留

- 1:主动对等体(主动发起同步)

- 2:被动对等体(响应同步请求)

- 3:客户端(请求时间同步)

- 4:服务器(响应客户端请求)

- 5:广播模式

- 6:NTP控制消息

- 7:保留

Stratum

8位

时钟层级,标识本地时钟的精度和来源:

- 0:未指定(如未同步的客户端)

- 1:主时钟(直接同步于原子钟、GPS等基准源)

- 2~15:次级时钟(同步于更高层级的时钟)

- 16:未同步(不可用)

Poll Interval

8位

轮询间隔,以2的幂表示(单位:秒),指示对等体之间请求时间的最大间隔(如值为4表示16秒)。

Precision

8位

时钟精度,以2的幂表示(单位:秒,有符号整数),指示本地时钟的固有精度(如值为-6表示1/64秒)。

2. 中间16字节:时钟偏差与误差字段(共16字节)

字段名称

位数

含义

Root Delay

32位

根延迟,以浮点数表示(单位:秒),指示从本地时钟到根时钟(stratum 1)的总网络延迟(往返)。

Root Dispersion

32位

根离散度,以浮点数表示(单位:秒),指示本地时钟与根时钟之间的最大误差(不确定性)。

Reference Identifier

32位

参考标识,根据stratum不同含义不同:

- stratum 1:表示基准源类型(如GPSATOM等ASCII码)

- stratum ≥2:表示上一级同步服务器的IPv4地址(或IPv6地址的低32位)。

3. 后24字节:时间戳字段(共24字节,4个时间戳,每个64位)

NTP时间戳以64位表示(32位秒 + 32位小数秒),基于UTC时间,起始点为1900年1月1日00:00:00(与Unix时间戳的1970年起始点不同)。

字段名称

位数

含义

Reference Timestamp

64位

参考时间戳,本地时钟最后一次被设置或更新的时间(同步于参考源的时间)。

Originate Timestamp

64位

发起时间戳,客户端发送请求报文的时间(由客户端设置)。

Receive Timestamp

64位

接收时间戳,服务器收到客户端请求报文的时间(由服务器设置)。

Transmit Timestamp

64位

发送时间戳,服务器发送响应报文的时间(由服务器设置)。

核心作用

NTP客户端通过分析报文中的时间戳(尤其是OriginateReceiveTransmit)计算网络延迟和时间偏移,最终实现与服务器的时间同步。例如:

  • 网络延迟 ≈(服务器接收时间 - 客户端发送时间)+(服务器发送时间 - 客户端接收时间)
  • 时间偏移 ≈ [(服务器接收时间 - 客户端发送时间)+(服务器发送时间 - 客户端接收时间)] / 2

以上是NTP数据报的基础结构,扩展字段(如认证信息)会增加报文长度,但核心同步逻辑依赖上述48字节字段。