pingコマンド:Linuxのpingオプションと100% packet lossの確認

テスト環境RHEL系AlmaLinux 9.8iputils 20210202rootアカウントDebian 12 · iputils 20221126 一般ユーザー
ネットワークコマンドping場所/usr/bin/ping2026-11-04 確認

Linuxサーバーから相手のサーバーまでパケットが届くかどうかと往復時間は、pingコマンドで確認します。AlmaLinux 9とDebian 12のサーバーから-cで回数を決めてexample.comに送った結果、往復時間は1~3msでした。ICMPを遮断しているサーバーでは、Webリクエストには応答が返ってくるのにpingの結果は100% packet lossでした。

以下の出力は、AlmaLinux 9.8サーバー(rootアカウント)とDebian 12サーバー(一般アカウント)で実行した結果です。すべてのpingは-cで送る回数を決めて実行しました。途中のルーターのプライベートIPアドレスは例の値に置き換え、example.comのような公開ドメインから解決されたアドレスはそのまま残しています。

1️⃣ pingコマンドの使い方

  • ↪️ 出力行の読み方

pingは相手のサーバーにICMPエコー要求を送り、エコー応答が返ってくるまでの時間を1行ずつ出力します。Linuxのpingは-cで回数を決めないとCtrl+Cで止めるまで送り続けるため(公式マニュアル基準)、最初から-c 4のように回数を付けて実行します。

ping -c 4 example.com
PING example.com (172.66.147.243) 56(84) bytes of data.
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=58 time=1.46 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=58 time=1.30 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=3 ttl=58 time=1.28 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=4 ttl=58 time=1.30 ms

--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 1.279/1.336/1.464/0.074 ms

Debian 12サーバーからexample.comに4回送ると4回とも応答があり、往復時間は1.28~1.46msでした。各行で確認する内容は以下のとおりです。

出力確認できるもの
PING example.com (172.66.147.243) 56(84) bytes of data.名前解決で得たアドレスと送るサイズ — データ56バイトにIPヘッダー20バイトとICMPヘッダー8バイトを足すと84バイト
64 bytes from …返ってきた応答のサイズ(データ56バイト + ICMPヘッダー8バイト)
icmp_seq=1送った順番の番号
ttl=58返ってきた応答パケットに残っているTTL — ルーターを1つ通るたびに1ずつ減る
time=1.46 msそのパケットの往復時間
4 packets transmitted, 4 received, 0% packet loss送った数、受け取った数、応答がなかった割合
time 3003ms最初のパケットを送ってから終わるまでにかかった時間
rtt min/avg/max/mdev往復時間の最小値・平均・最大値とばらつき(mdev)

mdevは往復時間が平均からどれだけずれているかを示す値で、公式マニュアルはこの値が大きいほど往復時間が不揃いだと説明しています。4回とも1.5ms以内だったこの結果のmdevは0.074msでした。

同じコマンドをAlmaLinux 9サーバーで実行すると、pingはexample.comのIPv6アドレスに送り、1行目には84がなく56 data bytesだけが表示されました。

ping -c 4 example.com
PING example.com(2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3)) 56 data bytes
64 bytes from 2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3): icmp_seq=1 ttl=51 time=2.20 ms
64 bytes from 2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3): icmp_seq=2 ttl=54 time=2.30 ms
64 bytes from 2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3): icmp_seq=3 ttl=51 time=2.55 ms
64 bytes from 2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3): icmp_seq=4 ttl=54 time=2.26 ms

--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 2.203/2.326/2.547/0.131 ms

インストールされているpingのバージョンは-Vで確認します。Debian 12サーバーはiputils 20221126、AlmaLinux 9サーバーはiputils 20210202でした。

ping -V
ping from iputils 20221126
libcap: yes, IDN: yes, NLS: no, error.h: yes, getrandom(): yes, __fpending(): yes
ping -V
ping from iputils 20210202

2️⃣ pingの回数と間隔のオプション

  • ↪️ -c, -i, -w, -W, -q

pingのオプションのうち、-cは送る回数、-iは送る間隔(秒)です。デフォルトの間隔は1秒で、-i 0.5を付けると4回送るのにかかった時間が3003msから1502msに短くなりました。

ping -c 4 -i 0.5 example.com
PING example.com (172.66.147.243) 56(84) bytes of data.
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=58 time=1.26 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=58 time=1.31 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=3 ttl=58 time=1.37 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=4 ttl=58 time=1.44 ms

--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 1502ms
rtt min/avg/max/mdev = 1.264/1.343/1.436/0.065 ms

間隔を0.2秒より短くするのは、AlmaLinux 9サーバーのiputils 20210202のマニュアルではrootだけができ、Debian 12サーバーのiputils 20221126のマニュアルではその基準を2msとしています。短い間隔は相手のサーバーやネットワークに負荷をかけることがあります。

-wは送った回数に関係なく、ping全体を終える時間(秒)です。-cと一緒に使うと、決めた回数だけ応答を受け取るか、-wの時間が過ぎると終わります。-c 10 -w 3で実行すると、3秒が過ぎて3回だけ送って終わりました。

