traceroute,Linux系統稱為tracepath,Windows系統稱為tracert,是一種電腦網絡工具。它可顯示封包在IP網絡經過的路由器的IP地址。
此條目沒有列出任何參考或來源。 (2021年1月8日) |
原理
程式是利用增加存活時間(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代替的實現方法。
歷史
根據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路由器追蹤工具[永久失效連結]
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.