pingコマンドの使い方|疎通確認の基本からオプション・トラブル対処まで

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > pingコマンドの使い方|疎通確認の基本からオプション・トラブル対処まで
「サーバーにつながらない」「ネットワークが通っているか確認したい」
こうしたトラブルの初動で最初に使うのが、pingコマンドです。

ただし、pingが通らないからといって「サーバーが落ちている」と即断するのは危険です。近年はセキュリティの観点からICMPパケットへの応答を意図的にブロックしている環境が多く、pingが通らなくてもサービスは正常に動いていることがよくあります。

この記事では、pingコマンドの基本的な使い方からオプション指定、結果の読み方(TTL・パケットロス率の解釈)、「pingが通らない」ときの原因切り分けと実務的な代替確認手段まで、現場で必要な知識をまとめて解説します。

この記事のポイント

・LinuxのpingはWindowsと違い、-cで回数を指定しないと止まらない
・パケットロスは統計行の「X% packet loss」とicmp_seqの欠番で確認する
・応答なし ≠ サーバー障害。ICMPブロック・ファイアウォール・ルーティングの順で切り分ける
・ICMPブロック環境では curl・nc・telnet でTCPレベルの疎通確認ができる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

pingコマンドとは?ネットワーク疎通確認の基本

pingは、指定したホストにICMP(Internet Control Message Protocol)のEchoリクエストを送信し、相手からEcho Replyが返ってくるかどうかを確認するコマンドです。

ネットワークの疎通確認、つまり「自分のPCから相手のマシンまでパケットが届くか」を調べる最も基本的な手段として、現場でも日常的に使われます。

Windowsのpingはデフォルトで4回パケットを送って終了しますが、Linuxのpingはユーザーが停止するまで送り続けます。停止するには Ctrl + C を押してください。スクリプトで使う場合は必ず -c オプションで回数を指定しましょう。

【注意】pingが通らない ≠ サーバーダウンという点を必ず押さえておいてください。AWS EC2をはじめとするクラウド環境や、セキュリティポリシーが厳しいネットワークでは、ICMPパケットへの応答をブロックしているケースが一般的です。pingが通らなくても、SSHやHTTPは正常に応答していることがあります。

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

1. IPアドレスを指定して疎通確認する

最もシンプルな使い方です。相手のIPアドレスを指定して実行します。

$ ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.523 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.341 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.298 ms ^C --- 192.168.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.298/0.387/0.523/0.097 ms

応答が返ってきていれば、ネットワークは正常に疎通しています。

ループバックアドレス(127.0.0.1)へのpingが通るかを先に確認すると、TCP/IPスタック自体が正常かどうかをチェックできます。ネットワーク障害の切り分けでは「まず自分自身にping」が鉄則です。

2. ホスト名を指定して疎通確認する

IPアドレスの代わりにホスト名やドメイン名でも指定できます。この場合、DNS名前解決が正しく動作しているかも同時に確認できます。

$ ping webserver01 PING webserver01 (192.168.1.10) 56(84) bytes of data. 64 bytes from webserver01 (192.168.1.10): icmp_seq=1 ttl=64 time=0.185 ms

ホスト名で応答があれば、ネットワークもDNSも正常です。ホスト名で失敗するがIPアドレスで成功する場合は、DNS設定に問題があります。

3. 回数を指定して実行する(-cオプション)

-c オプションで送信するパケット数を指定できます。スクリプトで使う場合や、決まった回数だけ確認したい場合に便利です。

$ ping -c 5 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.384 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.275 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.312 ms 64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.290 ms 64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.268 ms --- 192.168.1.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 0.268/0.305/0.384/0.046 ms

5回送信したら自動的に終了します。シェルスクリプトでは ping -c 3 程度を使うのが定番です。

4. 送信間隔を指定する(-iオプション)

デフォルトでは1秒間隔でパケットを送信しますが、-i オプションで間隔を変更できます。

