1月15日(周一)下午2点25分,位于新泽西州贝德明斯特的美国电话电报公司(AT&;T&T;)网络运营中心的网络经理开始注意到,他们全球网络的各个部分发出了数量惊人的红色警报信号。几秒钟内,以图形表示网络的巨大的72屏视频阵列与错综复杂的红线交错在一起,迅速蔓延的故障从一个计算机操作的交换中心跳到了另一个中心。经理们最初尝试的标准程序未能让网络恢复速度,在9个小时的时间里,工程师们竞相稳定网络,通过AT&;T拨打的电话几乎有50%未能接通。直到晚上11点30分,网络占用率低到足以让系统稳定下来的时候,仅美国电话电报公司(AT&;T)一家就损失了超过6000万美元的未接通电话。目前尚不清楚航空预订系统、酒店、租车中介和其他依赖电话网络的企业损失了多少业务。这是不应该发生的。美国电话电报公司(AT&;T)凭借其可靠性和安全性建立了声誉,并开展了大规模的广告宣传活动。哪里出了问题?通常,AT&;T;的长途网络是可靠性和强度的典范。在任何一天,AT&;T;的长途电话服务都会转接超过1.15亿个电话,这项服务当时承载了全国70%以上的长途话务量。这个庞大的网络的主干是一个由114个计算机操作的电子交换机(4ES)组成的系统,这些交换机分散在美国各地。这些交换机每小时可处理多达70万个呼叫,通过一个称为7号公共信道信令系统的级联网络连接。当网络从本地交换机接收到电话呼叫时,交换机将扫描14种不同可能路由的列表以完成呼叫。与此同时,它将电话号码传递给一个并行的信令网,该信令网检查备用路由,以确定另一端的交换机是否可以将电话传送到它的当地公司。如果目的交换机忙碌,原始交换机会向呼叫者发送忙碌信号并释放线路。如果交换机可用,则在交换机检查连接是否正常后,信号网络计算机在目的交换机进行预约,并命令目的交换机传递呼叫。整个过程只用了4到6秒。将整个网络减慢到爬行的时间只会稍微长一点。一个由100名疯狂搜索电话技术人员组成的团队向后追溯数据,发现了这个问题,这个问题始于纽约市。纽约的交换机进行了一次例行的自检,表明它正在接近负载限制。作为标准程序,交换机执行了4秒的维护重置,并通过信令网络发送了一条消息,表示在收到进一步通知之前不会再接听任何呼叫。重置后,纽约交换机开始分发在其离线期间备份的信号。在全国各地,另一台交换机收到一条消息,说有一通来自纽约的电话正在赶来,并开始更新它的记录,以显示纽约交换机已重新上线。来自纽约交换机的第二条消息随后到达,距离第一条消息不到10毫秒。因为第一条消息尚未处理,所以第二条消息应该保存到以后。然后,软件缺陷导致第二条消息被重写关键通信信息。接收交换机中的软件检测到覆盖,并在重置自身时立即激活备份链路,但另一对定时很近的消息在备份处理器中触发了相同的响应,导致备份处理器也关闭。当第二台交换机恢复后,它开始路由积压的呼叫,并在整个网络中传播关闭定时消息和关闭的循环。这个问题在网络中的114台交换机中反复出现,在稳定系统所需的9个小时内阻塞了5000多万个呼叫。问题的起因在几个月前就已经出现了。12月初,技术人员升级了软件,以加快某些类型消息的处理速度。尽管升级后的代码经过了严格的测试,但网络中114台交换机的恢复软件却在不经意间添加了一行错误。该缺陷是一个C程序,其特点是位于IF子句中的BREAK语句嵌套在SWITCH子句中。在伪代码中,程序读取如下:1 WHILE(环形接收缓冲区非空且侧缓冲区非空)DO2初始化指向侧缓冲区或环形接收缓冲区中第一个消息的指针3获取缓冲区副本4开关(消息)5情况(传入_消息):6IF(发送开关停止服务)DO7IF(环形写入缓冲区为空)DO8SEND";到状态映射9否则10中断结束IF11处理传入消息