「なぜWindowsのtracertは少し違うの?」現場のシニアエンジニアが教えるルート追跡の裏側
こんにちは。ネットワークオペレーションセンター(NOC)で、深夜の障害対応に追われながらも、パケットの流れる光景にロマンを感じている現場エンジニアです。
皆さんは普段、ネットワークの調子が悪いとき、真っ先に何をしますか? そう、ping で疎通を確認し、それでもダメなら traceroute(Windowsなら tracert)で「どこで止まっているか」を確認しますよね。
でも、ふと疑問に思ったことはありませんか?
「Linuxの traceroute はUDPを使うのに、Windowsの tracert はなぜかICMPを使うって聞くけど、結局何が違うの?」
今日は、この「教科書には載っていないけれど、現場では常識」な挙動の秘密を、郵便配達に例えて紐解いていきましょう。
—
郵便配達でイメージする「パケットの旅」
ネットワークの疎通確認は、遠方の友人に手紙(パケット)を送る作業に似ています。
1. ping: 「届いてる?」と確認するだけの往復書簡。
2. traceroute: 経由する全ての郵便局(ルーター)に対して、「お前を通ったぞ、名乗り出ろ!」と記録を残させる旅。
ここで重要になるのが、パケットに付いている「寿命(TTL:Time To Live)」というスタンプです。ルーターを通るたびにこのスタンプが「あと1回」「あと0回」と減っていき、0になった瞬間にルーターは「寿命が尽きたので捨てます」と送信元に報告します。この「捨てた報告」を利用して、どこを通ったか特定するのがルート追跡の基本です。
—
Linux(UDP)とWindows(ICMP)の「手紙の中身」
ここからが本題です。Linux系とWindows系で、この「手紙(パケット)」の中身が違います。
Linuxの流儀:UDPを使う
Linuxの traceroute は、宛先に対して「UDP」という形式の手紙を送ります。しかも、普通の通信では使われないような「非常に大きなポート番号」を指定して送ります。
- なぜ?: 宛先のサーバーに「そんなポート使ってないよ!」と怒らせて、「ICMP Port Unreachable(到達不能)」というエラーを返させるためです。これを合図に「ゴールに到着した!」と判定します。
Windowsの流儀:ICMPを使う
一方でWindowsの tracert は、最初から最後まで一貫して「ICMP Echo Request」(いわゆるpingと同じ形式)を使います。
- なぜ?: Windowsは、宛先までの経路を確認する際に「pingを少し特殊な方法で連続して送る」というアプローチを取ります。
—
現場で遭遇する「Windows特有の壁」
この違い、実は現場では結構重要なんです。なぜなら、「セキュリティ設定」の壁にぶつかる確率が変わるからです。
多くの企業ネットワークやクラウド環境では、セキュリティ対策として「ping(ICMP)を拒否する設定」がよく行われています。
- LinuxのUDP方式: 途中のルーターは「寿命が来た」というエラーをICMPで返してくれますが、ゴール地点では「ポート不一致」という別のエラーを返します。そのため、途中の経路までは特定しやすい。
- WindowsのICMP方式: そもそもping自体がブロックされていると、途中のルーターからの応答すら返ってこない、あるいはゴールで完全に無視されるという現象が起きがちです。
「Linuxだとルートが見えるのに、Windowsからだと途中で星印(*)ばかりになる!」という経験、あなたも一度は味わうかもしれません。それはWindowsがICMPという「封筒」を使っているせいで、セキュリティフィルターに引っかかりやすいからなのです。
—
実践:現場で使うコマンドの使い分け
Windowsのコマンドプロンプトで確認する際は、以下のようにシンプルに実行します。
:: 宛先へのルートを追跡する(Windows標準)
tracert -d 8.8.8.8
:: -dオプションをつけることで、IPアドレスの逆引き(名前解決)をスキップします
:: これを付けると、余計なDNS通信が発生せず、結果が早く返ってくるので現場では必須です!
もし、Windows上で「LinuxのようにUDPを使って正確に調査したい」と思った場合は、PowerShellなどで代替ツールを検討するか、素直にLinux環境(WSL2など)を使うのが近道です。
—
最後に:なぜ「違い」を知る必要があるのか
インフラエンジニアの仕事は、単にコマンドを叩くことではありません。「なぜパケットが届かないのか」「なぜこのツールは反応しないのか」という挙動の裏側にあるロジックを想像することです。
「Windowsだから仕方ない」と諦めるのではなく、「ICMPを使っているから、ルーターのファイアウォールで弾かれているのかも?」と一歩踏み込んで推論できる。これこそが、トラブルシューティングの現場で頼られるエンジニアの第一歩です。
皆さんも、明日からは tracert を打つとき、「お、今お前はICMPの封筒で旅をしているんだな」と、パケットの姿を思い浮かべてみてください。ネットワークが、単なる黒い画面の向こう側にある「生き物」に見えてくるはずですよ!
それでは、また次回の現場の知恵袋でお会いしましょう。現場からは以上です!
コメント