はてなブックマーク  Yahoo!ブックマークに登録  印刷
Windows TIPS
[Network]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

pingでネットワーク・トラブルの原因を調査する

デジタルアドバンテージ
2000/12/01
2002/05/08 改訂
 
対象OS
Windows 9x
Windows Me
Windows 2000 Professional
Windows XP Professional
Windows XP Home Edition
Windows 2000 Server
Windows 2000 Advanced Server
pingはTCP/IPにおける最も基本的で、かつ重要なコマンドである。pingが通るかどうかで相手先ノードが稼働しているかどうか、そこまでの通信経路が正しいかどうかを検査することができる。
pingに応答すれば、そのホストは正常に動作しており、そこまでのネットワークのルーティングが正しく設定されているということが分かる。
ネットワークの到達可能性を調べるには、まずはローカルのネットワーク上のホストから始め、順次遠くのホストへとping先を変えながら調べるようにする。
 

解説

 pingTCP/IPにおける最も基本的なツールであるとともに、最も有用なツールの1つでもある(本来pingは「ピン」と読むが、日本では「ピング」と読むのが一般的なようである)。さまざまな使い方があるが、一般的には、通信相手のノードが“生きて”いるかどうかを調べたり、相手ノードまでのネットワークの経路が正しく設定され、通信が行える状態になっているかどうかを確かめたりするために使われる。ここでは、ネットワーク管理者の強い味方、pingの基本的な使い方についてまとめておこう。

pingコマンドとは

 pingコマンドは、ICMP(Internet Control Message Protocol)のサブコマンドであるechoコマンドを使った、単純なパケットの通信テスト・プログラムの1つだ。TCP/IPネットワークでは、IPTCPUDPパケットにさまざまな情報を載せてノード(ホスト)間で通信をしているが、通信中にエラーが起こった場合、ICMPプロトコルを使ってエラーを伝えることになっている。echoはICMPでサポートされている機能の1つであり、echoの引数として受け取ったデータをそのまま送信元へ送り返すという動作をする。パケットを送り返すだけという単純な機能であるが、これが動作するということは、IPアドレスが正しくノードに割り当てられ、かつ途中の経路(ルーティング情報)などが正しく設定され、動作しているということを意味している(途中で不通になっていると応答が返ってこない)。また、パケットの往復の所要時間を測定することによって、ネットワークの混雑具合を調べたりすることもできる。

 pingコマンド(PING.EXEプログラム)は、このecho機能を使って、パケットの平均応答時間を測定したり、ネットワーク経路のテストをしたりするためのコマンドである。どんなマシンでも、TCP/IPのプロトコル・スタックが起動して、IPアドレスが割り当てられ、それが正しく動作していれば、このICMPのecho機能は必ずサポートされていることになっている。そのためpingはTCP/IPネットワークの管理に欠かせない必須のツールであるといえる。Windows 95以降のWindows OS(Windows 9x/Me/NT/2000/XP)は必ずこのコマンドを持っているし、UNIXやLinuxでも必ず用意されている。オプション類が若干異なることがあるが、基本的な使い方はどれでも同じなので、ぜひともマスターしておきたい。

pingコマンドの基本的な使い方

 pingコマンドの最も基本的な使い方は、次のように、引数として相手ノードのIPアドレスやホスト名を指定して起動する、というものである。

ping  <相手ノード>

 例えばsomedomain.co.jpというドメインにある、wwwというホストに対してpingを実行するには、

C:\>ping www.somedomain.co.jp

とすればよい。これを実行すると、Windows OSに含まれているpingコマンドは、デフォルトでは、32bytesのデータ部(データ内容は単なるASCII文字列)を持つICMP echoパケットを4つ生成して、1秒おきに指定されたノードに対して送信する。そして、そのホストからのecho応答メッセージを受信すると、以下のように、応答を受け取るまでの所要時間や、その平均時間などの情報を表示する。

