第12章 交通心脏骤停(1/1)
交通信号中央协调器是整个瀛海市地面交通的大脑。它连接着全城超过两万个智能信号灯和十七万辆智能驾驶车辆,它实时计算每条道路的车流量、每个交叉口的路权分配、每辆自动驾驶舱的最优路径,它的决策延迟从不超过六毫秒。为了让这套系统在任何情况下都能正常运行,它的主控机房配备了四重冗余电源,其中就包括旧港区变电站专供的那条独立高压线路——这条线路平时隐藏在市政供电网络的多层级保护之下,不对外暴露,只在主供电路全部失效时才切入。
当旧港区变电站的三相断路器跳开的那一刻,协调器没有立刻断电。独立高压线路的切换动作非常快,快到主控屏幕甚至没有跳一下。但备用电源切入指令被林劫延迟的五秒钟里,机房日志里多出了一条短暂的欠压警告,电压跌到了额定值的百分之七十六,虽然控制核心还在运转,但机房的环境监控系统、辅助散热模块和日志同步单元经历了一次瞬断。环境监控系统重启之后,设备管理总线需要重新枚举所有挂在总线下方的传感器节点,传感器节点负责监测机房温度、湿度和烟感——这些跟信号灯本身没有直接关系,但机房的设计规范要求总线枚举未完成期间,禁止对核心控制逻辑加载任何外部数据更新,以避免在环境异常期间引入错误控制指令。也就是说,在这短暂的几秒内,交通信号中央协调器的控制逻辑依然在运行,但外部数据接口全部被锁死了。
而沈易的逻辑炸弹恰好选在了这个瞬间触发。
沈易在墨影旧服务器上那套“绿波”项目的残留代码里埋了补丁,用的授权密钥是博士去年为了合法测试申请下来的一次性签名,还没过期。逻辑炸弹的内容不复杂——一段伪装成正常信号调度指令的恶意代码,在触发之后会向全城所有智能信号灯广播一个最高优先级的“全红闪烁”指令。“全红闪烁”不是林劫发明的攻击方式,它原本就是龙吟系统设计里的一套应急方案——在地震、台风等极端灾害导致交通信号协调器主控失联时,所有交叉口信号灯进入全红闪烁模式,把智能路口暂时降级成需要人工观察的全向停车标志。这套应急逻辑本身是安全的,前提是协调器本身判定自己处于“极端灾害失联”状态,并且发出指令的时候没有被注入恶意代码。
逻辑炸弹绕过了“极端灾害判定”这一前置条件,直接跳到了指令广播。它告诉全城信号灯:“协调器要离线了,进入应急模式。”而协调器本身并不知道自己“离线”了——它还在运行,环境监控系统恢复之后所有模块正常工作,系统自检全部通过。但全城两万个信号灯已经收到了全红闪烁指令,开始执行。协调器发现信号灯在不该红闪的时候集体红闪,立即尝试广播一个新指令覆盖掉之前的应急指令,但之前的全红闪烁被标记为最高优先级的“灾害应急指令”,正常工况指令无权覆盖。要想撤销全红闪烁,只能发出更高优先级的“灾害解除指令”,而灾害解除指令的触发条件严格绑定在环境监控系统:必须由环境监控系统完成全部传感器枚举、确认机房无火灾无地震无物理损伤之后,才能向信号灯网络广播“警报解除”——枚举过程刚好被欠压重启打乱了,需要重新执行,而环境监控系统还在排着队等设备管理总线把所有传感器都认领回来。
在这十几秒的窗口里,没有任何人、任何系统能关掉全城的红闪。
瀛海市有两万多个路口。在同一秒内,每个路口的信号灯同时切到了红闪模式。东西南北四个方向的红灯同时闪烁,像是全城路口的心跳被什么东西一把握停了。最初几秒里,第一波追尾事故就发生了——一个绿灯直行通过路口的司机,信号灯突然切到全红闪烁,他的视线还停留在前一辆车顺利通过的惯性里,等他反应过来的时候,交叉方向的车辆已经闯进了路口。不是闯红灯——在红闪模式下车辆应该像对待全向停车标志一样停车观察再通行,但绝大多数驾驶员没见过红闪,他们花了一两秒盯着头顶闪烁的红灯感到困惑,而一两秒的犹豫在晚高峰车流里足够让三辆车撞在一起。瀛海市交通管理局的内部数据显示全市大约有百分之七十的驾驶员从未遇到过全红闪烁模式,驾校教材里关于手动应对全红路口的内容被压缩到了附录最后一页。
碰撞声不是一起一起响的,是一层一层叠上去的。城市不同角落的撞击声在夜幕中混成一片闷雷似的低鸣,从空中俯瞰,每一个闪烁的红灯路口都像一颗卡在血管里的血栓,而车流还在不停地往上涌。那些车辆不是故意闯红灯——他们根本不知道该不该停,头顶的信号灯在闪一种从没见过的模式,车载导航因为DNS污染收不到实时路网协调数据,自动紧急制动系统在最后一次收到协调信号之后果断切断了油门,但方向盘还在司机自己手里,而司机自己不知道该往哪打。
全自动驾驶舱的情况更糟。那些没有方向盘的座舱在系统判定信号灯异常之后自动进入全停止模式,三万辆全自动驾驶舱在各自的行驶路线上紧急制动,直接停在原地,成了道路中央的静止障碍物。瀛海市晚高峰时段主干道平均车流量大约每秒七千辆,每一秒都有一批新的车辆涌入这些堆满静止障碍物的道路,后面的车不知道前面发生了什么,以为只是正常拥堵,挤上去才发现前面堵着一辆不开门的空舱。双模车的手动模式切换延迟只有三秒,但在车速较高的城市快速路上,三秒已经足够后面的车追上来。
城西高架桥上,四辆全自动驾驶舱前后锁死在中间车道。一个双模车驾驶员看到前方的舱突然急刹,本能地打方向盘往右规避,但右前方的另一辆全自动驾驶舱也在同一时刻切断了油门。方向盘打了半圈,车身已经歪进了右侧车道,右侧车道最后面的一辆轿车来不及减速,侧向撞上了双模车的右后车门,直接把车推过了中央隔离墩,车头翻到了对向车道。对向车道的车流本来还在缓慢挪动,这一下如同往沟渠里扔了块石头,水花四溅,连环追尾一直延伸到高架桥转弯处看不见的地方。
铁芯蹲在墨影临时据点的窗台上,屏幕上的交通模拟画面不再是一张地图,而是一大片密密麻麻的红色斑点,每个斑点都在扩散撞在一起又形成更大的红斑,像是某种急性传染病在路网里传播。博士那个“绿波”项目的模拟引擎把每一起事故的位置、涉事车辆数、预估人员伤亡等级都标了出来,数据刷新得太快根本来不及细看,铁芯只记住了一个数字——逻辑炸弹注入后的前四十秒内,模拟引擎在瀛海市路网上标记的追尾事故超过了一千起。
沈易坐在屏幕前看着这些数字翻涌,脸上没什么表情,但手里的压缩饼干攥碎了——他为了等这一刻连续熬了好几个通宵,没怎么好好吃饭,饼干渣扑簌簌落在大腿上。阿六从锈带北配电间里跑出来,站在废弃工厂的楼顶上遥遥望着城市的方向,第一次看见没有霓虹流动的瀛海市——那些通常铺满城市主干道的车灯光流消失了,取而代之的是无数固定不动的光点,像一颗被摔碎的荧光表盘。只有锈带的主路上偶尔还有几辆旧车在移动——锈带居民大多开的是手动驾驶的老旧改装车,他们本来就不信系统,信号灯对他们来说一直是装饰。