
今回は、ネットワークの基礎プロトコル ICMP(Internet Control Message Protocol) について、
実際の通信を追いながらわかりやすく解説します。
ICMPと聞くと少しマニアックに感じるかもしれませんが、
実は pingコマンドで使われている、とても身近なプロトコル です。
サーバーやPCの疎通確認で「とりあえずping打ってみるか」とやったことがある方も多いのではないでしょうか。
この記事では、
ICMPはどんな役割を持つプロトコルなのか
どんなフォーマットで通信しているのか
ping実行時に実際どんなパケットが流れているのか
を、Wiresharkでキャプチャしたデータも交えながら、
中身をのぞきつつ理解していきます。
「なんとなく使っているpingの裏側」を一緒に見ていきましょう。
ICMPとは
ICMP(Internet Control Message Protocol)はTCP/IPプロトコルスタックのインターネット層に位置するプロトコルで、通信診断やエラー通知を規定したプロトコルになり、メッセージの種類はQuery(通信診断)とError(エラー通知)の2種類になります。
位置づけとしてはIPを補助するプロトコルになり、pingやtracerouteコマンドなどが代表的なコマンドになります。

みたいな感じで疎通確認することは多いと思うのですが、このときにICMPのルールに従っています。
ICMPフォーマット
では、実際のICMPメッセージフォーマットですが、以下のようになり、IPヘッダの上位につく感じになります。
ですので厳密に言えばインターネットプロトコル(IP)の上位のプロトコルという位置づけになると思うのですが、「IPを補助する」という表現が一般的な気がします。
メッセージの意味は、タイプがICMPメッセージの機能、コードはエラー時の詳細を示す値、チェックサムがエラーチェック(ICMPメッセージ自体のエラーです)、データがタイプに依存する部分となります。以下に主なタイプと内容を記載します。
| タイプ | 内容 | 種類 |
| 0:Echo Reply | エコー応答 | Query |
| 3:Destination Unreachable | 到達不能 | Error |
| 8:Echo Request | エコー要求 | Query |
| 11:Time Exceeded | 時間超過 | Error |
タイプの種類がQueryタイプの場合、ICMPヘッダのコードは0となりますが、タイプの種類がErrorタイプの場合はエラー詳細がコードにて定義されています。例えば、種類がErrorである「3:Destination Unreachable」に設定されているコードは以下になります。
| コード番号 | 内容 |
| 0:Network Unreachable | ネットワーク到達不能 |
| 1:Host Unreachable | ホスト到達不能 |
| 2:Protocol Unreachable | プロトコル到達不能 |
| 4:TFragmentation Needed and Don't Fragment was Set | 分散禁止が設定されている(分散処理が必要時) |
| 5:Source Route Failed | ソースルートに失敗 |
| 6:Destination Network Unknown | 宛先ネットワーク不明 |
| 7:Destination Host Unknown | 宛先ホスト不明 |
| 8:Source Host Isolated | 送信元ホストが孤立 |
| 9:Communication with Destination Network is Administratively Prohibited | 宛先ネットワークとの通信が管理上禁止されている |
| 10:Communication with Destination Host is Administratively Prohibited | 宛先ホストとの通信が管理上禁止されている |
ですので、ICMPメッセージのタイプが「3:Destination Unreachable」、コードが「7:Destination Host Unknown」の場合は「宛先ホストが不明で到達できませんでした」ということになります。
では実際のデータの流れについてpingコマンドを例に説明します。
データの流れ(pingコマンド)
pingコマンドはICMPメッセージのEcho RequestとEcho Replyを使用して通信します。
例えば、IPアドレス:192.168.0.9のPC(A)からIPアドレス192.168.0.20のPC(B)へpingコマンド投げる例で説明しますと、以下のようになります。

シーケンス
- AのPCにて「ping 192.168.0.20」コマンドを実行
- AのPC→BのPCへEcho Request
- BのPC→AのPCへEcho Reply
結果は以下のようになります。

