ICMPとは

ICMP(Internet Control Message Protocol)とは、IPによるエンドツーエンド通信を補佐するためのプロトコルです。

通信の主体はアプリケーションです。アプリケーション間のデータのやり取りができるようにするために、まずは、アプリケーションが動作しているPCやサーバなどとの間の通信ができなければいけません。つまり、エンドツーエンド通信が必要です。

エンドツーエンド通信はIPによって実現していますが、IP自体にきちんとエンドツーエンド通信ができているかどうかを確認する仕組みはありません。とりあえず、IPヘッダを付けてデータを送っているだけです。宛先まで届けばその返事が返ってくるはずですが、宛先まで届けられなかったらいつまでたっても返事が返ってきません。そして、届かなかった理由もわかりません。

そこで、別途、IPによるエンドツーエンド通信が正常にできているかどうかを確認するための機能を盛り込んでいるプロトコルとしてICMPが開発されています。

図 ICMPの目的

ICMPの機能

ICMPの主な機能は、以下の2つです。

  • エラーレポート
  • 診断機能

何らかの理由でIPパケットを破棄したら、破棄した機器がICMPによって破棄したIPパケットの送信元にエラーレポートを送ります。これにより、エンドツーエンド通信ができなかった原因を通知します。

診断機能は、IPのエンドツーエンド通信ができるかどうかの確認です。具体的には、Pingによる通信確認やトレースルートによる通信経路の確認を行います。

ICMPのメッセージは、IPヘッダでカプセル化して転送します。IPヘッダのプロトコル番号1でICMPを表しています。

図 ICMPのカプセル化
ICMPはインターネット層のプロトコルですが、ICMP「パケット」ではなくICMP「メッセージ」と表現することが多くなっています。

エラーレポート

到達不能メッセージ

ICMPのエラーレポート機能を実現するメッセージとして、到達不能(unreachable)メッセージがあります。ICMP到達不能メッセージは、何らかの理由でIPパケットを破棄した機器が生成します。「なぜIPパケットを破棄したのか」ということを、元のIPパケットの送信元へ通知します。

図 ICMP到達不能メッセージの送信

ICMP到達不能メッセージで、IPパケットを破棄した原因をコード化して以下の表のように定義しています。

コード 種類 意味
0 Network Unreachable ネットワークに到達できない
1 Host Unreachable 特定のホストに到達できない
2 Protocol Unreachable プロトコルを見つけることができない
3 Port Unreachable ポートを使うことができない
4 Fragmentation Blocked フラグメントを行うことができない
5 Source Route Failed ソースルート通りにルーティングできない
6 Target Network Unknown ネットワークを知らない
7 Target Host Unknown ホストを知らない
8 Source Host Isolate 送信元がインターネットと交信できない
9 Target Network Prohibited 送信先ネットワークが拒否している
10 Target Host Prohibited 送信先ホストが拒否している
11 Network TOS Problem 要求したTOSで中継できない
12 Host TOS Problem 要求したTOSで中継できない

ただし、定義されているだけで実際には使われていないコードもあります。また、ネットワーク機器のベンダによって同じ状況でも違うコードを出していることがあります。あまり厳密に考えずに宛先に送ることができなかったことを知らせるために使われているということを理解していただければよいでしょう。

時間超過メッセージ

ICMP時間超過メッセージは、IPパケットのTTLが0になりIPパケットを破棄したときに生成されるメッセージです。時間超過メッセージは、トレースルートでの通信経路の確認をするときにも利用します。

図 ICMP時間超過メッセージの送信