pingコマンドで正しくネットワークへ繋がっているか確かめる

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

コマンドプロンプトなどで使用できる、ネットワーク診断プログラムの中で最も基本的なコマンドである「ping」のご紹介です。

パソコンを使用しているとよく遭遇する「ネットワークに繋がらない」という不具合がありますが、このような問題に対して「ping」コマンドを使用しますと、TCP/IPを使ったネットワークで通信の疎通を確認することができます。

通信したい相手(端末やWebサーバーなど)に対してパケットを送信し、そこから無事に応答が帰ってくるかどうかを確認できますので、正しく通信ができているかどうかを簡単にチェックすることができます。

ネットワーク診断プログラムの中では最も基本的なコマンドです。ネットワーク関連の不具合に対して便利に使えるコマンドですので、ぜひ使い方を覚えてみてください。

目次

ping について

正式名称は「Packet InterNet Groper」で、略称を「ping」と呼んでいます。

日本語にはない発音(発音記号はpɪŋ)をしますので、カタカタ表記にすると「ピン」または「ピング」と書くことが多いです。私の経験上は「ピン」と読んでいる方が多い印象です。

「TCP/IP」というネットワークの約束事(プロトコル)を決めた規格があります。世の中の様々なネットワーク通信は、通常この規格に則って通信をしていますが、その規格に則って正しく通信がされているのかどうかを確認するためのコマンドが「ping」です。

専門的に言いますと、ノードまでの到達性を「ICMP」の「Echo Request パケット」と呼ばれるエコー要求パケットを送信することで確認するプログラムです。

詳細な動作

ICMP【Internet Control Message Protocol:インターネット制御通知プロトコル】は、TCP/IPが動作するために必要な通信の情報を通知するための補助的なプロトコルです。エラーや誤りなどを通知してくれます。IPv4のためのICMPは「ICMPv4(RFC 792等によって規定)」、IPv6のためのICMPは「ICMPv6(RFC 4443によって規定)」となっています。

ICMPは、メッセージの機能や種類によって「タイプ(Type)」分けされており、「Type 0」から「Type 18」ほどまであります。

pingは、このICMPのタイプのうち「ICMP Type 8」である「Echo Request」と呼ばれるエコー要求パケットをノードへ送り、「ICMP Type 0」である「Echo Reply」というエコー応答が帰ってくるような構造になっています。

エコー要求とは、送ったパケットをそのまま改変せずに返送してくれという要求のことです。送ったパケットを送り返すだけの単純な構造をしていますが、正しく要求が帰ってくるのであれば、パケットにしっかりと情報が記録され、IPアドレスも正しく割り当てられ、途中経路のルーティングも正しく設定されていることが確認できます。

このように、pingコマンドはネットワークの疎通を確認する最も簡単な方法で、かつよく利用される便利なコマンドなのです。

pingはエコー要求を相手に送り、相手のノード(サーバーなど)はそのままパケットを返送することで、ネットワークの疎通を確認します。

実際にpingを送ってみよう

難しい話はここで終わりにしまして、実際にpingを送ってみましょう。

pingコマンドは、Windowsに限らずIPが実装されている環境であれば、何らかの形で似たものが実装されていますが、今回はWindows環境にて解説します。操作はWindows 11で行っていますが、過去のバージョンでも操作はほとんど同じです。

STEP
コマンドプロンプト または ターミナル の起動

「コマンド プロンプト」または「ターミナル(PowerShell)」を起動します。

一番簡単な起動方法は、Windowsのスタートボタンを右クリックして、メニューから「コマンド プロンプト」「PowerShell」「ターミナル」いずれかを選択することです。pingコマンドに「管理者」権限は必要ありませんので、どちらでも大丈夫です。

スタートメニューを右クリックしたメニューの中に「コマンド プロンプト」「PowerShell」「ターミナル」のいずれかがありますので、ここで起動するのが簡単。

