跳到主要内容

2. System Architecture (系统架构)

在 NTP 模型中, 多个通过有线或无线方式与国家标准同步的主要参考源连接到广泛可访问的资源 (如骨干网关), 并作为主要时间服务器运行. NTP 的目的是通过互联网将计时信息从这些服务器传递到其他时间服务器, 并交叉检查时钟, 减轻由于设备或传播故障引起的误差. 一些本地网络主机或网关充当辅助时间服务器, 与一个或多个主服务器一起运行 NTP. 为了减少协议开销, 辅助服务器通过 NTP 将时间分发给其余的本地网络主机. 为了可靠性, 选定的主机可以配备精度较低但价格较便宜的无线电时钟, 并在主服务器和/或辅助服务器或它们之间的通信路径发生故障时用作备份.

在本文档中采用了标准术语: 时钟的 stability (稳定性) 是指它维持恒定频率的能力, accuracy (精度) 是指其频率和时间与国家标准的比较情况, precision (精确度) 是指在特定计时系统中这些量可以维持的精确程度. 除非另有说明, 两个时钟的 offset (偏移量) 是它们之间的时间差, 而 skew (偏斜) 是它们之间的频率差 (偏移量对时间的一阶导数). 真实时钟在偏斜方面表现出一些变化 (偏移量对时间的二阶导数), 称为 drift (漂移); 但在本规范版本中, 假设漂移为零.

NTP 旨在产生三种产品: clock offset (时钟偏移量), roundtrip delay (往返延迟) 和 dispersion (离散度), 所有这些都相对于选定的参考时钟. 时钟偏移量表示调整本地时钟以使其与参考时钟对应所需的量. 往返延迟提供了在指定时间到达参考时钟的消息发送能力. 离散度表示本地时钟相对于参考时钟的最大误差. 由于大多数主机时间服务器将通过另一个对等时间服务器进行同步, 这三种产品中的每一种都有两个组成部分: 对等节点相对于标准时间主要参考源确定的部分, 以及主机相对于对等节点测量的部分. 这些组成部分在协议中分别维护, 以便于误差控制和子网本身的管理. 它们不仅提供偏移量和延迟的精确测量, 还提供确定性的最大误差界限, 使用户界面不仅能确定时间, 还能确定时间的质量.

NTP 中没有对等节点发现或虚拟电路管理的规定. 数据完整性由 IP 和 UDP 校验和提供. 不提供也不需要流量控制或重传设施. 重复检测内置于处理算法中. 该服务可以在对称模式下运行 (其中服务器和客户端无法区分), 同时维护少量状态信息, 或者在客户端/服务器模式下运行 (其中服务器除客户端请求中包含的状态外不需要维护任何状态). 轻量级关联管理能力 (包括动态可达性和可变轮询速率机制) 仅用于管理状态信息和减少资源需求. 由于只使用单一 NTP 消息格式, 该协议易于实现, 可用于各种主动或被动轮询机制.

应该认识到, 时钟同步本质上需要较长的时间段和多次比较才能维持准确的计时. 虽然通常只需要几次测量就足以可靠地将本地时间确定在一秒左右, 但需要数小时和数十次测量才能解析振荡器偏斜并将本地时间维持在毫秒量级. 因此, 实现的精度直接取决于实现它所花费的时间. 幸运的是, 测量频率可以相当低, 几乎总是对正常网络操作无干扰.

2.1. Implementation Model (实现模型)

在最常见的客户端/服务器模型中, 客户端向一个或多个服务器发送 NTP 消息, 并在收到时处理回复. 服务器交换地址和端口, 覆盖消息中的某些字段, 重新计算校验和并立即将消息返回给客户端. NTP 消息中包含的信息允许客户端确定相对于本地时间的服务器时间, 并相应地调整本地时钟. 此外, 消息包含用于计算预期计时精度和可靠性的信息, 以及从可能的多个服务器中选择最佳服务器的信息.

虽然客户端/服务器模型可能足以用于涉及公共服务器和可能许多工作站客户端的本地网络, 但 NTP 的完整通用性需要多个客户端/服务器或对等节点的分布式参与, 这些节点排列在动态可重配置的分层分布式配置中. 它还需要用于关联管理, 数据操作和本地时钟控制的复杂算法. 在本文档的其余部分, 术语 host (主机) 指本地处理器上协议的实例化, 而术语 peer (对等节点) 指通过网络路径连接的远程处理器上协议的实例化.

图1显示了一个主机的实现模型, 包括三个共享分区数据库的进程 (每个对等节点专用一个分区), 并通过消息传递系统互连. 发送进程由每个对等节点的独立计时器驱动, 在数据库中收集信息并向对等节点发送 NTP 消息. 每条消息包含消息发送时的本地时间戳, 以及先前收到的时间戳和确定层次结构和管理关联所需的其他信息. 消息传输速率由本地时钟所需的精度以及其对等节点的精度决定.