pingコマンドの使用例
pingコマンドは、指定されたホスト(IPアドレスか名前で指定する)に対して、ICMPのechoコマンドを送り、それが送り返されてくるのを待つ。応答があれば、相手ノードや、そこまでの経路が“生きている”ことが分かる。また、往復時間からネットワークの混雑度もある程度分かる。応答がなければ、相手ノードがダウンしているとか、途中の経路設定が正しくないなど、さまざまな問題が発生していることになる。
  pingするあて先のホスト名。
  あて先をホスト名で指定した場合、ここにそのIPアドレスが表示される。
  pingで使用するデータのサイズ。デフォルトは32bytes。単に応答時間を調べるだけならばこれでも十分だが、実際にはこのほかに、ICMPのヘッダやIPのヘッダ、さらにイーサネットのヘッダ情報なども付加されるので、ネットワークの速度を測定したりするためには、もっと大きな値にしないと正確な値は求められない。
  相手のノードから制限時間以内に応答があったことを表す。
  受信したデータのサイズ。送信時と違っているようならば、何らかの問題があることになる。
  応答時間。ローカルのLAN上のノードなど、10msよりも小さいときは、“time<10ms”と表示されることがある。またプロトコルの都合上(ARPというプロトコルが使われる)などの要因により、最初の1回は遅いことがある。
  TTL(Time To Live)値。相手側からこちらへpingの応答が戻ってくるまでに、いくつのルータを通過したかを表す数値。ある初期値の値から、ルータを1つ通過するたびに1ずつ少なくなり、戻ってきたときの値がここに表示される。ただし初期値は相手のOSなどによって変わり、255や128、64など、さまざまなものがある。この例の「241」は、初期値255から始まってルータを14台経由して戻ってきたもの、と推測される。
  送信したパケットの総数。Windowsのpingコマンドのデフォルトでは、4回送信を行う。
  受信したパケットの総数。戻ってこないパケットが1つ以上あるような場合は、ネットワークが相当混雑しているといえる(オンデマンド・ダイヤルアップ接続を使用している場合は、最初の何パケットかがロスしてしまう可能性がある)。まったく戻ってこない場合は、非常に混雑しているか、途中のルートのどこかでパケットが消失している可能性がある。
  パケット喪失率。すべて戻ってきたので、喪失率は0%。
  最小の応答時間。
  最大の応答時間。
  平均応答時間。正確に測定するためには、もう少し送信パケットの総数を多くする必要があるだろう。

 最後に表示されている統計値の意味は、4回パケットを送った結果、4回応答を受け取り(パケット喪失率は0%)、その応答時間は最小15ms、最大31ms、平均19msであった、という意味である。たとえLAN上であっても、最初の1回はARPコマンド要求のために若干遅くなることがある。そのため、遅延速度を(より正確に)測定したいのならば、同じpingコマンドをもう一回実行するとよい(コマンド・プロンプトでは、上矢印キーを押して直前のコマンドを呼び出し、そのままリターン・キーを押せば簡単に再実行できる)。

 ネットワーク(TCP/IPプロトコル)が正しく構成されているかどうかを調べるには、このように、相手先ノードからpingの応答が戻ってくるかどうかで判断する。もちろんローカルのネットワークと比べて、インターネット上のノードの場合は応答がはるかに遅くなるだろうが(ローカルのLAN上ならば10ms以下などが普通だが、インターネットの場合は数十ms以上になる。混雑していれば1秒以上かかる場合も珍しくない)、相手側ノードがアクティブであるかどうか、そこまでのネットワーク経路が正しく“生きている”かどうかは、“Reply from”の行があるかどうかで判断することができる。ばらつきが激しいようならば、ネットワークが混雑していると判断できる。

 もし相手ノードからの応答がなければ、次のようになる。

C:\>ping www.YYYYY.co.jp

Pinging www.YYYYY.co.jp [202.YYY.YYY.YYY] with 32 bytes of data:

