世界を動かす技術を、日本語で。

2025年にメールは500マイル飛ぶことができるか?

概要

  • 500マイル以上 メールが送信できないという伝説的な話の再検証
  • ネットワーク遅延 とサーバ設定による現象の再現実験
  • クラウド化 による距離感の希薄化と現代の検証結果
  • 接続確認用コード の紹介とその挙動分析
  • 結論 :2025年でも設定次第で500マイル制限は再現可能

500マイルメール伝説の再検証

  • 昔話として語られる「大学の 学長が500マイル以上メール送信できない」現象
  • システム管理者 は「そんなことはあり得ない」と反論
  • 実際に試すと、 500マイルを超えるとメールが届かない 事象の再現
  • 技術の進歩による変化や、 2025年でもこの制限が存在するか の検証

非同期接続とタイムアウトの短縮

  • 非同期接続 を用いた短時間タイムアウトのCコードを利用
  • pollによる 3msタイムアウト 設定(カーネルのtickで実際は10ms~19ms程度)
  • 3msという値は 伝説に基づく設定 で、技術的な根拠は薄い
  • selectやpollのゼロタイムアウト では即時失敗となり接続困難
  • sendmailの再送待機を避けるため、 即座に結果が出る接続確認 を実施

実験:大学への接続確認

  • 東から西へ 複数大学への接続テスト
    • upenn.edu、uchicago.edu、ucla.edu いずれも「 it's a live one!」で成功
  • pingの結果 から、実際には物理的距離が反映されていないことに気付く
    • 多くの大学が クラウド上でホスト され、同一データセンター内の可能性
  • 物理距離500マイル の基準が意味を持たなくなっている現状

距離と遅延を意識した再実験

  • pingで遅延が現実的な大学 を選定して再挑戦
    • rutgers.edu(近距離)は成功、cmu.edu(中距離)は時々失敗
    • maine.edu(約500マイル)は成功と失敗が混在
    • udayton.edu(遠距離)はタイムアウトで失敗
  • 光速の制限 が2025年でも依然として有効

メールサーバ(MX)での再検証

  • MXレコード を取得し、実際のメールサーバでpingテスト
    • 多くの大学が 外部サービス(pphosted.com, Googleなど) を利用
    • pingの遅延値は大きくばらつき、 物理距離と一致しない結果
  • smtp.google.com の場合、UCLAへのメールは3000マイル離れても問題なし

結論

  • 設定ミスによる500マイル制限 は、2025年でも再現可能
  • ただし、 クラウドホスティングや外部サービス利用 により、物理距離と到達性の関係は希薄化
  • 地図を見ても実際の接続可能性は予測困難
  • ネットワーク設定やインフラの進化で、 伝説の再現はますます難しくなっている現状

参考:接続確認用Cコード(抜粋)

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/select.h>
#include <poll.h>
#include <netdb.h>
#include <err.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>

int connect_wait(int s) {
    struct pollfd pfd[1];
    int error = 0;
    socklen_t len = sizeof(error);
    pfd[0].fd = s;
    pfd[0].events = POLLOUT;
    error = poll(pfd, 1, 3);
    if (error == -1) return -1;
    if (error == 0) {
        errno = ETIMEDOUT;
        return -1;
    }
    if (getsockopt(s, SOL_SOCKET, SO_ERROR, &error, &len) == -1) return -1;
    if (error != 0) {
        errno = error;
        return -1;
    }
    return 0;
}

ポイント

  • 3msタイムアウト では、実際のネットワーク遅延が大きいと遠距離接続が失敗
  • クラウド化 により、物理距離とネットワーク距離が一致しないケースが増加

Hackerたちの意見

今日のラッキーな1万人の中に入っていて、500マイルのメールの元の話を知らないなら、ここで読めるよ:https://web.mit.edu/jemorris/humor/500-miles (5年前にHNで話題になったやつ – https://news.ycombinator.com/item?id=23775404 – 10年前も – https://news.ycombinator.com/item?id=9338708)

