ping・tracerouteの使い方と見方
pingの
pingは「相手から応答が返るか」、tracerouteは「宛先までどのルータを通るか」を確かめるコマンドです
pingは、相手から応答が返るかどうかと、往復にかかった時間を確かめるコマンドです。tracerouteは、宛先までに経由するルータを1台ずつ調べて、一覧表示するコマンドです。
pingは、ICMPという仕組みで相手に応答を求めます。Windowsでは、tracerouteの代わりに tracert というコマンドを使います。「Webページが開かない」ときに、相手まで届いているのか、途中のどこで止まっているのかを、手元のPCで確かめられます。
pingが確かめていること:ICMP Echo RequestとEcho Reply
pingは、宛先に「聞こえますか」という問い合わせを送ります。この問い合わせをEcho Requestと呼びます。相手が「聞こえます」という返事のEcho Replyを返せば、その相手まで通信できることが分かります。pingは、TCPのようなコネクションの確立やポート番号を使いません。
Echo RequestとEcho Replyは、ICMPというプロトコルのメッセージです。ICMPは、到達確認やエラー通知を運ぶプロトコルです。ICMPはIPパケットの中に入って運ばれますが、層の分類ではTCP・UDPと同じ第4層ではなく、IPと同じ第3層に属します。TCP/IPモデルでは、インターネット層にあたります。ICMPのほかのメッセージと、タイプ・コードの一覧はICMPの記事にまとめています。
基本の使い方は共通です。ターミナルで、次のように入力します。Windowsでは、コマンドプロンプトを使います。
$ ping [オプション] 宛先(IPアドレスまたはホスト名) # 例: $ ping 8.8.8.8 $ ping example.com
宛先には、IPアドレスだけでなくexample.comのようなドメイン名も指定できます。ドメイン名を指定した場合は、まず内部で名前解決(DNS)を行い、得られたIPアドレスにICMPを送ります。
ping出力の読み方:time・ttl・packet loss
次の例は、Mac・Linuxで8.8.8.8にpingを実行した結果です。8.8.8.8は、Googleが公開しているDNSサーバのIPアドレスです。IPアドレスから名前を調べる逆引きをすると、dns.googleという名前が表示されることもあります。行をクリックすると、その行の意味が開きます。
$ ping -c 4 8.8.8.8
宛先アドレスと、送信するICMPのデータ本体の大きさを示します。データ本体は56バイトです。実際に送信するIPパケットは、ICMPヘッダ8バイトとIPヘッダ20バイトが足されるので、これより大きくなります。
icmp_seq は、何回目の応答かを示す通し番号です。途中に欠番があれば、その回だけ応答が返らなかったことになります。ttl は、応答パケットが届いた時点で残っていたTTLです。time は、送ってから応答が返るまでの往復時間で、RTTと呼びます。
2回目の応答です。icmp_seqが0の次の1なので、1回目と2回目の間に応答の欠けがないと分かります。
3回目の応答です。ttlは、前の2回と同じ124です。同じ経路を通っていれば、通過するルータの数が変わらないので、ttlの値も変わりません。
4回目の応答です。timeだけが13ms近くと、わずかに遅くなっています。数msのばらつきは、途中の回線の混雑などで普通に起こります。
ここから下は、4回分の結果をまとめた集計です。
送った回数は4回、応答が返ってきた回数も4回です。パケットロス率は、(送った回数 − 受け取った回数) ÷ 送った回数 × 100 で計算します。ここでは (4−4)÷4×100=0% です。1回でも欠ければ、0%より大きくなります。
4回の往復時間の最小値・平均値・最大値・ばらつきの大きさです。ばらつきの大きさには母標準偏差を使っています。min=10.958ms、max=12.999msなので、実際にかかった時間はこの範囲に収まっています。ふだんの目安になるのは、平均を表すavgです。
行をクリックすると、その行の意味が開きます。
読むときに見る数字は、次の3つです。
- time:往復時間です。短いほど速いことを示します。
- ttl:応答パケットが経由したルータの数の目安です。詳しい読み方は次の節で説明します。
- packet loss:何%の応答が返らなかったかを示します。0%なら、全部返ってきています。
time(往復時間)をRTT、packet lossをパケットロスと呼びます。これらの指標の意味と、帯域幅・スループットとの違いは性能指標の記事で説明しています。
OS別:pingの使い方と出力
WindowsとMac・Linuxでは、オプションの指定方法と出力の書式が違います。ICMPを送って応答を見る仕組みは同じです。
| 目的 | Windows | Mac・Linux |
|---|---|---|
| 送信回数を指定する | -n 回数 | -c 回数 |
| 既定の回数(オプション省略時) | 4回で自動終了 | 無限(Ctrl+Cで停止) |
| 止まるまで送り続ける | -t(Ctrl+Cで停止) | 既定の動作(回数省略時) |
| パケットサイズを指定する | -l サイズ(バイト。既定32) | -s サイズ(バイト。既定56) |
| 応答を待つ時間を指定する | -w ミリ秒 | -W ミリ秒(Mac・BSD系)/秒(Linuxのiputils)。同じ-Wでも単位がOSで違う |
C:\>ping 8.8.8.8
8.8.8.8 に ping を送信しています 32 バイトのデータ:
8.8.8.8 からの応答: バイト数 =32 時間 =10ms TTL=124
8.8.8.8 からの応答: バイト数 =32 時間 =11ms TTL=124
8.8.8.8 からの応答: バイト数 =32 時間 =13ms TTL=124
8.8.8.8 からの応答: バイト数 =32 時間 =14ms TTL=124
8.8.8.8 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 10ms、最大 = 14ms、平均 = 12ms
# 既定は4回で自動的に止まります(-t を付けると止まるまで送り続けます)。
# 平均は4回の時間の単純平均です(10+11+13+14=48、48÷4=12ms)。$ ping -c 4 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: icmp_seq=0 ttl=124 time=11.012 ms 64 bytes from 8.8.8.8: icmp_seq=1 ttl=124 time=10.958 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=124 time=11.031 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=124 time=12.999 ms --- 8.8.8.8 ping statistics --- 4 packets transmitted, 4 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 10.958/11.500/12.999/0.866 ms # -c を付けないと、Ctrl+Cで止めるまで送り続けます。 # これはmacOSのping(icmp_seqが0から始まり、集計行がround-trip min/avg/max/stddev)の形式です。 # Linux(iputils)はicmp_seqが1から始まり、集計行もrtt min/avg/max/mdevとラベルが違うなど細部が異なります。
ttlは、相手が送り出した時点のTTLの初期値から、経由したルータの数だけ減った値です。初期値はOSやルータの実装によって決まり、64や128が多く使われています。
ttl=124で初期値が128なら、4台のルータを経由したと推測できます。TTLがルータを通過するたびに1ずつ減る仕組みは、ルーティングの記事で説明しています。ただし、行きと帰りで経路が違うこともあるので、この値が後で説明するtracerouteのホップ数と一致するとは限りません。
pingが通らないときの読み方
pingが通らないとき、推測できる原因は表示されるメッセージによって変わります。次の3つを区別してください。
| 状況 | Windowsでの | Mac・Linuxでの | 意味 |
|---|---|---|---|
| 応答が返らない | 要求がタイムアウトしました。 | Mac:応答が来なかった回ごとにRequest timeout for icmp_seq 1 Linux:何も表示されず、最後に100% packet loss(Macの100.0%と違い小数点以下なし) | 既定の時間内にEcho Replyが届かなかったことだけを示します。相手が止まっている場合も、経路上で止まっている場合も、相手がICMPに応答しない設定の場合もあり、この結果だけでは区別できません。 |
| 明示的に到達不能と返ってくる | 192.168.10.25 からの応答: 宛先ホストに到達できません。 | Destination Host Unreachable | 宛先の手前の機器が「届けられない」と知らせてきたことを示します。宛先の手前とは、同じLAN内なら自分のPC自身、別のネットワーク宛なら経路上の最後のルータです。同じLAN内でよく出るのは、宛先のMACアドレスをARPで問い合わせても応答がないときです。経路そのものがない場合は、本来はNet Unreachable(RFC 792 の Type 3 Code 0)です。経路はあるが宛先の機器まで届けられない場合は、Host Unreachable(Code 1)です。無応答のタイムアウトと違い、到達不能の知らせそのものは届いています。 |
| 名前解決できない | Ping要求ではホスト ◯◯ が見つかりませんでした。 | ping: cannot resolve ◯◯: Unknown host | ICMPを送る前の段階、つまりDNSによる名前解決で止まっています。IPアドレスを直接指定したpingが通るなら、原因はDNS側に絞り込めます。 |
セキュリティ上の理由から、サーバや機器がEcho Requestに応答しない設定になっていることは珍しくありません。その場合、pingは通らなくても、HTTPなど他の通信は問題なく届きます。応答がないことが示すのは、その相手をICMPで確認できなかったという事実だけです。
tracerouteの仕組み:TTLを1ずつ増やして経路を突き止める
tracerouteは、宛先に向けて、TTLを1、2、3…と1ずつ増やしたパケットを順に送ります。TTLは、IPパケットが経由できるホップ数の上限です。DNSレコードのキャッシュの有効期間を指すTTLとは別のものです。
- 1
TTL=1で
送る 最初のルータでTTLが0になります。最初のルータは、多くの場合、自宅のデフォルトゲートウェイです。パケットを破棄したルータは、送信元へICMP Time Exceededを返します。
- 2
TTL=2で
送る 1台目のルータは通過できますが、2台目のルータでTTLが0になります。今度も、ICMP Time Exceededが返ります。
- 3
TTLを
1ずつ 増やして 繰り返す 宛先に届くまで、TTLを1ずつ増やして送り続けます。返ってきたICMP Time Exceededには、送り主のIPアドレスが入っています。これを記録すれば、1ホップ目から順にルータが分かります。
- 4
宛先まで
届いたら 終了 パケットが宛先まで届くと、Time Exceededではなく別の応答が返り、経路の特定が完了します。tracerouteの動きはルーティングの記事でも説明しています。
Mac・Linuxのtracerouteは、宛先の使われていないポート宛にUDPで送るので、ICMPポート到達不能が返ります。Windowsのtracertは、ICMPで送るので、ICMP Echo Replyが返ります。
「ポート到達不能」のポートは、HTTPSの443番と同じ、TCP・UDPのポート番号です。Mac・Linuxのtracerouteは、宛先のどのアプリも使っていない高い番号のポートを意図的に指定して送ります。
すると宛先は、「このポートは使われていません」という意味のICMPポート到達不能を返します。tracerouteは、この応答を「宛先まで届いた」合図として使っています。
OS別:traceroute / tracertの出力
| 目的 | Windows | Mac・Linux |
|---|---|---|
| 名前解決をしない(IPアドレスだけ表示) | tracert -d | traceroute -n |
| ICMPで送る | 既定でICMPを使う(オプション不要) | traceroute -I(既定はUDP。Linuxはsudoが必要) |
$ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets 1 192.168.10.1 (192.168.10.1) 0.412 ms 0.398 ms 0.376 ms 2 198.51.100.1 (198.51.100.1) 1.203 ms 1.156 ms 1.098 ms 3 192.0.2.9 (192.0.2.9) 5.446 ms 5.201 ms 5.890 ms 4 * * * 5 8.8.8.8 (8.8.8.8) 14.001 ms 13.774 ms 14.220 ms # 1ホップにつき3回ずつ送り、応答時間が3つ並びます。ここでは3回分の時間をすべてそのまま載せています。 # 4行目は3回とも応答が返らなかった状態です(後述)。
C:\>tracert 8.8.8.8 8.8.8.8 へのルートをトレースしています 経由するホップ数は最大 30 です: 1 <1 ms <1 ms <1 ms 192.168.10.1 2 1 ms 1 ms 1 ms 198.51.100.1 3 5 ms 5 ms 6 ms 192.0.2.9 4 * * * 要求がタイムアウトしました。 5 14 ms 14 ms 14 ms 8.8.8.8 トレースを完了しました。 # Windowsも1ホップにつき3回ずつ送ります。既定でICMPを使うため、tracerouteとは中身が違いますが、 # 見え方(1行=1ホップ)は同じです。
traceroute出力の読み方:「* * *」・途中の遅延・途中で止まる
- 1
「* * *」が
1行だけ挟まる 上の例の4行目のように、1ホップだけ応答が返らないことがあります。よくある原因は、そのルータが自分宛のICMP応答を後回しにする設定になっていることです。次のホップ以降で応答が再開していれば、そこから先は正常に届いています。「* * *」の1行だけで、通信が切れていると断定することはできません。
- 2
途中から
急に 応答時間が 伸びる それまで数msだったのに、あるホップから急に時間が伸びることがあります。そのホップと1つ手前の間の区間が混雑しているか、海底ケーブルを通る国際回線のような長距離の回線に入ったことを示します。
後ろのホップも同じように遅いままなら、混雑や長距離回線を疑ってください。1ホップだけ遅く、次のホップで時間が戻ることもあります。その場合は、そのルータが自分宛のICMPへの応答を後回しにしているだけで、通信そのものに問題はありません。
- 3
ある
ホップから先、 すべて 「* * *」の まま 終わる 最後まで応答が戻らず、宛先に届かないまま終わることもあります。その場合は、そのホップより先で経路が切れているか、ファイアウォールで止められている可能性があります。1行だけ挟まる「* * *」とは分けて考えてください。
つながらないときの切り分けの順番:自分 → ゲートウェイ → 外 → 名前
「インターネットにつながらない」というトラブルは、手前から順にpingで確かめていくと原因を早く絞り込めます。この順番は、層の考え方で説明した「下の層から1つずつ疑う」やり方と同じです。
- 1
ケーブル・Wi-Fiの
ランプを 確認する LANケーブルが抜けていないか、Wi-Fiのアイコンに×が付いていないかを見ます。これは一番下の物理層の確認です。ここがつながっていなければ、この先は確認しても意味がありません。
- 2
自分の
IPアドレスを 確認する IPアドレスが振られているかを見ます。Windowsではipconfigを、Mac・Linuxではifconfigやip addrを使います。169.254.で始まっていれば、DHCPに失敗しています。
- 3
デフォルトゲートウェイに
pingを 打つ 家庭用ルータの内側のアドレスに届くかを確認します。ここでの例では、192.168.10.1がこのアドレスです。ここで通らなければ、家庭内LANの配線やWi-Fi接続を疑います。
- 4
外部の
IPアドレスに pingを 打つ 8.8.8.8のような外部のIPアドレスに届くかを確認します。ゲートウェイまでは届くのにここで止まっていれば、回線やプロバイダの問題です。
- 5
ドメイン名に
pingを 打つ・nslookupを 試す 8.8.8.8には届くのに、example.comでは「名前が見つからない」と表示される場合があります。そのときは、DNSによる名前解決だけが機能していません。tracerouteで途中のどのホップまで届いているかを見れば、外部までの経路のどこで止まっているかも絞り込めます。
この切り分けの流れは、ネットワークの全体像を一気に読むの、確認コマンドと切り分けの節にフローチャートでまとめています。ping・traceroute以外のコマンドを症状ごとに選ぶ早見表は、netstat・ss・digの記事にあります。
ここまでは、pingを手作業で実行する方法でした。多数の機器を継続的に監視したい場合は、別の仕組みを使います。機器の側から異常を知らせたり、定期的に自動で確認したりする仕組みで、SNMPの記事で説明しています。
原因が絞れないときは、Wiresharkでパケットを1つずつ見る方法があります。
練習問題(全5問)
正解:ICMP
pingは、
正解:3回
パケットロス率=(送った
正解:TTLを
tracerouteは、
正解:応答が
「* * *」は、
正解:timed outは
timed outは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
おすすめの本 PR
この記事の内容を扱っている本です。
