 ping 〜ネットワークの疎通を確認する
加地眞也 2001/8/30 |
pingは、ネットワーク疎通を確認したいホストに対してIPパケットを発行し、そのパケットが正しく届いて返答が行われるかを確認するためのコマンドだ。この調査にはICMPを用い、さまざまなエラーに応じたステータスを把握することも可能。
pingコマンドが正常に実行できれば、通常はホスト間のネットワークは正常であると判断される。また統計値を表示することで、基本的なネットワーク性能を簡易に計測することもできる。
エラーが発生した場合には、何らかのネットワーク障害が発生していると考えられる。ただし、pingコマンドでもICMPパケットの返答内容からある程度のエラーの原因は把握できるものの、実際には、別の方法でも詳細に調査すべきであることに注意しよう。例えば、NICのハード障害なのかルータの障害なのかの切り分けは、それぞれの機器を実際に調査しなければ、あくまで推測の域を出ないということだ。
●Windowsの場合 ping[ -t][
-a][ -n 試行回数][ -l パケットサイズ][ -f][ -i
TTL][ -v TOS][ -r ルータ個数][ -s ルータ個数][[ -j ゲートウェイ・リスト]|[ -k ゲートウェイ・リスト]][ -w タイムアウト時間] 疎通確認対象先ホスト(ホスト名またはIPアドレス)
-t |
ユーザーからの停止が要求されない限り、パケットの送受信を無限に繰り返す。停止するには「Ctrl」+「C」を押す |
-a |
指定された対象先ホストがIPアドレスであった場合には、ホスト名をDNSから逆引きして表示する |
-n |
パケット送受信の回数(試行回数)を指定する |
-l |
パケットのデータ部サイズを指定する。デフォルトは32バイト |
-f |
IPパケットの分割(フラグメント)を禁止する |
-i |
パケットのTTL(Time To
Live)を指定された値に設定する |
-v |
パケットのTOS(Type Of
Service:サービスタイプ)を指定された値に設定する |
-r |
IPパケットのオプション部(Route
Recording)に、経由したルータのアドレスを記録する(最大9個まで) |
-s |
IPパケットのオプション部(Time
Stamping)に、経由したルータのアドレスと時間を記録する(最大4個まで) |
-j |
経由すべきゲートウェイ(ルータ)のアドレスを最大9個まで指定できる。ただし、指定されていないゲートウェイも経由できる(loose
source routed) |
-k |
経由すべきゲートウェイ(ルータ)のアドレスを最大9個まで指定できる。ただし、指定されていないゲートウェイは経由しない(strict
source routed) |
-w |
タイムアウト時間を指定する。単位はミリ秒 |
●Linuxの場合 ping[
-LRdfnqrv][ -c 試行回数][ -i 間隔時間][ -w 起動時間][ -p パディング・パターン][ -s パケットサイズ][ -t TTL][ -I インターフェイス・アドレス] 疎通確認対象先ホスト(ホスト名またはIPアドレス)
-L |
マルチキャストのループの制限を行う |
-R |
IPバケットのオプション部(Route
Recording)に経由したルータのアドレスを記録する(最大9個まで) |
-d |
パケットのSO_DEBUGオプションを指定する |
-f |
Flood pingモードを指定する |
-n |
出力をIPアドレスのみに抑制する(DNS逆引きを行わない) |
-q |
出力抑制モード。途中経過を表示しない |
-r |
ルーティングテーブルを無視して、指定したホストに直接パケットを転送するように指示する。すなわち、同一の物理ネットワーク上に目的のホストがない場合はエラーになる |
-v |
詳細モード。通常は無視される他のICMPパケットも表示する |
-c |
パケット送受信の回数(試行回数)を指定する |
-i |
送信パケットの間隔時間。デフォルトは1秒。-fオプションと同時に指定できない |
-w |
コマンドの起動時間を指定する。単位は秒 |
-p |
パケットのパディング(埋め合わせ)データのパターンを指定する。例えば、「ff」はすべてのデータを「1」で埋めることを示す |
-s |
パケットのデータ部サイズを指定する。デフォルトは56バイト |
-t |
パケットのTTLを指定された値に設定する |
-I |
指定されたインターフェイス(ネットワークカード名。バインドされたIPアドレスでも可)を用いて実行する |
pingコマンドで最も単純な使い方は、疎通を確認したいホストのホスト名またはIPアドレスを指定する。
●Windowsでの使用例 |
C:\>ping 192.168.1.10
Pinging 192.168.1.10 with 32 bytes of data: <-(1)
Reply from 192.168.1.10: bytes=32 time<10ms TTL=128 <-+-(2) Reply from 192.168.1.10: bytes=32 time=20ms TTL=128 | Reply from 192.168.1.10: bytes=32 time=20ms TTL=128 | Reply from 192.168.1.10: bytes=32 time=30ms TTL=128 <-+
Ping statistics for 192.168.1.10: <-+-(3) Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), | Approximate round trip times in milli-seconds: | Minimum = 0ms, Maximum = 30ms, Average = 20ms <-+
| |
この例では、192.1.1.10に対してpingが成功していることを示している。表示内容を確認してみよう。
(1)
コマンドの対象ホストを示す。これは引数で与えられた疎通確認対象先ホストだ。また「32bytes」とは、送信されるICMPパケットのデータサイズを示している。ここではデフォルト値が用いられているが、必要であればこの値はオプションで変更できる。
(2)
コマンドの途中経過を示すのがこのパートだ。この例ではパケットの送受信を4回行い、それぞれの回のステータスを表示している。この試行回数は変更することもできる。対象ホストのIPアドレスとともに、「bytes」は受信したICMPパケットのデータサイズを示している。「time」はパケットを送信してから受信するまでにかかった時間だ。単位はミリ秒(1000分の1秒)である。「<」あるいは「>」で表示された場合は、示された時間以下または以上の時間がかかっていることを示す。あまりに小さい、あるいは大きな時間の場合はこのように省略されてしまう。「TTL」はTime
To Live(tracerouteを参照)を示す。IPパケットにおける「生存時間」(通過可能なゲートウェイ/ルータ数)である。ここでは結果が表示されているわけで、届くまでに通過したルータでの減算をすでに含んでいるはずだ。
(3)
最後に試行の結果(statistics)を表示する。「Sent」「Received」はそれぞれ送信/受信したパケットの総数だ。「Lost」は送信したが受信できなかったパケットの数とその損失率を示す。ここでは4回の試行で失敗した送受信はなかったので、損失率は0%となっている。また全体の試行のうち、送受信にかかった最小時間、最大時間、平均時間を示すのが「Minimum」「Maximum」「Average」だ。対象ホスト間のネットワークのスループットをここから測定できる。
■結果から何が分かるか
●対象ホストとのネットワーク疎通が正常であること pingコマンドが成功すれば、物理的なネットワークまでは正常に機能していることは確認できる。
- 自身のホストのネットワーク設定と稼動
- 対象ホストのネットワーク設定と稼動
- 途中のネットワーク/ルータの設定と稼動
以上が揃わなければ、pingコマンドは正常終了しないはずだからだ。pingコマンドが正常なのに、ほかのコマンドやWebブラウザなどのアプリケーションが使用できない場合は、それらアプリケーション特有の問題である、と切り分けることができる。
●ネットワーク性能の推測 statisticsの表示からネットワークのスループットが推測できる。例えば、「Minimum」「Maximum」などの試行時間に着目したとき、目の前のホストでは0msでも、海外のホストとの通信では数百〜数千msだったりと、ネットワーク環境に応じてかなりの差が出ることが分かるだろう。
逆に、ほぼ同じネットワーク環境にあるホスト同士での差が激しいようであれば、対象ホスト自身やネットワークの経路に何らかの問題があると推測可能だ。同じホストの調査において差が非常にばらつくという場合には、時間帯によってネットワークが込み合っているなど、利用頻度が高いことが想定される。
pingは必ずしも使用できるとは限らない |
pingコマンドはネットワークの基本的な稼動を確認するのに便利だが、ネットワーク管理者によってはpingの使用を禁止している場合もある。pingによって、不正アクセスなど外部からの悪意あるユーザーにさまざまな情報を知られる(または足がかりにされる)リスクを低減したいためだ。
具体的には、pingがICMPパケットを使っていることを利用して、ルータの設定によりICMPバケットをすべて通過させないような方法を用いる。実際、Webサーバへのpingを不可にしているサイトも多く、企業でも社内のルータはICMPパケットを排除しているところもある。
pingに限らないが、特に外部のサイトに対するpingなどによる調査は必ずしも許可されているわけではなく、自由に行えるとも限らない。言うまでもないことだが、たとえ悪意はなくとも、自身が管理していないホストやネットワークへのアクセスは慎重にすべきだろう。
| |
■失敗例からネットワーク障害を推測する
●失敗例1:IPアドレスへのルーティング不可時など (存在しないIPアドレス/ネットワーク指定)
C:\>ping 192.168.10.1
Pinging 192.168.10.1 with 32 bytes of data:
Reply from 203.100.100.49: Destination net unreachable. Reply from 203.100.100.49: Destination net unreachable. Reply from 203.100.100.49: Destination net unreachable. :
| |
経過で現れている203.100.100.49は、(おそらくは)エラーを報告しているルータのIPアドレスを示している。経路上、このルータの時点でルーティングが不可であることが確認されたのだろうと理解できる。
「Destination net
unreachable」というメッセージは、ICMPの「Type」および「Code」に関係している。「Destination
Unreachable(Type=3)/Net Unreachable(Code=0)」の結果を表示しているわけだ。「Destination
Host Unreachable」とともに最も多いエラーだろう。
●失敗例2:ルーティング設定ミスによるループ
C:\>ping 150.224.XXX.XXX
Pinging 150.224.XXX.XXX with 32 bytes of data:
Reply from 130.XXX.76.17: TTL expired in transit. Reply from 130.XXX.76.17: TTL expired in transit. Reply from 130.XXX.76.17: TTL expired in transit. Reply from 130.XXX.76.17: TTL expired in transit.
Ping statistics for 150.224.XXX.XXX: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms | |
TTL(Time To Live)の超過によるエラーがルータから報告されている。詳しくはtracerouteによる調査が必要だが、多くの場合、途中のルータのルーティング設定ミスによるループに陥っていると考えられる。特に、社内システムなどでサブネットマスクやデフォルトゲートウェイの設定ミスなどで引き起こされることがある。ごくまれだが、接続されている物理ネットワーク(セグメント)数が数多く、古いOSやアプリケーションではTTLが小さいために発生する場合もある。
●失敗例3:ホスト名解決の失敗
C:\>ping
www.unknown.net Unknown host
www.unknown.net. | |
これは、パケット送出以前に、DNS検索においてIPアドレスの名前解決に失敗している。おそらくはホスト名が間違っているか、DNSの設定ミスであることが推測される。
●失敗例4:対象ホストが停止
C:\>ping host1.example.net
Pinging host1.example.net [211.XXX.XXX.190] with 32 bytes of data:
Request timed out. Request timed out. Request timed out. Request timed out. : | |
ルーティングなどは正しいが、対象ホストから返答されない場合である。単純にホスト自身が停止している場合のほか、途中のルータがICMPパケットなどをフィルタしてしまっている可能性もある。
|