本篇文章更新時間: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 倍。
這篇故事也提醒我:
- 當使用者回報聽起來天方夜譚的錯誤時,千萬別太快否定。
- 工程師思考時,應該先假設對方觀察到的現象是真的,再去找能解釋它的模型。
- 版本管理、環境一致性、預設參數——沒有一樣是小事。
對我來說,這不是一個好笑的技術段子,而是一堂非常實用的工程管理課。它讓我再次意識到:真相往往藏在那些看似不可能的細節裡。
