なぜフランスあてのメールはうまく送れないのか?

なぜフランスあてのメールはうまく送れないのか?


Titanet を利用している方から時として、「フランスにうまくメールが送れないことがあり、何日かたってから返送されてくるがどうしてか」という質問を受けることがあります。また「東大からだとうまく送れる」とか「一旦 Titanet運用センターに送りつけるとうまくいく」という話をしてくださる方もいます。はたして真相はどうなのでしょうか。この小文ではこの問題について説明します。

たしかに、ときどきヨーロッパ方面へのメールがうまく送れなくなることがあるようです。なぜそのようなことが起きるのでしょう。

もちろん、相手のメールアドレスが誤っていたらメールは届きません。これは当り前のことですね。また、相手組織のメールを受け取るホスト(以下、少々乱暴ですが、メールサーバと呼ぶことにします。)が停止していた場合には、復旧するまでメールはどこかに留め置かれます(どこに留め置かれるかは、メールを出す側の設定によります。多くの場合は、メールを出したサブドメイン内のどこかに蓄えられていると考えてよいでしょう)。たいていの場合3日以上留め置かれると、配送不能と判断されて差出人にエラーメールとして送り返されます。しかし、メールアドレスには誤りはなく、相手のマシンも正常に動いており、相手のマシンまでの経路が全て正常でもメールが届かないことがあるのです。この理由を知るためには、われわれが利用している通信方式である TCP/IP の仕組みを知らなければなりません。ここではかいつまんで説明します。

一般に、電子メールは受け取り人が所属する組織のメールサーバに直接送達されます(昔は、直接送ることができなかったので、「電子メールのバケツリレー」をしていたのですが、今は違います)。つまり、メールを送ろうとする学内の計算機は、相手組織のメールサーバと直接通信しようとします。このとき TCP/IP という通信方式を用い、SMTPという作法にのっとってメールの送達を行います。ここに「フランス問題」の根源があります。なぜでしょうか。実は、TCP/IP でやりとりされるパケットには「寿命」という概念があり、一定時間が経過しても相手組織に到達しないパケットは途中で廃棄されてしまうのです。ただし、ここでいう「時間」はいわゆる「時の流れ」ではなく、あるパケットがネットワークをいくつ通過したかで表します。つまり、ある一定数以上ネットワークを通過しても相手組織に着かないパケットは、永遠に相手にたどりつけない迷子のパケットだろうから、廃棄するしかないだろう、というわけです。この「寿命」は、古い(といっても数年前の)計算機では 30 にセットされています(最近では、少なくとも 64 にするべきだとされています)。昔はネットワークの規模が小さかったので、30 ものネットワークを通過しても相手組織に到達しないのであれば、きっと何らかの異常のせいで永遠に相手に到達しない「迷子」であると判断して問題なかったのです。つまり30 は事実上の無限大を表していたわけです。迷子のパケットがネットワーク上にいつまでも存在していてはネットワークに負荷をかけるだけなので、そのようなパケットは捨てられてしまいます

この方式は単純ではありますが有効だったので、成功をおさめてきました。しかし、インターネットの規模は当初の予想を上回ってしまったために問題がおこりはじめました。たとえば、東工大からフランス方面にパケットを送ると、通過するネットワークの数は 30 よりちょっと大きいことがしばしばあります。そうなると、相手に到達する前にパケットは廃棄されますから、フランス方面にはパケットが届かないということになるのです。パケットが途中で廃棄されてしまえば、当然メールは送達されません。ただし、相手組織にパケットを送達する際にどのネットワークを通過するか(これを「経路」といいます)は、通過するネットワークの事情を反映して時々刻々変化します。したがって場合によっては、30以下になることもあります。これが「ときどき届くこともある」という症状となってあらわれます。

この問題の本質的な解決策は、東工大(あるいは日本)とヨーロッパを直接結ぶ通信路を確保することです(現在はアメリカを経由しています)。ヨーロッパに64kbps の国際ISDN を設置すると年間800万円程度かかるようなので(この他に通信時間に応じた課金がなされます)安くはありませんが、私は個人的には投資する価値はあると思います。東工大だけが幸せになればよいという発想はいただけませんから、強硬に主張するつもりはありませんが、とにかくパケットの寿命が尽きるまえにヨーロッパの各地にメールを送達するしかけを東工大内に作ることは可能なのです(もっとも国際 ISDN の通信相手を決めたり国際 ISDN の通信相手となる組織のネットワークにどう乗り入れるかを決めたりしなければなりませんからそれほど簡単ではありません)。

対処療法としてはパケットの寿命を延ばすという手があります。これには TCP/IPを制御しているモジュール(計算機の OS が UNIX なら、このモジュールはカーネルの中に埋め込まれています)を改造する必要があります。計算機あるいは OS を納入した業者に「IP パケットの TTL (寿命のことです)を大きくして欲しいがそれは可能か」といった相談をしてみてはどうでしょうか。もちろん、腕に覚えがあり、カーネルのソースコードをお持ちの方は、自分で対処することもできます。その場合には、カーネルのソースツリーから netinet まわりのコードを探しだし、その中で定義されている TTL のデフォルト値を修正して、カーネルを作り直すことになります。ただし、相手のマシンがこちらに向かって送出するパケットの寿命も 30だとすると、問題の解決にはなりません。メールを送る際には、こちらのマシンとあちらのマシンが相互にパケットをやりとりするので、こちらから送るパケットの寿命だけを大きくしてもだめなのです。この点には十分ご注意ください。

以上、おおざっぱな説明に終始しましたが「フランス問題」がなぜ起こるかおわかりいただけたでしょうか?

インターネットの広がりとともに、この「ときどきメールが届かない」という「フランス問題」は、今後も姿をかえつつしばしば発生すると思います。たとえば「南米問題」「アフリカ問題」などという形で。この小文がそういった際の状況理解の助けになれば幸いです。

Titanet運用センター講師

大野 浩之