Internet Control Message Protocol

Internet Control Message Protocol(インターネット制御通知プロトコル、ICMP)とは、通信処理で使われるプロトコルのひとつで、Internet Protocolのデータグラム処理における誤りの通知や通信に関する情報の通知などのために使用される。ICMPに関するICMP通知は、通知が無限ループに陥るのを防ぐために送られない。

IPv4(Internet Protocol version 4)のための ICMP (ICMPv4) は RFC 792 によって規定され、IPv6(Internet Protocol version 6)のための ICMP (ICMPv6) は RFC 4443 によって規定されている。ICMP は TCP、UDP などと同様にInternet Protocolの上位のプロトコルであるが、Internet Protocolと同様のインターネット層のプロトコルであるかのような特別の処理をされる。

ICMPを利用しているツールにpingtraceroute[1]などがある。

通知書式

ICMPヘッダは以下のようにMACヘッダ・IPヘッダの後ろにある。

  +------------+-----------+-------------+-----------  | MACヘッダ  | IPヘッダ  | ICMPヘッダ  | データ...  +------------+-----------+-------------+-----------

ICMPヘッダ

ICMPヘッダは一般的に以下の通りとなる。

012345678910111213141516171819202122232425262728293031
タイプコードチェックサム
データ

データグラムのデータ部分の最初のオクテットはICMPタイプフィールドであり、このフィールドの値は、以降のICMP通知の書式を決定する。「未使用」とラベル付けされているフィールドは今後の拡張のために予約されており、送信時には0を入れなければならないが、受信者はこれらのフィールドを(チェックサムに含めることを除いて)使用すべきではない。チェックサムは、ICMPヘッダの先頭から(すなわちタイプから)データの末尾までを対象に、16ビット単位で算出される。チェックサムフィールド自身も計算対象に入っているが、計算時には0として扱う。バイト数が奇数の場合は末尾に0のバイトがあるものとして計算する。

また、いくつかのタイプでは、ICMP通知が発生する原因となった元データグラムの先頭部分をコピーしている。この種のタイプは以下の形式をとる。

012345678910111213141516171819202122232425262728293031
タイプコードチェックサム
未使用長さ未使用
IPヘッダ + 元データグラムの先頭部分

RFC 792では長さフィールドは未使用で、元データグラムの先頭部分は64ビット(8オクテット)と決まっていた。その後RFC 1812およびRFC 4443において、MTUの最小限として保障されるサイズ(IPv4は576オクテット、IPv6は1280オクテット)まで拡張された。RFC 4884において長さフィールドが追加され、この可変長領域の長さを32ビット単位で記述することになった。

ICMP通知は基礎的なIPヘッダーを使用して送られる。個々の型式記述の下で違った形で言及されない限り、ICMPヘッダに先行するIPヘッダーフィールドの値は以下の通りとなる。

バージョン
4
IHL
32ビットワードでのインターネット・ヘッダー長である。
サービスの形式
0
合計長
オクテット単位での、インターネット・ヘッダーとデータの合計の長さである。識別、フラグ、断片化オフセット、断片化の中で使用される。
存在回数
存在保持回数ともいい、このフィールドはデータグラムが処理されるマシンを通る度に1ずつ減らされる。そのためこのフィールドの値は少なくともこのデータグラムが通るゲートウェイの数と同じ大きさでなければならない。
プロトコル
ICMP = 1
ヘッダー・チェックサム
送信元アドレス
ICMP通知を構成するゲートウェイホストアドレスである。違った形で言及されない限り、これは何らかのゲートウェイのアドレスとなる。
宛先アドレス
通知が送られるべきゲートウェイかホストのアドレスである。

通知の種類

以下の種類がある。

(通知の後ろの () 内は和訳の一例であり、一般的な言い方でない可能性がある)

