PingとTraceroute: トラブルシューティングに不可欠なネットワーク診断ツール
· 12分で読めます
目次
ネットワーク接続の問題は、生産性を完全に停止させる可能性があります。エンタープライズインフラストラクチャを管理するシステム管理者、APIタイムアウトをデバッグする開発者、または遅いインターネット速度を経験している一般ユーザーであっても、ネットワーク問題を診断する方法を理解することは不可欠なスキルです。
この包括的なガイドでは、ネットワーク診断のための最も強力なコマンドラインツールであるping、traceroute、MTRについて説明します。これらのツールの使い方だけでなく、結果の解釈方法と、その知識を実際の接続問題の解決に適用する方法を学びます。
Pingを理解する: ネットワークテストの基礎
Pingは、ほぼすべてのオペレーティングシステムで利用可能な最も基本的なネットワーク診断ツールです。これは、ターゲットホストにインターネット制御メッセージプロトコル(ICMP)エコー要求パケットを送信し、エコー応答パケットが返ってくるのを待つことで動作します。
「ping」という名前は潜水艦のソナー用語に由来しています。ソナーが音波を送信し、物体を検出するためにエコーを聞くように、pingコマンドはパケットを送信し、ネットワークホストを検出してその応答性を測定するために応答を聞きます。
Pingの内部動作
pingコマンドを実行すると、いくつかのことが急速に連続して起こります:
- コンピュータは一意の識別子とシーケンス番号を持つICMPエコー要求パケットを構築します
- パケットはネットワークスタックを通過し、ネットワークインターフェースを介して外に出て、インターネットを横断して宛先に到達します
- 宛先ホストはパケットを受信し、ICMPエコー応答を送り返します
- コンピュータは応答を受信し、往復時間(RTT)を計算します。これは送信から受信までの経過時間の合計です
- このプロセスは、通常1秒に1回、停止するまで繰り返されます
往復時間は、アプリケーションのパフォーマンスに直接影響するため重要です。Webページの読み込み、ビデオのストリーミング、またはビデオ通話はすべて、スムーズな動作のために低レイテンシに依存しています。
Pingが教えてくれること
成功したpingテストは、いくつかの重要な指標を提供します:
- 到達可能性: コンピュータがターゲットホストに到達できるか?
- レイテンシ: パケットが往復するのにどれくらい時間がかかるか?
- パケット損失: 返ってこないパケットはあるか?
- 一貫性: レイテンシは安定しているか、それとも非常に変動しているか?
プロのヒント: Pingは、接続のトラブルシューティングを行う際に最初に使用すべき診断ツールです。pingが失敗した場合、基本的な接続問題を解決するまで、より複雑なツールは役に立ちません。
基本的なPingの使い方と解釈
pingを使用する最も簡単な方法は、ホスト名またはIPアドレスだけを指定することです。ターミナルまたはコマンドプロンプトを開いて試してみてください:
# ドメイン名にping
ping example.com
# IPアドレスにping
ping 8.8.8.8
# ローカルルーターにping(一般的なゲートウェイアドレス)
ping 192.168.1.1
何もインストールせずに、Pingツールを使用して今すぐネットワーク接続をテストできます。
Ping出力の読み方
典型的なping応答は次のようになります:
PING example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=12.4 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.8 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=12.1 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=56 time=13.2 ms
--- example.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 11.8/12.4/13.2/0.5 ms
各コンポーネントが何を意味するか分解してみましょう:
| コンポーネント | 意味 | 確認すべきこと |
|---|---|---|
64 bytes |
応答パケットのサイズ | 要求サイズと一致する必要があります(デフォルトは56-64バイト) |
icmp_seq |
パケットのシーケンス番号 | 1ずつ増加する必要があります。ギャップはパケット損失を示します |
ttl |
Time To Live - 残りのホップ数 | 値が低いほど、ネットワークホップが多いことを示唆します |
time |
ミリ秒単位の往復時間 | 低いほど良い。一貫性が重要です |
packet loss |
返ってこなかったパケットの割合 | 0%であるべきです。1%を超える場合は調査が必要です |
min/avg/max |
レイテンシ統計 | 大きな差はネットワークの不安定性を示唆します |
レイテンシのベンチマーク
「良い」レイテンシとは何かを理解することは、コンテキストに依存します:
- 1-10ms: 優秀 - ローカルネットワークまたは近くのサーバーで一般的
- 10-50ms: 良好 - 地域接続で正常
- 50-100ms: 許容範囲 - 国内接続で一般的
- 100-200ms: 顕著 - リアルタイムアプリケーションに影響する可能性があります
- 200ms以上: 不良 - ユーザーエクスペリエンスに大きく影響します
パワーユーザー向けの高度なPingオプション
Pingは、強力な診断機能を解放する多数のコマンドラインオプションを提供します。最も有用なフラグとその使用時期は次のとおりです:
パケット数の制御
デフォルトでは、pingはCtrl+Cで停止するまで無期限に実行されます。-cフラグ(Windowsでは-n)はパケット数を制限します:
# 正確に10回ping
ping -c 10 example.com
# 3回だけの迅速な接続テスト
ping -c 3 8.8.8.8
これは、予測可能な実行時間が必要なスクリプトや自動監視に不可欠です。
パケットサイズの調整
-sフラグはパケットサイズを変更します。MTU(最大転送単位)の問題をテストしたり、異なるネットワーク条件をシミュレートしたりするのに便利です:
# 1000バイトのパケットを送信
ping -s 1000 example.com
# 最大パケットサイズをテスト(1472バイト + 28バイトヘッダー = 1500 MTU)
ping -s 1472 example.com
# フラグメンテーションの問題をテスト
ping -s 1500 -M do example.com
クイックヒント: 大きなパケットが失敗し、小さなパケットが成功する場合、パスのどこかにMTUの不一致がある可能性があります。これは一般的にVPNやトンネル接続で問題を引き起こします。
タイムアウト値の設定
-Wフラグは、パケットが失われたと見なす前に応答を待つ時間を設定します:
# 各応答を最大2秒待つ
ping -W 2 example.com
# 高速障害検出のための迅速なタイムアウト
ping -W 1 -c 5 unreachable-host.com
Ping間隔の調整
-iフラグは、パケット送信間の時間を制御します:
# 0.2秒ごとにpingを送信(root/admin権限が必要)
sudo ping -i 0.2 example.com
# 長期監視のために5秒ごとにpingを送信
ping -i 5 example.com
0.2秒未満の間隔は通常、管理者権限が必要であり、ネットワークのフラッディングを避けるために慎重に使用する必要があります。
ストレステストのためのフラッドPing
-fフラグは、可能な限り高速にパケットを送信します(root/admin権限が必要):
# フラッドping(責任を持って使用してください!)
sudo ping -f example.com
警告: フラッドpingはネットワークを圧倒する可能性があり、サービス拒否攻撃と見なされる場合があります。所有しているネットワーク、またはテストする明示的な許可を得ているネットワークでのみ使用してください。
実用的なPingシナリオ
複数のオプションを組み合わせた実際の例は次のとおりです:
# 3パケットの迅速なテストでサーバーが稼働しているかテスト
ping -c 3 -W 1 production-server.com
# 5分間の接続安定性を監視
ping -c 300 -i 1 example.com > ping-results.txt
# パケットフラグメンテーションの問題をテスト
ping -s 1472 -M do -c 10 example.com
# 拡張監視で断続的な接続を診断
ping -i 0.5 -c 1000 problematic-host.com | grep -E "time=|loss"
Tracerouteを探る: ネットワークパスのマッピング
pingは宛先に到達できるかどうかと所要時間を教えてくれますが、tracerouteはパケットがそこに到達するために取る正確なパスを示します。途中のすべてのルーター(ホップ)を明らかにし、それぞれへのレイテンシを測定します。
これは、pingが問題を示しているが、ネットワークパスのどこで問題が発生しているかを知る必要がある場合に非常に貴重です。
Tracerouteの動作原理
Tracerouteは、IPパケットのTTL(Time To Live)フィールドを使用した巧妙な技術を使用します:
- TTL=1のパケットを送信し、最初のルーターで期限切れになります
- そのルーターはICMP「Time Exceeded」メッセージを送り返し、その身元を明らかにします
- 次にTracerouteはTTL=2のパケットを送信し、期限切れになる前に2番目のルーターに到達します
- このプロセスは、宛先に到達するまでTTLを増やしながら続きます
- 各ホップについて、tracerouteは通常、レイテンシの一貫性を測定するために3つのパケットを送信します
結果は、コンピュータから宛先までのネットワークパスの完全なマップです。
基本的なTracerouteの使用法
# ドメインへのルートをトレース
traceroute example.com
# IPアドレスへのルートをトレース
traceroute 8.8.8.8
# より詳細な出力でルートをトレース
traceroute -v example.com
Tracerouteツールを使用して、ブラウザで直接tracerouteを実行できます。
Traceroute出力の理解
典型的なtracerouteは次のようになります:
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
1 router.local (192.168.1.1) 1.234 ms 1.156 ms 1.089 ms
2 10.0.0.1 (10.0.0.1) 8.456 ms 8.234 ms 8.123 ms
3 isp-gateway.net (203.0.113.1) 12.345 ms 12.234 ms 12.456 ms
4 core-router-1.isp.net (203.0.113.50) 15.678 ms 15.567 ms 15.789 ms
5 * * *
6 peer-exchange.net (198.51.100.1) 28.901 ms 28.789 ms 28.912 ms
7 example-edge.net (93.184.216.1) 32.123 ms 32.045 ms 32.234 ms
8 example.com (93.184.216.34) 33.456 ms 33.345 ms 33.567 ms
各行はパス内の1つのホップ(ルーター)を表します:
- 番号はホップ数(コンピュータからの距離)を示します
- ホスト名とIPアドレスはルーターを識別します
- 3つの時間測定は、3つのプローブパケットそれぞれの往復時間を示します
- アスタリスク(
* * *)は、そのホップが応答しなかったことを示します(多くの場合、ファイアウォールルールによる)
Traceroute結果で確認すべきこと
traceroute出力を分析する際は、これらのパターンに注意してください:
- 突然のレイテンシジャンプ: 連続するホップ間の大きな増加は、遅いリンクまたは輻輳ポイントを示します
- 一貫性のない時間: 3つの測定値の大きな変動は、ネットワークの不安定性を示唆します
- ルート途中のタイムアウト: トレースの途中(最後ではない)のアスタリスクは、問題のあるルーターを示す可能性があります
- 地理的ジャンプ: ホスト名は多くの場合場所を明らかにします。予期しないルーティングは高レイテンシを説明できます
- パケット損失パターン: 1つのホップが損失を示しているが、後続のホップが示していない場合、問題はその特定のルーターにある可能性があります
プロのヒント: traceroute出力にアスタリスクが表示されても慌てないでください。多くのルーターは、セキュリティ上の理由からtracerouteプローブに応答しないように設定されていますが、トラフィックは正常に転送されます。最終宛先が応答する場合、パスは機能しています。
異なるプラットフォームでのTraceroute
Tracerouteの実装は、オペレーティングシステムによって若干異なります。これらの違いを理解することで、プラットフォームに適したツールを使用できます。
LinuxとmacOS: traceroute
Unix系システムは、デフォルトでUDPパケットを使用するtracerouteコマンドを使用します:
# 基本的なtraceroute
traceroute example.com
# UDPの代わりにICMPを使用(ファイアウォールを通過する可能性が高い)
traceroute -I example.com
# 最大ホップ数を設定
traceroute -m 20 example.com
# TCP SYNパケットを使用(Webサーバーへのトレースに便利)
sudo traceroute -T -p 443 example.com
Windows: tracert
Windowsは、デフォルトでICMPパケットを使用するtracertを使用します:
# 基本的なtracert
tracert example.com
# ホスト名を解決しない(高速)
tracert -d example.com
# 最大ホップ数を設定
tracert -h 20 example.com
# ホップごとのタイムアウトを設定
tracert -w 1000 example.com
高度なTracerouteオプション
| オプション | Linux/macOS | Windows | 目的 |
|---|---|---|---|
| ICMPを使用 |