らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

なぜインターネットの MTU は 1,500 バイトになったのか

Ben Cox の Blog は興味深い記事が多く掲載されています。 その中でも How 1500 bytes became the MTU of the internet という記事が面白かったので、Ben さんに許可頂き、日本語に翻訳してみました。 英語が苦手なので、ところどころ「どう、ニュアンスを訳して良いのか?」が分かりませんが、とりあえず自分の勉強を兼ねてメモしておきます。 Thanks for your great article, Ben!


なぜインターネットの MTU は 1,500 バイトになったのか

イーサネットは至るところで、何万ものハードウェアベンダーが通信に利用し、実装しています。 ですが、 ほぼ全てのイーサネットリンクに共通する、MTU というひとつの値があります。

$ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP 
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

MTU (Maximum Transmission Unit) はひとつパケットをどのくらい大きく出来るかを表現します。 一般的に自身の LAN 上に存在するデバイスと通信する場合、MTU は大凡 1,500 バイトになり、インターネットでもほぼ一般的に 1,500 バイトで実行されます。 但し、これはリンク層で技術的により大きなパケットを送信することが出来ない、ということを意味するわけではありません。

例えば、(WiFi として知られている) 802.11 の MTU は 2304 バイトですし、もしネットワークで FDDI が利用されていれば MTU は約 4352 バイトです。 イーサネット自身には "ジャンボフレーム" という概念があり、MTU を最大 9000 バイトまで設定することが出来ます (NIC やスイッチ、ルータでサポートされている場合)。

ですが、インターネット上でこれらはほぼ無視されます。 インターネットバックボーンは現在、大部分がイーサネットリンクで構築されていますが、パケットの事実上の MTU はダウンリンクでパケットが断片化されるのを避ける為に非公式ながら 1500 バイトに設定されています。

一見すると 1500 というのは不自然な数字に見えます。 一般的にコンピュータが計算に使う多くの定数は 2 の累乗のような数字だと思います。 ですが、1500 はこれに当てはまりません。

では、1500 はどこからやって来て、なぜ私たちは未だにそれを使っているのでしょうか?

マジックナンバー

イーサネットが最初に世界的躍進を果たしたのは 10BASE-2 (cheapernet と呼ばれた) と 10BASE-5 (thicknet と呼ばれた) の登場でした。 数字はひとつのネットワークが大凡何メートルまで到達出来るかを示しています。

当時は数多くの競合プロトコルがあり、ハードウェア的な制限もあった為、オリジナルの作成者は電子メールでパケットバッファメモリ要件において 1500 というマジックナンバーが何らかの役割が果たしたと書き留めています。 (これを見つけてくれた @yeled に感謝します)

振り返ってみると、より長い最大値が良かったのかも知れませんが、初期段階で NIC のコストが増加していたとしたらイーサネットの普及を妨げていたかも知れず、あまり気にしていません。

ですが、話はそれだけではありません。 1980 年発行の "イーサネット:ローカルコンピュータネットワーク用のパケット分散スイッチング" はネットワーク上のより大きなパケットの効率的なコスト分析に関する初期のメモです。 イーサネットはすべてのシステム間で同軸ケーブルを共有するか、もしくはイーサネットセグメントの全てのメンバーに対して一度にひとつのパケットしか送信出来ないイーサネットハブという、当時のイーサネットでは特に重要でした。

(時々混雑する) これらの共有セグメント上での送信遅延が高くなり過ぎないだけでなく、パケットヘッダーのオーバーヘッドが多くなり過ぎない必要があります。 (上記論文の 15 - 16 ページ表を参照)

当時のエンジニアは 1500 バイト、または約 12000 ビットを最も "安全" な値として選んだようです。

以降、様々な送信システムが現れては消えていきましたが、いずれも最小の MTU 値はイーサネットの 1500 バイトのままでした。 ネットワーク上の最小 MTU よりも大きくなると結果として IP 断片化するか、またはパス MTU 検出が必要になります。 どちらにしても各々問題があります。 大規模な OS ベンダーでさえも既定の MTU を更に低くすることがありました

効率化の要素

これでインターネットの MTU が遅延やハードウェアの制限により 1500 バイトに制限されていることが分かりました。 これはインターネットの効率化へどのくらい悪影響があるのでしょうか?

f:id:sig9:20200221210227p:plain:w480

主要な IX (AMS-IX) からのデータを見ると、IX を経由するパケットの少なくても 20% が最大サイズであることが分かります。 LAN の合計トラフィックも確認することが出来ます。

f:id:sig9:20200221210239p:plain:w600

これらふたつのグラフを組み合わせると、おおよそこのようになります。 これはパケットサイズ毎のトラフィック量の推測です。

f:id:sig9:20200221210249p:plain:w600

または、これらのイーサネットプリアンブルとヘッダーが引き起こすトラフィックに注目すると、尺度は異なるものの同じグラフを得ることが出来ます。

f:id:sig9:20200221210304p:plain:w600

これは最も大きなパケットクラスのヘッダーに大量の帯域幅が費やされていることを示しています。 ピークトラフィックは約 246GBit/s のオーバーヘッドで最も大きなパケットバケットを読み込んでいることを示しているので、もし全てにジャンボフレームを採用することが出来ると想定したら、このオーバーヘッドは約 41GBit/s だけになります。

しかし、この点において船はより広いインターネットを航海したと考えます。 一部のインターネットトランスポートキャリアは 9000 MTU で動作しますが、大多数は上手くいかず、インターネットの精神を変更することが非常に困難であることが、幾度となく目にされています。


もし 1500 バイトの歴史について詳細なコンテキストをお持ちであれば、ethernet1500@benjojo.co.uk 宛にメールしてください。 悲しいことにマニュアルやメーリングリストへの投稿、その他のコンテキストは跡形も無く消えつつあります。


もしこの類のものが好きな方は、ブログのその他の部分もお好きかも知れません。 もし、次に私が何をするのか知りたければ、私のブログの RSS フィードツイッターで私をフォローしてください。

それでは、また次回!