サーバー構築 セキュリティ TCP/IP基礎 TIPS 書籍 ブログ

Web全体 サイト内検索

 TCP/IPの基礎知識
TCP/IPとOSI参照モデル
必須:コンピュータの情報単位
IPアドレスとその仕組み
プリフィックス値とサブネットマスク
グローバル/プライベートアドレス
ブロードキャスト/マルチキャストアドレス
 プロトコル別解説編
ARPとRARP/MACアドレス
ポート番号とは?
TCPとUDP/両プロトコルの相違
ICMPとは?
DNSとは/DNSサーバーの仕組み
VPN(PPTP/L2TP)とは
 実践ネットワークコマンド
PINGコマンド/MTU値の調整
TRACERTコマンド
NETSTATコマンド
NSLOOKUPコマンド
ARPコマンド
IPCONFIGコマンド
 各関係組織・団体
JPNIC
Whoisデータベース(VeriSign)
IANA
 




ICMP(Internet Control Message Protocol)とは、IPの機能を補完するためのプロトコルです。IPプロトコル自体の機能としては、IPアドレスの情報からネットワークを識別して、特定のコンピュータ(送信元)から特定のコンピュータ(宛先)まで、データパケットを届けることに終始一貫しているため、実際に自分自身で送受信が成功したのかどうかの確認を行いません。この確認を行うためには、上位の層であるトランスポート層(TCPプロトコルなど)の協力を得なくてはなりません。しかし、できれば同階層であるインターネット層でもある程度の信頼性を確保しておきたいところです。そこで登場するのがICMPプロトコルで、そのプロトコルを利用したコマンドがほとんど全てのコンピュータに実装されている「Pingコマンド」です(下図参照)。他にもデータグラムの配送中にエラーが発生したことを始点ホストへ通知するさいに使われたり、非効率なルーティングを行っているときにルーティングテーブルを更新するためなどに使用されます。




例1)パケットが到達した場合





例2)ネットワーク不通のため、パケットが相手に届かない場合






例3)パケットが相手に届く前に時間切れとなってしまった場合





上記の図を見てもわかるとおり、相手コンピュータが返すICMPメッセージによってインターネット層でもある程度のネットワーク状況が把握できるようになっています。そのICMPの種類も1種類だけではなく、何種類かのメッセージがあることもおわかりになるでしょう。以下の表にその種類が記述されているので参考にしてください。

#defineされている文字 コード 意味
ICMP_ECHOREPLY 0 エコー応答
ICMP_UNREACH 3 終点到達不能
ICMP_SOURCEQUENCH 4 始点抑制
ICMP_REDIRECT 5 リダイレクト
ICMP_ECHO 8 エコー要求
ICMP_TIMXCEED 11 時間超過
ICMP_PARAMPROB 12 パラメータエラー


ただし、ひとつだけ注意しなくてはいけないことはICMPプロトコルを利用しても、ネットワークの状態が漠然とわかるだけで、完全に信頼してはいけないということです。ICMPはあくまでもIPプロトコルの機能を補完し、ネットワークの状態がどのようになっているのかを事前に知っておくために利用するものです。実際に、確実な信頼性を確保するためにはその上位層であるトランスポート層やアプリケーション層に依存しなくてはなりません。 このようにTCP/IPにおけるデータ通信は、上下層との連携があってはじめて成り立っているということを再確認しておいてください。なお、「Pingコマンド」の実践においては「PINGコマンド/MTU値の調整」を参考にしてください。以下に記すものはICMPの構造について記したものです。管理人の労力の関係上、全てのICMPの構造を説明するのは不可能なので、エコー要求(Type8)、エコー応答(Type0)、到達不能(Type3)について簡単に解説しておきました。興味のある方は参考にしてください。





ICMPエコー要求(タイプ8)とエコー応答(タイプ0)は上図でも示したとおり、「パケットが無事に到達した場合」でUNIXや、Windowsに標準で用意されている「Pingコマンド」で利用することができます。これは通信をとりたいコンピュータに対し、「ICMPエコー要求」を送り、その宛先のコンピュータにICMPエコー要求が届いた場合に今度は反対に、「ICMPエコー応答」が返ってきます。これによってIPデータグラムが「行き」も「帰り」も正しく配送できることが確認することができるのです。端的にいってしまえば、人間どうしのコミュニケーションにも例えることができ、何かについて質問したら答えが返ってくるようなものです。以下の図がICMPエコー要求、エコー応答のパケットフォーマットです。

◎ICMPエコー要求、エコー応答
タイプ
Type
icmp_type
コード
Code
icmp_code
チェックサム
Checksum
icmp_cksum

識別子
Identification
icmp_id
シーケンス番号
Sequence Number
icmp_seq

データ
icmp_data


icmp_cksum ヘッダとデータが壊れていないことを保証します。

icmp_id 複数のPingコマンドを同一コンピュータ上で実行した際に、送信したパケットとそれに対する応答が識別できるようにします。

icmp_seq 送信側が何番目のicmpパケットを送ったのかを番号で書き込みます。エコー応答を返す場合、受け取ったシーケンス番号をそのまま返します。これはパケットが喪失していないかどうかを確かめるために利用されます。

icmp_data 適当なデータを入れます。



ICMPエコー応答では、ICMPエコー要求のデータがそのままコピーされて返ってくるため、ICMPエコー要求に送信時刻のデータを入れておくと、ICMPエコー応答が返ってきたときに、データに格納されている時刻とパケットを受信した時間を比較し、パケットの往復に要した時間を計算することができます。





ICMP到達不能(unreachable)は、何らかの原因で目的のコンピュータまでIPデータグラムを届けることが不可能になった場合に生成されます。届かなかった原因としてはいくつか考えられますが、相手のコンピュータの電源が入っていなかった場合、ルーティングテーブルが間違っている場合、プログラムが正しく動作していなかった場合などが挙げられます。このとき、ICMPの到達不能原因にさいして、返ってきたICMPメッセージによってどの症状に当てはまるのかがおおよそ推測できるようになっています(以下表参照)。

#defineされている文字 コード 意味
ICMP_UNREACH_NET 0 ネットワーク到達不能
ICMP_UNREACH_HOST 1 ホスト到達不能
ICMP_UNREACH_PROTOCOL 2 プロトコル到達不能
ICMP_UNREACH_PORT 3 ポート到達不能
ICMP_UNREACH_NEEDFRAG 4 フラグメントが必要だがDFがセットされている
ICMP_UNREACH_SRCFAIL 5 ソースルーティングが失敗した


◎ICMP到達不能
タイプ
Type
icmp_type
コード
Code
icmp_code
チェックサム
Checksum
icmp_cksum

未使用
icmp_pmvoid
次のMTU
Next MTU
icmp_nextmtu


データ
(IPヘッダとそれに続く64ビット)
icmp_data




 

Copyrights©KORO 2002-08 All Rights Reserved.Since 02/08/15 | サイトのプライバシーポリシー