複製鏈接
請複製以下鏈接發送給好友

traceroute

鎖定
traceroute (Windows 系統下是tracert) 命令利用ICMP 協議定位您的計算機和目標計算機之間的所有路由器。TTL 值可以反映數據包經過的路由器或網關的數量,通過操縱獨立ICMP 呼叫報文的TTL 值和觀察該報文被拋棄的返回信息,traceroute命令能夠遍歷到數據包傳輸路徑上的所有路由器。
中文名
路由追蹤
外文名
traceroute
作    用
定位到目標主機之間的所有路由器
實現方案
基於UDP實現和基於ICMP實現
途    徑
通過用於異構網絡的TCP/IP協議進行網間通信
基本用法
traceroute hostname

traceroute原理

程序利用增加存活時間(TTL)值來實現其功能。每當數據包經過一個路由器,其存活時間就會減1。當其存活時間是0時,主機便取消數據包,並傳送一個ICMP TTL數據包給原數據包的發出者。
程序發出的首3個數據包TTL值是1,之後3個是2,如此類推,它便得到一連串數據包路徑。注意IP不保證每個數據包走的路徑都一樣。 [1] 

traceroute定義

traceroute詳細解釋

它由遍佈全球的幾萬局域網和數百萬台計算機組成,並通過用於異構網絡的TCP/IP協議進行網間通信。互聯網中,信息的傳送是通過網中許多段的傳輸介質和設備(路由器,交換機,服務器,網關等等)從一端到達另一端。每一個連接在Internet上的設備,如主機、路由器、接入服務器等一般情況下都會有一個獨立的IP地址。通過Traceroute我們可以知道信息從你的計算機到互聯網另一端的主機是走的什麼路徑。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來説大部分時候所走的路由是相同的。UNIX系統中,我們稱之為Traceroute,MS Windows中為Tracert。 Traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備Traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其IP地址。 [1] 

traceroute參數説明

tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
該診斷實用程序通過向目的地發送具有不同生存時間 (TTL) 的 Internet 控制信息協議 (ICMP) 迴應報文,以確定至目的地的路由。路徑上的每個路由器都要在轉發該 ICMP 迴應報文之前將其 TTL 值至少減 1,因此 TTL 是有效的跳轉計數。當報文的 TTL 值減少到 0 時,路由器向源系統發回 ICMP 超時信息。通過發送 TTL 為 1 的第一個迴應報文並且在隨後的發送中每次將 TTL 值加 1,直到目標響應或達到最大 TTL 值,Tracert 可以確定路由。通過檢查中間路由器發發回的 ICMP 超時 (ime Exceeded) 信息,可以確定路由器。注意,有些路由器“安靜”地丟棄生存時間 (TLS) 過期的報文並且對 tracert 無效。
參數
-d
指定不對計算機名解析地址。
-h maximum_hops
指定查找目標的跳轉的最大數目。
-j computer-list
指定在 computer-list 中鬆散源路由
-w timeout
等待由 timeout 對每個應答指定的毫秒數。
target_name
目標計算機的名稱。

traceroute工作原理