あるいは、[Windows]キーと[R]キーを同時に押して「ファイル名を指定して実行」を表示し、「cmd」「powershell」または「wt」と入力することで「コマンド プロンプト(cmd)」「ターミナル(wt)」「PowerShell(powershell)」が起動します。

「ファイル名を指定して実行」で「cmd」「powershell」または「wt」と入力することで、それぞれ「コマンド プロンプト」「ターミナル(PowerShell)」が起動します。
STEP
ping構文を打つ

pingの構文は非常に単純です。下記の通りコマンドを打ってください。

ping [オプション] [宛先]

オプションは省略しても標準設定で送信可能できますので、最初はオプションを付けずに宛先だけを指定して送ってみましょう。

宛先には「ホスト名」または「IPアドレス」を入力してください。「http://」が付くとダメなので注意してください。これは自宅にあるルーターに対しても送れますが、今回はメジャーなホストである「google.co.jp」へ送ってみましょう。Googleのホストはpingを受け付けており返答をしてくれます。(pingを受け付けておらず返答してくれないサーバーもあるので注意。)

Googleのホストに対して送るために、下記のようなコマンドを打ちます。

ping google.co.jp
STEP
pingの実行

コマンドを送信して、通信が正常であると下記のような表示がでます。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

 PS C:\Users\ユーザー名> ping google.co.jp
google.co.jp [142.250.207.3]に ping を送信しています 32 バイトのデータ:
142.250.207.3 からの応答: バイト数 =32 時間 =11ms TTL=128
142.250.207.3 からの応答: バイト数 =32 時間 =11ms TTL=128
142.250.207.3 からの応答: バイト数 =32 時間 =11ms TTL=128
142.250.207.3 からの応答: バイト数 =32 時間 =11ms TTL=128

142.250.207.3 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 11ms、最大 = 11ms、平均 = 11ms  
PowerShellでpingコマンドを「google.co.jp」へ向かって実行してみました。4回パケットを送信し、そのすべてが正しく返ってきているため、インターネットとの接続は概ね良好であると分かります。

ホスト「google.co.jp」がDNSによってIPアドレス「142.250.207.3」へ変換(リゾルブ)されました。ですので、「142.250.207.3」と入力しても同じ場所へpingを送信します。なぜ変換されるのか、という疑問に関しては下記の記事を参考にしてください。

32 バイトの ping が合計で4回送信されています。そして相手からの応答が4回とも返信されているため、損失は0(0%)となりました。

ラウンドトリップタイム(応答時間:データを送信してから返事が返ってくるまでの時間、いわゆるping値)も長くて11ミリ秒と結構早いので、ネットワークの接続状況は良好であることがわかります。TTLとは「Time To Live」の略で、ルーターを通過するごとに1ずつ減算される値です。これが0になると、データは経路上で破棄されます。

コマンドにオプションを付けないと、32バイトのデータを4回送信するようです。

STEP
通信が正常でない場合

逆に、通信が正常でない場合は以下の様な表示になります。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
                                        
PS C:\Users\ユーザー名> ping google.co.jp
                                        
www.google.co.jp [142.250.207.3]に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。

142.250.207.3 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)

pingの要求をしても応答せずにタイムアウトしています。

4回送信したにも関わらず、受信数は「0」、損失が「4」で損失100%となっています。この状態はネットワークの接続が正常でないということになります。原因を探り解決させる必要があります。

このように、相手のホストに対してpingを送ってその応答状況をみることで、正常にネットワークへ接続できているかを確認できます。

例えば、WebブラウザでWebページが表示されないという不具合があったとき、インターネットへの接続ができていないのか、Webブラウザ自体が問題なのかを切り分けるため、pingを送信します。pingの送信がうまくいった場合はインターネットとの接続に問題は無さそうとなり、Webブラウザなど別のところが問題であるとわかります。

また、もっと細かく切り分けるために、ルーターごとにpingを送信してみて問題となっている箇所を特定する方法もあります。状況に応じて柔軟にチェックができるかと思います。

オプション

PS C:\Users\ユーザー名> ping -?

