【入門編】 TCP MSS(Maximum Segment Size)のネゴシエーションとMTUとの関係 – ネットワーク基礎とWebセキュリティ実践ガイド

こんにちは!技術メディアの主筆ライターとして、日々パケットの「鼓動」を追いかけているネットワークスペシャリストです。

ネットワークの世界に足を踏み入れたばかりの皆さん、設定は完璧なはずなのに「なぜか特定の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クランプで、最初から「少し小さめのサイズ」を約束させるのが実務の知恵。

「ネットワークがつながらない!」と焦った時は、一歩立ち止まって、この「箱のサイズ」を思い出してみてください。きっと、パケットたちの声が聞こえてくるはずですよ。

一歩ずつ、楽しみながら理解を深めていきましょう!次回の記事もお楽しみに。

コメント

タイトルとURLをコピーしました