フレームフォーマット
・IPヘッダはIPパケットなので他と共通である。
・プロトコル番号は1である。参考までにUDPは17
・タイプ(type):メッセージの種類。たとえばpingの要求(echo)は8で、pingの応答パケット(echo reply)は0
・コード(code):コードは詳細情報を表す。たとえば、type3は宛先到達不能(destination host unreachable)であるが、その原因はいくつかある。宛先コンピュータが問題ならcode1、UDPのポートが問題なら3(※TCPはTCPの別パケットが返される)、DFビットがセットされている場合は4など。
2

ICMPのフレームフォーマット詳細解説
※Type(8)のEcho Requestの場合
(1)ヘッダ
Type(1)
Code(1)
チェックサム(2)
ぜ永婿(2)
ゥ掘璽吋鵐紅峭(2)
Ε如璽拭焚鎚僉

(2)Typeの例
0 Echo Reply :pingコマンドの応答パケット
icmp2
3 Destination Unreachable
 ※前の記事の、ルータが知らないセグメントにpingを打った場合に、ルータがこのメッセージを返した。
icmp
4 Source Quench
5 Redirect :ICMPリダイレクト
8 Echo Request :pingコマンドを実行した場合
icmp3
11 Time Exceeded: 定められた生存時間(TTL:Time To Live)を超えた(Exceeded)とうことで、パケットを破棄したことを通知するメッセージ。tracerouteは、この仕組みを利用している。
icmp

実際のキャプチャ例
Etherealでキャプチャーした。
皆さんも、ぜひご自分でやっていただきたい。

以下の赤線部分のみ見てもらえばいい。
1.Ethernet ・・・ イーサネットヘッダ
(1)宛先MACアドレス ・・・ 00:0d:02:xx:xx:xx
(2)送信元MACアドレス ・・・ 00:19:d2:xx:xx:xx
(3)タイプ ・・・ IP (ここから次はIPフレームであることを示している)
2.Internet Protocol ・・・ IPヘッダ
(1)プロトコル ・・・ ICMP
(2)送信元IPアドレス ・・・ 192.168.1.111
(3)宛先IPアドレス ・・・ 192.168.1.1

※パケット長の前にTOS(Type Of Service)フィールドがあり、パケットの優先順位をつけることができる。しかしあまり使われていない。
ICMPのパケット