【ICMPとは】
「ICMP」は”Internet Control Message Protocol”の略で、文字通りIPメッセージ
が送信元から相手に届くまでの間に起きたエラー関連の情報を送信元に通知する
ためのプロトコルです。
数多くの種類の通知がありますが、これらの中でも最も良く使われているのが
「PINGコマンド」と呼ばれる「エコー要求」と「エコー応答」です。
これを使えばIPアドレスで指定した相手と通信が出来るかどうかが簡単に確認
出来ます。
【ICMPのフレームフォーマットとPING】
ICMPの場合のIPフレームフォーマットは下図の左端となっています。図から判る
ように、IPメッセージのひとつとして転送されます。
IPヘッダの部分はプロトコル種別がIPとなっています。そして実際のICMPプロトコル
はIPのデータ部分に格納されています。
ICMPフレームの最初にはタイプとコードのデータがあり、これでICMPの多くの
メッセージ種別の指定をしています。
ICMPフレーム内にあるチェックサムは、図で示したようにICMPフレーム内の
データ部を含む全体のチェックサムとなっています。
ICMPの実際の例としてエコー要求とエコー応答、つまりPINGコマンドについて
図の右側に示しています。
PING要求と応答ではフォーマットの違いはタイプだけで、応答では要求の内容
をそのままコピーして、タイプを00Hにしてチェックサムを再計算して返送します。
【データの内容】
ICMPフレームの各フィールドの内容は下表のようになっています。
フィールド名 機能と内容 備考 タイプ ICMPのデータ区分で数10種類の区分がありますが、
本ライブラリではエコー要求と応答だけです。
08H:エコー要求 00H:エコー応答他の例
0DH:タイムスタンプ要求
0EH:タイムスタンプ応答コード 00Hの固定 チェックサム ICMPフレーム部のチェックサム 範囲は上図 データ ICMPの実際のデータとして送受される。 この部分も含めて
IPヘッダのデータ数となる以下はエコー要求/応答の場合の内容 プロセス番号 PINGコマンドを発行した側で設定された値
が送信される。
受信側ではこれをそのままコピーして応答
として返信する。送信側では応答内容
が同じかをチェックする発行番号 チェックデータ