Internet Control Message Protocol
エコー要求はタイプ=8で送信される。現在のところ定義されているコードは0だけである。識別子は送信元で適当な値を決める。要求したプロセスのプロセスIDなどが使われる。シーケンス番号は、同じ識別子で繰り返しエコー要求を送信した場合の通し番号である。
宛先となっているホストがエコー要求を受け取ると、発信元と宛先のアドレスを入れ替え、タイプを0(エコー応答)に書き換え、チェックサムを再計算する。識別子とシーケンス番号はエコー要求で指定された値をそのまま返し、どの要求に対応する応答なのかを発信元で判別する際に使う。また、データフィールドも要求の内容をそのまま返す。
ネットワーク診断用コマンドpingは、このEcho / Echo Replyメッセージを使っている。
ICMPヘッダは一般的に以下の通りとなる。
データグラムのデータ部分の最初のオクテットはICMPタイプフィールドであり、このフィールドの値は、以降のICMP通知の書式を決定する。「未使用」とラベル付けされているフィールドは今後の拡張のために予約されており、送信時には0を入れなければならないが、受信者はこれらのフィールドを(チェックサムに含めることを除いて)使用すべきではない。チェックサムは、ICMPヘッダの先頭から(すなわちタイプから)データの末尾までを対象に、16ビット単位で算出される。チェックサムフィールド自身も計算対象に入っているが、計算時には0として扱う。バイト数が奇数の場合は末尾に0のバイトがあるものとして計算する。
また、いくつかのタイプでは、ICMP通知が発生する原因となった元データグラムの先頭部分をコピーしている。この種のタイプは以下の形式をとる。
RFC 792では長さフィールドは未使用で、元データグラムの先頭部分は64ビット(8オクテット)と決まっていた。その後RFC 1812およびRFC 4443において、MTUの最小限として保障されるサイズ(IPv4は576オクテット、IPv6は1280オクテット)まで拡張された。RFC 4884において長さフィールドが追加され、この可変長領域の長さを32ビット単位で記述することになった。
ICMP通知は基礎的なIPヘッダーを使用して送られる。個々の型式記述の下で違った形で言及されない限り、ICMPヘッダに先行するIPヘッダーフィールドの値は以下の通りとなる。
Router Advertisement Messageおよび次のRouter Solicitation Messageは、RFC 1256で追加された。
デフォルトゲートウェイのアドレスを通知する。ルーターアドレス数で指定した数だけ列挙することができ、優先度(2の補数表現による符号付き32ビット整数)が大きいものほど優先度が高い。1アドレスあたりの長さは32ビット単位で指定し、このバージョンの形式では2(すなわち1エントリあたり64ビット)となる。有効期限は応答時点からの秒単位で指定する。
タイプ=15の情報要求通知はアドレス0に対して送られる。要求を受信した各ホストおよびゲートウェイは、タイプ=16の情報応答通知を返す。