接收进程接收 NTP 消息和可能的其他协议消息, 以及来自直接连接的无线电时钟的信息. 当收到 NTP 消息时, 对等节点时钟与本地时钟之间的偏移量被计算并与其他对误差确定和对等节点选择有用的信息一起纳入数据库. 第4节中描述的过滤算法通过丢弃劣质数据来提高精度.

更新过程在收到消息时以及其他时间启动. 它处理来自每个对等节点的偏移量数据, 并使用第4节的算法选择最佳的一个. 这可能涉及对少数对等节点的多次观察或对许多对等节点的少量观察, 具体取决于所需的精度.

本地时钟进程对更新过程产生的偏移量数据进行操作, 并使用第5节中描述的机制调整本地时钟的相位和频率. 这可能导致本地时钟的步进变化或渐进相位调整, 以将偏移量减少到零. 本地时钟为系统的其他用户以及 NTP 本身的后续参考提供稳定的时间信息来源.

2.2. Network Configurations (网络配置)

同步子网是由主要和辅助时间服务器, 客户端和互连传输路径组成的连接网络. 主要时间服务器直接与主要参考源 (通常是无线电时钟) 同步. 辅助时间服务器通过可能与其他服务共享的网络路径, 可能经由其他辅助服务器, 从主服务器获取同步. 在正常情况下, 主要和辅助服务器的同步子网旨在采用分层主从配置, 主服务器位于根部, 精度递减的辅助服务器位于向叶子方向的连续层级.

遵循电话行业建立的惯例 [BEL86], 每个服务器的精度由称为 stratum (层级) 的数字定义, 最顶层 (主服务器) 分配为1, 层次结构中向下的每个层级 (辅助服务器) 分配为比前一层级大1. 使用当前技术和可用的无线电时钟, 在主服务器的网络接口处可以实现毫秒量级的单样本精度. 这种量级的精度需要在操作系统和本地时钟机制的设计和实现中特别注意, 如第5节所述.

随着层级从1增加, 可实现的单样本精度将根据网络路径和本地时钟稳定性而降低. 为了避免估计每种特定配置中误差所需的繁琐计算 [BRA80], 假设平均测量误差大约与相对于同步子网根的测量延迟和离散度成比例地累积是有用的. 附录 H 包含误差分析, 包括作为延迟和离散度函数的最大误差推导, 其中后者取决于计时系统的精度, 本地时钟的频率容差和各种残差. 假设主服务器在已知精度范围内与标准时间同步, 这为整个同步子网的计时精度提供了可靠的确定性规范.

再次借鉴电话行业的经验 (该行业以相当大的代价学到了这些教训 [ABA89]), 同步子网拓扑应组织为产生最高精度, 但绝不能形成循环. 另一个因素是每增加一个层级就涉及一个可能不可靠的时间服务器, 这会引入额外的测量误差. NTP 中使用的选择算法使用 Bellman-Ford 分布式路由算法的变体来计算以主服务器为根的最小权重生成树. 算法使用的距离度量由 (缩放的) 层级加上同步距离组成, 同步距离本身由离散度加上绝对延迟的一半组成. 因此, 同步路径将始终采用到根的最少服务器数量, 并在最大误差的基础上解决平局.

由于这种设计, 子网在分层主从配置中自动重新配置, 以产生最准确和可靠的时间, 即使一个或多个主服务器或辅助服务器或它们之间的网络路径发生故障. 这包括可能分区的子网上所有正常主服务器 (例如, 以最低同步距离运行的高精度 WWVB 无线电时钟) 发生故障, 但一个或多个备份主服务器 (例如, 以较高同步距离运行的精度较低的 WWV 无线电时钟) 继续运行的情况. 但是, 如果子网中所有主服务器都发生故障, 其余辅助服务器将相互同步, 同时距离由于 Bellman-Ford 算法的众所周知特性而向上棘轮到预选的最大 "无穷大". 在所有路径上达到最大值后, 服务器将退出子网并使用其最后确定的时间和频率自由运行. 由于这些计算预计非常精确, 特别是在频率方面, 即使是较长的中断期也可能导致计时误差不超过每天几毫秒 (使用适当稳定的振荡器, 见第5节).

在多个主服务器的情况下, 生成树计算通常会选择同步距离最小的服务器. 但是, 当这些服务器处于大约相同的距离时, 由于正常的分散延迟, 计算可能会在它们之间产生随机选择. 通常, 只要主服务器之间的差异与同步距离相比较小, 这不会降低精度. 如果不是, 过滤和选择算法将选择可用服务器中最好的并按预期排除异常值.