ICMP のパケットフォーマット
ICMP (Internet Control Message Protocol) は IP から見ると上位のプロトコルとなるが、機能的には OSI 参照モデルの第 3 層 (ネットワーク層) に分類される。
ICMP のパケットフォーマットは以下の通り。
ICMP データのフォーマットは、ICMP メッセージごとに規定される。
ICMP メッセージ
ICMP は IP パケットの転送でエラーが発生した場合、それを送信元に通知する機能や、接続性を確認するエコー要求/応答メッセージを転送する機能などを持つ、代表的な ICMP メッセージを以下に示す。
ICMP メッセージは、紹介メッセージとエラーメッセージの二つに分類できる。ICMP エラーメッセージを格納した IP データグラムの転送に失敗したとき、そのための ICMP メッセージは例外的に通知されない。よって、エラー通知の失敗が新たなエラー通知を誘発するという悪循環は避けられる。
以下、主要な ICMP メッセージについて解説する。
- エコー要求 / 応答 (Echo Request / Echo Reply)
エコー要求 / 応答は最もよく使われる ICMP 機能であり、ネットワークのループバックテストに使用される。エコー要求メッセージは ping コマンドを実行することで送信される。
エコー要求を受け取ったホストは、その要求元にエコー応答メッセージを送信する。 - 宛先到達不能 (Destination Unreachable)
経路途中のルータで転送エラーが発生したときや、宛先ホストで受信エラーが発生したときは、エラーとなった IP パケットを破棄した上で、その送信元ホストに向けて宛先到達不能メッセージを送信する。
宛先到達不能メッセージでは ICMP ヘッダのコード領域に値をセットする。代表的なものは以下。
コード (値) | 説明 |
---|---|
ホスト到達不能 (0x1) | 宛先へのルートがルーティングテーブル内に見つからない |
プロトコル到達不能 (0x2) | プロトコル (IP ヘッダのプロトコル番号領域で指定) が受信ホストで使用されていない |
ポート到達不能 (0x3) | UDP ヘッダ内の宛先ポートが受信ホストで使用されていない (TCP ヘッダ内の宛先ポートが見つからない場合は接続リセットを返信する) |
フラグメンテーションが必要だが、DF ビットが設定されている (0x4) | 途中経路のルータがフラグメンと化を試みたが、DF ビットが設定されているために失敗した (データリンクの MTU の値が返答される) |
- リダイレクト
同一サブネットに 2 台以上のルータが存在しており、送信元ホストが最適ではないルータを経由して IP パケットを送信したとする。
この際、そのルータはパケットを適切なルータへ転送し、同時に送信元ホストにリダイレクトメッセージを送信し、同一サブネット上には自分より適切なルータが存在することを通知する。
これを受け、送信元ホストはルーティングテーブルを変更し、それ以降、最適なルータを経由して IP パケットを送信するようになる。
なお、途中経路のルータが最適でないルートを使って IP パケットを転送しても、リダイレクトメッセージは発行されない。 - 時間超過
ルータは IP パケットを転送する際、IP ヘッダ内の TTL 領域を読み取り、値をひとつ減らして格納し直す (チェックサムも更新される)。
TTL 領域の値が 0 になった際、ルータは IP パケットを破棄して、送信元ホストに時間超過メッセージを送信する。典型的な例としては、ルーティングループが発生し、IP パケットが複数のルータを循環して転送される状態。