# 0.2秒間隔で送信する(root権限が必要) $ sudo ping -i 0.2 -c 10 192.168.1.1 # 5秒間隔で送信する(長時間の死活監視に使える) $ ping -i 5 192.168.1.1

※ 1秒未満の間隔を指定するにはroot権限が必要です。本番環境のネットワークを圧迫しないよう、無闇に短い間隔は設定しないようにしてください。

5. パケットサイズを指定する(-sオプション)

-s オプションでICMPパケットのデータサイズを指定できます。デフォルトは56バイト(ICMPヘッダ8バイトを加えて64バイト)です。

# 1000バイトのパケットを送信する $ ping -s 1000 -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 1000(1028) bytes of data. 1008 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.512 ms # Ethernet MTU確認:フラグメント禁止フラグ付き(-M do) # IPヘッダー20 + ICMPヘッダー8 = 28バイトを引いた1472が最大ペイロード $ ping -s 1472 -M do -c 3 192.168.1.1

MTU(Maximum Transmission Unit)の問題を調査するときに役立ちます。-M do はフラグメントを禁止するフラグで、「Frag needed and DF set」エラーが返ってきた場合は、MTUサイズの不一致(パスMTU問題)が疑われます。

ping結果の読み方

6. 応答行の見方

pingの応答行には重要な情報が含まれています。

64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.523 ms

64 bytes:受信したパケットのサイズ
icmp_seq=1:パケットの連番(抜けている番号があればパケットロスが発生している)
ttl=64:Time To Live(パケットが通過できるルーター数の上限、経由するたびに1ずつ減る)
time=0.523 ms:往復にかかった時間(RTT: Round Trip Time)

7. 統計情報の見方

Ctrl + C で停止した後(または -c で指定した回数が終了した後)に統計情報が表示されます。

--- 192.168.1.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 0.268/0.305/0.384/0.046 ms

5 packets transmitted:送信したパケット数
5 received:受信したパケット数
0% packet loss:パケットロス率(0%が正常)
rtt min/avg/max/mdev:応答時間の最小値/平均値/最大値/標準偏差

パケットロス率の目安は次のとおりです。

0%:正常
1~5%:注意レベル。断続的なネットワーク不安定の可能性あり
10%以上:問題あり。ルーター・スイッチ・回線のどこかに障害
100%:完全に疎通不可(またはICMPブロックの可能性)

標準偏差(mdev)は「ばらつき(ジッター)」を表します。この値が大きい場合、ネットワークが不安定な可能性があります。VoIPやリアルタイム通信の品質に影響が出ることもあります。

実務で使えるping活用テクニック

8. タイムアウト時間を指定する(-Wオプション)

-W オプションで応答待ちのタイムアウト秒数を指定できます。スクリプトで素早く判定したいときに使います。

# 1秒以内に応答がなければタイムアウト $ ping -c 1 -W 1 192.168.1.100

シェルスクリプトでの死活監視では、終了コードを使って判定するのが定番です。

# 疎通確認のシェルスクリプト例 if ping -c 1 -W 2 192.168.1.1 > /dev/null 2>&1; then echo "サーバーは稼働中" else echo "サーバーに到達できません" fi

9. ping結果をログに残す

長時間の監視でログを残したい場合は、リダイレクトとタイムスタンプを組み合わせます。

# タイムスタンプ付きでログに保存する $ ping 192.168.1.1 | while read line; do echo "$(date '+%Y-%m-%d %H:%M:%S') $line"; done > ping_log.txt

10. IPv6で疎通確認する

IPv6アドレスに対してpingを実行するには、ping -6 または ping6 コマンドを使います。

# IPv6で疎通確認 $ ping -6 -c 3 ::1 PING ::1(::1) 56 data bytes 64 bytes from ::1: icmp_seq=1 ttl=64 time=0.025 ms # ping6コマンドでも同じ結果 $ ping6 -c 3 fe80::1%eth0

11. 複数ホストをまとめて確認する

サブネット内の複数ホストをまとめて確認したいときは、forループが便利です。

