ここまでは、ネットワークの構成という視点でインターネットについて紹介してきましたが、次はユーザが手元でいろいろ試してみるという方向性で話を進めたいと思います。まず最初に紹介するのは、最も原始的であり、一般的なネットワークコマンドであるping です。
pingは、ネットワークの向こうにいるホストが生きているかを確認できるコマンドです。やっていることは非常に単純で、パケットを相手に送り付けて、相手はパケットを送り返すというものです。pingの名前も由来は「ping pong」から来ています。
図1 ping
まずはやってみましょう
百聞は一見にしかず、なので「何故動くか」の先にどうやったら使えるかを説明してしまいたいと思います。まずWindowsであれば最初にDOSプロンプトを起動してください。DOSプロンプトの起動方法がわからない方は、「 スタート⇒プログラム名を指定して実行⇒cmdと入力」してください。それでDOSプロンプトが出てくると思います。
Mac OS Xであれば「ターミナル」を実行してください。
LinuxやFreeBSDなどのUNIX系OSをご利用の方々は、何らかの方法でコマンドラインを出してください(というより、UNIX系OSをご利用の方々であれば、ここら辺は説明する必要はないだろうと推測されます) 。
次に、「 ping ホスト名」とプロンプトが表示されたコマンドラインで打ってください。「 ホスト名」の部分は適当に思いつくホスト名か、もしくはIPアドレスを使ってください。私の手元の環境では、192.168.0.1がルータなので、例では「ping 192.168.0.1」とします。
図2 Windowsでの成功例
C:\> ping 192.168.0.1
Pinging 192.168.0.1 with 32 bytes of data:
Reply from 192.168.0.1: bytes=32 time<10ms TTL=30
Reply from 192.168.0.1: bytes=32 time<10ms TTL=30
Reply from 192.168.0.1: bytes=32 time<10ms TTL=30
Reply from 192.168.0.1: bytes=32 time<10ms TTL=30
Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
これは、pingが成功している例を示しています。では、この成功例は何を言っているのでしょうか?
まず、前半の行を見ると32バイトのデータパケットを送ってpingを行っているのがわかります。次に、各「Reply」と書かれた行を見ると、pingに対する4回の応答が10msで帰ってきているということもわかります。TTLというのはIPパケットのTime To Liveです。このTTLとは、パケットがルータによって転送されてもよい回数がIPヘッダに記述されたものです。
次に、失敗している例を見たいと思います。今度は、存在しないホストに対してpingを行います。私の手元の環境では、192.168.0.100というホストは存在しません。今度はそこに向けてpingを行います。
図3 失敗例
C:\> ping 192.168.0.100
Pinging 192.168.0.100 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 192.168.0.100:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
上記実行結果を見ると「Request timed out」が4回続いています。これは、「 pingの応答を待ったけど返ってこなかった」ということを示しています。
ping原理
大体の動作がわかったところで、では、実際にはpingは何を行っているかを説明します。
pingは、ICMP(Internet Control Message Protocol)というプロトコルを利用しています。 ICMPは、エラーメッセージや制御メッセージを転送するIP上のプロトコルです。
ICMPのパケットは図4 のような形になります。ICMPはIP上のプロトコルなので、ICMPヘッダはIPヘッダの直後に来ます。ICMPのIPプロトコルIDは「1」です。このことからも、ICMPが非常に根本的なプロトコルであることがわかります。
図4 ICMPパケット
ICMPにはさまざまな機能がありますが、pingはそのうちのEchoメッセージとEcho Replyメッセージを利用しています。Echoメッセージとは、「 Echoを返してくれ」というメッセージで、Echo Replyメッセージは「Echoに対する応答」です。
pingは、Echoメッセージを送信し、Echo Replyメッセージが帰ってくるのを待ちます。pingコマンドは、Echo Replyメッセージを確認すると、Echo Replyを受け取るのにかかった時間を計り、表示しています。
注意事項
pingの実験をするときに注意すべき重要なことがあります。
覚えたら使いたくなるのが人情ですが、自分で管理していないホストへむやみにpingをしないでください。コンピュータセキュリティに関しては人により考え方が異なります。pingでパケットを送られるということを「攻撃をされた」と受け取る人もいます。トラブルに巻き込まれないためにも、他人のホストに対するpingは控えましょう。
会社のネットワークなどでは、セキュリティ上 ICMPパケットの通過を許さないネットワークがあります。そのようなネットワークでは、ホストに不具合がなくてもpingに対する応答は返ってきません。また、セキュリティソフトやパーソナルファイアウォールによりICMPがホスト側でフィルタリングされている場合も考えられます。
昔は何でもできましたが、最近はいろいろと制限が多い世の中になってしまいました(それがあるべき姿なのかも知れませんが) 。
最後に
今回は、ネットワークツールとしては非常に一般的であるpingコマンドを紹介しました。次は、pingと同様に非常に一般的なtraceroute(Windowsだとtracert)コマンドを紹介したいと思います。