2025年の更新版を読んだ後でも、元の話を読んだら最後にはめっちゃワクワクしたよ。「コンピュータやメールについて知っていること」と「私のメールは500マイル以上送れない」ということが結びつく瞬間は、どんな気持ちだったんだろう。素晴らしい話だね。元の話をシェアしてくれてありがとう。

トレイ・ハリス(元の500マイルの話の語り手)が今どうしてるのか気になって調べたけど、Googleでは大体その頃(2002年)に生まれたフットボール選手ばっかり出てくる。

実はこれが初めて聞く話なんだ、ありがとう。

ラッキーな人の一人になれてありがとう!お約束のxkcd 10,000人のラッキーな人の説明はこちら: https://xkcd.com/1053/

もし今日のラッキーな10,000人の中にいて、「ラッキー10,000」という概念を知らなかったら、こちらのXKCDを読んでみてね: https://xkcd.com/1053/

単位 751単位、62接頭辞 あなたは: 10マイル あなたが欲しいのは: メートル * 16093.44 / 6.2137119e-05 へぇ、そんなことがあるなんて知らなかった!

リンクありがとう!これ、ローカルに保存しとかなきゃ。いつも参考にしてるから。これは私のお気に入りのネットストーリーの一つで、素晴らしい展開なんだよね!

タイトルを見て、これが何についてか分かると、正直ちょっと年を感じるな。

タイトルを見て、これが何についてか分かると、正直ちょっと年を感じるな。経験豊富で、若い子たちに教える準備ができてるってことで行こう。

昨日その話を見つけてもよかったのにね :-)

気分が良くなるなら、私はめっちゃ年寄りで、タイトルを見て元の話の4分の3を読んだ後に、前に読んだことに気づいたよ。

これ、若い人たちの間でも広く知られてるクラシックだと思うよ。俺は23歳で数学の修士課程やってるけど、知ってるCSの人たちは500マイルのタイトルをすぐに認識すると思う。ただ、出版直後に記事を読んでたら、こうやって再び話題になる時に歴史の一部になった気がしてちょっと羨ましいかな。

ストーリーをクリックしたら、光の速度が90年代後半から変わったのか気になったんだけど、どうやら変わってないみたい。

まだ媒質中の光の速度であって、真の光の速度ではないんだよね。銅の上の電気は、確か2/3だったはず。

これ、メールプロバイダーの統合についての話かと思った。つまり、メールが一つのデータセンターを離れないってやつね。「10年前は500マイルメールを送れなかったけど、今は内部でルーティングするから500マイル送れない。」残念だけど、そっちの方が面白かったと思う。

これが著者が最初にぶつかる壁だね。多くの大学が<2msで応答してるのは、みんな同じデータセンターにいるからだろうね。

この話には明らかに作り話が多い… 明らかに?自分も何度かこの電話を受けたことがあるけど、統計学者からじゃなかったし、そんなにデータももらえなかった。でも、話の大部分は正確だと思う。 > これはナンセンスだと思う… 無効または不完全なsendmailの設定がどうして3ミリ秒にデフォルトになるの? これは素晴らしい質問で、ページの他のどんなことよりも面白いかもしれないけど、まずはタイミングを再現してみよう。私のデスクトップは2017年のXeon E7-8880(144コア、2.3GHz; 1TB RAM)で、今の負荷は2.26だ: $ time sleep 0.001 実時間 0m0.004s ユーザー 0m0.001s システム 0m0.003s 私のi9-10900k(3.7GHz)で、現在の負荷は3.31: $ time sleep 0.001 実時間 0m0.002s ユーザー 0m0.000s システム 0m0.001s (execを測ってると思ったら、time /bin/echoは両方のマシンで0を返すよ)さて、これがどうしてこうなるのか?それを理解するには、connect()が実際にどう動くか、そしてconnect()のタイムアウトをどう作るかを理解する必要がある。技術者なら、いくつかの選択肢があることは知ってるけど、どれも複数のステップを含む。connect()はタイムアウトを引数に取らないからね。これが一つの方法だ(sendmailがやっていることとあまり変わらない): fcntl(f,F_SETFL,O_NONBLOCK); if(-1==connect(f,...)&&errno==EWOULDBLOCK){ fd_set a;FD_ZERO(&a);FD_SET(f,&a); if(!select(f+1,&a,&a,NULL,{.tv_sec=0,.tv_usec=0})) { close(f);return error; } } これをよく読めば、connect()の最初とselect()の最後の間にどれだけの時間が経過するかを自問するだけで、もしteduのようにそれがゼロだと思ったら、同じ驚きを感じるかもしれない。コンピュータは抽象的な機械ではなく、物質でできていてエネルギーで動いているから、物理法則に従ってすべてに時間がかかるんだ。20年以上経ってもまだ3ミリ秒ってのは、光の速度が存在するかどうかよりもずっと面白いテーマだと思う。

