附录 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 字符串:
| 字符串 | 来源 |
|---|---|
| DCN | DCN 路由协议 |
| NIST | NIST 公共调制解调器 |
| TSP | TSP 时间协议 |
| DTS | Digital Time Service |
| ATOM | 原子钟 (已校准) |
| VLF | VLF 无线电 (OMEGA 等) |
| GPS | GPS 卫星接收器 |
| GOES | GOES UHF 环境卫星 |
| WWV | WWV HF 无线电 |
| WWVB | WWVB LF 无线电 |
| WWVH | WWVH HF 无线电 |
| CHU | CHU HF 无线电 |
| LORC | LORAN-C 无线电导航系统 |
| OMEG | OMEGA 无线电导航系统 |
| TDF | TDF 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) 信息.