跳到主要内容

附录 A. NTP 数据格式 - Version 3

本附录描述 NTP 消息格式, 该格式跟随在 IP 和 UDP 头部之后. 除下文描述的 Reference Identifier 字段外, 该格式与 RFC-1119 中描述的格式相同. 为方便实现者, 格式如下所示.

NTP 消息头

NTP 消息是一个 UDP 数据报, 其头部格式如下:

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|LI | VN |Mode | Stratum | Poll | Precision |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Root Delay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Root Dispersion |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reference Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Reference Timestamp (64) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Originate Timestamp (64) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Receive Timestamp (64) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Transmit Timestamp (64) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key Identifier (optional) (32) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| |
| Message Digest (optional) (128) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段说明

Leap Indicator (LI, 闰秒指示符): 这是一个 2 位代码, 用于警告当前日最后一分钟即将插入或删除一个闰秒, bit 0 和 bit 1 分别按如下方式编码:

含义
00无警告
01最后一分钟有 61 秒
10最后一分钟有 59 秒
11告警状态 (时钟未同步)

Version Number (VN, 版本号): 这是一个 3 位整数, 表示 NTP 版本号. Version 3 (仅 IPv4) 的版本号为 3, Version 4 (IPv4、IPv6 和 OSI) 的版本号为 4.

Mode (模式): 这是一个 3 位整数, 表示模式, 取值定义如下:

含义
0保留
1对称主动
2对称被动
3客户端
4服务器
5广播
6保留给 NTP 控制消息
7保留供私有使用

Stratum (层级): 这是一个 8 位无符号整数, 表示本地时钟的层级, 取值定义如下:

含义
0未指定或不可用
1主参考源 (例如无线电钟)
2-15二级参考源 (通过 NTP 或 SNTP)
16-255保留

Poll Interval (轮询间隔): 这是一个 8 位有符号整数, 表示连续消息之间的最大间隔, 单位为秒, 取最接近的 2 的幂. 目前该字段可能出现的值范围为 4 (16 s) 到 14 (16384 s); 但多数应用只使用 6 (64 s) 到 10 (1024 s) 的子范围.

Precision (精度): 这是一个 8 位有符号整数, 表示本地时钟精度, 单位为秒, 取最接近的 2 的幂. 该字段通常出现的值范围从主频时钟的 -6 到某些工作站微秒级时钟的 -20.

Root Delay (根延迟): 这是一个 32 位有符号定点数, 表示到主参考源的总往返延迟, 单位为秒, 小数点位于 bit 15 和 bit 16 之间. 注意该变量可取正值或负值, 取决于相对时间和频率偏移. 该字段通常出现的值从负的若干毫秒到正的数百毫秒不等.

Root Dispersion (根离散度): 这是一个 32 位无符号定点数, 表示相对于主参考源的标称误差, 单位为秒, 小数点位于 bit 15 和 bit 16 之间. 该字段通常出现的值范围从 0 到数百毫秒.

Reference Identifier (参考标识符): 这是一个 32 位位串, 标识特定参考源. 在 NTP Version 3 中, 它是一个 4 字符 ASCII 字符串, 左对齐并以 0 填充到 32 位. NTP Version 3 定义如下 ASCII 字符串:

字符串来源
DCNDCN 路由协议
NISTNIST 公共调制解调器
TSPTSP 时间协议
DTSDigital Time Service
ATOM原子钟 (已校准)
VLFVLF 无线电 (OMEGA 等)
GPSGPS 卫星接收器
GOESGOES UHF 环境卫星
WWVWWV HF 无线电
WWVBWWVB LF 无线电
WWVHWWVH HF 无线电
CHUCHU HF 无线电
LORCLORAN-C 无线电导航系统
OMEGOMEGA 无线电导航系统
TDFTDF HF 无线电 (法国)

在 NTP Version 4 主服务器中, 该字段是一个 4 八位组 IPv4 地址, 或 IPv6 地址 MD5 哈希的前四个八位组. 在 NTP Version 4 二级服务器中, 它是其同步源的参考标识符.

Reference, Originate, Receive and Transmit Timestamps (参考、发起、接收和发送时间戳): 这四个字段采用 NTP 时间戳格式, 即 64 位无符号定点数, 前 32 位为整数部分, 后 32 位为小数部分. 该格式便于进行多精度算术和转换为 Time Protocol 表示 (秒), 但会使转换为 ICMP Timestamp 消息表示 (毫秒) 更复杂. 这种表示的精度约为 200 皮秒, 即使对非常特殊的需求也应足够.

Authenticator (optional, 认证器, 可选): 实现 NTP 认证方案时, Key Identifier 和 Message Digest 字段包含附录 C 定义的消息认证码 (MAC) 信息.