附录 B. NTP 控制消息
本附录描述 NTP Control Message (NTP 控制消息) 格式, 它提供一种监控和控制 NTP 实现的机制. 控制消息是可选特性, 不必在所有情况下实现. 实现时, 控制消息只用于 client/server 模式, 不用于 broadcast 模式. 控制消息按标准 NTP 消息格式组织, mode 字段设置为 6 (control message).
控制消息为监控和控制 NTP 实现提供简单的查询/响应机制. 它主要用于管理和监控 NTP 实现, 提供对协议机器维护的内部变量的访问. 外部管理应用可以检查这些变量, 在某些情况下也可以修改它们. 控制消息提供了一种在不干扰正常协议操作的情况下检查实现状态和性能的方法.
B.1. NTP 控制消息格式
NTP Control Message 格式如下:
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 |R|E|M| OpCode | Sequence |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Status | Association ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Offset | Count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key Identifier (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Message Digest (optional) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
Leap Indicator (LI): 这是一个 2 位代码, 用于警告即将发生的闰秒, 其定义见 NTP 消息格式.
Version Number (VN): 这是一个 3 位整数, 表示 NTP 版本号, 当前为 3.
Mode: 这是一个 3 位整数, 表示模式. 对控制消息而言, 该字段设置为 6.
Response Bit (R): 查询时设置为 0, 响应时设置为 1.
Error Bit (E): 正常响应时设置为 0, 错误响应时设置为 1.
More Bit (M): 如果此分片后还有更多数据则设置为 1, 最后一个分片设置为 0.
Operation Code (OpCode): 这是一个 5 位代码, 指定要执行的操作:
| 值 | 操作 |
|---|---|
| 0 | 保留 |
| 1 | 读取状态 |
| 2 | 读取变量 |
| 3 | 写入变量 |
| 4 | 读取时钟变量 |
| 5 | 写入时钟变量 |
| 6 | 设置 Trap 地址 |
| 7 | Trap 响应 |
| 8-31 | 保留 |
Sequence: 这是一个 16 位整数, 用于匹配请求和响应.
Status: 这是一个 16 位代码, 表示系统、peer 或时钟的状态.
Association ID: 这是一个 16 位整数, 标识特定 peer 关联. 值 0 表示系统变量.
Offset: 这是一个 16 位整数, 指定数据区中第一个八位组的偏移.
Count: 这是一个 16 位整数, 指定数据区中的八位组数量.
Data: 这是一个可变长度字段, 包含请求或响应的数据. 格式取决于操作码.
Authenticator (optional): 实现认证时, 此字段包含附录 C 定义的 Key Identifier 和 Message Digest.
B.2. 状态字
控制消息头中的 status 字段包含一个 16 位代码, 提供关于系统、peer 或时钟的信息. 格式取决于所报告状态的类型.
B.2.1. 系统状态字
系统状态字出现在关联标识符为 0 的 read status 命令响应的 status 字段中. 格式为:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LI | Source | Count | Code|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Leap Indicator (LI): 这是一个 2 位代码, 用于警告即将发生的闰秒.
Clock Source (Source): 这是一个 4 位代码, 表示当前同步源:
| 值 | 来源 |
|---|---|
| 0 | 未指定或未知 |
| 1 | 原子钟 |
| 2 | VLF 无线电 |
| 3 | HF 无线电 |
| 4 | UHF 无线电 |
| 5 | 本地网络 |
| 6 | NTP |
| 7 | UDP/TIME |
| 8 | 手表 |
| 9 | 调制解调器 |
System Event Counter (Count): 这是一个 4 位整数, 表示自上次读取系统状态字以来发生的系统异常事件数量.
System Event Code (Code): 这是一个 4 位整数, 标识最近的系统异常事件:
| 值 | 事件 |
|---|---|
| 0 | 未指定 |
| 1 | 系统重启 |
| 2 | 系统故障 |
| 3 | 系统时钟重置 |
| 4 | 关联事件 |
| 5 | 操作模式变化 |
| 6-15 | 保留 |
B.2.2. Peer 状态字
Peer 状态字出现在关联标识符非 0 的 read status 命令响应的 status 字段中. 格式为:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Status | Sel | Count| Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Peer Status (Status): 这是一个 5 位代码, 表示 peer 状态:
| 位 | 置位时含义 |
|---|---|
| 0 | 已配置 (peer.config) |
| 1 | 已启用认证 |
| 2 | 认证正常 |
| 3 | 可达性正常 |
| 4 | 保留 |
Peer Selection (Sel): 这是一个 3 位整数, 表示 peer 选择过程的状态:
| 值 | 选择状态 |
|---|---|
| 0 | 已拒绝 |
| 1 | 通过健全性检查 |
| 2 | 通过正确性检查 |
| 3 | 通过候选检查 |
| 4 | 通过离群值检查 |
| 5 | 当前同步源 |
| 6 | 备用同步源 |
| 7 | 保留 |
Peer Event Counter (Count): 这是一个 4 位整数, 表示 peer 异常事件数量.
Peer Event Code (Code): 这是一个 4 位整数, 标识最近的 peer 异常事件.
B.2.3. 时钟状态字
时钟状态字出现在 read clock variables 命令响应的 status 字段中. 格式依赖实现.
B.2.4. 错误状态字
错误状态字出现在错误响应的 status 字段中. 格式为:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Error Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Error Code: 这是一个 16 位整数, 标识错误条件:
| 值 | 错误 |
|---|---|
| 0 | 无错误 |
| 1 | 不兼容实现 |
| 2 | 未实现请求 |
| 3 | 权限被拒绝 |
| 4 | 无效消息格式 |
| 5 | 无效消息长度 |
B.3. 命令
控制消息命令提供读取和写入系统、peer 和时钟变量的机制. 定义如下命令:
Read Status: 返回系统 (association ID = 0) 或特定 peer (association ID != 0) 的状态字.
Read Variables: 返回系统或特定 peer 的一个或多个变量值. data 字段包含以逗号分隔的变量名列表.
Write Variables: 设置一个或多个变量的值. data 字段包含以逗号分隔的 variable=value 对列表.
Read Clock Variables: 返回一个或多个参考时钟变量的值.
Write Clock Variables: 设置一个或多个参考时钟变量的值.
Set Trap Address: 设置 trap 接收者地址. 发生重要事件时, 实现会向指定地址发送未经请求的 trap response 消息.
Trap Response: 这是发生重要事件时发送给 trap 接收者的未经请求消息.
控制消息设施为监控和管理 NTP 实现提供了强大机制. 但是, 应谨慎使用, 以避免扰乱正常协议操作或损害安全性.