Traceroute最簡單的基本用法是:traceroute hostname
Traceroute程序的設計是利用ICMP及IP header的TTL(Time To Live)欄位(field)。首先,traceroute送出一個TTL是1的IP datagram(其實,每次送出的為3個40字節的包,包括源地址,目的地址和包發出的時間標籤)到目的地,當路徑上的第一個路由器(router)收到這個datagram時,它將TTL減1。此時,TTL變為0了,所以該路由器會將此datagram丟掉,並送回一個「ICMP time exceeded」消息(包括髮IP包的源地址,IP包的所有內容及路由器的IP地址),traceroute 收到這個消息後,便知道這個路由器存在於這個路徑上,接着traceroute 再送出另一個TTL是2 的datagram,發現第2 個路由器...... traceroute 每次將送出的datagram的TTL 加1來發現另一個路由器,這個重複的動作一直持續到某個datagram 抵達目的地。當datagram到達目的地後,該主機並不會送回ICMP time exceeded消息,因為它已是目的地了,那麼traceroute如何得知目的地到達了呢?
Traceroute在送出UDP datagrams到目的地時,它所選擇送達的port number 是一個一般應用程序都不會用的號碼(30000 以上),所以當此UDP datagram 到達目的地後該主機會送回一個「ICMP port unreachable」的消息,而當traceroute 收到這個消息時,便知道目的地已經到達了。所以traceroute 在Server端也是沒有所謂的Daemon 程式。
Traceroute提取發 ICMP TTL到期消息設備的IP地址並作域名解析。每次 ,Traceroute都打印出一系列數據,包括所經過的路由設備的域名及 IP地址,三個包每次來回所花時間。
Traceroute 有一個固定的時間等待響應(ICMP TTL到期消息)。如果這個時間過了,它將打印出一系列的*號表明:在這個路徑上,這個設備不能在給定的時間內發出ICMP TTL到期消息的響應。然後,Traceroute給TTL記數器加1,繼續進行。 [2] 

traceroute網關

一般使用Traceroute(或者是Tracert)是基於一台主機的,但是通常您只能知道以手邊的主機為源地址到互聯網絡上任意一台在線的主機的路由連接質量以及數據傳輸效率的情況,而使用基於WEB的方式,只要一台主機安裝了特定的CGI程序,用户就可以通過這台主機運行相關的程序,執行Traceroute的功能。這台主機我們把它叫做Traceroute網關。Traceroute網關可以幫助用户瞭解網絡的物理與邏輯連接的拓撲情況以及數據傳輸的效率。如果這種網關足夠多,我們就可以方便地瞭解到各主機之間連接的情況了。

traceroute功能

Traceroute最早是由Van Jacobson在1988寫出的小程序。當時主要是解決他自己碰到的一些網絡的問題。Traceroute是一個正確理解IP網絡並瞭解路由原理的重要工具。他們對負責網絡工程技術與系統管理的Webmaster是一個使用方便的程序。
對ISP而言,設立Traceroute網關,將使網絡服務提供商幫助用户建立並維持對服務商服務質量的信心。服務質量高的ISP可以通過設立Traceroute網關,使用户瞭解其與網絡連接以及數據傳輸的效率。當然,基礎設施差,服務質量低的ISP是比較害怕提供這種服務。因為,這樣用户可以使用這一工具瞭解服務商網絡連接情況。
在一台主機安裝了相關的Traceroute的CGI程序後,您可以輸入相應的目的主機的IP地址或者名字,就可以得到相關的數據。

traceroute命令參數

Traceroute的用法為: Traceroute [options] [data size]
[options]的內容有:
[-n]:顯示的地址是用數字表示而不是符號
[-v]:長輸出
[-p]:UDP端口設置(缺省為33434)
[-q]:設置TTL測試數目(缺省為3)
[-t]:設置測包的服務類型
[data size]:每次測試包的數據字節長度(缺省為38)

traceroute應用

Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。前面説到,儘管ping工具也可以進行偵測,但是,因為ip頭的限制,ping不能完全的記錄下所經過的路由器。所以Traceroute正好就填補了這個缺憾。
Traceroute收到目的主機的IP後,首先給目的主機發送一個TTL=1的UDP數據包,而經過的第一個路由器收到這個數據包以後,就自動把TTL減1,而TTL變為0以後,路由器就把這個包給拋棄了,並同時產生 一個主機不可達的ICMP數據報給主機。主機收到這個數據報以後再發一個TTL=2的UDP數據報給目的主機,然後刺激第二個路由器給主機發ICMP數據 報。如此往復直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。從而避開了ip頭只能記錄有限路由IP的問題。 [2] 
參考資料
  • 1.    Joe Casad 著 井中月 譯 .TCP/IP入門經典: 人民郵電出版社,2009
  • 2.    謝希仁.計算機網絡(第五版):電子工業出版社,2008.