なぜ「tracert」は宛先に届くまでの道筋を知っているのか?——郵便配達で読み解くネットワークの旅
現場で障害対応をしていると、「インターネットが重い」「特定のサーバーに繋がらない」という連絡が絶え間なく飛び込んできます。そんな時、駆け出しのエンジニアがまず最初に叩くコマンドが tracert(Windows環境の場合)ですよね。
黒い画面に流れる無機質な数字の羅列。皆さんは、あれが一体「どうやって」宛先までの道筋を突き止めているか、不思議に思ったことはありませんか?
今回は、技術書を読み込んでもピンとこなかった方のために、ネットワークの「郵便配達」という視点から、tracert の知られざる裏側を紐解いていきましょう。
—
1. 宛先までの道のりは「迷路」みたいなもの
ネットワークの世界は、何台ものルーターという「中継地点」を経由してデータが運ばれます。あなたが送った手紙(パケット)が、どのルーターを通って目的地に着くのか。それを可視化するのが tracert の役割です。
しかし、ルーターたちは基本的に「次の宛先」しか知りません。ゴールまでの全体図を知っているルーターなんて、どこにもいないんです。では、どうやって「今、どこを通っているか」を調べるのでしょうか?
TTL(生存時間)という名の「カウントダウンタイマー」
ここで登場するのが、パケットに付いている「TTL(Time To Live)」という小さな数字です。これは、パケットがネットワーク上を彷徨い続けないようにするための「カウントダウンタイマー」のようなもの。
- ルーターを1つ通過するたびに、この数字が「1」減ります。
- 数字が「0」になると、そのパケットは「もう寿命ですね、お疲れ様でした」と破棄されます。
tracert は、この「わざと寿命切れを起こさせる」という、ちょっとずる賢いテクニックを使っているんです。
—
2. 郵便配達員に例える「tracert」の仕組み
想像してみてください。あなたは、遠く離れた友達に手紙を送りたい。でも、どのルートを通るか分からない。そこであなたは、こんな配達員を何人も送り出します。
1. 1人目の配達員:カウントを「1」に設定。「最初のルーターに着いた瞬間、寿命が切れるようにしてね」と頼みます。
2. 最初のルーター:手紙を受け取ると、「あ、寿命が0になった。送り主に『ここ(私)で期限切れですよ』って返事してあげなきゃ」と、あなたに通知を送り返します。
3. 2人目の配達員:カウントを「2」に設定。「2つ目のルーターで寿命が切れるようにしてね」。
4. 2つ目のルーター:同様に、「ここで期限切れです!」とあなたに報告。
こうして、1個目、2個目、3個目……と、わざと途中で「ごめんなさい、寿命切れです」という返事をもらうことで、「あ、今1個目のルーターを通ったな」「次は2個目だな」と、道のりを特定していくのです。これが tracert の正体です。
—
3. Windowsの「tracert」とLinuxの「traceroute」の決定的な違い
実は、Windowsの tracert と、Linuxなどで使われる traceroute は、使っている「手紙の種類」が違います。
- Windows (
tracert):ICMP Echo Request(「届いてますか?」という確認の手紙)を使います。 - Linux (
traceroute): 基本的にUDPやTCPのパケットを使います。
なぜこれが重要かというと、「ファイアウォールのガード」に関係してくるからです。
多くの企業やサーバーでは、セキュリティのために「余計な通信は遮断せよ」というルールがあります。ICMP(pingの仲間)は、セキュリティ上の理由で途中のルーターが返事を返さないように設定されていることがよくあります。そのため、tracert を打っても途中で * * * と表示され、星印ばかりが並ぶ現象が起きるのです。
—
4. 実践!コマンドを叩いてみよう
まずは、お使いのWindowsのコマンドプロンプト(またはPowerShell)を開いて、以下のコマンドを打ってみてください。
:: GoogleのDNSサーバーへの道のりを追跡する
tracert 8.8.8.8
:: オプションをつけて、ホスト名の名前解決をスキップして高速化する(-d)
tracert -d 8.8.8.8
もし、特定の地点で * * * が続く場合は、「そこにあるルーターが、セキュリティ設定で返事を返すのを拒否しているんだな」と判断します。これはネットワークが故障しているわけではなく、単に「沈黙している」だけかもしれません。
よく使うオプション
-h 30:最大ホップ数(経由するルーターの数)を30個までに制限します。-w 1000:タイムアウトまでの待ち時間を1000ミリ秒(1秒)に設定します。
—
最後に:ネットワークは「対話」である
障害対応をしていると、パケットをただのデータとして見てしまいがちですが、実際には一つひとつのパケットが「届いた?」「あ、ここだよ!」と会話を交わしています。
tracert が星印ばかりを返してくる時、それは「道が閉ざされている」のではなく、「誰かが静かに見守っている(フィルタリングしている)」というサインかもしれません。
まずは tracert を使って、パケットがどんな「旅」をしているのかを想像してみてください。その視点を持つだけで、あなたのトラブルシューティングの腕前は、今日から確実に一段階レベルアップするはずです。
それでは、次回の現場でお会いしましょう!
コメント