こんにちは!ネットワークの世界へようこそ。インフラやネットワークの勉強を始めると、TCPやUDP、あるいはWebの仕組みであるHTTPといった主役級のプロトコルに目がいきがちですよね。
でも、ちょっと待ってください。華やかな通信の裏側で、地味ながらもネットワーク全体の「安全と健康」を陰で支えている、とてつもなく重要な裏方選手がいるんです。それが今回フォーカスするICMP(Internet Control Message Protocol)です。
「制御メッセージ」なんて聞くと難しそうに聞こえるかもしれませんが、安心してください!今回は、身近な「郵便配達」の仕組みに例えながら、ICMPが果たしている大切な役割を一緒に紐解いていきましょう。一歩ずつ、丁寧にお話ししていきますね。
—
1. 郵便配達員さんの「おせっかい」な優しさ? ICMPの正体
突然ですが、あなたが遠くに住む友人へ手紙を出したと想像してみてください。
宛先の住所をうっかり書き間違えてしまったとき、郵便配達員さんはどうするでしょうか?
そのまま行方不明にしてしまう……なんてことはありませんよね。通常は、赤いスタンプや付箋で「宛先が見つかりません(受取人不明)」と理由を添えて、あなたの手元へわざわざ送り返してくれます。
ネットワークの世界でも、これと全く同じことが起きています。
私たちが普段使っているIP(インターネット・プロトコル)は、データを宛先へ届けることにかけては一生懸命ですが、途中で道に迷ったり、通行止めに出くわしたりしても、「あ、ダメでした」と報告する機能を持っていません。そこで登場するのが、IPの相棒であるICMPです。
L3層の「伝言板」としてのICMP
OSI参照モデルで言うと、ICMPはIPと同じ第3層(ネットワーク層)で動作しています。TCP(第4層)のようにデータを確実につなぐわけでも、アプリケーション(第7層)のように画面を表示するわけでもありません。
ICMPの仕事は、いわば「ネットワークのエラー報告や状態確認の伝言板」です。通信の途中で何らかのトラブルが発生したとき、ルーターなどの機器が「今、こういう理由でパケットが進めなかったよ!」と、送信元へこっそり教えに戻るためのメッセージ、それがICMPパケットなんです。
—
2. 代表選手「Destination Unreachable(宛先到達不能)」の秘密
ICMPの数あるメッセージの中でも、現場で最もよく見かけ、そしてトラブルシューティングの大きな手がかりになるのが「Destination Unreachable(宛先到達不能)」という通知です。
これは、ルーターがパケットを受け取ったものの、どうしても宛先に届けられなくなったときに送信元へ送り返すエラーメッセージになります。
一言で「到達不能」と言っても、実はその中にはいくつかの「理由(コード番号)」が存在します。代表的なものをいくつか覗いてみましょう。
- ネットワーク到達不能 (Network Unreachable): 宛先のネットワークそのものへ行く経路(ルート)が、ルーターの辞書(ルーティングテーブル)に載っていない状態です。「そんな名前の街、地図に載ってないよ!」という状態ですね。
- ホスト到達不能 (Host Unreachable): ネットワークまではたどり着いたけれど、最終的な目的地であるコンピュータ(ホスト)の電源が入っていなかったり、つながっていなかったりする状態です。「街には着いたけど、家がどこか分からない/留守みたいだ」という状態です。
- ポート到達不能 (Port Unreachable): ホストには届いたものの、そこで待ち受けているはずのアプリケーション(Webサーバーなど)が動いていない状態です。「家には着いたけど、ノックしても誰も出てこないよ!」と教えてくれます。
実務の現場で、あるサーバーに接続できなくなったとき、ネットワークエンジニアはこの「Destination Unreachable」の裏付けを頼りに、「そもそもケーブルが抜けているのか」「ファイアウォールでブロックされているのか」を見極めていきます。
—
3. もう一つの大仕事:MTUパス探索(Path MTU Discovery)の裏側
ICMPの大切な役割は、エラーを伝えることだけではありません。実は、インターネットの交通渋滞を防ぐための、とてもスマートな仕組みにも深く関わっています。それが「MTUパス探索(Path MTU Discovery)」です。
荷物の「サイズ制限」にどう立ち向かうか?
ネットワークの世界では、一度に送れる荷物の最大サイズ(大きさを表す単位を MTU と呼びます)が決まっています。例えば、あなたのパソコンから出た大きな荷物は、途中の道にある「小さな橋(MTUが小さいネットワーク機器)」を渡るとき、そのままでは大きすぎて通れません。
昔のルーターは、大きすぎる荷物を見つけると、親切心でそれを小さく切り分けて(断片化して)から先のルートへ送っていました。しかし、これをやりすぎるとルーターのCPUにものすごい負荷がかかってしまいます。
そこで現代のネットワークでは、IPヘッダーに「勝手に切り分けちゃダメ!(Don’t Fragmentフラグ、通称DFフラグ)」というスタンプを押してパケットを送り出すのが主流です。
ICMPが伝える「ちょっと大きすぎます」
ここで小さな橋にぶつかったとき、ルーターはどうするでしょうか?
「DFフラグがついているから勝手に切れない……そうだ、送信元に教えよう!」と、「Fragmentation Needed(断片化が必要ですが、DFフラグがあるので進めません)」というICMPメッセージを送信元へ送り返します。
これを受け取ったあなたのパソコンは、
「おっ、この先の道は思っていたより荷物制限が厳しいんだな。じゃあ、もう少し小さな荷物に包み直そう!」
と学習し、次からは適切なサイズでデータを送り出すようになります。
この一連のやり取りによって、インターネット全体が無駄な負荷をかけずに、スムーズにデータを運び続けられているのです。ICMPって、実はめちゃくちゃ気配り上手ですよね!
—
4. 実務で役立つ!ICMPの挙動をCLIで確認してみよう
理屈が分かったところで、今度は私たちの手元でICMPが実際にどう動いているのかを、おなじみのコマンドを使って覗いてみましょう。
日々の運用管理やトラブルシューティングで最もよく使われるのは、お馴染みの ping コマンドや traceroute コマンドです。これらはまさに、ICMPの仕組みをフル活用しています。
pingコマンドで到達性を確認する
例えば、手元の端末から特定のサーバーへパケットが届くか確認したいときは、次のようにコマンドを叩きます。
# 宛先サーバー(例: 8.8.8.8)へICMPのエコー要求(Echo Request)を送信します
ping -c 4 8.8.8.8
【実行例と解説】
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=14.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=13.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=13.9 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=14.0 ms
--- 8.8.8.8 ping statistics ---
4 packages transmitted, 4 received, 0% packet loss, round-time min/msointers...
このコマンドを実行すると、あなたのパソコンから「おーい、生きてますかー?」というICMPの「Echo Request(タイプ8)」が飛び、宛先から「はい、元気ですよ!」と「Echo Reply(タイプ0)」が返ってきます。この往復時間(time=14.2 msなど)を見ることで、回線の健康状態が手に取るように分かるわけです。
もし途中で遮断されていたら?
もし、途中のファイアウォールやセキュリティ設定でICMPがブロックされている場合や、本当に宛先が存在しない場合は、次のような応答が返ってきます。
# 存在しない、または到達できないIPアドレスを指定した場合
ping -c 1 192.168.100.250
【エラーの例】
From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
この Destination Host Unreachable こそが、途中のルーターが親切に(あるいは厳格に)教えてくれた「目的地まで行けませんでした」というICMPメッセージの現物です。
—
5. セキュリティとのジレンマ:ICMPは通すべきか、塞ぐべきか?
ここで、現場のエンジニアなら誰もが一度は悩むポイントに触れておきましょう。
「ICMPってエラー通知や診断に便利だけど、セキュリティの観点からはどうなの?」という疑問です。
実務では、社内ネットワーク(イントラネット)とインターネットの境界にあるファイアウォール(境界防御)において、「外部からのICMPをすべてブロックすべきか、それとも一部許可すべきか」というポリシー設計を迫られます。
昔は、悪意ある攻撃者がネットワークの構造をスキャンするツール(ping掃討など)にICMPが使われることを嫌い、「すべてのICMPをシャットアウトしよう!」というセキュリティ設定が流行した時期もありました。
しかし、先ほどお話しした「MTUパス探索」に必要なICMPメッセージまですべてブロックしてしまうと、Webサイトの画像が表示されない、あるいは特定の大きなデータ通信が突然途切れるといった、原因不明の厄介なトラブル(黒魔術的トラフィック障害)を引き起こす原因になります。
そのため、現在のゼロトラストやモダンなネットワークセキュリティの考え方では、
- 「診断用のEcho Request(Ping)はセキュリティポリシーに応じて制限してもよいが、MTUパス探索に必要なICMPエラーメッセージ(Fragmentation Neededなど)は絶対にドロップしてはならない」
という、非常にきめ細やかなフィルタリング設定が求められます。
—
6. まとめ:パケットの裏側でささやくICMPに想いを馳せて
今回は、ネットワークの縁の下の力持ちである「ICMP」の役割について、到達不能通知やMTUパス探索の観点から解説してきました。
- ICMPは、L3層(IP)の通信における「伝言板・エラー報告役」である。
Destination Unreachableなどのメッセージにより、通信トラブルの原因をいち早く察知できる。- MTUパス探索を助け、パケットが途中で破綻するのを防ぐスマートな役割を持っている。
- セキュリティと可用性のバランスを取りながら、適切に付き合う必要がある。
私たちが普段、何気なくブラウザで動画を観たり、クラウドサービスを利用できたりするのは、こうした目立たないプロトコルたちが水面下で絶えず声を掛け合い、助け合っているおかげです。
次にネットワークのトラブルシューティングに直面したときは、画面の向こう側でルーターやパケットたちが交わしている「ICMPの会話」に、ぜひ思いを馳せてみてくださいね。あなたのネットワークエンジニアとしての視野が、さらにグッと深まるはずです!
それでは、また次回の技術解説でお会いしましょう。一歩ずつ、確実にスキルアップしていきましょうね!
コメント