LAN技術研究室(LANに関心がある人のために情報を提供しているサイト)

スポンサードリンク


LANの初歩

LANの診断に使われるプロトコル

ICMPInternet Control Message Protocol

ICMPは、Internet Control Message Protocolの略で、LANの診断に使われるプロトコルです。
具体的には、宛先のノード(PC、ルーターなど)が動作してるかどうかや、エラー、ネットワークの状態の通知をチェックすることに利用されます。
宛先のノードの確認には、pingコマンドを使用します。
ネットワーク管理者なら絶対に知っていなければならない重要なコマンドです。
使い方は、ここでは解説しませんが必ず覚えておきましょう。後で簡単な説明だけ行います。
ICMPにも独自のヘッダーがあり、これはIPヘッダーの次にあります。
IPヘッダーには、プロトコル番号があり、上位のプロトコルを示しています。
この番号が1だとICMPになります。
それでは、IPパケットに含まれるICMPヘッダーを見ていきましょう。

8ビット
タイプ
8ビット
コード
16ビット
チェックサム
可変長
データ

ICMPヘッダーの先頭にあるタイプについて説明します。
ICMPメッセージのタイプは、以下の表のようになります。

タイプ(10進数)意味
エコー応答【echo reply】

コンソールでのpingコマンドの応答
コードの値は0のみを指定する。
宛先到達不可【destination unreachable】

コードの値は0〜15を指定する。
送信元抑制【source quench】

コードの値は0のみを指定する。
リダイレクト要求(経路変更要求)【redirect】

コードの値は0〜3を指定する。
エコー要求【echo request】

コンソールでのpingコマンドの送信
コードの値は0のみを指定する。
11 時間超過【time exceeded】

コードの値は0〜1を指定する。
12 パラメータに関する問題【Parameter Problem】

コードの値は0のみを指定する。
13 タイムスタンプ要求【timestamp request】

コードの値は0のみを指定する。
14 タイムスタンプ応答【timestamp reply】

コードの値は0のみを指定する。
15 情報要求【information request】

コードの値は0のみを指定する。
16 情報応答【information reply】

コードの値は0のみを指定する。
17 アドレスマスク要求【address mask request】

コードの値は0のみを指定する。
18 アドレスマスク応答【address mask reply】

コードの値は0のみを指定する。

ICMPは、メッセージのタイプが異なると、それに続くコードの値や意味も異なります。
つまり、タイプごとに様々なコードがあります。
ICMPに関する詳細は、RFC792に記載されています。
RFC792も含めてRFCの詳細は、以下のサイトで御覧下さい。

IETF RFC Page
JPNIC RFC-JP(社団法人:日本ネットワークインフォメーションセンター)
RFC792(英文)【IETF RFC Page】

ICMPヘッダーには、タイプとコード以外にチェックサムがあります。
チェックサムがチェックする対象は、IPパケット全体です。
チェック対象を1の補数和で加算したものがICMPヘッダーのチェックサムのフィールドに設定されます。
以下のページで、IPヘッダーチェックサムの例ですが、プログラムで実際にチェックサムの計算を行うための方法を解説しました。

チェックサムの具体的な計算方法の紹介

IPヘッダーチェックサムの計算でも、1の補数和が利用されているので計算方法はだいたい同じです。
対象ヘッダーやデータが違うくらいです。
また、ICMPでは、TCPセグメントUDPデータグラムのように、擬似ヘッダーはありません。
1の補数和についての説明も「チェックサムの具体的な計算方法の紹介」のページに書かれています。

チェックサムに続くフィールドは、データです。
データには、ICMPタイプによって異なる長さのメッセージが設定されます。


pingコマンド

pingコマンドは、2つのICMPメッセージから成り立っているコマンドです。
コマンドが実行されると、エコー要求をICMPヘッダーのタイプフィールドに指定したICMPメッセージが送信されます。
その後、どこかのノードから返事が返ってくると、ICMPヘッダーのタイプフィールドにエコー応答が設定されたICMPメッセージが受信されます。
その後、コンソール画面に通信状況メッセージが表示されます。
これを見ると、宛先のノードが機能しているかどうかがわかります。
正常な場合は、タイプがエコー応答になっていますが、何か異常が起きた場合などは異なるタイプや異なるコードが返ってくる場合もあります。
何らかの理由で、宛先にICMPメッセージを送れなかった場合、タイプが3の宛先到達不可のICMPメッセージが返る場合があります。
その理由は、コードフィールドの値で示されます。
このコードの意味は、RFC792に記載されています。
pingコマンドは、UNIX、Macintosh、Windows®など多くのOSの標準的なコマンドとして実装されています。


ページトップ
特殊な用途に利用されるプロトコル[メニュー]へ戻る
サイトマップ(LAN技術研究室の案内図)
ネットワーク技術用語集へ行く
LAN技術研究室のトップページ

© 2007 Toyozi Masuda All rights reserved.