Lesson3ではトラブル時やネットワークの状況を知るときによく使うコマンドのしくみを見ていこう。ここでは,ICMPを実装した代表的なコマンドとして,pingとtracerouteについて説明する。

エコー要求への応答を調べるping

 pingコマンドは,あて先の機器を指定して,IPで通信できる状態にあるかどうかを調べるコマンドだ。相手にICMPメッセージを送り,応答があるかどうかをチェックする。Windowsのpingコマンドを例に処理の流れを追っていこう(図3-1)。

図3-1●あて先の機器と通信できるかを調べるpingコマンド
図3-1●あて先の機器と通信できるかを調べるpingコマンド
pingコマンドはICMPを基にして実装されている。pingコマンドを実行すると,あて先の機器にエコー要求パケットが送られる。あて先の機器からエコー応答パケットが返ってくれば通信可能と判断できる。[画像のクリックで拡大表示]

 まず,ユーザーがコマンド・プロンプトを立ち上げ,「ping」に続けて相手のサーバーのIPアドレスまたはホスト名を入力する(図3-1の(1))。すると,指定した相手にエコー要求が4回送信される(同(2))。エコー要求はタイプが8でコードが0のメッセージだ。

 エコー要求が相手のサーバーに届くと,サーバーはエコー応答を返信する(同(3))。エコー要求は4回送られてきているので,エコー応答も4回返す。エコー応答はタイプ0,コード0のメッセージだ。ただし,IPが動いていないとサーバーはICMPメッセージを返信できない。

 エコー応答が送信元のパソコンに届くと,画面にpingコマンドの実行結果が表示される(同(4))。

TTLを変化させたパケットを送信

 もう一つのtracerouteコマンドは,あて先までの経路(通過するルーター)を調べるためのコマンドだ(図3-2)。Windowsでは「tracert」というコマンド名である。コマンドを実行するときはtracertに続けて相手のサーバーのIPアドレスまたはホスト名を入力する(図3-2の(1))。

図3-2●Windowsでtracertコマンドを実行したときの動作
図3-2●Windowsでtracertコマンドを実行したときの動作
Windowsでtracertコマンドを実行すると,あて先の機器に向けてTTLを1ずつ増やしながらエコー要求パケットを送り,時間超過メッセージを返信してきたルーターのIPアドレスを順次表示する。[画像のクリックで拡大表示]

 tracertコマンドを実行すると,パソコンは指定した相手に向けてエコー要求メッセージを送信する。このとき,TTLを1に設定しておく(同(2))。TTLはそのパケットが経由できるルーターの数を示す値。TTLが1だと,一つめのルーターAでTTLが1減らされて0となり,次へは転送されずにパケットが廃棄される。するとルーターは,タイプ11/コード0の時間超過メッセージを送信元パソコンに返信する(同(3))。

 次にパソコンは,TTLを2に設定して再びパケットを相手のサーバーに送る(同(4))。すると,二つめのルーターBでTTLが0になり,パケットは廃棄されて時間超過メッセージが戻ってくる(同(5))。このように,パソコンは相手にパケットが届くまでTTLを一つずつ増やしながらエコー要求を送り続ける(同(6))。相手にパケットが届くと,エコー応答メッセージが戻ってくるので(同(7)),このメッセージを受け取ったらパケットの送出を止める。

 パソコンは,時間超過メッセージを送ってきたルーターのIPアドレスを,応答にかかった時間と合わせて順次画面に表示する。こうしてあて先サーバーまでの経路がわかるのである。