Request timed out.…1つ目の要求に対する応答が戻ってこなかった
Request timed out.…2つ目の要求に対する応答が戻ってこなかった
Request timed out.…3つ目の要求に対する応答が戻ってこなかった
Request timed out.…4つ目の要求に対する応答が戻ってこなかった

Ping statistics for 202.YYY.YYY.YYY:
    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.」は、ICMPの応答を指定された時間内に受け取ることができなかったということを表している。ただしデフォルト待ち時間は1秒(1000ms)なので、インターネット上のノードを調べる場合は、次のように“-w 5000”などというオプションを使って(待ち時間は1/1000秒単位で指定する)、応答待ち時間をもう少し長くして調べる必要があるだろう。

C:\>ping -w 5000 www.YYYYY.co.jp……各応答を5秒待つ指定

 パケットが戻ってこない理由にはさまざまなものが考えられるので(相手先ノードが“死んでいる”とか、経路の途中にあるいずれかのルータがパケットを正しく中継していない、ファイアウォールでpingを禁止しているなど)、その原因を突き止めるには、もう少し順序立ててpingを使う必要がある。具体的には、pingを実行するマシンに近い方のノードから順番に応答があるかどうかを調べていくのである。遠くの方のノード(あて先ノード)の側から調べるよりも、素早くトラブルの場所を特定することができる。

■pingの引数におけるIPアドレスとホスト名
 ところで、pingのあて先にホスト名やFQDN名などを使う場合、その名前の指定が間違っていると次のようなエラーが表示される。

■Windows XP以外の場合
C:\>ping wwwww.somedomain.co.jp
Unknown host wwwww.somedomain.co.jp.……「ホスト××が不明です」

■Windows XPの場合
C:\>ping wwwww.somedomain.co.jp
Ping request could not find host wwwww.somedomain.co.jp. Please check the name and try again.……「指定されたホスト××が見つかりません。名前をチェックして再実行してください」

 相手ノードから応答が戻ってこない場合とは表示が異なることに注意されたい。

 「Unknown host」とは、ホスト名が見つからないということを表している。つまり「名前解決(名前からIPアドレスを求めること)」が失敗しているわけであるが、その原因はIPアドレスなどの設定が間違っているからかもしれないし、DNSWINSNBTの名前解決などが何らかの原因(サーバのIPアドレス設定のミスとか、経路途中のルータのフィルタでブロックされているなど)でうまく動作していないなど、さまざまな要因が考えられる。逆にいうと、その原因を簡単に特定することはできない、ということでもある。せっかくpingを使ってトラブルシューティングを行おうとしているのに、これではさらに話が面倒になるだけだ。このようなトラブルを避けるため、pingを使うときは、最初はIPアドレスであて先を指定することが基本である。

pingを使ってネットワークをチェックする

 さてそれでは、pingを使ってTCP/IPのトラブルシューティングを行う場合の方法について見ていこう。例えばインターネットへのアクセスがまったくできなくなった(メールやWebサーバへアクセスできなくなった)とすると、以下のような順番でトラブルの場所(通信が不通になっている場所)を特定していくとよい。

■ハードウェア/ドライバのチェック
 ネットワークがつながらないというトラブルを解決する場合、pingを使うよりも前に、まずはケーブルが正しく接続されているかどうか、ネットワークやハブのリンク・ランプが正しく点灯しているかどうか、デバイス・ドライバが正しく導入されているかどうか、などを確認しておこう。pingとはあまり関係ないので詳細は割愛するが、これらに起因するケースも意外と多いので、まずはハードウェア・レベルの動作を確認することから始めるのが望ましい。

■ping 127.0.0.1
 ハードウェアが正しく動作しているようならば、次は

C:\>ping 127.0.0.1

