pingとtracerouteの仕組みを図解で説明 〜ICMPとTTLの役割〜

「ping」と「traceroute」の仕組みを説明できますか?

ネットワークがつながらない時に打つコマンド、くらいの理解の人も多いと思います。

どちらもICMPというプロトコルを使っていて、tracerouteはさらにTTLという値をうまく使っています。

pingとtracerouteの仕組みについて、図を使って説明していきます。

pingとtracerouteの全体像の図。pingは相手に届くかを、tracerouteは途中の経路を調べる

ICMPとは?

ICMP(Internet Control Message Protocol)は、ネットワークの状態やエラーを伝えるためのプロトコルです。

IPは、データが届かなくても自分では知らせてくれません。

そこで、ICMPが「宛先に届かなかった」「途中で破棄した」といった情報を伝えます。

pingとtracerouteは、このICMPを利用しています。

pingの仕組み

pingは、相手に届くかどうかと、応答にかかる時間を確認するコマンドです。

pingの流れの図。エコー要求を送り、エコー応答が返り、往復の時間を表示する

① パソコンが相手にICMPの エコー要求を送る

② 相手が受け取り、ICMPの エコー応答を返す

③ パソコンが、応答にかかった時間を表示する

Windowsでは、コマンドプロンプトで次のように入力します。

ping 宛先のIPアドレスまたはドメイン名

応答が返ってくれば、相手までの通信ができていることが分かります。

「要求がタイムアウトしました」と表示された時は、決められた時間内に応答が返ってこなかったことを示します。

ただし、pingが返らないからといって、相手が止まっているとは限りません。

ファイアウォールの設定で、pingを止めているサーバもあるからです。

TTLとは?

tracerouteを理解するには、TTLを知っておく必要があります。

TTL(Time To Live)は、IPパケットの寿命を示す値です。

ルーターを通るたびに、TTLの値が1ずつ減っていきます。

TTLの図。ルーターを通るたびに1減り、0になるとパケットを破棄して送信元に時間超過を返す

TTLが0になると、ルーターはそのパケットを破棄します。

そして、ICMPの 時間超過というメッセージを送信元に返します。

この仕組みがあるので、経路の設定ミスでパケットが同じ場所を回り続けても、いつかは消えるようになっています。

tracerouteの仕組み

tracerouteは、宛先までに通過するルーターを調べるコマンドです。

Windowsでは「tracert」というコマンドです。

TTLを1から順に増やしながらパケットを送ることで、途中の機器を調べます。

tracerouteの流れの図。TTLを1、2、3と増やし、途中のルーターと宛先から返事を受け取る

① TTLを1にして送ると、1台目のルーターが時間超過を返す

② TTLを2にして送ると、2台目のルーターが時間超過を返す

③ TTLを増やしていき、宛先から応答が返ったら終了する

時間超過のメッセージの送信元を見れば、途中のルーターのIPアドレスが分かります。

tracert 宛先のIPアドレスまたはドメイン名

途中で「*」と表示されることがありますが、そのルーターが応答を返さない設定になっている場合もあります。

なお、Windowsのtracertはエコー要求を使いますが、LinuxやmacOSのtracerouteは標準ではUDPを使います。

通信トラブルの切り分け

pingは、通信トラブルの原因を絞り込む時に役立ちます。

近いところから順に試すと、どこまで通信できているかが分かります。

pingによる切り分けの表。127.0.0.1から順に、近いところから確認する

① 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ずつ増やして、途中のルーターを調べます。

ネットワークのトラブルの時に最初に使うコマンドなので、仕組みと合わせて覚えておきましょう。

自分のパソコンでも簡単に試せるので、ぜひ実行してみてください。