ICMP
ICMPとは
ICMP(Internet Control Message Protocol)は、IP通信のエラー通知と状態確認を担うプロトコルです。[[TCP/IP]] のIP層(ネットワーク層)で動作し、「宛先に届かなかった」「経路の途中で破棄された」といった情報を送信元へ知らせます。
IPそのものは送りっぱなし(ベストエフォート)の仕組みで、届いたかどうかを確認する機能を持ちません。その足りない部分を補う「連絡係」がICMPです。データを運ぶプロトコルではなく、通信の裏方として制御情報だけをやり取りします。
代表的なメッセージ
| タイプ | 名前 | 意味 |
|---|---|---|
| 8 / 0 | エコー要求 / エコー応答 | 疎通確認(ping が使う) |
| 3 | 宛先到達不能(Destination Unreachable) | 宛先ホストやポートに届けられない |
| 11 | 時間超過(Time Exceeded) | TTLが0になりパケットが破棄された |
| 5 | リダイレクト | もっと良い経路があることの通知 |
TTL(Time To Live)は、パケットが [[ルーティング]] でルーターを1つ通過するたびに1減る値です。0になるとパケットは破棄され、破棄したルーターが時間超過メッセージを送信元へ返します。これにより、経路がループしてもパケットが永遠に回り続けることを防ぎます。
pingとtracerouteの仕組み
- ping — エコー要求を送り、エコー応答が返るまでの時間を測る。「相手まで届くか」「往復に何ミリ秒かかるか」が分かる
- traceroute — TTLを1、2、3…と増やしながら送信し、各ルーターから返る時間超過メッセージを集めて経由するルーターの一覧を描き出す
どちらも [[ネットワーク診断コマンド]] の代表格で、ICMPの仕組みをそのまま応用したツールです。
初学者向けポイント
- [[ファイアウォール]] がICMPを遮断していると、通信は正常でもpingだけ失敗することがある。「ping不通=障害」と即断しない
- ICMPはTCPでもUDPでもなく、IPの上に直接乗る独立したプロトコル。ポート番号の概念がない
- [[IPv6]] ではICMPv6に置き換わり、エラー通知に加えてアドレス解決(近隣探索)まで担う、より重要な存在になっている
関連技術とのつながり
- [[ネットワーク診断コマンド]] — ping・tracerouteはICMPメッセージを利用して動く
- [[TCP/IP]] — ICMPはIP層の補助プロトコルとして位置づけられる
- [[IPアドレスとサブネット]] — エラー通知は宛先IPアドレスへの到達可否を知らせる
- [[ルーティング]] — TTL超過や到達不能の通知は経路上のルーターから返される
Q: ICMPの役割として正しいのはどれ?
- [x] IP通信のエラー通知や疎通確認などの制御情報をやり取りする
- [ ] Webページの内容を転送する
- [ ] IPアドレスを自動で割り当てる
解説: ICMPはデータを運ぶのではなく、「届かなかった」「破棄された」といった通信の制御情報を伝える裏方のプロトコルです。
Q: パケットのTTLが0になったとき何が起きる?
- [ ] パケットが優先的に転送される
- [x] ルーターがパケットを破棄し、時間超過メッセージを送信元へ返す
- [ ] パケットが自動で再送される
解説: TTLはルーター通過ごとに1減り、0で破棄されます。経路ループでパケットが回り続けるのを防ぐ仕組みです。
Q: pingが失敗したときの判断として本文の内容に合うのはどれ?
- [ ] ping不通なら必ずネットワーク障害が起きている
- [x] ファイアウォールがICMPを遮断している可能性もあるため、即断しない
- [ ] pingはICMPと無関係なので原因の切り分けには使えない
解説: ICMPを遮断する設定のサーバーやファイアウォールは珍しくなく、通信自体は正常でもpingだけ失敗することがあります。