ping -c 10 -w 3 example.com
PING example.com (172.66.147.243) 56(84) bytes of data.
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=58 time=1.34 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=58 time=1.27 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=3 ttl=58 time=1.34 ms

--- example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.272/1.318/1.342/0.032 ms

応答は3回とも受け取りましたが、決めた10回に届かなかったため、このときのpingの終了コードは1でした。公式マニュアルも、-cと-wを一緒に使った場合に決めた回数だけ応答を受け取れないと1で終わると説明しています。

-Wは応答1つを待つ時間(秒)です。公式マニュアルによると、この値は応答が1つも返ってこないときだけ使われ、応答が返ってくる相手には往復時間の2倍だけ待ちます。

結果の行を出さずに要約だけを見るときは-qを付けます。4回送ると、1行目と最後の統計行だけが残りました。

ping -c 4 -q example.com
PING example.com (104.20.23.154) 56(84) bytes of data.

--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.551/1.649/1.715/0.060 ms

3️⃣ pingのパケットサイズとIPv6のオプション

  • ↪️ -s, -t, -4, -6

送るデータのサイズは-sで変えます。-s 1000を付けると、1行目は1000(1028) bytes、応答行は1008 bytesに変わりました。

ping -c 2 -s 1000 example.com
PING example.com (172.66.147.243) 1000(1028) bytes of data.
1008 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=58 time=1.21 ms
1008 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=58 time=1.31 ms

--- example.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.214/1.262/1.311/0.048 ms

1028はデータ1000バイトにIPヘッダー20バイトとICMPヘッダー8バイトを足したサイズで、1008はデータにICMPヘッダーだけを足したサイズです。往復時間は1.21~1.31msで、デフォルトのサイズ(56バイト)で送ったときと大きな差はありませんでした。

-tは送るパケットのTTLを決めます。TTLはルーターを1つ通るたびに1ずつ減り、0になるとそのルーターがパケットを捨てて[Time to live exceeded]を返します。

ping -c 2 -t 3 example.com
PING example.com (172.66.147.243) 56(84) bytes of data.
From 192.0.2.103 (192.0.2.103) icmp_seq=1 Time to live exceeded
From 192.0.2.103 (192.0.2.103) icmp_seq=2 Time to live exceeded

--- example.com ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1001ms

TTLを3に下げると、3番目のルーターが2回とも[Time to live exceeded]を返しました。TTLを1から1つずつ上げてみた結果、example.comには8で初めて応答が返ってきました。

-4と-6は、送るアドレスの種類をIPv4かIPv6のどちらかに決めます。AlmaLinux 9サーバーはオプションなしでもexample.comのIPv6アドレスに送ったため、IPv4アドレスに送るときは-4を付けました。

ping -4 -c 4 example.com
PING  (172.66.147.243) 56(84) bytes of data.
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=54 time=2.64 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=54 time=2.55 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=3 ttl=54 time=2.57 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=4 ttl=54 time=2.58 ms

---  ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 2.553/2.585/2.642/0.033 ms

AlmaLinux 9サーバーのiputils 20210202では、-4を付けると1行目と統計行の名前の欄が空になりました。同じコマンドをDebian 12サーバーのiputils 20221126で実行したときは、example.comがそのまま表示されました。

IPv6のデフォルトルートがないDebian 12サーバーでは、-6を付けると応答行なしですぐに[connect: Network is unreachable]で終わりました。

ping -6 -c 2 example.com
ping: connect: Network is unreachable

🔲 pingコマンドのオプション

📌 主なオプション: この記事で実行した結果

オプション作業この記事で確認した結果
-c 回数送る回数を決め、その回数だけ送ったら終了Debian 12サーバーで-c 4で4回送り4回とも応答、往復1.28~1.46ms
-i 間隔パケットを送る間隔(秒)、デフォルト1秒-i 0.5で4回送るのにかかった時間が3003msから1502msに短縮
-w 時間送った回数に関係なく、ping全体を終える時間(秒)-c 10 -w 3が3秒後に3回だけ送って終了コード1で終了
-W 時間応答が1つもないときに、応答1つを待つ時間(秒)192.0.2.1に-W 1で2回送って[100% packet loss]、終了コード1
-q応答行なしで1行目と最後の統計だけを出力4回送ったあと、1行目と統計行だけが残る
-s サイズ送るデータのサイズ(バイト)、デフォルト56-s 1000で1行目は1000(1028) bytes、応答行は1008 bytes
-t TTL送るパケットのTTL-t 3で3番目のルーターが2回とも[Time to live exceeded]を返す
-4IPv4アドレスにだけ送るAlmaLinux 9サーバーでIPv6の代わりにIPv4アドレスに送り、名前の欄は空になる
-6IPv6アドレスにだけ送るIPv6のデフォルトルートがないDebian 12サーバーで[connect: Network is unreachable]
-D応答行ごとに先頭にUnix時間(秒.マイクロ秒)を付ける応答行の先頭に[1793227536.574201]のように時刻が付く
-Vバージョン情報を出力Debian 12はiputils 20221126、AlmaLinux 9はiputils 20210202

