こんにちは!技術メディアの主筆ライターとして、日々パケットの「鼓動」を追いかけているネットワークスペシャリストです。
ネットワークの世界に足を踏み入れたばかりの皆さん、設定は完璧なはずなのに「なぜか特定のWebサイトだけ開かない」「大きなファイルのアップロードが途中で止まる」といった不思議な現象に悩まされたことはありませんか?
実はそれ、多くの場合、今回解説する「MTU(エムティーユー)」と「MSS(エムエスエス)」という、パケットのサイズに関する「行き違い」が原因なんです。
今日は、小難しい仕様書を読み解くのではなく、私たちの生活に身近な「郵便配達」に例えて、この奥深いパケットの旅路を一緒に紐解いていきましょう!
—
1. ネットワークの「箱」の大きさを決めるMTU
ネットワーク上を流れるデータ(パケット)には、一度に運べる最大のサイズが決まっています。これをMTU(Maximum Transmission Unit)と呼びます。
これを郵便に例えると、「ポストの口の大きさ」や「配送トラックの荷台のサイズ」のようなものです。
- MTU = 封筒(パケット)全体の最大サイズ
一般的なイーサネット(オフィスや家庭のLAN)では、このMTUは通常1500バイトと決まっています。しかし、インターネットの長い道のりの中には、トンネル(VPN)や特殊な回線(PPPoEなど)を通る場所があり、そこでは「ポストの口」が少しだけ小さくなっている(例:1454バイトや1460バイト)ことがあるのです。
2. 中身の「正味の量」を決めるMSS
次に登場するのがMSS(Maximum Segment Size)です。これはTCPというプロトコルでやり取りする、「純粋なデータ(中身)の最大サイズ」を指します。
封筒の中には、宛先を書いた「IPヘッダー」や、届いた順番を整理する「TCPヘッダー」という書類を必ず入れなければなりません。
- IPヘッダー:通常
20バイト - TCPヘッダー:通常
20バイト
つまり、全体のサイズ(MTU)が1500バイトだとしたら、ヘッダーの40バイトを引いた、残りの1460バイトが、一度に詰め込めるデータの限界、つまりMSSになります。
握手の時に「サイズ」を教え合う
TCPで通信を始める時、最初にお互い「スリーウェイ・ハンドシェイク」という挨拶をしますよね。この時、クライアントとサーバーはこう囁き合います。
> 「私のところは、一度に1460バイトまでなら受け取れますよ!」
これがMSSネゴシエーションです。お互いの希望を聞き、小さい方のサイズに合わせて通信をスタートさせるのです。
—
3. なぜ「パケット断片化」が問題になるのか?
ここでトラブルが発生します。
お互いが「1460バイト(MTU 1500相当)で送るね!」と合意したとしても、その途中の道に「MTUが1454バイトしかない関所(ルーター)」があったらどうなるでしょうか。
1. ルーターの苦悩:「おっと、この封筒は私のところのポストには大きすぎて入らないぞ!」
2. 断片化(フラグメンテーション):ルーターは親切心から、封筒をハサミでチョキチョキ切り分けて、2つの小さな封筒に詰め直して送ろうとします。
しかし、現代の高速なネットワークにおいて、この「切り分け作業」はルーターに大きな負担をかけます。さらに、セキュリティ上の理由で「切り分けられたパケットは通さない」というルールがある場所では、パケットは無残にも捨てられてしまいます。
これが、「通信は確立するのに、大きなデータだけ届かない」というトラブルの正体です。
—
4. PMTUD(経路MTU探索)と「ブラックホール」の恐怖
本来、ルーターは封筒が大きすぎた場合、送信元に「ごめん、大きすぎて通れないから、次はもっと小さくして送って!」という通知を送ります。これをICMP(Type 3, Code 4)という信号で伝えます。
これを受け取った送信元は、自動的にサイズを調整します。これをPath MTU Discovery (PMTUD)と呼びます。
ところが!
セキュリティを厳しくしすぎたファイアウォールが、この「ごめん、通れない」という大事なICMP信号を「怪しい通信だ!」と勘違いしてブロックしてしまうことがあります。
送信元には「届かなかった理由」が伝わらず、パケットは虚空へと消えていく……。これが「ブラックホール・ルーター」現象です。
—
5. 実務で役立つ解決策:MSSクランプ(MSS書き換え)
この「ブラックホール」を回避するために、ネットワークエンジニアが現場でよく使う「魔法」があります。それがMSSクランプ(MSS Adjustment)です。
これは、ルーターが「スリーウェイ・ハンドシェイク」のパケットを横から覗き見して、「あ、この人たち1460で送ろうとしてるけど、この先の道は狭いから、強制的に1414に書き換えちゃえ!」と、こっそり値を調整するテクニックです。
設定例(Ciscoルーターの場合)
例えば、フレッツ光などのPPPoE環境(MTU 1454)に合わせて調整する場合の設定は以下のようになります。
interface Dialer1
! MTUを1454に設定(PPPoEの標準的な値)
ip mtu 1454
! TCPのシンパケット(開始合図)を見つけたら、
! MSSを強制的に1414(MTU 1454 - 40バイト)に変更する魔法のコマンド
ip tcp adjust-mss 1414
設定例(Linuxサーバー/ルーターの場合)
Linuxをルーターとして使っている場合、iptablesを使って同様のことが可能です。
# 送信されるTCPパケットのMSSを、経路のMTUに合わせて自動的に最適化する設定
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# または、手動で特定のサイズ(例:1414)に固定する場合
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1414
—
まとめ:パケットの気持ちに寄り添うエンジニアへ
一見、地味で目立たないMTUとMSSの関係。しかし、ここを理解しておくと、トラブルシューティングの時に「パケットがどこで、なぜ苦しんでいるのか」が手に取るようにわかるようになります。
1. MTUは全体の箱のサイズ(標準は1500)。
2. MSSは中身のデータのサイズ(MTUからヘッダーの40を引いたもの)。
3. 通信経路に狭い道があると、パケットは詰まってしまう。
4. MSSクランプで、最初から「少し小さめのサイズ」を約束させるのが実務の知恵。
「ネットワークがつながらない!」と焦った時は、一歩立ち止まって、この「箱のサイズ」を思い出してみてください。きっと、パケットたちの声が聞こえてくるはずですよ。
一歩ずつ、楽しみながら理解を深めていきましょう!次回の記事もお楽しみに。
コメント