教育・資格支援

【ネットワーク基礎】ICMPとは?仕組みと役割をやさしく解説

結論:ICMPは「通信できたか・なぜ失敗したか」を伝える診断プロトコル

ICMPはTCP/IPのインターネット層に位置し、IPを補助する形で「通信診断」と「エラー通知」を担うプロトコルです。
疎通確認でおなじみのpingコマンドは、ICMPのEcho RequestとEcho Replyのやり取りそのものです。
メッセージの「タイプ」と「コード」の読み方さえ押さえれば、「なぜ通信できないのか」の切り分けが一段やりやすくなります。

今回は、ネットワークの基礎プロトコル ICMP(Internet Control Message Protocol) について、
実際の通信を追いながらわかりやすく解説します。

ICMPと聞くと少しマニアックに感じるかもしれませんが、
実は pingコマンドで使われている、とても身近なプロトコル です。

サーバーやPCの疎通確認で「とりあえずping打ってみるか」とやったことがある方も多いのではないでしょうか。

この記事でわかること

・ICMPはどんな役割を持つプロトコルなのか
・どんなフォーマットで通信しているのか(タイプ・コードの読み方)
・ping実行時に実際どんなパケットが流れているのか(Wireshark解析)
・疎通に失敗したとき、どんなエラーメッセージが返ってくるのか

Wiresharkでキャプチャしたデータも交えながら、中身をのぞきつつ理解していきます。

「なんとなく使っているpingの裏側」を一緒に見ていきましょう。


ICMPとは

ICMP(Internet Control Message Protocol)はTCP/IPプロトコルスタックのインターネット層に位置するプロトコルで、通信診断やエラー通知を規定したプロトコルになり、メッセージの種類はQuery(通信診断)とError(エラー通知)の2種類になります。

位置づけとしてはIPを補助するプロトコルになり、pingやtracerouteコマンドなどが代表的なコマンドになります。

ユウイチ
ユウイチ
サーバーにつながれへんなぁ、とりあえずpingは通るかな

みたいな感じで疎通確認することは多いと思うのですが、このときにICMPのルールに従っています。

TCP/IP全体の中での位置づけをチェック

「ICMPってスタックのどこにいるんだっけ?」と迷子になったら、まず全体像から押さえるのが近道です。
TCP/IPプロトコルスタック4層の構造と、各プロトコルの位置づけを図解でまとめています。

▶ TCP/IPプロトコルスタックの全体像

こちらもCHECK

【図で理解】TCP/IPプロトコルスタックの全体像とレイヤ別の役割

今回は、ネットワークの基礎中の基礎である 「TCP/IPプロトコルスタック」 について、できるだけシンプルに解説します。 エンジニアの勉強を始めたばかりの頃、 そもそも「プロトコルって何?」 「スタッ ...

続きを見る


ICMPフォーマット

では、実際のICMPメッセージフォーマットですが、以下のようになり、IPヘッダの上位につく感じになります。

ですので厳密に言えばインターネットプロトコル(IP)の上位のプロトコルという位置づけになると思うのですが、「IPを補助する」という表現が一般的な気がします。

※補助される側のIP(Internet Protocol)そのものの仕組みや、MACアドレスとの関係はこちらで解説しています。

こちらもCHECK

IPアドレスとMACアドレスの違い・関係を図解でわかりやすく解説

今回は、ネットワークの基礎技術である IP(Internet Protocol) について解説します。 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:Fragmentation Needed and Don't Fragment was Set分割(フラグメント化)が必要だが、分割禁止(DF)が設定されている
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プロトコルの仕組みを図でわかりやすく解説!

今回は、ネットワークの基礎である TCP/IPプロトコル について解説します。 現在のシステム開発において、ネットワークは避けて通れません。 組み込み開発であっても、クラウド連携やIoT通信など、TC ...

続きを見る


ITの学習・キャリアを気軽に相談

「独学だと続かない…」「ネットワークの勉強、この理解で合ってるのかな…」
そんな方向けに、エンジニア歴20年・講師の僕が無料のLINEコミュニティ『ITキャリアラボ』を運営しています。
参加無料・匿名OK・「話を聞くだけ」でも大歓迎です。気軽に頼ってください。

▶ ITキャリアラボ

ITキャリアラボ

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

IT業界を目指すあなたへ|「ITキャリアラボ」無料コミュニティのご案内 「IT業界に転職したいけど、何から始めればいいかわからない…」「資格の勉強が続かない…」「相談できる人がいない…」 そんな不安、 ...

続きを見る

  • この記事を書いた人
  • 最新記事

ユウイチ

20年間ソフトウェアエンジニアとして働いた後、フリーランスを経て現在は1人社長として活動。 プログラミング講師やIT教育を中心に活動しながら、趣味でゲーム開発やシナリオ作成にも挑戦中。どちらも「創ることを通じて人を笑顔にしたい」という想いから始めた、大切なライフワーク。 「創造と教育で、人生に迷う人の“自由な一歩”を支援」を理念に発信中。

-教育・資格支援