Windowsは上記②と③を4回繰り返しますので、結果が4回返ってきております。(Windowsで実施しました)
凄く簡単な流れなのですが、本当にICMPメッセージがEcho RequestとEcho Replyになっているのか確認してみます。以下、Wiresharkというパケットキャプチャソフトでpingのやり取りをキャプチャした結果です。

Protocolが「ICMP」になっており、request→replyの順で4回繰り返されていることがわかります。そして、requestは192.168.0.9→192.168.0.20へ、replyは192.168.0.20→192.168.0.9へ向いていることが確認できます。(Sourceが送信元、Destinationが送信先です)
では、さらにそれぞれの中をみてみます。まず、Echo Requestから。Wiresharkでパケットの中を確認すると以下の結果になっておりました。

見慣れないとわかりにくいのですが、青で選択されている部分がICMPメッセージになります。先に示したように先頭8bit(1byte)がタイプ、次の8bit(1byte)がコードになりますので、このメッセージはタイプが「8」、コードが「0」でEcho Requestになっています。「08」 「00」となっているのですが、Wiresharkは16進数表記になっていますので、「08」 「00」という単位でそれぞれ8bit(1byte)となります。(16進数表記に慣れていない方イメージつかないかもですね。また別の記事で2進数、10進数、16進数について書こうと思います)
ちなみに、下にくっついているデータ(青で選択されていない)はEthernetヘッダとIPヘッダになります。ですので、
![]()
という感じでパケットができていることがわかります。
それでは、次に、Echo ReplyをWiresharkで見てみると以下の結果になっておりました。

見るところは先ほどと同じですので、メッセージタイプが「0」、コードが「0」でEcho Replyになっています。
これでめでたくpingの中が解読できたわけですが、きっちりとICMPに従っておりました。
ちなみに、正常に疎通ができなかった場合。例えば別ネットワークにあるPCにpingを飛ばしたけど、ルーターでルーティングできてなかったときなどは先ほど説明した「3:Destination Unreachable」タイプでICMPメッセージが返ってきます。タイプがエラーですので、その際はコードも原因にあったコードがつけられます。「1:Host Unreachable」とか「6:Destination Network Unknown」とかで返ってくると思います。このエラーメッセージを返すのはこの例ではルーターです。目的のPCまでにはたどり着けてませんので、PCはどうやっても返しようがないですからね。
以上、今回はICMPについて説明してみました。
まとめ
何気なく使っているpingコマンドでも、中をのぞいて解析してみると結構面白かったりします。プロトコルのルールと合わせて見てみるとより理解が深まりますのでとてもオススメです。今回キャプチャしたデータはWiresharkというフリーソフトを使ったのですが、これ、本当にオススメです。(いわれるまでもなく使っている方大勢いらっしゃるでしょうが^^;)
いろんなプロトコルの中が見れますんで、もし使っていないという方は是非試してみてください。
今後も基本的な知識をわかりやすく伝えていこうと思います。
※TCP/IPの各プロトコルについてこちらで紹介しております。
こちらもCHECK
-

【完全版】TCP/IPプロトコルの仕組みを図でわかりやすく解説!
続きを見る
✅ ITキャリアを育てるコミュニティ「ITキャリアラボ」
「独学だと続かない…」
「相談できる人がいない…」
「同じ目標の仲間がほしい…」
そんな方向けに、
無料のLINEコミュニティ『ITキャリアラボ』を運営しています。
エンジニア歴20年・講師の僕が、
・資格学習のコツ
・勉強法アドバイス
・キャリア相談
・IT業界のリアル情報
などを発信&質問対応しています。
📌 参加無料・匿名OK・LINEだけで完結
📌 まずは「話を聞くだけ」でも大歓迎
独学で悩む時間を減らしたい人は、気軽に頼ってください。
👇お気軽にどうぞ
ITキャリアラボ
-

【無料】ITの悩みを気軽に相談できるコミュニティ・ITキャリアラボ
続きを見る