19.3. 了解 NTP
Red Hat Enterprise Linux 使用的 NTP
版本如 RFC 1305 网络时间协议(Version 3)规范、实施和分析以及 RFC 5905 网络时间协议版本 4:协议和算法规范中所述
这种 NTP
的实施可实现子秒的准确性。在互联网上,10 毫秒的准确性是正常现象。在局域网(LAN)上,可在理想条件下使用 1 ms 准确度。这是因为,现在对时钟偏移进行了记帐和纠正,而早期更简单的时间协议系统没有这么做。使用 64 位时间戳提供 233 picoseconds 分辨率。时间戳的前 32 位用于秒,最后 32 位用于秒数。
NTP
表示时间为从 00:00(midnight)1 起的秒数,1900 GMT。由于 32 位用于计算秒数,这意味着 2036 年将"滚动"。但是 NTP
工作于时间戳之间的差别,因此这不会产生与其它时间协议实施相同的问题级别。如果引导时正确时间为 68 年的硬件时钟可用,NTP
将正确解释当前日期。NTP4
规范提供了"Era Number(Era Offset)"和"Era Offset",可用于在处理超过 68 年的时间长度时使软件更加稳定。不要将其与 Unix Year 2038 问题混淆。
NTP
协议提供了其他信息以提高准确性。使用四个时间戳来计算往返时间和服务器响应时间:为了使其角色中的系统作为 NTP
客户端与参考时间服务器同步,需要使用"原始时间戳"发送数据包。当数据包到达时,时间服务器会添加一个"接收时间戳"。在处理时间和日期信息请求后,又刚刚在返回数据包之前,它将添加一个"传输时间戳"。当返回的数据包到达 NTP
客户端时,将生成"接收时间戳"。客户现在可以计算总往返用时,并通过缩短处理时间而缩短实际旅行时间。假设传出和返回行程用时相同,即可计算接收 NTP
数据时的单条延迟。完整的 NTP
算法比这里介绍的要复杂得多。
收到包含时间信息的数据包后,它不会立即响应,而是首先接受验证检查,然后与几个其他时间样本一起处理,以达到预计时间。然后,与系统时钟进行比较以确定时间偏移、系统时钟的时间与 ntpd 决定
时间应该的差值。系统时钟调整缓慢,其中大多数速度为每秒 0.5 毫秒,以通过更改计数器使用的频率来减少这一偏差。使用此方法将时钟调整为 1 秒至少需要 2000 秒。这种缓慢的更改被称为 slewing 且无法向后移动。如果时钟的时间偏移超过 128毫秒(默认设置),ntpd
可以"步骤"时钟正向或后退。如果系统启动的时间偏移大于 1000 秒,则用户或安装脚本应手动调整。请参阅 第 3 章 配置日期和时间。使用 ntpd
命令的 -g
选项(默认为使用),系统启动时的任何偏移都将被修正,但在正常操作中,最多 1000 秒的偏移才会得到更正。
如果时间向后更改,某些软件可能会出现故障或生成错误。对于对时间步骤变化敏感的系统,可使用 -x 选项(与 -
g
选项无关),将阈值更改为 600 s,而非 128 m。使用 -x
选项将步骤限值从 0.128 增加到 600 存在缺点,因为必须使用不同的方法来控制时钟。它禁用了内核时钟,并可能会对时钟准确性造成负面影响。x 选项
可以添加到 /etc/sysconfig/ntpd
配置文件中。