【テクニカル・上級編】 MTU(Maximum Transmission Unit)とMSS(Maximum Segment Size)の不整合 – ネットワーク基礎とWebセキュリティ実践ガイド

パケットの墓場を回避せよ:MTU/MSSの不整合が引き起こす「サイレント・デッド」の深層

ネットワークエンジニアにとって、最も忌々しいトラブルの一つが「特定の通信だけがなぜか途中で止まる」という現象だ。ログを見てもエラーはなく、pingは通る。しかし、大きなデータを含むHTTPリクエストや、TLSハンドシェイクの途中でセッションが凍りつく。

これは、多くの現場で「パケットの墓場」と化しているMTUとMSSの不整合が引き起こす悲劇である。今回は、このネットワークの深淵を覗き込み、極限環境での最適化手法を解説しよう。

1. パケットの限界を知る:MTUとMSSの力学

まず基本を整理しよう。MTU(Maximum Transmission Unit)は、レイヤー2インターフェースが一度に転送できる物理的な最大データサイズだ。標準的なイーサネットでは1500 bytesだが、トンネリング技術(VPNやVXLAN)を多用する現代のクラウド環境では、この値は容易にオーバーヘッドで削られる。

一方、MSS(Maximum Segment Size)は、TCP層がセグメント(ペイロード)として扱える最大サイズである。計算式は非常にシンプルだ。

  • MSS = MTU - (IPヘッダー: 20 bytes) - (TCPヘッダー: 20 bytes)

つまり、標準的なEthernetなら1460 bytesが上限となる。しかし、VPNヘッダーやVLANタグが追加されると実効MTUは減少し、この計算式が崩れる。ここにパケットの断絶が生まれる。

2. PMTUDの「敗北」とフラグメンテーションの罠

ネットワーク層には、パス上の最小MTUを自動検出するPMTUD(Path MTU Discovery)という仕組みがある。これは、パケットにDF(Don’t Fragment)ビットを立て、サイズオーバーしたルーターから返されるICMP Type 3 Code 4(Fragmentation Needed)を待ち受けるというものだ。

しかし、現代のセキュリティ構成では、この仕組みはしばしば「死んでいる」。
多くのファイアウォールやロードバランサーが、セキュリティ上の理由でICMPを遮断しているからだ。結果、パケットは闇に消え、送信側は「届いたはずだ」と信じて再送を繰り返す。これが「ブラックホールルーター問題」の正体である。

3. MSSクランプによる「先制攻撃」的解決

PMTUDの不安定さに頼るなど、プロのアーキテクトがすることではない。我々は、TCPハンドシェイクの段階でパケットサイズを強制的に絞り込むMSS Clampingを実装する。

例えば、Linuxルーターや境界ゲートウェイで、iptablesやnftablesを用いてMSSを動的に書き換えるのが最も確実だ。

# クライアントからのSYNパケットに対し、MSSを1360に強制書き換えする例
# VPN等でオーバーヘッドが100bytesあると想定
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360

これにより、ハンドシェイクの時点でクライアントとサーバーは「これ以上の大きなパケットは送らない」という合意を形成し、経路上の断片化を未然に防ぐことができる。

4. パフォーマンスの極致:TLSとバッファチューニング

ここまでは「繋がる」ための話だが、エンジニアとして「速い」通信を目指すなら、さらに踏み込む必要がある。

特にTLS 1.3が主流となった今、ハンドシェイクのRTT(Round Trip Time)削減は至上命題だ。パケットの断片化が起きると再送が発生し、TCPの輻輳制御アルゴリズム(BBRなど)が誤検知を起こしてスループットが劇的に低下する。

TCPバッファの最適化

高帯域・長距離通信では、バッファサイズがボトルネックになる。以下は、Linuxカーネルで高スループットを維持するための推奨設定だ。

# /etc/sysctl.conf に記述
# 輻輳制御アルゴリズムをBBRに設定
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# TCPウィンドウサイズを拡大(16MBまで許容)
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

5. まとめ:プロフェッショナルの視座

MTU/MSSの不整合は、単なる設定ミスではない。ネットワークという「信頼できないインフラ」の上に、いかに堅牢な通信路を構築するかというアーキテクチャの試金石である。

  • 鉄則1: パス上の最小MTUを物理的に把握せよ(ping -M do -sで実機テストを行うのが最も泥臭くて確実だ)。
  • 鉄則2: PMTUDに過度な期待をするな。特にクラウド間通信ではMSSクランプを標準装備とせよ。
  • 鉄則3: ICMPを全遮断する設計は盲目になる。必要なタイプだけを通す柔軟性を持つこと。

ネットワークのパケットは嘘をつかない。たとえ教科書が忘れていても、パケットの挙動には必ず理由がある。その「理由」を見抜く力こそが、我々エンジニアの真の武器なのだ。

コメント

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