如何用Traceroute追蹤網絡路徑?
Traceroute(Windows 上稱 tracert)是逐跳列出封包由本機到目的地所經路由器的診斷工具:它顯示路徑上每一跳的地址與往返延遲,讓工程師知道「封包在哪裏斷、在哪裏慢」。與只回答「通或不通」的 ping 相比,Traceroute 能把故障定位到具體節點。本頁講解它借助 TTL 與 ICMP 的工作原理、各系統的使用方法、輸出的正確解讀,以及公司網絡排障的實戰流程。
工作原理:TTL 與 ICMP 超時
每個 IP 封包標頭都有一個 TTL(Time To Live)欄位,路由器每轉發一次便把它減一;當 TTL 減至零,路由器丟棄封包,並根據 RFC 792(ICMP 協定標準)向來源發出 Time Exceeded(類型 11)訊息。TTL 的原意是防止封包在路由迴路中永遠打轉,Traceroute 卻反過來利用它做測量。
根據 Wikipedia 對 Traceroute 的介紹,工具先發出 TTL=1 的探測封包:封包在第一跳路由器已「壽終」,該路由器回覆超時訊息,其來源地址便是第一跳的身份;接着發 TTL=2、TTL=3……每次多走一跳,逐一收集沿途路由器的地址與往返時間,直至封包成功到達目的地——目的主機回覆的不再是超時訊息,而是 Echo Reply(ICMP 探測)或 Port Unreachable(UDP 探測),工具便知道路徑已完整。每一跳預設發三個探測封包,因此輸出每行有三個延遲數字。
各系統的使用方法
| 系統 | 指令 | 預設探測方式 | 常用參數 |
| Windows | tracert www.example.com | ICMP Echo Request | -d 不解析主機名(加快)、-h 最大跳數 |
| macOS/Linux | traceroute www.example.com | UDP 高埠號 | -I 改用 ICMP、-T 改用 TCP、-n 不解析主機名 |
| Linux(另選) | mtr www.example.com | ICMP,持續統計 | 結合 ping 與 traceroute,長時間統計每跳遺失率 |
| 網絡設備 | traceroute(交換機/路由器 CLI) | 視乎廠商 | 可指定來源接口,測試特定路徑 |
由於中途防火牆對 ICMP、UDP、TCP 的放行政策各異,同一路徑用不同探測方式可能得出不同結果:ICMP 全被攔截時,改以 TCP 443 探測(模擬正常網頁流量)往往能走得更遠。間歇性問題則建議用 mtr 長時間統計,比單次 Traceroute 更能反映每跳的遺失率。ICMP 的基礎概念可參考什麼是 ICMP 與 Ping。
公司網絡排障實戰流程
- 確認問題——先 ping 目的地與預設閘道,確認故障存在並記下遺失率與延遲。
- 內網先行——traceroute 目的地:第一跳(預設閘道)已不通,問題在內網交換、VLAN 或閘道設備,轉向內網排查。
- 判斷出口——斷點在公司出口後首一兩跳,多屬寬頻線路或供應商邊緣問題;把輸出截圖連同時間一併向供應商報障,可大幅加快跟進。
- 對照測試——以流動數據熱點再跑一次:兩邊同樣有問題多屬目的地或上游網絡;只有公司線路有問題則集中在本地出口。
- 持續監察——間歇性問題用 mtr 長時間統計每跳遺失率,鎖定不穩定節點後再跟進。
香港常見場景:商廈辦公室存取內地或海外伺服器慢,Traceroute 可以分辨是本地出口擁塞還是跨境段延遲;屋苑監控平台連線不穩,則可從管理處到雲平台逐跳定位。把結果保存下來,是與網絡供應商溝通時最有力的證據。