Traceroute
此條目沒有列出任何參考或來源。 (2021年1月8日) |
traceroute,Linux系統稱為tracepath,Windows系統稱為tracert,是一種電腦網路工具。它可顯示封包在IP網路經過的路由器的IP位址。
原理
程式是利用增加存活時間(TTL)值來實現其功能的。每當封包經過一個路由器,其存活時間就會減1。當其存活時間是0時,主機便取消封包,並傳送一個ICMP TTL封包給原封包的發出者。
程式發出的首3個封包TTL值是1,之後3個是2,如此類推,它便得到一連串封包路徑。注意IP不保證每個封包走的路徑都一樣。
實現
主叫方首先發出 TTL=1 的封包,第一個路由器將 TTL 減1得0後就不再繼續轉發此封包,而是返回一個 ICMP 逾時報文,主叫方從逾時報文中即可提取出封包所經過的第一個閘道器位址。然後又發出一個 TTL=2 的 ICMP 封包,可獲得第二個閘道器位址,依次遞增 TTL 便獲取了沿途所有閘道器位址。
需要注意的是,並不是所有閘道器都會如實返回 ICMP 超時報文。出於安全性考慮,大多數防火墻以及啓用了防火墻功能的路由器預設組態為不返回各種 ICMP 報文,其餘路由器或交換機也可被管理員主動修改組態變為不返回 ICMP 報文。因此 Traceroute 程式不一定能拿全所有的沿途閘道器位址。所以,當某個 TTL 值的封包得不到響應時,並不能停止這一追蹤過程,程式仍然會把 TTL 遞增而發出下一個封包。一直達到預設或用參數指定的追蹤限制(maximum_hops)才結束追蹤。
依據上述原理,利用了 UDP 封包的 Traceroute 程式在封包到達真正的目的主機時,就可能因為該主機沒有提供 UDP 服務而簡單將封包拋棄,並不返回任何資訊。爲了解決這個問題,Traceroute 故意使用了一個大於 30000 的埠號,因 UDP 協定規定埠號必須小於 30000[來源請求] ,所以目標主機收到封包後唯一能做的事就是返回一個「埠不可達」的 ICMP 報文,於是主叫方就將埠不可達報文當作跟蹤結束的標誌。
除了使用 UDP 外,也有使用TCP代替的實現方法。
例子
自北美西海岸到tools.wmflabs.org(位於維吉尼亞州阿什本)的traceroute:
$ traceroute tools.wmflabs.org traceroute to tools.wmflabs.org (185.15.56.11), 30 hops max, 60 byte packets 1 _gateway (192.168.0.1) 344.557 ms 344.503 ms 344.487 ms [... early hops omitted for privacy] 5 sea-b2-link.telia.net (213.248.66.92) 308.709 ms 309.344 ms 308.181 ms 6 chi-b21-link.telia.net (62.115.117.49) 653.177 ms 138.452 ms 151.218 ms 7 * * nyk-bb2-link.telia.net (62.115.137.58) 158.432 ms 8 ash-bb3-link.telia.net (62.115.141.244) 159.748 ms 159.100 ms * 9 ash-b1-link.telia.net (62.115.143.121) 161.286 ms ash-b1-link.telia.net (62.115.143.79) 161.425 ms ash-b1-link.telia.net (62.115.143.121) 148.632 ms 10 wikimedia-ic-308845-ash-b1.c.telia.net (80.239.132.226) 148.194 ms 172.348 ms 171.331 ms 11 toolforge.org (185.15.56.11) 170.768 ms 204.919 ms 204.886 ms
其中,一些反向DNS中包含短語「ash」,說明資訊正在通過Ashburn。
歷史
根據traceroute的man page:1987年,Steve Deering建議Van Jacobson寫一個這樣的程式。C. Philip Wood、Tim Seaver和Ken Adelman為這個程式提供一些意見或改動。
Windows NT系統有結合ping和traceroute的pathping工具。
外部連結
- 線上traceroute工具(頁面存檔備份,存於網際網路檔案館)
- TRACEROUTE6.net(頁面存檔備份,存於網際網路檔案館): 在亞洲區含IPv4 和 IPv6 的線上traceroute工具
- (英文) Traceroute test
- 線上Traceroute路由器追蹤工具[永久失效連結]