NWエンジニアの勉強ブログ

NWエンジニアです。勉強した内容を気ままにまとめていきます。

tracerouteするときのパケットの種類についてのメモ

tracerouteコマンドを入力した際に使用されるパケットの種類について考える機会があったのでそのメモです。

tracerouteコマンドとtracertコマンドの概要

tracerouteコマンドとtracertコマンドはどちらも宛先に到達するまでの経路を表示してくれるコマンドです。細かい解説は省略しますが、はじめはTTL=1のパケットを送信し、TTLが0になったときに返ってくるICMPタイプ11(Time-to-live exceeded)を受信するたびに、TTLを1ずつ増やしながら、宛先に到達するまで送信を繰り返すことで、宛先までの経路情報を知ることができます。ほとんどのOSではtracerouteコマンドを使用しますが、Windowsではtracertコマンドが使用されます。

LinuxのtracerouteコマンドのデフォルトはUDP

tracerouteコマンドでパケットを送信する際、デフォルトではUDPパケットを使用します。下記の図はLinux(CentOS8)でtracerouteコマンドを入力したときのTTL=1のパケットです。UDPを使用していることがわかります。

linuxでtraceroute(UDP)

なお、-IオプションをつけることでICMPを、-TオプションをつけることでTCP synパケットを使用することができます。

linuxでtraceroute(ICMP)

Mac OSが手元にないため未検証ですが、デフォルトでは同様にUDPを使用するようです。また、オプションによってICMPやTCPに変更することが可能です。

WindowsのtracertコマンドのデフォルトはICMP

tracertコマンドでパケットを送信する際、デフォルトではICMPパケットを使用します。下記の図はWindowsでtracertコマンドを入力したときのTTL=1のパケットです。ICMPを使用していることがわかります。

windowsでtracert

なお、tracerouteコマンドのようにオプションによってUDPTCPパケットに変更することはできません。

Windowsだと経路情報が得られない?

このメモを残すきっかけになった出来事として、ある宛先に対する経路情報を確認していた際に、Mac OSだと問題なく経路情報が得られるのに、Windowsだと経路情報が得られない事象がありました。結論としては、ファイアウォールで行きのICMPがrejectされていたことが理由でした。改めて自分が使う道具(コマンド)の仕組みを、きちんと理解しておくことが重要だなと思いました。

まとめ

  • LinuxMac OSで使用するtracerouteコマンドでは、デフォルトでUDPパケットを使用する。また、オプションによってICMPやTCPに変更することができる。
  • Windowsで使用するtracertコマンドでは、デフォルトでICMPパケットを使用する。