# サブネット内の主要ホストをまとめて確認する例 for host in 192.168.1.1 192.168.1.10 192.168.1.100; do if ping -c 1 -W 1 "${host}" > /dev/null 2>&1; then echo "${host}: 応答あり" else echo "${host}: 応答なし" fi done

pingが通らない時のトラブルシュート

「Destination Host Unreachable」の対処法

このメッセージは、指定したホストに到達するための経路が見つからない場合に表示されます。

・同じネットワーク内のホスト宛 → 相手がダウンしているか、IPアドレスが間違っている
・異なるネットワーク宛 → デフォルトゲートウェイの設定を確認する

# デフォルトゲートウェイを確認する $ ip route show default default via 192.168.1.1 dev eth0 # ネットワークインターフェースの状態を確認する $ ip addr show

「Request timed out」(応答なし)の対処法

パケットを送信したが応答が返ってこない状態です。

・相手のホストがダウンしている
・途中のネットワーク機器(ルーター・スイッチ)に障害がある
・ファイアウォールでICMPがブロックされている

まず自分自身(localhost)へのpingを試して、自マシンのネットワークスタックが正常か確認しましょう。

# 自分自身への疎通確認 $ ping -c 3 127.0.0.1 # デフォルトゲートウェイへの疎通確認 $ ping -c 3 192.168.1.1

localhost → ゲートウェイ → 相手ホスト の順に確認していくことで、どこで通信が途切れているか特定できます。

pingは通るのにSSH/HTTPがつながらない場合

pingが通るということは、ネットワーク層(L3)までは正常です。SSH(ポート22)やHTTP(ポート80)がつながらない場合は、アプリケーション層の問題です。

・対象のサービス(sshd、httpd)が起動しているか確認する
・ファイアウォールで対象ポートが許可されているか確認する

# ポートの到達性を確認する $ ss -tlnp | grep :22 $ curl -I http://192.168.1.10

【重要】pingに応答しないホストがある(ICMP制限)

近年では、セキュリティやネットワーク負荷の観点から、ICMPパケットへの応答を無効にしているホストやネットワーク機器が増えています。

pingが通らないからといって、必ずしもホストがダウンしているわけではありません。

AWS EC2やクラウド環境では、セキュリティグループでICMPを明示的に許可しないとpingが通らないのが一般的です。このような環境では、TCPレベルでの代替確認が有効です。

# curlでHTTPの疎通を確認する(pingが通らない環境での代替手段) $ curl -o /dev/null -s -w "%{http_code} " http://192.168.1.10/ # ncコマンドでTCPポートの疎通を確認する $ nc -zv 192.168.1.10 22 $ nc -zv 192.168.1.10 80 # telnetでTCPポートへの接続確認(古いが確実) $ telnet 192.168.1.10 22

これらのコマンドでHTTPステータス200やSSHのバナーが返ってくれば、サービスは正常に動いています。

本記事のまとめ

やりたいこと コマンド
IPアドレスに疎通確認する ping 192.168.1.1
回数を指定して実行する ping -c 5 192.168.1.1
送信間隔を変更する ping -i 5 192.168.1.1
パケットサイズを指定する ping -s 1000 -c 3 192.168.1.1
タイムアウトを指定する ping -c 1 -W 1 192.168.1.1
MTU確認(フラグメント禁止) ping -s 1472 -M do -c 3 192.168.1.1
IPv6で疎通確認する ping -6 -c 3 ::1
ループバックでTCP/IPスタック確認 ping -c 3 127.0.0.1
デフォルトゲートウェイを確認する ip route show default
TCPポートの疎通確認(ping代替) nc -zv 192.168.1.10 22
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
Linux無料マニュアルを受け取る >>

関連記事

この記事と関連性の高い記事をまとめました。あわせて読むことで理解が深まります。

tracerouteコマンドでネットワーク経路を調査する方法|出力の見方とトラブル対処
LinuxのDNS設定方法|resolv.confが元に戻る原因とnmcliの手順

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。