当电脑时钟偏差仅一秒时会发生什么
你的电脑或智能手机的时钟看起来非常准确。然而,计算机内置的时钟(晶体振荡器)每天会偏差几秒到几十秒。如果不加以校正,TLS 证书验证会失败,双因素认证的一次性密码会失效,日志时间戳变得不可靠,分布式系统的数据完整性会崩溃。
NTP(网络时间协议)就是通过互联网校正这种"时钟漂移"的协议。
NTP - 自 1985 年以来守护时间的协议
NTP 由 David L. Mills 于 1985 年设计,是至今仍在运行的最古老的互联网协议之一。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 秒变化一次的代码。如果服务器和客户端的时钟相差超过 30 秒,代码就不会匹配,登录变得不可能。
Kerberos 认证
Active Directory 中使用的 Kerberos 认证默认不容忍超过 5 分钟的时钟差异。如果企业网络中的 NTP 宕机,所有员工都可能被锁定。
分布式数据库
Google Spanner 等分布式数据库通过时间确定事务顺序。Google 开发了名为 TrueTime 的专有时间同步系统,结合原子钟和 GPS 实现微秒级精度。
日志可靠性
调查安全事件时,需要按时间顺序关联多台服务器的日志。如果时钟不同步,就无法准确重建事件之间的因果关系。
闰秒 - 时间同步的最大敌人
由于地球自转速度不恒定,偶尔会插入"闰秒"来校正原子钟时间(UTC)与基于地球自转的时间之间的偏差。在 23:59:59 之后添加一个通常不存在的秒,23:59:60。
在 2012 年闰秒插入期间,Linux 内核的一个 Bug 导致 Reddit、Gawker、LinkedIn 等服务发生故障。许多软件假设"一分钟有 60 秒",没有考虑第 61 秒的情况。
为此,Google 开发了一种叫"闰秒涂抹"的技术。不是一次性插入闰秒,而是在 24 小时内逐渐调整时间。2022 年,国际度量衡大会 (CGPM) 通过决议,将在 2035 年前废除闰秒。
总结
时间同步是互联网"隐形基础设施"中最不起眼的部分之一,但其重要性不可估量。TLS、2FA、Kerberos、分布式数据库、日志分析,所有这些都依赖于准确的时间。当你在 IP 确认酱上查看连接信息时,支撑那次通信的 TLS 握手也依赖于精确的时间同步。