というコマンドを実行して、正しく応答があることを確認する。「127.0.0.1」というIPアドレスは「ローカル・ループバック・アドレス」といい、TCP/IPプロトコル・スタックの内部にはこのIPアドレスが必ず用意されている。このアドレスは、常に自分自身(自ノード)を表すことになっているので、127.0.0.1へpingを行うということは、自分自身に対してpingを行うということになる。

 もしこのコマンドの実行が失敗するようならば、TCP/IPプロトコル・スタックが正しくインストールされていないことになる。Windows 2000やWindow XP、Windows Meでは、必ずTCP/IPプロトコルがインストールされているので、このコマンドの実行が失敗することはまずないだろうが、Windows 9xではインストールされていないこともある(もっとも、TCP/IPプロトコルがインストールされていない場合は、PING.EXEコマンドすら使えないので、すぐに気が付くだろうが)。またセーフ・モードではやはりネットワークが使えないので、このような結果になる。

■ping <自ノードのIPアドレス>
 ローカル・ループバック・アドレスの次にチェックするべきことは、自ノードに割り当てられているIPアドレスに対するpingの実行である。例えば、自分のPCに割り当てられている(設定しなければならない)IPアドレスが192.168.0.123である場合、

C:\>ping 192.168.0.123

を実行する。ただしIPアドレスをDHCPで自動に割り当てている場合は、代わりに、IPCONFIG.EXEコマンド(Windows 9xでは、WINIPCFG.EXEコマンドも利用可能)で確認してもよいだろう。DHCPでのIPアドレスの取得に失敗していると、0.0.0.0というアドレスか、APIPAで割り当てられる169.254.???.???になっているはずである。

 このpingコマンドにより、自分のノードに正しくIPアドレスが割り当てられているかどうかを確認することができる。もし失敗するようならば、IPアドレスの設定方法(手動割り当てやDHCPによる割り当て方法)に問題があることが分かる。またネットワーク・ケーブルが外れているとか、正しく接続できていない場合にも(クロス・ケーブルとストレート・ケーブルを間違えたなど)、IPアドレスの割り当ては失敗するので、これらもチェックする。

■ping <LAN上のノード>
 自分のノードに正しくIPアドレスが割り当てられていることが分かったら、次はいよいよほかのノードとの通信をテストしてみる。最初にpingすべき相手は、同一のLAN(同一のイーサネット)上に存在している(同じネットワーク・アドレスを持つ)ノードである。できることなら、現在稼働していることが確実で、IPアドレスが固定的に割り当てられているノード、例えば全員で共有している(Windows 2000の)ファイル・サーバやゲートウェイなどが望ましい。

 これが成功するようならば、IPアドレスの割り当てが正しく行われ、ハードウェアやデバイス・ドライバ、TCP/IPプロトコル・スタックなども正しく動作しているということになる。もし失敗するようならば、デバイス・ドライバなどが正しく動作していない/インストールされていないとか、ハードウェア的なトラブルである可能性が高い。例えば、IRQの割り当てが間違っているとか(イーサネット・カードのハードウェア割り込みが間違っていても、デバイスやドライバは特に問題なく動作したりするから)、ハブのオート・ネゴシエーション(10Mbps/100Mbpsと半二重/全二重の自動切り換え)が失敗している、などが考えられる。

■ping <ルータのIPアドレス>
 LAN上のノードに対してpingが成功するようならば、次はインターネットとの接続に使っているルータ(ゲートウェイ)に対してpingを実行してみる(ローカルのLAN上ではなく、ルータを介して接続されているネットワーク機器に対して実行する)。これが失敗するようなら、デフォルト・ゲートウェイのIPアドレスや(サブ)ネットマスクの設定などがおかしい(もしくは、設定するのを忘れている)ということが考えられる。また逆に、ping先の機器からの逆向きのルートの設定がどこかで間違っていても、やはり応答が戻ってこなくなる。

