ICMP(Internet Control Message Protocol)は、IP(Internet Protocol)を利用した通信において発生したエラーやその原因を知るために用いられるプロトコルです。
もっと分かりやすく言うと「ちゃんとインターネットで通信できているか?」を確認するときのルール・決まり事がICMPです。
「ping」コマンドや「tracert」コマンドを使ったことがある人もいるかもしれませんが、実はこれはICMPを利用したプログラムです。このページでは、ネットワーク初心者向けにICMPとは何か?を1から分かりやすく解説します。
ネットワークエンジニアを目指す方でなくても知っておいて損はないIT基礎知識です。是非最後までご覧ください。
ICMPとは?
ICMP(Internet Control Message Protocol)とは、インターネット通信(IPを利用するTCP/IPのパケット通信)で発生したエラーとその原因を伝えるためのプロトコルです。
IPはコネクションレス型通信のため、パケット転送に失敗したとしても「失敗したこと」を検知することはできません。そこで、IP通信を行う際にその失敗を通知する仕組みが必要となります。それがICMPです。
例えば、ネットワークを構築した際に何故かあっちのサーバーにつながらない・・・なんていうこともよくあります。こんなときに、「何が問題」で「どこのネットワーク機器でエラーが起きているのか?」ということを調べる必要が出てきまがこのような場合もICMPを用います。
プロトコルとはコンピュータとコンピュータがネットワークを通じて通信する際に決められた約束事・決まりのこと。 「メールを送るときは〇〇の形式で送ってね!」「ファイルを送るときは、〇〇のタイミングで送ってね!」というような約束事を決めたものがプロトコルです。
日常会話に当てはめて考えると分かりやすいです。普段私たちがお互い話をすることができているのも「プロトコル(何語で話すか?)が決まっているから」と説明できます。
プロトコルって何?という方は合わせて以下の記事もご覧ください。
【図解】ICMPを分かりやすく
以下のような簡単なネットワークでPCからスマートフォンに向けてパケット送信する場合を考えます。
PC【A】から送付されたパケットはルーターAからルーターBへ、ルーターBからルーターCへ送られ、最後に目的のPC【B】に届けられます。
このとき、PC【B】の電源が切れてしまっていた場合、ルーターCはPC【B】に対して、パケット転送を試みるものの、そのパケットは正常に送り届けられることはありません。
このままでは、PC【A】は送ったパケットが正常に届けられたかどうか?を知る術はありません。仮に、パケット送信に失敗していたとしても、どこで失敗したかは分かりません。
このときに活躍するのがICMPです。ルーターCはICMPのルールに沿って、PC【A】に対して「到達不能(Destination Unreachable)」メッセージを返します。
これで、PC【A】はパケット送信がルーターCからPC【B】の間でエラーとなっていることを検知できるのです。
これがICMPの役割です。ICMPがないとパケット転送が失敗した場合に、なぜ失敗したのかを特定することが困難になります。
ICMPメッセージのフォーマット
ICMPをより具体的にイメージできるようにICMPで用いられるパケットの中身を見ていきましょう。
以下のようにICMPはタイプとコード、チェックサム、そしてデータ部分から成り立ちます。
項目 | ビット数 | 説明(概要) |
---|---|---|
タイプ | 8 bit | ICMPメッセージの種類 |
コード | 8 bit | ICMPメッセージの種類(詳細) |
チェックサム | 16 bit | エラーがないかどうかをチェック |
データ | 可変長 | ICMPの「タイプ」により長さが異なる |
ICMPメッセージはざっくりいうと「どんなことが起きていて(=タイプ)」「その原因はこれだよ(=コード)」をセットで通知するフォーマットです。
ICMPメッセージ(タイプ/コードの意味)
ICMPメッセージで利用される代表的なタイプとコードの意味を掲載しておきます。
全て覚える必要はありませんが、ここでは内容をざっと見てICMPがどんな内容を通知することができるのか?を理解しておきましょう!
タイプ | コード | 説明 |
---|---|---|
0(エコー応答通知) | 0 | エコー要求への応答(後述するpingで用いられる) |
3(宛先到達不可能通知) | 0 | 宛先ネットワークに到達できない |
3(宛先到達不可能通知) | 1 | 宛先ホストに到達できない |
3(宛先到達不可能通知) | 6 | 宛先ネットワークが不明 |
3(宛先到達不可能通知) | 7 | 宛先ホストが不明 |
3(宛先到達不可能通知) | 9 | 宛先ネットワークとの通信が禁止されている |
3(宛先到達不可能通知) | 10 | 宛先ホストとの通信が禁止されている |
5(リダイレクト通知) | 0 | ネットワークへの最適経路変更を通知 |
5(リダイレクト通知) | 1 | ホストへの最適経路変更を通知 |
8(エコー要求通知) | 0 | エコー要求(後述するpingで用いられる) |
11(時間切れ通知) | 0 | 転送中に時間切れが発生した(転送中のTTLの値が超過) |
pingとは?(ICMPとpingの違いは?)
「pingを打つ」という言葉を聞いたことがある人もいるかもしれません。pingとはICMPプロトコルを利用したネットワーク疎通診断プログラムです。
ICMPを利用したプログラムがpingです。
コマンドで「ping (IPアドレス)」もしくは「ping (ホスト名)」と入力すると、指定したIPアドレスに自分のPCから疎通することができるかどうか?を診断することができます。
試しに、当サイトに向けてpingを打ってみましょう。
ping it-biz.online
今、あなたがこのページを見ることができているということは正常に疎通が取れています。したがって、以下のような結果が返ってくるはずです。
it-biz.online [157.112.183.23]に ping を送信しています 32 バイトのデータ: 157.112.183.23 からの応答: バイト数 =32 時間 =51ms TTL=52 157.112.183.23 からの応答: バイト数 =32 時間 =31ms TTL=52 157.112.183.23 からの応答: バイト数 =32 時間 =46ms TTL=52 157.112.183.23 からの応答: バイト数 =32 時間 =52ms TTL=52
もし、このWebページに何らかの障害が起き、サーバーが完全ダウンしてしまうと以下のように「要求がタイムアウトしました。」というメッセージが返ってきます。
157.112.183.23 に ping を送信しています 32 バイトのデータ: 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。
pingが成功すれば、送信元(あなたのパソコン)と宛先の通信に問題ないことが示されます。逆に、失敗したらIP上の何らかの通信に障害が発生していることを示します。
ネットワークエンジニアを目指したい方は
ICMPだけでなく、ネットワークの基礎を1から学びたい方はこちらの書籍を購入してがっつり学びましょう!
さくっと手軽に読める内容ではないのですが、ネットワークエンジニア全員が必ず読破している本と言っても過言ではありません。是非この機会にチャレンジしてみてみましょう。
ITを1から学びなおしたい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。
無料で読めるようにしてあります。累計12万人に参考にしていただきました!