當系統錯誤遇上光速:讀 Trey Harris 的「500 Miles Email Bug」

本篇文章更新時間:2026/01/30
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


當系統錯誤遇上光速:讀 Trey Harris 的「500 Miles Email Bug」

一封永遠寄不出超過 500 英里的神秘信件(靈感來自 500 Miles

編輯前言:這篇經典技術奇聞,講述一個聽起來荒誕到不行、卻又完全合乎邏輯的系統錯誤。它不只是好笑,更是一堂扎實的工程課:版本差異、預設參數、以及那些「不應該發生、但偏偏發生了」的邊界案例。

核心觀點

  • 問題居然是:統計系寄不出超過 500 英里以外的 email
  • 根源不是網路,而是 Sendmail 版本被悄悄降級,導致新設定檔與舊 sendmail 不相容。
  • 連線 timeout 被視為 0,一台機器能等的時間只有 3 毫秒,換算光速距離剛好約 520 英里

深入解析

這篇文章由 Trey Harris 所寫,原文記錄於 MIT 網站。故事本身是工程師社群的傳奇:荒謬、科學、又極度工程味。

作者當時負責校園郵件系統,結果接到統計系主任一通令人傻眼的電話。

「我們不能寄出超過 500 英里以外的 email。」

這聽起來像玩笑,但作者實測後真的重現問題。從北卡寄到 Richmond、Atlanta、New York 都 OK;寄到 Memphis、Boston、Detroit 全部失敗。寄給住在北卡、但 ISP 在 Seattle 的朋友也失敗。

事情逐漸清晰:不是收件者所在位置,而是 收件端 mail server 的位置

版本降級:問題的鑰匙

  • 統計系的機器原本使用 Sendmail 8。
  • 顧問更新 SunOS 時,把 Sendmail 降級成了 Sendmail 5。
  • 舊版看不懂新版 sendmail.cf 裡的長參數名稱,於是跳過。
  • 跳過後參數等於沒設定,而 Sendmail 5 又沒有預設值。

其中一個被吃掉的參數就是 SMTP connect timeout,因此被視為 0。

3 毫秒的極限與光速

作者實驗後發現:

  • Timeout = 0 → 機器能忍受的連線嘗試時間約 3ms
  • 校園網路是 100% switched,近距離的連線延遲幾乎純粹是光速限制。

於是他用 units 工具做轉換:

3 毫秒的光速距離 ≒ 558 英里

這個結果完美解釋了為什麼:

  • 400 英里內的 email OK
  • 600 英里以外的 email 全部 timeout
  • 現象穩定且可重現

技術推論與實際現象精準吻合。完全符合「既荒謬又合理」的工程美學。

筆者心得與啟發

讀完整篇,我最大的感受是:工程事故裡,最荒謬的情況常常來自最普通的錯誤組合。 這個故事表面看起來像科幻或網路迷因,但它的核心其實是:

  • 版本不一致
  • 設定檔語法差異
  • 預設值缺失
  • 網路拓樸產生的邊界效應

這些問題在任何現代系統裡都依然可能發生。更何況,今天的服務比當年的 sendmail 複雜 100 倍。

這篇故事也提醒我:

  • 當使用者回報聽起來天方夜譚的錯誤時,千萬別太快否定
  • 工程師思考時,應該先假設對方觀察到的現象是真的,再去找能解釋它的模型。
  • 版本管理、環境一致性、預設參數——沒有一樣是小事。

對我來說,這不是一個好笑的技術段子,而是一堂非常實用的工程管理課。它讓我再次意識到:真相往往藏在那些看似不可能的細節裡。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon