主にネットワークのトラブルシューティングの際に、ping や traceroute で利用します。
ICMP のフォーマット
ICMP のフォーマットは以下のとおりです。

| フィールド | bit 数 | フィールドの説明 |
|---|---|---|
| タイプ | 8 bit | ICMPメッセージの機能タイプ |
| コード | 8 bit | ICMPメッセージの機能コード |
| チェックサム | 16 bit | エラーがないかことをチェック |
| データ | 可変長 | タイプに応じてデータを入れる |
ICMP のタイプ一覧
ICMP のタイプは、通知する「エラー」や「状態」の種類を示します。
よく利用するタイプは、以下の通りです。
| タイプ | 内容 | 意味 |
|---|---|---|
| 0 | Echo Reply | エコーの応答 |
| 3 | Destination Unreachable | 宛先に到達できない |
| 5 | Redirect | 経路変更の通知 |
| 8 | Echo | エコーの要求 |
| 9 | Router Advertisement | ルーターの広告 |
| 10 | Router Soliciation | ルーターの要請 |
| 11 | Time Exceeded | 時間超過 |
Echo (Type 8) を送り、Echo Reply (Type 0) が返ってくれば到達可能と言えます。

ping は、この ICMP タイプを利用しています。
到達できない理由は、ICMP のコードに記載されています。
| コード | メッセージ | メッセージの意味 |
|---|---|---|
| 0 | Net Unrechable | 宛先ネットワークに到達できない |
| 1 | Host Unreachable | 宛先ホストに到達できない |
| 2 | Protocol Unreachable | プロトコルに到達できない |
| 3 | Port Unreachable | ポートに到達できない |
| 4 | Fragment Needed and DF was Set | パケットの分割が必要だが、 分割禁止フラグが設定されている |
| 5 | Source Route Failed | ソースルーティングが失敗 |
| 6 | Destination Network Unknown | 宛先ネットワークが不明 |
| 7 | Destination Host Unkown | 宛先ホストが不明 |
| 8 | Source Host Isolated | 送信元ホストが孤立している |
| 9 | Communication with Destination Network is Administratively Prohibited | 宛先ネットワークとの通信が、 管理上禁止されている |
| 10 | Communication with Destinaltion Host is Administratively Prohibited | 宛先ホストとの通信が、 管理上禁止されている |
| 11 | Destination Network Unreachable for ToS | 指定された優先制御値では、 宛先ネットワークに到達できない |
| 12 | Destination Host Unreachable for ToS | 指定された優先制御値では、 宛先ホストに到達できない |
| 13 | Communication Administratively Prohibited | 通信が管理上が禁止されている |
| 14 | Host Precedence Violation | ホストの優先度が違反している |
| 15 | Precedence cutoff in effect | 優先度によるカットオフが有効 |
ルーターがホストより最適な経路を持っている場合に、ホストに対して送信します。
通知の詳細は、ICMP のコードによって表現します。
| コード | メッセージ | メッセージの意味 |
|---|---|---|
| 0 | Redirect Datagram for the Network | ネットワークへ最適経路を通知 |
| 1 | Redirect Datagram for the Host | ホストへ最適経路を通知 |
| 2 | Redirect Datagram for the ToS and Network | 優先制御時に、ネットワークへ最適経路を通知 |
| 3 | Redirect Datagram for the ToS and Host | 優先制御時に、ホストへ最適経路を通知 |
ホストが Router Solicitations (Type 10) を送り、ルーターが Router Advertisements (Type 9) を返すことで、ルーターの IP アドレスを知ることができます。

ルーターからの次の定期的な広告をホストが待てない場合、Router Solicitations を使う (詳細)
Router Advertisement (Type 9) の広告の種類は、ICMP のコードで表現します。
| コード | メッセージ | メッセージの意味 |
|---|---|---|
| 0 | Normal Router Advertisement | 通常のルーター広告 |
| 16 | Does not route common traffic | 一般的なトラフィックをルーティングしない |
IP パケットには TTL という、ルーターを通過する度に値が1ずつ減るフィールドがあります。
この値が 0 になった時、IP パケットは破棄され、ICMP は Time Exceeded を通知します。

TTL は、経路に無限ループが存在する際に、ネットワーク上に IP パケットが回り続けることを防ぐために利用します。
また、traceroute コマンドでは、TTL を利用してネットワークの経路を表示します。
(TTL が 0 になり、Time Exceeded を返したルーターの IP アドレスを順に表示)

ICMP のタイプとコードの一覧
最後に ICMP のタイプとコードの一覧をまとめます。
| タイプ | コード | メッセージ | ICMP の意味 |
|---|---|---|---|
| 0 - Echo Reply | 0 | メッセージ無し | エコー応答 |
| 3 - Destination Unreachable | 0 | Net Unrechable | 宛先ネットワークに到達できない |
| 1 | Host Unreachable | 宛先ホストに到達できない | |
| 2 | Protocol Unreachable | プロトコルに到達できない | |
| 3 | Port Unreachable | ポートに到達できない | |
| 4 | Fragment Needed and DF was Set | パケットの分割が必要だが、分割禁止フラグが設定されている | |
| 5 | Source Route Failed | ソースルーティングが失敗 | |
| 6 | Destination Network Unknown | 宛先ネットワークが不明 | |
| 7 | Destination Host Unkown | 宛先ホストが不明 | |
| 8 | Source Host Isolated | 送信元ホストが孤立している | |
| 9 | Communication with Destination Network is Administratively Prohibited | 宛先ネットワークとの通信が、管理上禁止されている | |
| 10 | Communication with Destinaltion Host is Administratively Prohibited | 宛先ホストとの通信が、管理上禁止されている | |
| 11 | Destination Network Unreachable for ToS | 指定された優先制御値では、宛先ネットワークに到達できない | |
| 12 | Destination Host Unreachable for ToS | 指定された優先制御値では、宛先ホストに到達できない | |
| 13 | Communication Administratively Prohibited | 通信が管理上が禁止されている | |
| 14 | Host Precedence Violation | ホストの優先度が違反している | |
| 15 | Precedence cutoff in effect | 優先度によるカットオフが有効 | |
| 5 - Redirect | 0 | Redirect Datagram for the Network | ネットワークの最適経路を通知 |
| 1 | Redirect Datagram for the Host | ホストの最適経路を通知 | |
| 2 | Redirect Datagram for the ToS and Network | 優先制御時に、ネットワークの最適経路を通知 | |
| 3 | Redirect Datagram for the ToS and Host | 優先制御時に、ホストの最適経路を通知 | |
| 8 - Echo | 0 | メッセージ無し | エコー要求 |
| 9 - Router Advertisement | 0 | Normal Router Advertisement | 通常のルーター広告 |
| 16 | Does not route common traffic | 一般的なトラフィックをルーティングしない | |
| 10 - Router Soliciation | 0 | メッセージ無し | ルータ要請 |
| 11 - Time Exceeded | 0 | Time to Live exceeded in Transit | 転送中に TTL の値が超過 |
| 1 | Fragment Reassembly Time Exceeded | 分割パケットを組み立て中に時間超過 |
ICMP のポート番号
以下のとおり ICMP はインターネット層なので、ポートという概念はありません。
ポートは、上位層にあるトランスポート層の概念です。


![[改訂新版] 3分間ネットワーク基礎講座](https://m.media-amazon.com/images/I/51oegv0Zi4L._SL160_.jpg)




