2026年9月8日,星期二。英国空中交通管制系统丢失了核心飞行数据链路,从英国各机场起飞的航班停了大约四个半小时。超过2000架次航班延误、取消或改道。英国空管服务商NATS的初步报告给出了原因:一个遗留软件缺陷,暴露窗口约1毫秒。程序员给这类bug起了个名字——竞态条件。
这是一份事后复盘,按开发者读代码的方式读。
![]()
先看几条硬事实
上午10点,一个有效且正确的应答机代码请求,在更新某个值的途中被暂停,以便处理一条更高优先级的消息。当它恢复时,报告的原话是"没有正确恢复,产生的输出被损坏了"。
窗口"大约1毫秒"。报告说,早1毫秒或晚1毫秒,"更新都会正常完成"。
损坏的数据让伦敦区域管制中心的系统超时,它按设计切断了与国家飞行数据系统的链路,以保护两个系统。第一次断链发生在10点02分,45秒后自愈,被记录为"无持续运行影响"。
修复伦敦空域里的一条坏记录,办法是受控重启国家系统,这意味着全英国范围的限制。NATS当天预计约8000架次航班,实际处理了6094架次。
没有攻击迹象,也没有操作员失误。NATS表示永久性软件修复已经写好,正在测试中。
两个系统,一条链路
这里有两个系统值得说清楚。NAS,即国家空域系统,报告称其为"支撑NATS国内管制中心众多空管系统的核心飞行数据系统"。它保存飞行计划、处理修订、分配应答机代码,并把飞行计划与雷达航迹匹配。它的数据还输送给英国多个机场和其他管制中心的系统。
LAC,即伦敦区域管制中心,主要负责英格兰和威尔士上空24500英尺以上的航班,典型九月的一天约有6500架次。LAC的系统通过一条链路与NAS通信,问题就出在这条链路上。
应答机代码是飞机应答机发出的四位识别码,管制员靠它把雷达上的光点(高度、速度、方向)对应到正确的飞行计划上。分配一个代码是例行操作。上午10点,有人手动请求了一个。报告特意说明,这个请求"是正确发出的,相关飞行计划没有任何异常或无效之处"。
时间线
以下均为当地时间,来自报告第5节。
NATS在BST 14:16于X上发帖称正在"调查技术问题",16:46发帖称已"实施修复",当晚表示恢复"比我们希望的要久"。积压用了超过两天才清空,NATS新闻稿称"数十万旅客的出行计划被打乱"。
为什么1毫秒就够了
NAS承担多项任务,按优先级在它们之间切换。报告说得很直白:"响应优先请求在不同活动之间切换,是系统的正常功能。"暂停一个小任务去处理紧急任务,正是优先级调度器的意义所在。
问题出在暂停落在哪里。报告列出这个场景此前从未发生过的三条编号原因:
- 缺陷位于"软件模块内一个特定的代码子段,暴露窗口估计约1毫秒"。
- "一条更高优先级的请求必须恰好在那1毫秒内到达,同时原请求正处于更新某个值的途中。"
- "如果更高优先级的请求早1毫秒或晚1毫秒到达,更新都会正常完成。"
报告从未使用"竞态条件"这个词。Hacker News上的程序员们立刻用了。macguillicuddy说:"看起来是分配应答机代码时的竞态条件(窗口1毫秒)。"crote说:"某个本应是原子操作的东西,被抢占任务切成了两半。"结果取决于两个活动的时序,这就是竞态条件的定义;而一个可能被观察到或恢复成半完成状态的更新,就是"非原子"的含义。
NATS没有公布代码,报告也没说恢复时具体出了什么错。所以这里只能给这类bug一个通用示意,不是NAS代码:
/* 非原子更新的通用示意,并非NAS代码 */
record->status = ALLOCATING;
record->code = pick_free_code(); /* 更高优先级任务可能在此处运行 */
record->status = ALLOCATED; /* ……恢复的任务可能继续执行 */
/* 从它已不再持有的状态继续 */
修复模式老套且乏味。让更新变成原子操作:在旁路构建新值并一步发布,或者对那几条不能被打断的指令加锁(或禁用抢占),或者让恢复的任务在继续前重新检查自己的状态。供应商选了哪一种,报告没有说。
为什么1毫秒不算"罕见"?
Hacker News上的lukaslueg说:对一个抢占线程而言,"1毫秒是绝对永恒,本周二之前保证会发生™"。2026年9月8日正是星期二。一个全天候运行、持续多年的系统,终会走遍每一个1毫秒的窗口。NATS首席执行官Martin Rolfe对BBC称该缺陷"非常非常隐蔽"。两者都对。窗口极小,而极小的窗口终会被撞上。
一个安全特性如何让航班停飞
损坏的值本身没有让任何东西崩溃。它"影响了一些后续的飞行数据更新"。LAC的系统试图处理它们,耗时过长而超时,每次超时都表现为与NAS的连接丢失。随着坏更新增多,断链来得更快。LAC一直自动恢复,"直到它再也无法恢复。因此,按设计,与NAS的链路被自动切断,以保护……"
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.