ICMP(internet control message protocol)はIPによる通信をサポートするプロトコルである。ただ,“サポートする”といってもピンとこないかもしれない。Lesson1では,ICMPがどのような役割を持ち,どのように働くのかを見ていこう。

IP通信に必要な情報を通知する

 IPには,伝送路上に障害が起こったり,サーバーが正しく受信できていなかったりしても,それを送信元に的確に伝えるしくみが用意されていない。そこで,IPの通信に必要な情報を伝えたり,問い合わせたりする役目を担っているのがICMPだ(図1-1)。

図1-1●ICMPはIP通信を手助けするプロトコル
図1-1●ICMPはIP通信を手助けするプロトコル
ICMP(internet control message protocol)は,IP通信のエラーを通知したり,あて先の機器と通信できるかなどを調べるために使われるプロトコル。パソコンやサーバーのほか,ルーターもICMPを備える。RFC792に,IPを実装する場合はICMPも必ず実装するように書かれている。  [画像のクリックで拡大表示]

 例えば,パソコンとサーバーの間できちんと通信できることを確かめる場合を考えてみよう。ユーザーが通信に先立ってパソコンからサーバーにパケットが届くことを確認したいとき,ICMPを使えば調べられる。また,通信中に突然ルーターとサーバーをつなぐケーブルに障害が発生した場合も,ICMPが障害の発生をパソコンに教えてくれる。

 このように,ICMPはIPにとってなくてはならない重要な存在だ。ICMPについて規定しているRFC792という文書には,「IPを実装するときはICMPも必ず実装しなければならない」と明記してある。

 IPを実装するのはパソコンやサーバーだけではない。IPを処理するネットワーク機器もある。つまり,ルーターにもICMPは実装されているのである。

メッセージの内容は2種類ある

 ICMPでやりとりするメッセージはたくさんあるが,大別すると「エラー通知」と「問い合わせ」の2種類に分けられる(図1-2)。

図1-2●エラー通知や状態の問い合わせに使われる
図1-2●エラー通知や状態の問い合わせに使われる
ICMPでやりとりするメッセージには「エラー通知」と「問い合わせ」の2種類がある。
[画像のクリックで拡大表示]

 エラー通知は,経路に障害が発生したり,あて先までの最適経路が変更になった場合に,送信元にそれらの情報を通知するのに使われるメッセージである。こうしたエラーを通知するのは,主にルーターに実装されているICMPだ。

 エラー通知がどのように送られるのかを,もう少し詳しく見てみよう。経路上にあるルーターは,受け取ったIPパケットを次の送り先に転送できなかった場合,そのIPパケットを廃棄して送信元にICMPメッセージを入れたパケットを送り返す。このICMPメッセージには,パケットを転送できなかった理由が書かれている。送信元のパソコンはそのメッセージを参考にして,送信先を変えたり,データのサイズを変えるなどの対処をする。

 ここで注意しておきたいのは,通常の通信に使われているIPパケットを処理している最中に生じたエラーを通知するということだ。つまり,エラー通知はICMPメッセージに対してではなく,IPパケットが送られてきたときに,その返信として送られるメッセージなのである。

コマンドを使ってメッセージを送信

 もう一つの「問い合わせ」は,ICMPを使った問い合わせの要求に対して,問い合わせ先の機器がICMPで応答を返すというやりとりである。

 このICMPの問い合わせのしくみを利用したものでは,pingコマンドが有名だ。ここでは,pingに使われているICMPメッセージである「エコー要求」と「エコー応答」のやりとりを見ていこう(pingの詳細についてはLesson3を参照)。

 エコー要求は,通信相手の機器が動いているかどうかを調べるときに使われる。人間の動作に例えると,大きな声で「聞こえていますかー」と呼びかけて相手が返事をするかを確かめるのと同じだ。

 この呼びかけ(エコー要求)に対して相手が返す返事がエコー応答である。ユーザーは,あて先の機器を指定してエコー要求を送る。これに対して,あて先の機器がきちんと動いている場合はエコー応答を送り返す。

 単純なしくみだが,エコー要求/応答はpingなどさまざまな機能の裏側で働いているのである。