ネットワークの「荷造り」で失敗しないために:MTUとMSSの切っても切れない関係
こんにちは!ネットワークセキュリティの世界にどっぷり浸かっている主筆ライターです。
インフラエンジニアの道を歩み始めると、必ずと言っていいほど直面するのが「通信がなぜか途中で止まる」「特定のページだけ表示されない」という謎のトラブルです。実はその原因の多くが、今日お話しする「MTU」と「MSS」という、ネットワークの荷造りルールの不一致にあります。
今日は、難しいパケットの構造の話は一旦横に置いて、私たちの身近な「郵便配達」に例えて、この仕組みを紐解いていきましょう!
—
1. MTUとMSS、何が違うの?
ネットワークの世界では、データを「パケット」という小さな箱に入れて運びます。この箱のサイズを決めるのが、MTUとMSSです。
MTU(Maximum Transmission Unit):道路のトンネルの高さ制限
MTUは「ネットワークの物理的な限界値」です。例えば、道路のトンネルに「高さ3メートルまで」という制限があるようなものですね。イーサネットの標準的なMTUは 1500バイト です。これを超えてしまうと、パケットは物理的にその道を通れません。
MSS(Maximum Segment Size):段ボール箱の大きさ
一方でMSSは、中身である「TCPデータ」の最大サイズです。郵便物に例えるなら、「箱(パケット)の中に詰め込める荷物そのものの大きさ」です。
- MTU = 箱全体のサイズ(ヘッダー込み)
- MSS = 中身の荷物のサイズ(ヘッダーを含まない)
この関係は、シンプルにこうなります。
MSS = MTU - (IPヘッダー + TCPヘッダー)
つまり、MTUが 1500 なら、そこからヘッダー分(通常 40 バイト)を引いた 1460 が、私たちが一度に送れる荷物の限界(MSS)というわけです。
—
2. なぜ「断片化(フラグメンテーション)」が悪者なの?
もし、あなたが「トンネルの高さ(MTU)」ギリギリの荷物を送ろうとしたらどうなるでしょう?
もし途中のルーターが「おっと、この道はもっと狭いよ!」と言った場合、ルーターは親切心で荷物をバラバラに分解して(断片化して)届けようとします。これを「フラグメンテーション」と呼びます。
しかし、バラバラになった荷物は、受け取り側で「パズル」のように組み立て直さないといけません。これがCPUのリソースを猛烈に消費しますし、もし一つでも荷物が欠けていたら、すべてがパーになって再送が必要です。
「断片化させないこと」こそが、爆速で安定したネットワークを作るための鉄則なのです!
—
3. 実務で遭遇する「PMTUD」の落とし穴
最近のネットワークでは、通信を始める前に「この道、どれくらいのサイズまでいける?」と確認し合う仕組みがあります。これを「Path MTU Discovery (PMTUD)」と呼びます。
しかし、セキュリティを固めるためにファイアウォールで「不要なICMP(診断パケット)は全部捨てろ!」という設定を厳しくしすぎると、この確認作業がブロックされてしまい、通信が永遠に繋がらない……という悲劇がよく起こります。
LinuxでMSSを確認・調整してみよう
もしサーバーの設定でトラブルを回避したいなら、iptables や nftables を使って、パケットのMSSを強制的に書き換えるのが現場の「泥臭い」テクニックです。
以下は、通信のMSSを 1412 バイトに強制的に調整する設定例です。
# TCP SYNパケットを捕まえて、MSSを1412に書き換える設定
# VPNトンネルを通す際など、ヘッダーが余計に付与される環境で重宝します
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1412
※ 1412 と少し小さめに設定しているのは、カプセル化(VPNなど)でヘッダーが膨らむ分を見越しているからです。
—
4. 初学者のためのチェックリスト
最後に、現場で「なんだか通信が遅いな?」「特定サイトだけ表示されないな?」と思った時に思い出してほしいチェックポイントをまとめました。
1. ネットワークパスを確認する: VPNやトンネルを通していませんか?その場合、MTUは 1500 より小さくあるべきです。
2. ICMPのフィルタリングを疑う: ファイアウォールで Type 3 Code 4(Destination Unreachable / Fragmentation Needed)を捨てていませんか?
3. インターフェースの設定を見る: サーバーのNICのMTU設定と、対向するルーターのMTU設定が一致しているか確認しましょう。
# 現在のMTUを確認するコマンド(Linux)
ip link show eth0
# 出力例: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
—
最後に:ネットワークは「思いやり」の積み重ね
MTUとMSSの関係を知ることは、単なる数字のパズルではありません。「相手が受け取れるサイズを想像して荷造りする」という、ネットワークにおける「思いやり」そのものなんです。
教科書の定義を暗記するだけではなく、ぜひ実務のトラブルシューティングの中で「あ、今パケットがバラバラにされて苦しんでいるのかも?」と想像を巡らせてみてください。その視点こそが、あなたを一流のネットワークスペシャリストへと導いてくれるはずです。
それでは、また次回の深掘り記事でお会いしましょう!ネットワークの旅を楽しんでくださいね!
コメント