趣事记录 | 有哪些让你目瞪口呆的 Bug ?

在知乎上看到一个有趣的 Bug 事件,转载记录一下。

原回答地址:Here

发生于麻省理工的一个有意思的bug:只能发500英里的邮件

原文在此:http://web.mit.edu/jemorris/humor/500-miles

相当Nerd的bug,有兴趣的人看看吧。
大意是,当年麻省的一名系统管理员,忽然收到统计系主任打来的求助电话“咱们的邮件发不了 \(500\) 英里以外的地方,其实,是 \(520\) 英里更准确点”。

系统管理员心里¥!&……*&。
不过在他开始用自己的邮件测试后,发现邮件的确只能发往 \(520\)​ 英里以内,其余的收件地点一律失败。

于是在他一片纠结中他渐渐开始发现问题,邮件服务器被人更新过操作系统(当年还是SunOS),但是由于操作系统的发行版往往配备了旧版软件,于是在更新操作系统的时候邮件软件反而被降级了(Sendmail 8 -> Sendmail 5)。
于是进一步调查发现,在更新操作系统时,管理员自己编写的Sendmail配置文件(sendmail.cf)被保留了下来。这样就出现了这种状况:Sendmail 5尝试解析Sendmail 8的配置文件。

但是为什么会是 \(500\) miles呢?为什么是 \(500\) miles咧?

原因是这样的,Sendmail 5面对陌生的配置文件,凡是不理解的部分都会忽略,凡是没设置过的配置项自动设置成0。这样其中有一个被设置成0,这一项就是 (连接远端SMTP服务器的超时时间)timeout to connect to the remote SMTP server。后来经过实验,发现\(0\)秒的timeout会导致Sendmail在 \(3\) 毫秒后中断连接。

所以,为啥是 \(500\) miles?

在当年,MIT的校园网是没有那么多router的,也就没那么多网络延迟,所以连接一个远端主机的时间大概就是光所需的时间。于是3毫秒, 就意味着:

\[0.003 * 3 * 10^{8} * 0.001 * 0.621=558.9000000000001 \]

\(558\) 英里。也就是 \(558\) 英里以外的服务器,都无法连接到,而 \(558\) 英里以内的服务器,都可以正常通信。
当当当,这就是 \(500\) 英里的bug啦。

posted @ 2021-10-12 11:28  RioTian  阅读(211)  评论(0编辑  收藏  举报