2026年7月8日凌晨2点50分,墨尔本一位工程师把一台授时机箱重新通电。这本是一次例行维修。到早餐时间,澳大利亚最大的移动网络已经认定当天是2006年11月。
近900万用户失去通话、短信或数据服务。Telstra在9月2日公布的外部调查报告,把整件事追溯到一张GPS卡,以及一套让所有其他时钟都向它看齐的NTP服务器设计。
报告由Technology Audit Partners(TAP)出具,共10页。Telstra CEO Vicki Brady在摘要中写道:"这是一次本不该发生的故障。"
协议没错,架构错了
NTP(网络时间协议)把时钟按层级排列。Stratum 0是参考时钟,比如原子钟或GPS接收机;直接连它的服务器是stratum 1;从stratum 1同步的服务器是stratum 2,以此类推。
当一台服务器有多个时间来源时,有两道防线本该起作用。Netnod的总结解释了为什么这次都没用上:"NTP不问一个日期是否合理,它只问某个来源是否和其他来源不一致。"
7月8日那天,那张GPS卡让出问题的来源成了整棵时钟树里排名最高的时钟,所有可能提出异议的时钟都从墨尔本取时间。没有人能投票否决它。Netnod的说法是:"协议运转正常,架构没有。"
2020年那次改动埋下隐患
2020年切换到对等互联(peering),让环路成为可能。在ntpd语法里,差别只是每行一个词。对等互联本意是让同级服务器互相备份,但当一方悄悄变成另一方唯一真实来源时,网络就可能用自己的回声来投票。
Netnod的表述是:"两台服务器由同一个GNSS接收机供时,仍然只是一个来源,却被数了两次。"
GPS用10位字段广播周数。10位最多数到1023,所以每1024周、也就是不到20年,计数器就会归零。GPS时间从1980年1月开始,此前的两次归零分别发生在1999年8月和2019年4月。
正在运行的接收机遇到归零会继续计数。冷启动的接收机则必须猜自己处在哪个1024周的纪元里,而这个猜测写在固件中。旧固件会假设更早的纪元。按TAP报告第2.2节,墨尔本那张卡启动后回到了1024周之前,从2026年7月算起,正好落在2006年11月。
讽刺之处在于:这张卡熬过了2019年真正的归零,因为没人把它关掉。真正击垮它的是一次维修。修复方案早在2022年和2026年1月的厂商公告里就有,据《卫报》对参议院听证的报道,从未安装。CEO告诉参议院,这台机箱是2011年的授时机箱,更换成本约3万美元。
十九年一跳,网络撑不住了
移动核心网依赖一致的时间。时间跳了19年后,MME(移动性管理实体)重启,其余容量无法吸收负载。TAP的说法是"网络过载"。
更糟的是,Diameter信令控制器把约3万个IP地址前缀"渐进式损坏",给它们写上了错误的日期。这些地址无论容量如何都保持封禁状态,必须和厂商一起修复。
这也不是意外风险。据ABC报道,政府曾在2024年和2025年10月发出警告,提示对卫星授时的依赖问题;一位斯威本科技大学的教授今年早些时候还向Telstra提出过这一情景。
TAP的第一条结论最关键:Telstra没有把网络授时当作一项关键的自有能力,报告用的词是"主权职能"。其余问题都是由此衍生。Netnod写道:"每个决定都解决了眼前的问题,没有人被要求去看所有行动的总和。"
周一就能做的检查
在Hacker News上,rcaught引用这句话并补充:"这是对Telstra这家公司最完美的描述。"另一条被置顶的评论来自ipython:"难道没人听说过ntptrace吗?"
你可以周一就做这几件事:
ntpq -p:查看ntpd的对等端、层级和偏移chronyc sources:chrony下的同一视图ntptrace:沿链条一路追到stratum 1
热门跟贴