ICMPとは?ネットワーク初心者向けに分かりやすく3分で解説

IT-Skills

ICMP(Internet Control Message Protocol)は、IP(Internet Protocol)を利用した通信において発生したエラーやその原因を知るために用いられるプロトコルです。

もっと分かりやすく言うと「ちゃんとインターネットで通信できているか?」を確認するときのルール・決まり事がICMPです。

「ping」コマンドや「tracert」コマンドを使ったことがある人もいるかもしれませんが、実はこれはICMPを利用したプログラムです。このページでは、ネットワーク初心者向けにICMPとは何か?を1から分かりやすく解説します。

このページで学べる内容
  • ICMP(Internet Control Message Protocol)とは?
  • ICMPメッセージのフォーマット
    • タイプとコード
  • pingとICMPの関係

ネットワークエンジニアを目指す方でなくても知っておいて損はないIT基礎知識です。是非最後までご覧ください。

スポンサーリンク

ICMPとは?

ICMP(Internet Control Message Protocol)とは、インターネット通信(IPを利用するTCP/IPのパケット通信)で発生したエラーとその原因を伝えるためのプロトコルです。

IPはコネクションレス型通信のため、パケット転送に失敗したとしても「失敗したこと」を検知することはできません。そこで、IP通信を行う際にその失敗を通知する仕組みが必要となります。それがICMPです。

例えば、ネットワークを構築した際に何故かあっちのサーバーにつながらない・・・なんていうこともよくあります。こんなときに、「何が問題」で「どこのネットワーク機器でエラーが起きているのか?」ということを調べる必要が出てきまがこのような場合もICMPを用います。

プロトコルとは?

プロトコルとはコンピュータとコンピュータがネットワークを通じて通信する際に決められた約束事・決まりのこと。 「メールを送るときは〇〇の形式で送ってね!」「ファイルを送るときは、〇〇のタイミングで送ってね!」というような約束事を決めたものがプロトコルです。

日常会話に当てはめて考えると分かりやすいです。普段私たちがお互い話をすることができているのも「プロトコル(何語で話すか?)が決まっているから」と説明できます。

プロトコルって何?という方は合わせて以下の記事もご覧ください。

ICMPはインターネット層に位置づけられるプロトコルです。

※・・・OSI参照モデルのネットワーク層

【図解】ICMPを分かりやすく

以下のような簡単なネットワークでPCからスマートフォンに向けてパケット送信する場合を考えます。

ICMP わかりやすく

PC【A】から送付されたパケットはルーターAからルーターBへ、ルーターBからルーターCへ送られ、最後に目的のPC【B】に届けられます。

このとき、PC【B】の電源が切れてしまっていた場合、ルーターCはPC【B】に対して、パケット転送を試みるものの、そのパケットは正常に送り届けられることはありません。

ICMP わかりやすく

このままでは、PC【A】は送ったパケットが正常に届けられたかどうか?を知る術はありません。仮に、パケット送信に失敗していたとしても、どこで失敗したかは分かりません。

このときに活躍するのがICMPです。ルーターCはICMPのルールに沿って、PC【A】に対して「到達不能(Destination Unreachable)」メッセージを返します。

これで、PC【A】はパケット送信がルーターCからPC【B】の間でエラーとなっていることを検知できるのです。

ICMP わかりやすく

これがICMPの役割です。ICMPがないとパケット転送が失敗した場合に、なぜ失敗したのかを特定することが困難になります。

ICMPはその役割から「エラー報告プロトコル」「インターネット制御通知プロトコル」と呼ばれます

ICMPメッセージのフォーマット

ICMPをより具体的にイメージできるようにICMPで用いられるパケットの中身を見ていきましょう。

以下のようにICMPはタイプコードチェックサム、そしてデータ部分から成り立ちます。

項目ビット数説明(概要)
タイプ8 bitICMPメッセージの種類
コード8 bitICMPメッセージの種類(詳細)
チェックサム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上の何らかの通信に障害が発生していることを示します。

ネットワーク通信や、物理的なケーブルの接続、ルーティング処理IPアドレスやサーバの設定など様々な要素から成立しますが、pingの結果わかるのはこの中のIPに関する部分のエラー理由であるという点に注意しましょう。

ネットワークエンジニアを目指したい方は

ICMPだけでなく、ネットワークの基礎を1から学びたい方はこちらの書籍を購入してがっつり学びましょう!

さくっと手軽に読める内容ではないのですが、ネットワークエンジニア全員が必ず読破している本と言っても過言ではありません。是非この機会にチャレンジしてみてみましょう。

blank
インターネットのプロトコルTCP/IP入門書の決定版!

ITを1から学びなおしたい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。

無料で読めるようにしてあります。累計12万人に参考にしていただきました!

タイトルとURLをコピーしました