制御メッセージ一覧[2][3]
TypeCode状態説明
0 - Echo Reply Message(エコー応答通知):140Echo応答(ping)
1 および 2未割当予約済み
3 - Destination Unreachable Message
(宛先到達不可能通知):4
0Destination network unreachable
1Destination host unreachable
2Destination protocol unreachable
3Destination port unreachable
4Fragmentation required, and DF flag set
5Source route failed
6Destination network unknown
7Destination host unknown
8Source host isolated
9Network administratively prohibited
10Host administratively prohibited
11Network unreachable for TOS
12Host unreachable for TOS
13Communication administratively prohibited
14Host Precedence Violation
15Precedence cutoff in effect
4 - Source Quench Message
(送出抑制要求通知)
0非推奨Source quench (congestion control)
5 - Redirect Message
(経路変更要求通知)
0Redirect Datagram for the Network
1Redirect Datagram for the Host
2Redirect Datagram for the TOS & network
3Redirect Datagram for the TOS & host
6非推奨Alternate Host Address
7未割当予約済み
8 - Echo Message(エコー要求通知)0Echo request (used to ping)
9 - Router Advertisement Message(ルーター広告通知)0Router Advertisement
10 - Router Solicitation Message(ルーター要請通知)0Router discovery/selection/solicitation
11 - Time Exceeded Message(時間切れ通知)
:6
0TTL expired in transit
1Fragment reassembly time exceeded
12 - Parameter Problem Message(不正引数通知)0Pointer indicates the error
1Missing a required option
2Bad length
13 - Timestamp Message
(タイムスタンプ要求通知)
0Timestamp
14 - Timestamp Reply Message
(タイムスタンプ応答通知)
0Timestamp reply
15 - Information Request Message(情報要求通知)0非推奨Information Request
16 - Information Reply Message(情報応答通知)0非推奨Information Reply
17 - Address Mask Request Message
(アドレスマスク要求通知)
0非推奨Address Mask Request
18 - Address Mask Reply Message
(アドレスマスク応答通知)
0非推奨Address Mask Reply
19予約済みセキュリティ向けに予約済み
20から29まで予約済みrobustness experiment向けに予約済み
30 Traceroute0非推奨Information Request
31非推奨Datagram Conversion Error
32非推奨Mobile Host Redirect
33非推奨Where-Are-You (originally meant for IPv6)
34非推奨Here-I-Am (originally meant for IPv6)
35非推奨Mobile Registration Request
36非推奨Mobile Registration Reply
37非推奨Domain Name Request
38非推奨Domain Name Reply
39非推奨SKIP Algorithm Discovery Protocol, Simple Key-Management for Internet Protocol
40Photuris, Security failures
41実験的ICMP for experimental mobility protocols such as Seamoby [RFC4065]
42から252まで未割当予約済み
253未割当RFC3692-style Experiment 1 (RFC 4727)
254未割当RFC3692-style Experiment 2 (RFC 4727)
255予約済み予約済み


Echo Message(エコー要求通知)・Echo Reply Message(エコー応答通知)

012345678910111213141516171819202122232425262728293031
タイプ(0または8)コード (0)チェックサム
識別子シーケンス番号
データ(可変長)

エコー要求はタイプ=8で送信される。現在のところ定義されているコードは0だけである。識別子は送信元で適当な値を決める。要求したプロセスのプロセスIDなどが使われる。シーケンス番号は、同じ識別子で繰り返しエコー要求を送信した場合の通し番号である。

宛先となっているホストがエコー要求を受け取ると、発信元と宛先のアドレスを入れ替え、タイプを0(エコー応答)に書き換え、チェックサムを再計算する。識別子とシーケンス番号はエコー要求で指定された値をそのまま返し、どの要求に対応する応答なのかを発信元で判別する際に使う。また、データフィールドも要求の内容をそのまま返す。

ネットワーク診断用コマンドpingは、このEcho / Echo Replyメッセージを使っている。

Destination Unreachable Message(宛先到達不可能通知)

