MTUとフラグメンテーション

MTUとは

MTU(Maximum Transmission Unit)は、1回の送信で運べるデータサイズの上限です。[[イーサネット]] では標準1500バイトで、これより大きなデータは分割して送る必要があります。

荷物の宅配に例えると、MTUは「トラックの荷台のサイズ」です。荷台より大きな荷物は複数の箱に分けて積む — この分割がフラグメンテーションです。

フラグメンテーションの仕組みと問題点

MTUを超えるIPパケットは、経路上のルーターで複数の断片(フラグメント)に分割され、受信側で組み立て直されます。ただし分割には代償があります。

  • 断片が1つでも失われるとパケット全体を再送することになり、効率が悪い
  • 分割・再組み立てはルーターと受信側の負荷になる
  • セキュリティ機器が断片化されたパケットを検査しにくい

そのため [[IPv6]] では経路上のルーターによる分割が廃止され、送信元が適切なサイズで送る前提になりました。IPv4でも実際には「分割禁止(DFフラグ)」を立てて送るのが一般的です。

パスMTU探索とICMPの関係

送信元が「経路全体で通る最大サイズ」を調べる仕組みがパスMTU探索(Path MTU Discovery)です。

  1. 分割禁止フラグを立てて大きめのパケットを送る
  2. MTUの小さい区間を持つルーターがパケットを破棄し、[[ICMP]] で「大きすぎる(要分割)」と通知する
  3. 送信元が通知されたサイズまで縮めて再送する

ここに定番の落とし穴があります — [[ファイアウォール]] がICMPを一律遮断していると、この通知が届かず「小さい通信は通るのに、大きなデータだけ途中で止まる」という分かりにくい障害(PMTUDブラックホール)になります。

VPNとMTU

[[VPN]] やトンネリングは、元のパケットを別のパケットで包む([[OSI参照モデル]] のカプセル化と同じ包み方)ためヘッダ分のサイズが増え、実質的なMTUが小さくなります(例: 1500→1400前後)。「VPNにつなぐとWebが開けたり開けなかったりする」「特定のサイトだけ表示が止まる」という症状は、MTU超過が原因の定番パターンです。VPNクライアントやルーターのMTU設定を下げると解消することがあります。

初学者向けポイント

  • ping にサイズ指定と分割禁止オプションを付けると、経路のMTUを手動で調べられる(例: ping -D -s 1472 宛先(macOS)、Windows は ping -f -l 1472 宛先)
  • 「小さい通信は正常、大きい通信だけ失敗」はMTU問題の典型シグナル — [[パケットキャプチャ]] で確認できる
  • [[帯域と遅延]] とは別の軸の問題。回線が速くてもMTU不整合があれば通信は詰まる

関連技術とのつながり

  • [[イーサネット]] — 標準MTU 1500バイトの由来
  • [[TCP/IP]] — TCPはMTUから計算した単位(MSS)でデータを区切って送る
  • [[ICMP]] — パスMTU探索は「大きすぎる」通知に依存している
  • [[VPN]] — カプセル化のヘッダ分だけ実質MTUが縮む
Q: MTUの説明として正しいのはどれ?
- [x] 1回の送信で運べるデータサイズの上限
- [ ] 1秒間に送れるパケット数の上限
- [ ] 同時に張れるコネクション数の上限
解説: MTUは一度に送れるサイズの上限で、イーサネットでは標準1500バイトです。超えるデータは分割(フラグメンテーション)が必要になります。

Q: 「小さい通信は通るのに大きなデータだけ止まる」障害の原因として本文で挙げられているのはどれ?
- [ ] DNSサーバーの応答が遅い
- [x] ファイアウォールのICMP遮断でパスMTU探索の通知が届かない
- [ ] ポート番号の設定ミス
解説: パスMTU探索はICMPの「大きすぎる」通知に依存します。ICMPが遮断されると通知が届かず、MTU超過のパケットだけが静かに消えるPMTUDブラックホールになります。

Q: VPN接続でMTUに起きることとして正しいのはどれ?
- [ ] カプセル化により実質的なMTUが大きくなる
- [x] カプセル化のヘッダ分だけ実質的なMTUが小さくなる
- [ ] MTUはVPNの影響を受けない
解説: VPNは元のパケットを別のパケットで包むため、ヘッダの分だけ一度に運べる正味のサイズが減ります。VPN利用時の不安定な通信の定番原因です。