3msって、低解像度の時計が出す数値に近いと思ってたんだ。ナノ秒を測るような時計じゃなくて、タイマーが切れたかどうかちょっと気にする時に便利な普通のやつね。フレームを数えたり(120fpsで約8.3ms)カレンダーのイベントが起こったか確認するのに使うかも。333Hzの時計って、昔のコンピュータにもあったんじゃないかな、CPU用じゃなくても。

144コアの2.3GHz; 1TB RAM デスクトップにしてはちょっと過剰な気がするなぁ。ブラウザのタブ、いくつか閉じること考えた?

明らかに?自分も何度かこの電話を受けたことがあるけど、統計学者からの電話ではなかったし、データもそんなに詳しくなかった。でも、話の内容はほぼ正確だと思う。元の話でもちゃんとこう言ってるしね:> 「物語は、罪を犯した人を守るために少し改変されていて、無関係で退屈な詳細を省き、全体をより面白くするために作られている。」話を分かりやすくするために細かい部分を変えるのはよくあることだし、そもそもこの話は数年後に書かれたものだから、詳細が完全に正確である可能性は低いよね。明らかに、対話は物語を進めるために再構成されてるし、読者がそれを見て逐語的な記録だと思うことはないよ。もし著者が本当にその形の出来事が起こるのが不可能だと示す具体的なことを引用できないなら、「話の中には明らかに作り話がたくさんある」という結論を正当化するものは見当たらないな。

正直、これがよくわからない。まず、光は500マイルを3msで進むけど、接続信号も戻ってこなきゃいけないよね?だから、せいぜい250マイルってこと?でも、これはただの細かいことだよね。もっと重要なのは、信号が実際に目的地に届く以外のすべての操作が瞬時に行われると仮定しているように見えること。あなたが指摘するように、コンピュータは抽象的な機械じゃないから、信号が目的地に受信されて(間に電子機器がゼロだとしても)、目的地が応答するまでの実際の応答時間はゼロなんだ。物理的な設置や異なるハードウェアの種類によって大きなばらつきがあると思うから、500マイルの明確な境界を検出するのは非常に難しいかもしれない。何か見落としてるかな?

ポールのタイムアウトは3msで、伝説に指定されている。これはナンセンスだと思う、無効または不完全なsendmailの設定がどうして3ミリ秒にデフォルトになるの? 答えは、元の話によれば、3ミリ秒にデフォルトになっていたわけではなく、0にデフォルトになっていたんだ。3msは、システムが0タイムアウトで応答を確認するのにかかる時間だった: > いくつかの実験により、この特定のマシンでの典型的な負荷の下では、ゼロタイムアウトが接続呼び出しを3ミリ秒ちょっとで中止することが分かった。これは非常に異なるシナリオで、元の話においてpoll()が本当に必要かどうかは不明だけど(おそらくselect()が適切だろう)、もしあったとしても、selectのタイムアウトは0であって3msではなく、0と3msの区別がつかなかっただけなんだ。