012345678910111213141516171819202122232425262728293031
タイプ (3)コードチェックサム
未使用次HopのMTU
IPヘッダ + 元データのデータグラムの先頭部分

コードは状況に応じて以下の値をとる。

  • 0 - ネットワーク到達不能
  • 1 - ホスト到達不能
  • 2 - プロトコル到達不能
  • 3 - ポート到達不能
  • 4 - 断片化が必要だがDFフラグが設定されている
  • 5 - 送信元ルーティング失敗

RFC 1122において、以下のコードが追加されている。

  • 6 - 宛先ネットワーク不明
  • 7 - 宛先ホスト不明
  • 8 - 発信元ホストが孤立している
  • 9 - 宛先ネットワークとの通信が管理上禁止
  • 10 - 宛先ホストとの通信が管理上禁止
  • 11 - Type of Serviceに対してネットワーク到達不能
  • 12 - Type of Serviceに対してホスト到達不能

さらにRFC 1812では、以下のコードが追加されている。

  • 13 - 通信が管理上禁止
  • 14 - ホスト優先度違反
  • 15 - 優先度が低すぎる

コード9および10は特殊な用途のために定義されており、通常のルーターは13を発生させるよう求めている。

次HopのMTURFC 1191で導入された。コード=4のときに設定され、経路MTU探索のために使われる。タイプ=3、コード=4のICMPパケットをファイアウォール等でフィルタしてしまうと、経路MTU探索ブラックホールと呼ばれる問題が発生する。

また、RFC 792 (ICMPプロトコル本体の)Destination Unreachable Messageをみると次HopのMTUの項目はなく、未使用のみとなっている。

Source Quench Message(送出抑制要求通知)

012345678910111213141516171819202122232425262728293031
タイプ (4)コード (0)チェックサム
未使用長さ未使用
IPヘッダ + 元データのデータグラムの先頭部分

受信能力を超えた早さでデータグラムが届き、破棄してしまったことを通知する。ゲートウェイおよび宛先ホストのどちらでも発生する可能性がある。

Redirect Message(経路変更要求通知)

012345678910111213141516171819202122232425262728293031
タイプ (5)コードチェックサム
ゲートウェイのIPアドレス
IPヘッダ + 元データのデータグラムの先頭部分

ゲートウェイから送信元に対して、今後は他のゲートウェイを使うよう指示する。元のデータグラムも破棄せずに転送する。経路変更要求ICMPメッセージを受け取ったホストはルーティングテーブルに追記し、該当する次のデータグラムからは指示されたゲートウェイへ送るようになる。

コードは以下の値をとる。

  • 0 - ネットワークに関する経路変更要求
  • 1 - ホストに関する経路変更要求
  • 2 - Type of Serviceとネットワークに関する経路変更要求
  • 3 - Type of Serviceとホストに関する経路変更要求

Router Advertisement Message(ルーター広告通知)

012345678910111213141516171819202122232425262728293031
タイプ (9)コード (0)チェックサム
ルーターアドレス数1エントリあたりの長さ有効期限
ルーターアドレスその1
優先度その1
ルーターアドレスその2
優先度その2


Router Advertisement Messageおよび次のRouter Solicitation Messageは、RFC 1256で追加された。

デフォルトゲートウェイのアドレスを通知する。ルーターアドレス数で指定した数だけ列挙することができ、優先度(2の補数表現による符号付き32ビット整数)が大きいものほど優先度が高い。1アドレスあたりの長さは32ビット単位で指定し、このバージョンの形式では2(すなわち1エントリあたり64ビット)となる。有効期限は応答時点からの秒単位で指定する。

Router Solicitation Message(ルーター要請通知)

012345678910111213141516171819202122232425262728293031
タイプ (10)コード (0)チェックサム
未使用

Time Exceeded Message(時間切れ通知)

012345678910111213141516171819202122232425262728293031
タイプ (11)コードチェックサム
未使用長さ未使用
IPヘッダ + 元データのデータグラムの先頭部分

