ネットワークの「宅急便」は、どうやって大きな荷物を届けているのか?——MTUとフラグメンテーションの正体
こんにちは!現場でネットワークと格闘しているエンジニアの皆さん、あるいはこれからインフラの世界に飛び込もうとしている皆さん。
ネットワークの世界に触れ始めると、必ずと言っていいほど耳にするのが「MTU」や「フラグメンテーション」という言葉です。これらを聞いて「あぁ、また小難しいネットワーク用語が出てきた……」と頭を抱えてしまった経験はありませんか?
でも、安心してください。これらは決して無機質なビットの羅列ではありません。私たちが普段使っている「郵便」や「宅急便」の仕組みをイメージすれば、驚くほどスッと理解できるはずです。今日は、ネットワークの深淵を覗く第一歩として、パケット分割の裏側を覗いてみましょう。
—
1. そもそも「MTU」って何者?
ネットワーク上を流れるデータは、小さな「パケット」という封筒に入れられて運ばれます。しかし、この封筒には「一度に運べる最大サイズ」が決まっています。これが MTU (Maximum Transmission Unit) です。
例えば、あなたがものすごく大きな荷物を送りたいとしましょう。でも、郵便局の規定で「一辺が50cmを超える箱は受け付けられません」と決まっていたらどうしますか?
そう、「中身を小分けにして、複数の箱に分けて送る」しかありませんよね。この「大きなデータを小分けにする作業」こそが、ネットワークの世界でいうフラグメンテーションなのです。
—
2. 分割を制御する「3つの魔法の合言葉」
IPヘッダーという「宛先が書かれたラベル」には、分割の際に使う非常に重要な3つの情報があります。これらを難しく考えず、ラベルに書かれた「指示書き」だと考えてみてください。
1. DF (Don’t Fragment) フラグ
- 意味:「分割するな!」という命令です。
- これが立っていると、ルーターは「分割できないなら、この荷物は捨ててエラーを返せ」という厳しい態度をとります。
2. MF (More Fragments) フラグ
- 意味:「まだ続きがあるよ!」という合図です。
- 受け取った側は「あ、これの続きがまた来るんだな」と判断して、パケットを組み立てる準備をします。
3. Fragment Offset (フラグメントオフセット)
- 意味:「このパケットは、元のデータのどの位置から始まっているか」という通し番号です。
- バラバラに届いたパケットを、正しい順番で並び替えるためのパズル図のようなものです。
—
3. なぜ「Path MTU Discovery (PMTUD)」が必要なのか?
皆さんがWebサービスを構築する際、パケットが巨大すぎて途中で何度も分割されると、ルーターの負荷も上がるし、一つでもパケットが欠けると再送処理が発生して通信が遅くなります。
そこで登場するのが Path MTU Discovery (PMTUD) です。これは、送信元と宛先の間の「一番狭い門(MTUが一番小さい場所)」を事前に探り出し、そこを通れるサイズでパケットを切り出す、という賢い仕組みです。
これを使えば、分割という無駄な作業を避け、最初から「通り抜け可能なサイズ」で荷物を送ることができます。
実践:pingコマンドで確認してみよう
試しに、自分のPCから相手先まで、分割せずに送れる最大のサイズを調べてみましょう。WindowsのコマンドプロンプトやLinuxのターミナルで、こんなコマンドを打ってみてください。
# Windowsの場合
# -f は DFフラグを立てる(分割禁止)
# -l はパケットサイズを指定する
ping 8.8.8.8 -f -l 1472
# Linuxの場合
# -M do は DFフラグを立てる設定
# -s はサイズ指定
ping -M do -s 1472 8.8.8.8
もしこのサイズでエラー(「パケットの断片化が必要ですが、DFがセットされています」といった内容)が出るなら、その経路にはもっと小さなMTUの場所がある、ということです。その場合は、数値を少しずつ下げて「どこまで通れるか」を確認していきます。
—
4. エンジニアとして知っておきたい「現場の知恵」
実務において、この知識が役に立つのは「突然、特定のサイトだけ繋がらない」というトラブルに遭遇した時です。
VPNを張っている環境や、特殊なトンネル通信をしているネットワークでは、ヘッダーに余分な情報が付与されるため、MTUが通常よりも小さくなることがあります。結果、pingは通るのに、Webサイトの画像が表示されない(大きなパケットだけが捨てられている)という現象が起きることがあります。
そんな時は、インターフェースのMTU設定を確認してみてください。
# LinuxでネットワークインターフェースのMTUを確認する例
ip link show eth0
# MTUを変更するコマンド(注意:下位のルーターと合わせる必要があります)
sudo ip link set dev eth0 mtu 1400
※ 本番環境でいきなりMTUをいじると通信断の原因になるので、必ずメンテナンスウィンドウで慎重に行ってくださいね!
—
まとめ:ネットワークは「対話」である
パケットの分割という仕組みは、一見すると地味なルールの積み重ねです。しかし、送信側と受信側が「分割してもいい?」「まだ続きはある?」「順番はここで合ってる?」と対話しながらデータを届ける姿は、まるで丁寧な手紙のやり取りのようです。
ネットワークエンジニアの仕事は、この「郵便局の仕組み」を深く理解し、データが最短距離でスムーズに流れる道を作ること。今日学んだDFフラグやMTUの考え方を武器に、ぜひ現場でのトラブルシューティングを楽しんでください!
また次の記事で、より深いレイヤーの冒険へ出かけましょう。それでは!
コメント