当电脑时钟偏差仅一秒时会发生什么
你的电脑或智能手机的时钟看起来非常准确。然而,计算机内置的时钟依靠晶体振荡器运行,如果放任不管,每天就会偏差数秒。如果不加以校正,TLS 证书验证会失败,双因素认证的一次性密码会失效,日志时间戳变得不可靠,分布式系统的数据完整性会崩溃。
NTP(网络时间协议)就是通过互联网校正这种"时钟漂移"的协议。
NTP - 自 1985 年以来守护时间的协议
NTP 由 David L. Mills 设计,第一份规范 RFC 958 于 1985 年 9 月发布。此后经过多次修订,2010 年 RFC 5905 定义的 NTPv4 得到广泛使用。NTP 使用称为 Stratum 的层级结构运作。
- Stratum 0:原子钟和 GPS 接收器等高精度时间源。不直接连接到网络
- Stratum 1:直接连接到 Stratum 0 的 NTP 服务器。被称为"主参考时钟"
- Stratum 2:从 Stratum 1 获取时间的服务器。许多公共 NTP 服务器在此层级运行
- Stratum 3 及以下:依次从下层服务器获取时间的服务器。最大到 Stratum 15
NTP 不是简单地复制服务器的时间,它测量并补偿网络延迟。它从多个服务器获取时间,并使用算法统计选择最可靠的值。
时钟偏差会导致什么问题
TLS 证书验证
TLS 证书有有效期(Not Before / Not After)。如果客户端的时钟严重偏差,可能会将有效证书判定为"已过期",或将尚未生效的证书判定为"有效"。证书透明度机制也依赖于准确的时间。
TOTP(基于时间的一次性密码)
Google Authenticator 等认证器应用根据当前时间生成每 30 秒变化一次的代码。规范(RFC 6238)允许验证方接受约一个步长(30 秒)的偏差,以吸收网络延迟,因此小幅偏差仍能通过。但一旦时间差超出这个容许范围,即使输入正确的代码也无法匹配,导致无法登录。
Kerberos 认证
Active Directory 中使用的 Kerberos 认证默认不容忍超过 5 分钟的时钟差异。如果企业网络中的 NTP 宕机,所有员工都可能被锁定。
分布式数据库
Google Spanner 等分布式数据库通过时间确定事务顺序。Google 开发了名为 TrueTime 的专有时间基础设施,它结合原子钟和 GPS,并且不把时间返回为一个精确的点,而是返回为包含误差范围的区间。其思路不是把偏差归零,而是保证偏差的上限,并在该范围内维持事务顺序。
日志可靠性
调查安全事件时,需要按时间顺序关联多台服务器的日志。如果时钟不同步,就无法准确重建事件之间的因果关系。
闰秒 - 时间同步的最大敌人
由于地球自转速度不恒定,原子钟累积的均匀秒所形成的时间与基于地球自转的时间(UT1)之间会逐渐产生差异。为了把这个差异控制在一定范围内,我们使用的 UTC 中偶尔会插入"闰秒"。在 23:59:59 之后添加一个通常不存在的秒,23:59:60。
在 2012 年 6 月 30 日插入闰秒时,Linux 内核闰秒处理的缺陷引发了一连串故障,Reddit、Mozilla 等运行在 Linux 上的服务相继受到影响。许多软件假设"一分钟有 60 秒",没有考虑第 61 秒的情况。
为此,Google 开发了一种叫"闰秒涂抹"的技术。不是一次性插入闰秒,而是在 24 小时内逐渐调整时间。2022 年,国际度量衡大会 (CGPM) 第 4 号决议决定,在 2035 年之前放宽 UT1 与 UTC 之差的容许上限,这实际上意味着不再插入闰秒。
总结
时间同步是互联网"隐形基础设施"中最不起眼的部分之一,但其重要性不可估量。TLS、2FA、Kerberos、分布式数据库、日志分析,所有这些都依赖于准确的时间。当你在 IP 确认酱上查看连接信息时,支撑那次通信的 TLS 握手也依赖于精确的时间同步。
本文相关术语
常见问题
什么是NTP?
自1985年运行的时间同步协议。以原子钟和GPS为顶层的Stratum层级结构,在补偿网络延迟的同时保持计算机时钟的准确性。
时间偏差会导致什么问题?
TLS证书验证失败、TOTP一次性密码不匹配、Kerberos认证被拒绝、分布式数据库数据不一致、日志时间戳可信度丧失等,影响范围广泛。
什么是闰秒?
为补偿地球自转速度偏差而在UTC中插入的1秒。2012年闰秒插入时Reddit等发生故障,2022年国际度量衡大会决议在2035年前不再插入闰秒。