コード0は、IPヘッダのTime to live(TTL;存在回数)が0になっても宛先ホストに到達しなかったことを通知する。コード1は、断片の再統合を行う際、制限時間内に断片が揃わなかったことを通知する。

ネットワーク診断用コマンドtracerouteは、TTLを1から順に増やして行き、各中継点からの時間切れ通知から経路を調べる。

Parameter Problem Message(不正引数通知)

012345678910111213141516171819202122232425262728293031
タイプ (12)コード (0)チェックサム
ポインタ長さ未使用
IPヘッダ + 元データのデータグラムの先頭部分

パラメータに問題があって、元のデータグラムを破棄したことを通知する。ポインタは元データのうち問題となった箇所を、先頭からのオクテット数で指定する。

Timestamp Message(タイムスタンプ要求通知)・Timestamp Reply Message(タイムスタンプ応答通知)

012345678910111213141516171819202122232425262728293031
タイプ(13または14)コード (0)チェックサム
識別子シーケンス番号
起点タイムスタンプ
受信タイムスタンプ
送信タイムスタンプ

タイムスタンプ要求はタイプ=13で送信される。現在のところ定義されているコードは0だけである。識別子およびシーケンス番号はエコー要求と同じ要領で使う。起点タイムスタンプには要求時のタイムスタンプを、UTC 0:00からの経過ミリ秒で設定する。日付は含まれておらず、毎日0に戻ることに注意。

宛先となったホストはタイムスタンプ要求を受け取ると、タイプ=14で応答する。識別子、シーケンス番号、起点タイムスタンプは、要求にセットされていた値をそのままコピーする。また要求を受信した際のタイムスタンプを受信タイムスタンプに、応答を送信する際のタイムスタンプを送信タイムスタンプにセットする。

要求を送信したホストは、応答を受信した際のタイムスタンプと、格納されている起点タイムスタンプを比較することで、往復に要した時間を知ることができる。

Information Request Message(情報要求通知)・Information Reply Message(情報応答通知)

012345678910111213141516171819202122232425262728293031
タイプ(15または16)コード (0)チェックサム
識別子シーケンス番号

タイプ=15の情報要求通知はアドレス0に対して送られる。要求を受信した各ホストおよびゲートウェイは、タイプ=16の情報応答通知を返す。

Address Mask Request Message(アドレスマスク要求通知)・Address Mask Reply Message(アドレスマスク応答通知)

012345678910111213141516171819202122232425262728293031
タイプ(17または18)コード (0)チェックサム
識別子シーケンス番号
アドレスマスク

Address Mask Request MessageおよびAddress Mask Reply Messageは、RFC 950で追加された。

脚注

参考文献

関連項目

外部リンク

  • RFC 792 - Internet Control Message Protocol
  • RFC 950 - Internet Standard Subnetting Procedure
  • RFC 1122 - Requirements for Internet Hosts -- Communication Layers
  • RFC 1191 - Path MTU Discovery
  • RFC 1256 - ICMP Router Discovery Messages
  • RFC 1812 - Requirements for IP Version 4 Routers
  • RFC 4884 - Extended ICMP to Support Multi-Part Messages
🔥 Top keywords: メインページ宮崎麗果特別:検索豊後水道松本忠久土居志央梨若葉竜也能登半島地震 (2024年)田中雄士長谷部誠井上道義The GazettE若林志穂服部百音黒木啓司REITA虎に翼平井理央出口夏希サーブ (盲導犬)三鷹事件セウォル号沈没事故白眞勲三淵嘉子高橋克也 (オウム真理教)ME:Iルーシー・ブラックマン事件佐藤ありさ杉咲花蜜谷浩弥水野真紀亀井亜紀子 (政治家)熊本地震 (2016年)水原一平井川意高中川安奈 (アナウンサー)内藤剛志いなば食品YOSHIKI