pingとtracerouteの仕組みを図解で説明 〜ICMPとTTLの役割〜
「ping」と「traceroute」の仕組みを説明できますか?
ネットワークがつながらない時に打つコマンド、くらいの理解の人も多いと思います。
どちらもICMPというプロトコルを使っていて、tracerouteはさらにTTLという値をうまく使っています。
pingとtracerouteの仕組みについて、図を使って説明していきます。

ICMPとは?
ICMP(Internet Control Message Protocol)は、ネットワークの状態やエラーを伝えるためのプロトコルです。
IPは、データが届かなくても自分では知らせてくれません。
そこで、ICMPが「宛先に届かなかった」「途中で破棄した」といった情報を伝えます。
pingとtracerouteは、このICMPを利用しています。
pingの仕組み
pingは、相手に届くかどうかと、応答にかかる時間を確認するコマンドです。

① パソコンが相手にICMPの エコー要求を送る
② 相手が受け取り、ICMPの エコー応答を返す
③ パソコンが、応答にかかった時間を表示する
Windowsでは、コマンドプロンプトで次のように入力します。
ping 宛先のIPアドレスまたはドメイン名
応答が返ってくれば、相手までの通信ができていることが分かります。
「要求がタイムアウトしました」と表示された時は、決められた時間内に応答が返ってこなかったことを示します。
ただし、pingが返らないからといって、相手が止まっているとは限りません。
ファイアウォールの設定で、pingを止めているサーバもあるからです。
TTLとは?
tracerouteを理解するには、TTLを知っておく必要があります。
TTL(Time To Live)は、IPパケットの寿命を示す値です。
ルーターを通るたびに、TTLの値が1ずつ減っていきます。

TTLが0になると、ルーターはそのパケットを破棄します。
そして、ICMPの 時間超過というメッセージを送信元に返します。
この仕組みがあるので、経路の設定ミスでパケットが同じ場所を回り続けても、いつかは消えるようになっています。
tracerouteの仕組み
tracerouteは、宛先までに通過するルーターを調べるコマンドです。
Windowsでは「tracert」というコマンドです。
TTLを1から順に増やしながらパケットを送ることで、途中の機器を調べます。

① TTLを1にして送ると、1台目のルーターが時間超過を返す
② TTLを2にして送ると、2台目のルーターが時間超過を返す
③ TTLを増やしていき、宛先から応答が返ったら終了する
時間超過のメッセージの送信元を見れば、途中のルーターのIPアドレスが分かります。
tracert 宛先のIPアドレスまたはドメイン名
途中で「*」と表示されることがありますが、そのルーターが応答を返さない設定になっている場合もあります。
なお、Windowsのtracertはエコー要求を使いますが、LinuxやmacOSのtracerouteは標準ではUDPを使います。
通信トラブルの切り分け
pingは、通信トラブルの原因を絞り込む時に役立ちます。
近いところから順に試すと、どこまで通信できているかが分かります。

① 127.0.0.1にpingして、自分のパソコンのTCP/IPの動作を確認する
② 自分のIPアドレスにpingして、ネットワークの設定を確認する
③ デフォルトゲートウェイにpingして、LANの中の接続を確認する
④ 外部のIPアドレスにpingして、ルーターより先の接続を確認する
⑤ ドメイン名にpingして、DNSの名前解決を確認する
例えば、④は成功して⑤だけ失敗するなら、DNSに原因がありそうだと分かります。
DNSについては、DNSの仕組みを図解で説明の記事で説明しています。
まとめ
今回はpingとtracerouteの仕組みについて説明しました。
pingは、ICMPのエコー要求と応答で、相手に届くかを確認します。
tracerouteは、TTLを1ずつ増やして、途中のルーターを調べます。
ネットワークのトラブルの時に最初に使うコマンドなので、仕組みと合わせて覚えておきましょう。
自分のパソコンでも簡単に試せるので、ぜひ実行してみてください。