うん、記事自体は全体的に良いけど、トゥルーサー的な部分がうざいよね。特に元のストーリーの基本的な読み間違いに基づいてるから。

大学のメールやウェブサーバーに関して、こんなに極端な集中化が進むとは思わなかったし、正直必要ないと思う。20年前、大学にいた頃は、メールを含むサーバーは全部学校の/16内にあったんだ。LMS用のソフトウェアパッケージもあったけど、ほとんどはオンプレミスで運用されてた。今は、ウェブサイトがサードパーティのクラウドサーバーにホスティングされてる(俺の学校のメインウェブサイトも、WordpressやDrupalサイトをホスティングする会社のものだし)し、メールはMicrosoftかGoogleだね。どの学校も同じみたい。昔はインフラを運営してたIT部門も、今は新しいノートパソコンを教員やスタッフのために注文したり、Wi-Fiアクセスポイントを5年ごとに交換する数人だけになってるんじゃないかな。

自分で答え出してるじゃん。ITスタッフは高いけど、SaaSのサブスクリプションはそれほどでもないよ。

スパムがあるから、今はほとんどの場所でメールを自分でホスティングすることを気にしないんだよね。GMailみたいな大手プロバイダーは、知らないサーバーを厳しくフィルタリングするから、自分でホスティングしようとしても、すべてを完璧に設定しないと(あるいは完璧に設定してもフィルタの禁止閾値に引っかかると)、メールが静かに配信失敗したり、スパムフォルダにブラックホールされちゃう。そうなると、気づかないまま、再考してもらう方法もないんだよね。

世界中の学校の数や、IPv4の/16の数、IPv6の普及率を考えれば、その予測は全然できるよね。普通、その「IT部門」っていうのは、数人のCSの先生たちで、サボってる学生にウェブページを作る宿題を出したり、サーバーのメモリを交換する実験をさせたりして、無理になったら諦めちゃうんだよね。

うちには、開発した会社が何らかの理由でアプリを再構築できなくなったプログラムがあるんだ。UKのサーバーからTLS経由で設定を読み込むのに500msのタイムアウトがあるんだけど、それを超えるとアプリが消えちゃう。UKでは問題ないけど、TLSは完了するのに約3倍のRTTが必要だから、RTTが160msを超えるとダメになる。ほとんどのユーザーはUK、ヨーロッパ、中東、アメリカの東海岸にいるけど、その160msのRTT範囲内なんだ。オーストラリアで十数人が使おうとしたときに問題が起きたから、やっぱり悪いコードが原因でこういうことが起こるんだよね。

500マイル以上のメールを送れない大学の学長がいて、賢いシステム管理者が「それは無理だ」と言ったら、学長が「私のオフィスに来て」と言ったんだ。そして、なんと、メールは500マイルを超える前に止まった。いや、いやいやいや。こんなに多くの事実を間違えるなんて、マジでどういうこと?この話はググれば出てくるのに。元のメールはこちら: https://web.mit.edu/jemorris/humor/500-miles そして、あいまいな部分をカバーしているFAQはこちら: https://www.ibiblio.org/harris/500milemail-faq.html これがイライラするのは、元の著者を知っているし、実際にこの話があった時のことを覚えているからなんだ(彼は何度かこの話をしてた)。要点をまとめると:> 大学の学長がいた NO! 統計学部の部長だったんだ。> 500マイル以上のメールを送れない、これは本当。統計学部にいたから、実際の地図を作る道具を持ってた。> 賢いシステム管理者が「それは無理だ」と言ったので、学長が「私のオフィスに来て」と言ったのは、まあ半分正しい。オフィスが関わってたから。> そして、なんと、メールは500マイルを超える前に止まった。これは本当。> 「話の中には明らかに作り話がたくさんある」 NO! この話の中で作り話はゼロ。関わった人は全員まだ生きてる。電話で連絡して話すこともできる。ハン・ソロがライトセーバーを使ったかどうかを議論してるわけじゃない。これ、マジで起こったことなんだから。ほんとに。