■ping <名前>
 ここまで成功するようなら、次はIPアドレスではなく、ホスト名を指定してpingを実行してみる。<名前>としては、ローカルのLAN上にあるノード名(ドメイン名を含まないホスト名)や、FQDN形式のホスト名(社内にあるWebサーバやメール・サーバなど)など、いろいろ試してみる。これに失敗するようなら、名前解決のための設定が正しく行われていないことが分かる。ただしセキュリティ上の理由によって、外部からのpingコマンドを受け付けないようにファイアウォールなどが設定されている場合もあるので、pingコマンドが通らないからといって、必ず相手先との通信ができなくなっていると結論付けることはできない。

 もし単純なホスト名(FQDN形式でないホスト名)に対するpingが失敗するようならば、WINSサーバの設定などをチェックする。Windows系OSでは、NETBIOS名による名前の登録や解決が自動的に行われるので、Windows系マシンに対するpingが失敗することはそう多くないだろう。しかしWINSとhostsファイルlmhostsファイルで互いに異なるようなホスト定義が行われていると、名前解決の優先度の問題によって、間違ったホストにpingしてしまう可能性がある(また、NETBIOSの名前解決方法を強制的にブロードキャスト以外に設定していたりすると失敗する可能性がある)。

 非Windows系マシンに対しては、hostsファイルやDNSなどで対応しなければならないので、その設定を間違えるとやはりpingできないことがある。

 またFQDN形式のホスト名に対するpingが失敗するようならば、DNSサーバ・アドレスやTCP/IPのドメイン名の設定などに問題があるといえる。

■ping <インターネット上のノード>
 以上のチェックがすべてパスするようなら、通信できない理由は、インターネットのサービスに接続するための(社内の)ルータやProxyサーバがダウンしているとか、プロバイダのネットワークがダウンしている、インターネット上の目的のサーバそのものがダウンしている、などが考えられる。あとはケース・バイ・ケースで、これらのホストに順次pingを実行して、不通となっている場所を特定すればよい。End of Article

関連記事(Windows Server Insider)
  Windows TIPS:tracertでネットワークの経路を調査する

この記事と関連性の高い別のWindows TIPS
pingを繰り返し実行させる
使用中のIPアドレスを調査する
pingでネットワークの速度を調査する
IPアドレスからホスト名を見つける方法
ローカル・ループバック・アドレス(127.0.0.1)とは?
Windows XPのファイアウォール機能を活用する
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

更新履歴

【2002/04/26】Windows XPに関する情報を加筆・修正しました。

 
「Windows TIPS」
Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

スキルアップ/キャリアアップ(JOB@IT)

- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  New! 誰もが満足するシステムへ
10年前にSOA実現を可能にしたサーバは?

  New! 初めての製品に不安を感じる甲山たち
――26年の歴史が物語る信頼性と実績

  New! サーバ担当者を物理的な作業から開放する
ホスティングの“パターンオーダー”とは

  New! スループットは従来機の“2〜3倍”を発揮
CoolThreadsのDBサーバとしての威力とは

  New! 【24時間365日】無償サポートを実現する
専用ホスティング、その秘訣とは?

  ■ 高パフォーマンス 『 UltraSPARC 』
仮想化も併用し、サーバ統合効果を検証!

  「1秒、切れてました」は、通用しない!
堅牢性・信頼性に優れた“国産”通信機器

  市場の変化と淘汰されるERPエンジニアとは
〜エンジニア・キャリア進化論(第7回)〜

  こんな便利な開発ツールがあるならもっと
早く教えてくれよ!おれの青春を返せ〜!

  『もう1つの外資系』を選ぶワケ……
読んでわかる、驚きの採用状況と人材育成法

  『家族持ち』ITエンジニアの方、必見!
経験者が語る、U/Iターン転職の実状と魅力

  業務アプリの開発効率向上と顧客満足の
向上を両立するアウトプットの“疎連携”

  自分のスキル、限界を感じていませんか?
『IT専門教育』で独学の限界を超えろ!

  トレンドは常に動き続ける!時代の変化に
対応する――ベンダーからのメッセージ!

  【実践!SOA】手作業をシステム化で改善
作業ミスが従来の60%から1%にまで激減!

  BI導入が失敗する『3つの理由』と
データ・情報活用を成功させる解決ツール