📎 その他のオプション: 公式マニュアルより

オプション作業
-nアドレスを名前に解決せず、数字だけで出力
-I インターフェース送るインターフェースや送信元アドレスを指定
-A往復時間に合わせて送る間隔を自動で調整、root以外は最小間隔200ms
-f応答を待たずに高速で送るフラッドping、間隔0はrootだけ
-l 個数応答を待たずに先に送るパケット数、3個を超えるのはrootだけ
-M doPath MTU Discoveryの方式を決める、doは断片化を防ぐ(want、dontも指定可)
-p パターン送るパケットを埋めるバイトパターン、16バイトまで
-O次のパケットを送る前に、応答がなかった要求を知らせる、-Dと一緒に記録するときに使用
-R通った経路を記録(IPv4専用、このオプションを無視するホストが多い)
-bブロードキャストアドレスに送ることを許可
-a応答が来るたびに音を鳴らす

🔲 pingコマンドシミュレーター

下のシミュレーターでは、回数と間隔、パケットサイズ、応答のないアドレスに送った結果を自分で入力して試せます。

pingコマンドシミュレーターiputils 20221126
[root@server work]#
ブラウザーの中だけで動作し、実際のパケットは送りません。↑↓で前に入力したコマンドを呼び出せます。

4️⃣ pingの応答がない

  • ↪️ 100% packet lossと名前解決の失敗

[100% packet loss]は、送ったパケットに応答が1つも返ってこなかったという意味です。ドキュメント用に予約されたアドレス192.0.2.1に-W 1を付けて2回送ると、応答行なしで統計だけが表示されました。

ping -c 2 -W 1 192.0.2.1
PING 192.0.2.1 (192.0.2.1) 56(84) bytes of data.

--- 192.0.2.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1024ms

応答が1つもないときのpingの終了コードは1で、応答を受け取ったときは0でした。スクリプトで相手のサーバーが応答するかを確認するときは、この値を使います。

ping -c 2 -W 1 192.0.2.1 > /dev/null; echo $?; ping -c 1 example.com > /dev/null; echo $?
1
0

pingはICMPだけを確認するため、ICMPを遮断しているサーバーはWebリクエストには応答しても、pingには応答しません。Debian 12サーバーからamazon.comに2回送ると[100% packet loss]になり、同じアドレスにcurlでWebリクエストを送ると301応答が返ってきました。

ping -c 2 -W 1 amazon.com
PING amazon.com (98.82.161.185) 56(84) bytes of data.

--- amazon.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1002ms
curl -sI https://amazon.com/ | head -1
HTTP/1.1 301 Moved Permanently

ICMPを遮断しているサーバーは、呼び鈴を外してある店のようなものです。

クラウドサーバーは、ファイアウォールのルールでICMPを許可しないとpingに応答しない場合があります。 Oracle CloudのVMインスタンスは、パブリックサブネットのセキュリティリストでICMPタイプを8に変えたあと、pingに応答しました。

名前をIPアドレスに解決できないと、1行目なしですぐに[Name or service not known]で終わり、終了コードは2でした。.invalidはどこでも解決されないように予約された名前なので、このエラーの確認に使いました。

ping -c 1 no-such-host.invalid
ping: no-such-host.invalid: Name or service not known

実際のドメインでこのエラーが出たら、 nslookupコマンドでDNSサーバーがその名前にアドレスを返すかを確認します。応答がないときに出た出力4つと、次に確認することは以下のとおりです。

出力意味次に確認すること
100% packet loss送ったパケットに応答が1つも返ってこないWebサービスはcurlで、ファイアウォールはICMPの許可ルール
Name or service not known名前をIPアドレスに解決できないnslookupでDNSの応答
connect: Network is unreachableそのアドレスの種類で出ていく経路がない-4でIPv4アドレスに送る
Time to live exceededTTLが途中のルーターで0になる-tの値を上げるか外して、もう一度送る

🔢 FAQ & おすすめコンテンツ

Debian 12サーバーでは、一般アカウントで実行してもsudoなしで応答を受け取れました。このサーバーの/usr/bin/pingにはcap_net_raw権限(capability)が付いていて、rootでなくてもICMPパケットを送れました。

確認した2台のサーバーでは、pingはAlmaLinux 9のiputilsパッケージとDebian 12のiputils-pingパッケージがインストールしたコマンドでした。そのため、RHEL系は[sudo dnf install iputils]、Debian系は[sudo apt install iputils-ping]でインストールします。

-Dを付けると、応答行ごとに先頭にUnix時間(秒.マイクロ秒)が付きます。Debian 12サーバーからexample.comに2回送ると、[1793227536.574201]のように応答行の先頭に時刻が記録されました。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 6   +   10   =