pingコマンド:Linuxのpingオプションと100% packet lossの確認
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.comPING 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 msDebian 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.comPING 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 -Vping from iputils 20221126
libcap: yes, IDN: yes, NLS: no, error.h: yes, getrandom(): yes, __fpending(): yesping -Vping from iputils 202102022️⃣ pingの回数と間隔のオプション
pingのオプションのうち、-cは送る回数、-iは送る間隔(秒)です。デフォルトの間隔は1秒で、-i 0.5を付けると4回送るのにかかった時間が3003msから1502msに短くなりました。
ping -c 4 -i 0.5 example.comPING 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.comPING 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.comPING 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 ms3️⃣ pingのパケットサイズとIPv6のオプション
送るデータのサイズは-sで変えます。-s 1000を付けると、1行目は1000(1028) bytes、応答行は1008 bytesに変わりました。
ping -c 2 -s 1000 example.comPING 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 ms1028はデータ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.comPING 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 1001msTTLを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.comPING (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 msAlmaLinux 9サーバーのiputils 20210202では、-4を付けると1行目と統計行の名前の欄が空になりました。同じコマンドをDebian 12サーバーのiputils 20221126で実行したときは、example.comがそのまま表示されました。
IPv6のデフォルトルートがないDebian 12サーバーでは、-6を付けると応答行なしですぐに[connect: Network is unreachable]で終わりました。
ping -6 -c 2 example.comping: 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]を返す | |
| -4 | IPv4アドレスにだけ送る | AlmaLinux 9サーバーでIPv6の代わりにIPv4アドレスに送り、名前の欄は空になる | |
| -6 | IPv6アドレスにだけ送る | 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 do | Path MTU Discoveryの方式を決める、doは断片化を防ぐ(want、dontも指定可) | |
| -p パターン | 送るパケットを埋めるバイトパターン、16バイトまで | |
| -O | 次のパケットを送る前に、応答がなかった要求を知らせる、-Dと一緒に記録するときに使用 | |
| -R | 通った経路を記録(IPv4専用、このオプションを無視するホストが多い) | |
| -b | ブロードキャストアドレスに送ることを許可 | |
| -a | 応答が来るたびに音を鳴らす |
🔲 pingコマンドシミュレーター
下のシミュレーターでは、回数と間隔、パケットサイズ、応答のないアドレスに送った結果を自分で入力して試せます。
4️⃣ pingの応答がない
[100% packet loss]は、送ったパケットに応答が1つも返ってこなかったという意味です。ドキュメント用に予約されたアドレス192.0.2.1に-W 1を付けて2回送ると、応答行なしで統計だけが表示されました。
ping -c 2 -W 1 192.0.2.1PING 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
0pingはICMPだけを確認するため、ICMPを遮断しているサーバーはWebリクエストには応答しても、pingには応答しません。Debian 12サーバーからamazon.comに2回送ると[100% packet loss]になり、同じアドレスにcurlでWebリクエストを送ると301応答が返ってきました。
ping -c 2 -W 1 amazon.comPING amazon.com (98.82.161.185) 56(84) bytes of data.
--- amazon.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1002mscurl -sI https://amazon.com/ | head -1HTTP/1.1 301 Moved PermanentlyICMPを遮断しているサーバーは、呼び鈴を外してある店のようなものです。
クラウドサーバーは、ファイアウォールのルールでICMPを許可しないとpingに応答しない場合があります。 Oracle CloudのVMインスタンスは、パブリックサブネットのセキュリティリストでICMPタイプを8に変えたあと、pingに応答しました。
名前をIPアドレスに解決できないと、1行目なしですぐに[Name or service not known]で終わり、終了コードは2でした。.invalidはどこでも解決されないように予約された名前なので、このエラーの確認に使いました。
ping -c 1 no-such-host.invalidping: 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 exceeded | TTLが途中のルーターで0になる | -tの値を上げるか外して、もう一度送る |
🔢 FAQ & おすすめコンテンツ
ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。