6.4.1 メッセージタイプ

ICMP には、その多くの役割を区別するために、メッセージタイプという1byteの フィールドで表されるタイプがあります。以下にそれを掲げます。

type message
0 Echo Reply
3 Host Unreacheable
4 Source Quench
5 Redirect
8 Echo
9 Router Advertisement
10 Router Solicitation
11 Time Exceeded
12 Parameter Problem
13 Time Stamp
14 Time Stamp Reply
15 Information Request
16 Information Reply
17 Address Mask Request
18 Address Mask Reply

それぞれのメッセージの意味を簡単に以下に述べましょう。

  1. Echo, Echo Reply
    Echo は相手ホストの状態を調べるために用いられます。その応答が Echo Replyです。

  2. Host Unreachable
    ホストに到達できない、あるいはホストのサービスにコネクト出来ないなどの場合に 送られます。

  3. Source Quench
    フロー制御のために送られる。受けとった側は送信スピードを落として相手の対応を 待つ。

  4. Redirect
    ゲートウェイがクライアントに対してルートを変更し、別のゲートウェイを使うように 指示する場合に出される。

  5. Router Solicitation, Router Advertisement
    ルータを発見するためや、ルータが自身の場所を通知するために用いられる。

  6. Time Exceeded
    TTL(Time To Live)が0になってしまった場合や、Fragmentation パケットの再構成が 出来なかった場合に送られる。前者に関しては、ネットワーク上でループになっている 事などが考えられる(通常はTTLは64であるが、全ての実装で64であるとは限らない)。 後者については、あまりにも送信が遅く、あるいはネットワークトラブルのために 分割されたパケットが届かないなどの理由が考えられる。

  7. Parameter Problem
    データ中のパラメータに誤りがあった場合などに送られる。

  8. Time Stamp, Time Stamp Reply
    標準時を用いた遅延計測や、時刻合わせに用いる。

  9. Information Request, Information Reply
    相手のIPアドレスなどを得る時に使い、Information Reply はそれに対する応答で ある。

  10. Address Mask Request, Address Mask Reply
    相手のネットマスクを得るためのもの。

これらのメッセージの中には 、現在ではインターネット上では使われない(あるいはファイアーウォールで落とす )ものもあります。特にインターネット上で重要なメッセージは、 type 3(Host Unreachable), type 11(Time Exceeded) です。後者のTTL(Time To Live) とは、 IPヘッダに格納され、ルータを越える度に1づつ値が差し引かれ、0になった時点で 宛先には到達出来ないと判断されて、ICMPが送り返されると共に、パケットは 破棄されるようになっているものです。 従って、このtype 11のメッセージが届かないと、 ホストは原因を知ることができません。 一方、3 のHost Unreacheable は途中でパケットが なくなったのではなく、相手まで届けられたが、相手が応答を返さないような場合 や、相手に届けるまでの経路に問題があったり、相手のIPへのルーティングがない、 あるいは相手が存在しないような場合に、相手ホストや途中ルータからの応答として 返されるようになっています。

特に、このHost Unreachable に関しては、更に コードという言われる以下の詳細なメッセージが付加されます (コード自体はICMPの一般的な 2byteのフィールド)。

0 ネットワークに到達出来なかった
1 ホストに到達出来なかった
2 プロトコルに到達出来なかった
3 ポートに到達出来なかった
4 フラグメントが必要なのに、禁止されていた
5 ソースルートが出来なかった

従って、code 0 ならばネットワークに問題があるか、本当に存在しないかのどちらかで あるが、code 3 ならば相手には到達したが、そのサービスが動いていないような場合 であることが分かるわけです。

また、この type 11 や、先の type 3 のICMPには、その原因となったパケットの IPヘッダと64bit分のデータ(つまりは、トランスポート層のTCPやUDPのヘッダ)が 含まれるために、どのアプリケーションの通信に問題があったかを知ることが出来る ようになっています。これによって、ネットワーク層のプロトコルではありますが、 上位のトランスポート層にエラーを知らせる事も可能なようになっている訳です。

ICMP は大まかに言えば以上のようにしてネットワーク上の異常を伝達するための メカニズムを提供しています。ICMPについて更に詳しく知りたい場合には、 RFC792を参照して下さい。



Noriyo Kanayama