ICMPの基礎について説明します。
目次
ICMPとは
ICMPとは、「Internet Control Message Protocol」の略で、IPを利用したネットワークにおいて、経路上の状態確認やエラー通知に利用されるプロトコルです。ICMPはOSI参照モデルのネットワーク層で動作するプロトコルで、ネットワーク状態の確認コマンドである、「ping」や「traceroute」で利用されています。
ICMPのデータフォーマット
データフォーマットしては、IPヘッダの後ろにICMPヘッダとデータ部が付与される形となります。
スクロールできます
項目 | サイズ | 説明 | 必須 |
---|---|---|---|
Type | 1Byte(8bit) | ICMPメッセージタイプ ※詳細は別表参照 | ○ |
Code | 1Byte(8bit) | ICMPメッセージタイプの詳細コード ※詳細は別表参照 | ○ |
チェックサム | 2Byte(16bit) | エラーチェック | ○ |
ID | 2Byte(16bit) | ICMPリプライ・リクエストの場合の識別子 | ICMPタイプにより不要 |
シーケンス番号 | 2Byte(16bit) | ICMPリプライ・リクエストの場合のシーケンス番号 | ICMPタイプにより不要 |
その他 | 可変 | ICMPタイプにより、タイムスタンプ等が格納される | ICMPタイプにより異なる |
ICMPメッセージの種類
ICMPメッセージには、「Query(問い合わせ)」と「Error(エラー通知)」の2種類があります。
スクロールできます
種類 | 説明 | 例 |
---|---|---|
Query (問い合わせ) | メッセージを送信し通信状態を確認 | ICMPエコー・リプライ |
Error (Error通知) | 経路途中でパケットが破棄された場合に、理由とともにパケットの送信元へ通知 | 宛先到達不能メッセージ |
ICMPタイプとコード
ICMPにはTCPやUDPのようなポート番号は存在しません。その代わり、下記に示すようなタイプとコードにより、メッセージに役割や意味を持たせています。
【一覧】ICMPタイプとコード
良く利用されるタイプ・コードを色付けしています。
スクロールできます →
タイプ | 機能 | コード | 意味 | 説明 | 種類 |
---|---|---|---|---|---|
0 | echo reply (エコー応答) | 0 | – | エコー要求に対する応答(Type8への応答) | Query |
3 | destination unreachable (宛先到達不能) | 0 | net unreachable | 宛先ネットワークに到達不能 | Error |
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 unknown | 宛先ホストが不明 | |||
8 | source host isolated | 送信元ホストが孤立(隔離) | |||
9 | destination network is administratively prohibited | 宛先ネットワークとの通信が管理上禁止 | |||
10 | destination host is administratively prohibited | 宛先ホストとの通信が管理上禁止 | |||
11 | destination network unreachable for ToS | 指定したToS値では宛先ネットワークに到達不能 | |||
12 | destination host unreachable for ToS | 指定したToS値では宛先ホストに到達不能 | |||
13 | communication administratively prohibited | 通信が管理上禁止 | |||
14 | host precedence violation | 優先度の値が許可されていない | |||
15 | precedence cutoff in effect | 優先度の値が許可されている最小値よりも低い | |||
4 | source quench (クエンチ) | 0 | – | 輻輳のためデータの送信速度を下げるように要求 ※TCPのフロー制御の方が優れているため、 あまり利用されていない。 | Error |
5 | redirect (リダイレクト) | 0 | redirect datagram for the network | ネットワーク単位での最適経路変更を通知 | Error |
1 | redirect datagram for the host | ホスト単位での最適経路変更を通知 | |||
2 | redirect datagram for the ToS and network | 特定優先度のネットワーク単位での最適経路変更を通知 | |||
3 | redirect datagram for the ToS and host | 特定優先度のホスト単位での最適経路変更を通知 | |||
8 | echo request (エコー要求) | 0 | – | 到達性の確認(Type0の応答を要求) | Query |
9 | router advertisement (ルーター広告) | 0 | normal router advertisement | ルーターが自身をデフォルトゲートウェイとして利用できることを通知 | Query |
16 | Does not Route Common Traffic | デバイスがモバイルエージェントのみで、 通常のトラフィックを処理する予定がない場合 | |||
10 | router solicitation (ルーター要請) | 0 | – | router advertisement を送信するようにルーターに要求 | Query |
11 | time exceeded (時間超過) | 0 | time to live exceeded in transit | TTL値を超過したためパケットを破棄したことを通知 | Error |
1 | fragment reassembly time exceeded | フラグメントされたパケットの再構築中に、 後続パケットが届かないままタイムアウトしたことを通知 | |||
12 | parameter problem (パラメーター異常) | 0 | pointer indicates the error | IPヘッダのパラメータに問題があったためパケットを破棄したことを通知 | Error |
1 | missing a required option | 必要なオプションが含まれていないためパケットを破棄したことを通知 | |||
2 | bad length | パケット全体の長さが正しくないためパケットを破棄したことを通知 | |||
13 | timestamp (タイムスタンプ) | 0 | – | このパケットを送信した時刻を通知 | Query |
14 | timestamp reply (タイムスタンプ応答) | 0 | – | Type13への応答(自身の送信時刻を通知) | Query |
15 | information request (情報要求) | 0 | – | 廃止済み(DHCP等で代替可のため) | Query |
16 | information reply (情報応答) | 0 | – | ||
17 | address mask request (マスク要求) | 0 | – | サブネットマスクを要求 | Query |
18 | address mask reply (マスク応答) | 0 | – | サブネットマスク要求に対する応答(Type17への応答) | Query |
42 | extended echo request (拡張エコー要求) | 0 | – | 拡張エコー要求(RFC8335で定義されたPROBEというプロトコルで利用) | Query |
43 | extended echo reply (拡張エコー応答) | 0 | no error | 拡張エコー要求への通常応答 | Query |
1 | malformed query | クエリの形式が不正 | |||
2 | no such interface | インターフェースが存在しない | |||
3 | no such table entry | テーブルエントリーが存在しない | |||
4 | multiple interfaces satisfy query | 複数のインターフェースがクエリを満たしている |
以上で、ICMPとは(ICMPの説明とタイプ/コード一覧)の説明は完了です!
ICMPを利用したコマンドについては、下記を参照してください。
ICMPを利用した技術(1.pingコマンド)
pingコマンドの詳細とエラー通知について説明します。 【pingコマンドとは】 pingコマンドは、ICMPを利用してネットワークの正常性を確認するためのコマンドです。指定…
ICMPを利用した技術(2.traceroute/tracertコマンド)
traceroute/tracertコマンドの詳細について説明します。 【traceroute/tracertコマンドとは】 概要 traceroute/tracertコマンドは、IPのTTL値(Time to Live)と、ICMPの…
ICMPリダイレクトの詳細については、下記を参照してください。
ICMPリダイレクトの仕組み
ICMPリダイレクトの仕組みについて説明します。 【ICMPリダイレクトとは】 ICMPリダイレクトとは、ルーター等のL3機器が、自身よりも適切なゲートウェイが存在すると判…