Skip to content

建立 2026-09-14 更新 2026-09-14

traceroute

traceroute(Windows 叫 tracert)列出封包從你這台走到目的地經過的每一跳路由器,以及每一跳的來回時間。ping 說「終點沒回」;traceroute 試著回答「大概在哪一跳之後沒了」。

原理(只要這一段)

IP 標頭有 TTL(Time To Live),每過一台路由器就減 1,減到 0 就丟棄,並可回 ICMP Time Exceeded。traceroute 先送 TTL=1,記下第一跳;再送 TTL=2,記下第二跳,直到目的地回應或達到跳數上限。每一跳通常測 3 次,所以會看到三個毫秒值。

Windows 的 tracert 預設用 ICMP。Linux/macOS 的 traceroute 常預設用 UDP(目的連接埠從 33434 起跳)。防火牆策略不同,同一條路徑在兩種系統上可能一個看得到、一個全是 *

基本用法

Windows:

tracert 8.8.8.8
tracert www.google.com
tracert -d 8.8.8.8

-d 不要做反向 DNS,輸出比較快、也比較乾淨。

Linux/macOS:

traceroute 8.8.8.8
traceroute -n 8.8.8.8
traceroute -I 8.8.8.8

-n 相當於不要解析名稱;-I 改用 ICMP,行為較接近 Windows。部分發行版要 sudo 才能用 ICMP。若系統沒裝,Debian/Ubuntu 可用 sudo apt install traceroute。持續觀察延遲可用 mtr(把 ping 與 traceroute 合成即時表)。

怎麼讀輸出

  1    1 ms    1 ms    1 ms  192.168.1.1
  2   12 ms   11 ms   13 ms  isp-router.example.net
  3     *      *      *     Request timed out.
  • 第 1 跳幾乎一定是你家或公司的閘道。
  • 後面幾跳是 ISP 與骨幹。延遲在某一跳突然變大,問題常從那附近開始(也不排除該跳的 ICMP 被降優先,實際轉送仍正常)。
  • * 表示這一跳沒回 ICMP。中間幾跳出現 *、後面卻又出現正常數字,多半是該路由器不回 TTL Exceeded,不一定斷線。若從某一跳起到終點都是 *,比較像路徑或過濾問題。

不要把 traceroute 當成精確地圖

去程與回程路徑可以不同;ICMP 也常被過濾。它是除錯線索,不是合約等級的路徑證明。

教學影片

Traceroute (tracert) Explained(PowerCert Animated Videos)對照 ping 與 traceroute:ping 只看終點,traceroute 對每一跳計時,並示範如何用「從哪一跳開始 timeout」縮小故障範圍。

How does traceroute work? 從 TTL 與 ICMP Time Exceeded 把原理講完,適合看完動畫後補「為什麼這樣設計」。沒有操作介面,重點在觀念。

相關資料