使用法: ping [-t] [-a] [-n 要求数] [-l サイズ] [-f] [-i TTL] [-v TOS]
         [-r ホップ数] [-s ホップ数] [[-j ホスト一覧] | [-k ホスト一覧]]
         [-w タイムアウト] [-R] [-S ソースアドレス] [-c コンパートメント]
         [-p] [-4] [-6] ターゲット名
               
         オプション:
           -t             中断されるまで、指定されたホストを Ping します。
            統計を表示して続行するには、Ctrl+Break を押してください。
            停止するには、Ctrl+C を押してください。
            -a             アドレスをホスト名に解決します。
            -n 要求数      送信するエコー要求の数です。
            -l サイズ      送信バッファーのサイズです。
            -f             パケット内の Don't Fragment フラグを設定します (IPv4 のみ)。
            -i TTL         Time To Live です。
            -v TOS         Type Of Service (IPv4 のみ。この設定はもう使用されておらず、
                           IP ヘッダー内のサービス フィールドの種類に影響しません)。
            -r ホップ数    指定したホップ数のルートを記録します (IPv4 のみ)。
            -s ホップ数    指定したホップ数のタイムスタンプを表示します (IPv4 のみ)。
            -j ホスト一覧  一覧で指定された緩やかなソース ルートを使用します
                            (IPv4 のみ)。
            -k ホスト一覧  一覧で指定された厳密なソース ルートを使用します
                            (IPv4 のみ)。
            -w タイムアウト
                            応答を待つタイムアウトの時間 (ミリ秒) です。
            -R              ルーティング ヘッダーを使用して逆ルートもテストします
                            (IPv6 のみ)。
                            RFC 5095 では、このルーティング ヘッダーは使用されなくなり
                            ました。このヘッダーが使用されているとエコー要求がドロップ
                            されるシステムもあります。
            -S ソースアドレス
                            使用するソース アドレスです。
            -c コンパートメント
                            ルーティング コンパートメント識別子です。
            -p              Hyper-V ネットワーク仮想化プロバイダー アドレスを
                            ping します。
            -4              IPv4 の使用を強制します。
            -6              IPv6 の使用を強制します。

以上がpingコマンドのオプションです。「ping -?」と入力するとコマンドの詳細が表示されます。

例えば、「ping -n 8 [宛先]」と指定すると「8回」pingを送信します。「ping -l 512 [宛先]」とすれば「512バイト」のデータを送信します。

IPv6アドレスでの送信を強制したい場合は「ping -6 [宛先]」とすればIPv6アドレスで接続を試みます。

ネットワークの経路が非常に多い場合、TTLの値が少ないと対象ホストへ到達する前に消失してしまう可能性がありますので、その場合は「-i」にて多めに設定するとうまくいきます。上限は「255」です。

「ping -n 8 -6 google.co.jp」とオプション付きで入力。この場合は、IPv6通信で合計8回のpingを飛ばして疎通を確認しています。

まとめ

これで簡単なpingコマンドの解説は終わりです。

pingコマンドはネットワーク診断をする際の基本的なコマンドです。そこまで正確な診断はしないのでいくらかの誤差はでてしまうのですが、それでもこのpingから分かることは多いです。インターネットと通じての対戦ゲームを楽しみたい場合は、ラウンドトリップタイム(ping値)が短い方が有利になるので、この確認もpingで可能です。

使い方もそこまで難しくないのでぜひ覚えていただいて、今後起きるかもしれない不具合等の解決に役立ててみてください。

更新履歴
  • 2023年2月26日:改訂
  • 2014年3月9日:初出
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

長野県在住。化学系の学科へ在学後、現在は植物の生産を仕事にしています。このブログは趣味と実益を兼ねて、仕事の合間に書いています。農家ではありますが、ECサイトの管理なども業務として行っています。

最近はカメラにも興味がでてきました。商材写真の撮影なども勉強したいところです。カメラ系の記事も書くかもしれません。

コメント

   コメント欄を開く

コメントする

目次