IPはコネクションレス型のネットワーク層プロトコルであり、 パケットを中継するのに最大の努力はするがパケット転送の保証はしない。 ルータやノードで異常が発生し、宛先までパケットが到達しない場合もある。 この時、異常を送信元に知らせる必要がある。 TCP/IPではこの目的のために、ICMP(Internet Control Message Protocol)というプロトコルを使用する。 また、通信を行う前に、宛先ノードが存在するかどうかという診断も行う。 ICMPは、5つのエラー(誤り)メッセージと、 4つの情報(診断)メッセージに分類される。
type field (1byte) |
code (1byte) |
checksum (2byte) |
depend on type (field is variable in length) |
---|
type | message | description |
---|---|---|
0 | echo reply | echo reauest(8)の返答 |
3 | destination unreachable | IPデータグラムが到達しない(ルータ→発信者) |
4 | source quench | 輻輳制御(データ転送抑制要求) |
5 | redirect | 経路変更要求 |
8 | echo request | 返答要求 |
11 | time exceeded for a datagram | TTLが0になった(ルータ→発信者) |
12 | parameter problem | データグラム形式による問題通知 |
13 | timestamp request | 時刻(14)を要求 |
14 | timestamp replay | timestamp request(13)の返答 |
15 | information request | ルータへの情報要求(使われていない) |
16 | information reply | information request(15)の返答(使われていない) |
17 | address mask request | サブネットマスク要求 |
18 | address mask reply | address mask request(17)の返答 |
ルータには受信のためのバッファが存在するが、 このバッファには容量の限界があるため、この限界を 越えるとルータは送信元抑制メッセージを送る。 そして一時的に、到着するデータグラムを破棄する。 このメッセージを受け取った送信者は、転送速度を減少することを 要求される。
このメッセージは、次の2つの場合に送信される。
ルータはフォワードの際、TTLを減少させる。 この時にTTLが0になると、ルータはデータグラムを破棄し、 時間超過メッセージを送る。
もう1つの場合は、データグラムがフラグメントされたときに、 受信者側の再組み立てタイマーを超過すると、このメッセージが 送信される。
ルータの故障などによって、宛先の存在するネットワークが一時的に、ネットワークから 切り離されている場合や、宛先ホストが電源断などでオフラインの場合などに 送信される。
異なるルータへ転送されるべきデータグラムをホストが 誤って送ってきたと判断するならば、そのデータグラムを受信したルータは ホストにルートの変更を促すためのメッセージを送る。
データグラムのフラグメント不可ビットが立てられている場合、 ルータはフラグメントすることができない。この時もし、MTUの許容範囲を 越えている場合は、ルータはデータグラムをフォワードすることが できないのでフラグメンテーション要求を送信し、そのデータグラムを破棄する。
エコー要求を受け取ったコンピュータは、 エコー返答メッセージを返さなければならない。
ホストは立ち上がり時に、アドレスマスク要求メッセージをブロードキャストする。 ルータは要求を受信し、そのネットワークで使用されている32ビットの サブネットマスクを含むアドレスマスク返答メッセージを送信する。
ICMPメッセージはIPデータグラムのIPデータ領域に格納されて送られる。
pingは宛先が到達可能かを調べるソフトウェアである。
pingプログラムはICMPのエコー要求メッセージを送信し、その返答が
返ってきたかどうかを利用する。
エコー要求を送信し、短時間待ち、返答がない場合は要求を2度再送信する。
それでも返答がない場合は、宛先到達不可能と判断する。
trace routeは宛先までのルートを追跡するツールである。
このプログラムは時間超過(time exceeded)メッセージと宛先不達(destination unreachable)メッセージを利用する。
まず、TTL=1としてデータグラムを送信すると、最初のルータでTTL=0となるので、
そのルータは時間超過メッセージを返す。trace routeプログラムはそのメッセージ
に含まれるルータのIPアドレスを出力する。その後、TTL=2,3,4,...と増やして
データグラムを送信することによって、宛先ホストまでのルータのIPアドレスを調べることができる。
TTLを増やしていくと、データグラムは、いずれ宛先ホストまで到着することになる。 ルート追跡プログラムはUDP(User Datagram Protocol)を利用する。 宛先の存在しないプログラムに対してこのUDPメッセージを送ることによって、 宛先のホストはこのデータグラムを受け取ると、ICMP宛先不達メッセージを返す。 これが、trace routeプログラムの終了通知となる。
ルート追跡プログラムでは、タイムアウトの時間をユーザが指定する。 宛先までのルートは動的に変化するので、ルートが相対的に安定している インターネットワークに対してtrace routeは有効である。 (インターネットの多くの部分において、数日、数週間の間はルートが変化しないことが多い)
パスMTUを発見するために、ホストはICMPフラグメンテーション要求(fragmentation required message)メッセージ を利用する。まず、ホストはフラグメント不可ビットを立てて 大きいデータグラムを送信する。ルータは転送するネットワークのMTUを越えた データグラムサイズを受け取るので、フラグメンテーション要求メッセージを返すしかない。 このメッセージを受け取ると、ホストは送信に成功するまで探索メッセージを小さくして送信する。 ルート追跡と同様に、ホストは応答を受信できない場合、メッセージを再送する仕組みが必要である。