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:
-d 不要做反向 DNS,輸出比較快、也比較乾淨。
Linux/macOS:
-n 相當於不要解析名稱;-I 改用 ICMP,行為較接近 Windows。部分發行版要 sudo 才能用 ICMP。若系統沒裝,Debian/Ubuntu 可用 sudo apt install traceroute。持續觀察延遲可用 mtr(把 ping 與 traceroute 合成即時表)。
怎麼讀輸出
- 第 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 把原理講完,適合看完動畫後補「為什麼這樣設計」。沒有操作介面,重點在觀念。
相關資料
- Microsoft Learn:tracert
- Cisco:Understand the Ping and Traceroute Commands
- 上一頁:ping 下一頁:nslookup