2026年6月6日

2026年6月6日

ping で経路を可視化する手順|TTLを1ずつ増やして中継点を洗い出す方法とRecord Routeの使い方

ping は本来「相手に届くか」と「往復にかかる時間」を測るコマンドで、そのままでは通り道(経路)は表示されません。ただし、TTL(パケットの寿命)を1から順に指定して送ると、途中のルーターが返すエラーから中継点を1つずつ洗い出せます。これは traceroute と同じ原理です。この記事では、応答の TTL から距離を見積もる方法、TTL を変えながら ping で経路を描く手順(Linux / macOS / Windows)、Record Route オプションの使い方と限界、結果を読むときの注意点を説明します。traceroute が入っていない環境で経路を調べたいときや、traceroute の仕組みを手を動かして理解したいときに役立ちます。

ping で経路が分かる仕組み

IP パケットには TTL(IPv6 では Hop Limit)という値があり、ルーターを1つ通過するたびに1ずつ減ります。0 になったパケットは捨てられ、捨てたルーターは送信元に「Time Exceeded(時間超過)」という ICMP メッセージを返します。

つまり、TTL を 1 にして送れば1つ目のルーターが、2 にすれば2つ目のルーターが応答を返します。TTL を 1、2、3…と増やしながら ping を送り、応答を返してきたアドレスを並べれば、それが目的地までの経路になります。traceroute はこの作業を自動で行うツールで、ping でも同じことを手作業で再現できます。

方法1:応答の TTL から距離を見積もる

経路を描く前に、普通の ping の結果からおおよその距離を推測できます。

ping -c 4 example.com
64 bytes from 93.184.215.14: icmp_seq=1 ttl=56 time=12.3 ms

ttl=56 は、相手から返ってきたパケットに残っていた TTL です。送信側の OS は TTL の初期値を決まった値にしていることが多く、Linux や macOS では 64、Windows では 128、ネットワーク機器では 255 がよく使われます。返ってきた値より大きく、もっとも近い初期値を想定すると、56 なら初期値 64 から 8 減っているので、相手から自分までおよそ 8 ホップと見積もれます。

ただし、これは帰りの経路の数で、行きと同じとは限りません。初期値も機器や設定で変えられるため、あくまで目安です。

方法2:TTL を1ずつ増やして中継点を洗い出す

Linux の場合

Linux(iputils の ping)では -t で TTL を指定します。

ping -n -c 1 -t 1 example.com

1つ目のルーターから次のような応答が返ります。

From 192.168.1.1 icmp_seq=1 Time to live exceeded

これを TTL を増やしながら繰り返すスクリプトの例です。目的地から通常の応答(bytes from)が返ったところで止まります。

#!/bin/bash
# 使い方: ./pingroute.sh example.com
target="${1:-example.com}"
for ttl in $(seq 1 30); do
  line=$(ping -n -c 1 -W 1 -t "$ttl" "$target" 2>/dev/null | grep -E "From|bytes from")
  echo "${ttl}: ${line:-* 応答なし}"
  if echo "$line" | grep -q "bytes from"; then
    break
  fi
done

-n は名前解決をせずに IP アドレスで表示するオプション、-W 1 は応答を待つ秒数です。応答待ちを短くすると早く終わりますが、遠いルーターの応答を取りこぼすことがあります。

macOS の場合

macOS の ping では、TTL の指定は -m です。-t はタイムアウトの指定になるため、Linux と取り違えないよう注意してください。

ping -n -c 1 -m 3 example.com

Windows の場合

Windows の ping では -i で TTL を指定します。コマンドプロンプトで次のように繰り返せます。

for /L %i in (1,1,30) do @ping -n 1 -w 1000 -i %i example.com | findstr "TTL"

途中のルーターからは「転送中に TTL が期限切れになりました」(英語版では TTL expired in transit)という行が、目的地からは TTL= を含む通常の応答が表示されます。目的地に届いた後も 30 まで続くので、途中で Ctrl + C で止めて構いません。

結果を表にして読む

出力を TTL の順に並べると、経路が見えてきます。

1: From 192.168.1.1 icmp_seq=1 Time to live exceeded
2: From 100.64.12.1 icmp_seq=1 Time to live exceeded
3: * 応答なし
4: From 203.0.113.9 icmp_seq=1 Time to live exceeded
...
9: 64 bytes from 93.184.215.14: icmp_seq=1 ttl=56 time=12.3 ms

1行目が自宅や社内のルーター、2行目付近がプロバイダーの設備、その先がバックボーンや相手側のネットワークです。「応答なし」の行があっても、その先で応答が返っていれば経路は通っています。途中のルーターが Time Exceeded を返さない設定になっているだけのことが多いためです。

方法3:Record Route で通ったルーターを記録する

IPv4 には、通過したルーターに自分のアドレスを書き込んでもらう Record Route というオプションがあります。Linux では -R、Windows では -r に記録数を付けて使います。

# Linux
ping -c 1 -R example.com
rem Windows(記録数は 1〜9)
ping -n 1 -r 9 example.com

1回の ping で経路が表示されるので便利そうに見えますが、制約が大きいオプションです。IP ヘッダーのオプション領域が小さいため記録できるのは最大 9 か所までで、それより遠い区間は分かりません。また、多くのルーターやファイアウォールは IP オプション付きのパケットを無視したり破棄したりするため、インターネット越しではほとんど結果が得られないことがあります。社内ネットワークのように経路が短く、機器の設定を把握している環境で補助的に使うものと考えてください。IPv6 には同じ仕組みはありません。

結果を読むときの注意点

ping で描いた経路は、次の点を踏まえて読む必要があります。

  • 途中のルーターは Time Exceeded の生成を後回しにすることがあり、途中の行だけ時間が長い、または応答がないのは、その区間が遅いことを意味しない。判断は目的地の応答時間と損失で行う
  • 行きと帰りの経路は異なることがある。表示されるのは行きの経路のみ
  • 複数の回線に分散させる構成(ECMP など)では、送るたびに経路が変わり、同じ TTL で別のアドレスが返ることがある
  • ICMP を遮断している環境では、途中も目的地も応答しないことがある。その場合は TCP を使う traceroute や mtr の TCP モードを検討する
  • 調べるのは自分が管理するサーバーや、通信に問題が出ている宛先に限り、短時間に大量のパケットを送らない

普段の調査は traceroute や mtr に任せる

TTL を変えながら ping を送る方法は、仕組みの理解や、ツールが入っていない環境での応急的な調査に向いています。日常の経路調査では、同じ原理を自動化した traceroute(Windows では tracert)や、各区間の損失と遅延を継続的に集計する mtr のほうが効率的です。Linux では root 権限なしで使える tracepath もあります。ツールの有無やオプションは OS やディストリビューションのバージョンで異なるため(2026年10月現在)、man ping や ping /? で手元の環境のオプションを確認してから使ってください。

まとめ

  • ping 自体は経路を表示しないが、TTL を1ずつ増やして送ると、途中のルーターの応答から経路を描ける
  • TTL の指定は Linux が -t、macOS が -m、Windows が -i と異なる
  • 応答の ttl 値から、帰りのホップ数をおおよそ見積もれる
  • Record Route は最大 9 か所までで、インターネット越しでは結果が得られないことが多い
  • 途中の「応答なし」や遅延は、その区間の不調を意味しないことがある。目的地の結果で判断する
  • 日常の調査は traceroute や mtr を使い、ping の手作業は仕組みの確認や補助に使う

お気軽にご相談ください

お見積りへ お問い合わせへ
▲