トップ > スキル : ネットワーク > プロトコル(ICMP)

ネットワーク

ICMPの基本

IPネットワークは時として、通信エラーが生じますが、通信の途中でデータが喪失したり、あて先のマシンが存在しないのにそれが分からないようであれば、円滑な通信ができません。通信エラーが起こったことを検知し、お互いに知らせあうプロトコルがICMPです。普段、意識してICMPを見ることはありませんが、IPネットワークでのICMPの働きを説明していきます。

ICMPの機能

IP通信で送信したパケットが相手に届かない場合、通信経路のルータがパケットを処理しきれなく破棄したり、ポート番号を間違えていたためサーバのアプリケーションで受け取れないことが考えられます。このような時、エラーが起こった現場から送信先に通知してくれるのがICMPパケットです。つまり、IP通信を補佐するためのプロトコルと言えます。

IETFのRFCでは、「ICMPはIPの一機能を担っているプロトコルである」と定義付けています。実際、ICMPはOSがIP通信を円滑にできるように制御したり、ネットワークコマンドの"ping"や"traceroute"などの裏方として働いています。単独でも、裏方としても動作するプロトコルです。

ICMPの用途を見ていくと、大きく2つに分けられます。
まず1つ目は、送信元に対するエラー通知です。これはIPパケットがあて先のマシンで処理されるまでの過程で、何らかのエラーが起こったときに使われます。エラーが起こったことを伝え、送信元に対してその原因なども通知しています。

2つ目は、送信元による情報の照会です。送信元のマシンが自分から他のネットワーク機器に対して情報を問い合わせる目的として使います。例えば、自分のネットワークが持っているサブネット・マスク情報、相手のマシンが持っている時刻情報の取得など様々です。

ICMPのパケット・フォーマット

では、ICMPのパケットの中身を見て、どのような働きができるか見ていきます。注目する点は、ICMPの情報がIPパケットのデータ部分に格納されてやり取りされることです。ICMPはパケット・フォーマット上ではIPの上位プロトコルとなりますが、実際はIPと同じレイヤーのプロトコル(インターネット層)です。

ICMPに関するフィールドは、7つあります。IPヘッダーに含まれるプロトコル番号、送信元IPアドレス、あて先IPアドレス、TTL(生存時間)と、ICMPのデータ部分に含まれるタイプ、コード、オプション・データが主なフィールドとなります。

ただ、プロトコル番号は「1」と決まっています。またそれぞれのIPアドレスは通信では不可欠なものですし、TTLはICMPを活用する場面で関係してきます。よって、ICMPを知るにはタイプ、コードが重要となります。先ほど記述したエラー通知や情報照会は、すべてタイプとコードの組み合わせで表現されます。残りのオプション・データは、送信元に対して伝えるべき情報があるときに使われます。

【ICMP:ICMPの基本】