跟蹤路由 Tracert

2022-01-13 23:26:32 字數 4386 閱讀 9476

tracert(跟蹤路由)是路由跟蹤實用程式,用於確定 ip 資料報訪問目標所採取的路徑。tracert 命令用 ip 生存時間 (ttl) 欄位和 icmp 錯誤訊息來確定從乙個主機到網路上其他主機的路由。

tracert 工作原理

通過向目標傳送不同 ip 生存時間 (ttl) 值的「internet 控制訊息協議 (icmp)」回應資料報,tracert 診斷程式確定到目標所採取的路由。要求路徑上的每個路由器在**資料報之前至少將資料報上的 ttl 遞減 1。資料報上的 ttl 減為 0 時,路由器應該將「icmp 已超時」的訊息發回源系統。

tracert 先傳送 ttl 為 1 的回應資料報,並在隨後的每次傳送過程將 ttl 遞增 1,直到目標響應或 ttl 達到最大值,從而確定路由。通過檢查中間路由器發回的「icmp 已超時」的訊息確定路由。某些路由器不經詢問直接丟棄 ttl 過期的資料報,這在 tracert 實用程式中看不到。

tracert 命令按順序列印出返回「icmp 已超時」訊息的路徑中的近端路由器介面列表。如果使用 -d 選項,則 tracert 實用程式不在每個 ip 位址上查詢 dns。

在下例中,資料報必須通過兩個路由器(10.0.0.1 和 192.168.0.1)才能到達主機 172.16.0.99。主機的預設閘道器是 10.0.0.1,192.168.0.0 網路上的路由器的 ip 位址是 192.168.0.1。

c:\>tracert 172.16.0.99 -d

tracing route to 172.16.0.99 over a maximum of 30 hops

1 2s 3s 2s 10,0.0,1

2 75 ms 83 ms 88 ms 192.168.0.1

3 73 ms 79 ms 93 ms 172.16.0.99

trace complete.

用 tracert 解決問題

可以使用 tracert 命令確定資料報在網路上的停止位置。下例中,預設閘道器確定 192.168.10.99 主機沒有有效路徑。這可能是路由器配置的問題,或者是 192.168.10.0 網路不存在(錯誤的 ip 位址)。

c:\>tracert 192.168.10.99

tracing route to 192.168.10.99 over a maximum of 30 hops

1 10.0.0.1 reports:destination net unreachable.

trace complete.

tracert 實用程式對於解決大網路問題非常有用,此時可以採取幾條路徑到達同乙個點。

tracert 命令列選項

tracert 命令支援多種選項,如下表所示。

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name

選項描述

-d指定不將 ip 位址解析到主機名稱。

-h maximum_hops

指定躍點數以跟蹤到稱為 target_name 的主機的路由。

-j host-list

指定 tracert 實用程式資料報所採用路徑中的路由器介面列表。

-w timeout

等待 timeout 為每次回覆所指定的毫秒數。

target_name

目標主機的名稱或 ip 位址。

當我們不能通過網路訪問目的裝置時,網路管理員就需要判斷是**出了問題。問題不僅僅會出現在最終目的裝置,也可能出現在**資料報的中間路由器。

有3種方式用來探測乙個資料報從源點到目的地經過了哪些中轉路由器,這3種方式分別是:基於記錄路由選項的路由探測,基於udp協議的路由探測,基於icmp echo request的路由探測。三種方式都可以用來探測乙個資料報到達目的裝置經過了哪些中間路由器,但實現的過程卻截然不同。

注意:理解這些探測方法的關鍵要領是熟悉ip資料報和icmp資料報的格式。

1、基於record route options(記錄路由選項)的路由探測

這種方式是我們最容易理解的探測路由方式。比如,我想知道一封從上海發出,目的地是北京的信,中間經過了多少個郵局**。這個過程很簡單,只要中間郵局在**的信件扣上他們自己的郵戳,這封信到達目的地北京後,北京再把這封信回郵給我,當我收到回信後,只要看信上的郵戳,便知道中間經過哪些郵局。

ping -r(大寫) www.aorb.org命令便可實現這種記錄中間路由的功能,返回的結果是中間路由器的ip位址。

1) ping命令發出的是型別為8的icmp資料報,當使用ping -r時,這個型別為8的icmp資料報被裝在乙個ip資料報裡,ip資料報的options(選項)字段預留出給中間路由器扣戳的地方,這個地方不太大,只能容納9臺中轉路由器的ip位址。

2) 當這個資料報被傳送端送出後,每經過乙個中轉路由器,中轉路由器的ip軟體便會在此ip資料報的選項欄位中加入一條這個中轉路由器的ip位址。

3) 當這個資料報到達目的地時(如,www.aorb.org),目的裝置便會生成一條型別為0的icmp資料報,這個icmp資料報被封裝在乙個新的ip資料報裡,新ip資料報的options欄位中拷貝了剛才收到的ip資料報中的options欄位。

4) 當這個新ip資料報回送到源傳送端時,您便會在螢幕上看見一些中間路由器的ip位址了。

2、基於udp協議的路由探測

tracert是windows下常用的命令列工具,unix下與之對應的是traceroute。若想知道自己的電腦到www.aorb.org 經過了多少個路由器,可在命令列下輸入tracert www.aorb.org進行探測,返回結果也許會與ping -r相同,但它是以另一種方式實現的。這種方式並沒有像record route options探測技術中使用ip協議包的options欄位,而是利用了ip協議包中的ttl欄位。

基本思路是這樣的:www.aorb.org這台伺服器即賣茄子(提供http服務),也賣黃瓜(提供ftp服務),但不賣土豆(未監聽的udp埠)。有位買家,為了知道一封信到達蔬菜**商www.aorb.org中間需要經過幾個郵局(路由器),於是寫信給www.aorb.org詢問土豆的**。

第一步,買家在信封的ttl位置寫上數字1,當這封信到達與自己相鄰的第乙個郵局時,郵局的人把ttl值減1,於是ttl為0,郵局章程規定,把ttl值為0的信丟到垃圾桶裡,然後給買家發一封名曰超時的信,信上寫了丟信郵局的名字,以告訴買家信被誰丟掉了。

第二步,買家在信封的ttl位置寫上數字2,當這封信到達與自己相鄰的第乙個郵局時,郵局的人把ttl值減1,現在ttl值為1,郵局章程規定, ttl值不為0的資料報需要繼續**給下乙個郵局,於是這封信又被**到了下乙個郵局。當下乙個郵局收到這封信時,郵局的人把ttl值減1,於是ttl為 0,郵局章程規定,把ttl值為0的信丟到垃圾桶裡,然後給買家發一封名曰超時的信,信上寫了丟信郵局的名字,以告訴買家信被誰丟掉了。

通過第一步,買家知道了第乙個中轉路由器。通過第二步,買家知道了第二個中轉路由器。那麼買家只需要不斷的把ttl值加1,便可根據如上步驟探測出中間經過了哪些路由器。

第三步,我們假設中間只經過兩個郵局信便到達目的地了。接著第二步,買家選在把ttl值設定為3,當這封信到達與自己相鄰的第乙個郵局時,郵局的人把ttl值減1,現在ttl值為2,郵局章程規定,ttl值不為0的資料報需要繼續**給下乙個郵局,於是這封信又被**到了下乙個郵局。當下乙個郵局收到這封信時,郵局的人把ttl值減1,於是ttl為1,郵局章程規定,ttl值不為0的資料報需要繼續**給下乙個郵局,於是這封信又被**到了下乙個郵局,但下乙個郵局已經就是最終目的地www.aorb.org了,儘管www.aorb.org把ttl減1的結果為0,但卻不會丟棄它,因為目的地就是 www.aorb.org呀!於是www.aorb.org把這個ip層郵遞員送來的信交付給負責賣土豆人,但我們開始說了,www.aorb.org並不賣土豆,於是就回送乙個名曰終點不可達(icmp型別為3,**為3)的信給買家。

第四步,當買家收到型別為終點不可達的信時,就不再把那封問土豆**的信上的ttl加1了,因為他已經知道了到達目的地的全部路由。

具體實現過程可以用下面兩幅圖來理解

3、基於icmp echo request的路由探測

這種探測方式與基於udp協議的路由探測的實現步驟一樣,但傳送端送出的不是乙個udp資料報,而傳送的是乙個icmp型別為8的echo request(回顯請求)資料報文。與基於udp協議的路由探測技術一樣,每次傳送端都會把ttl值加1,每個中轉路由器都對ttl值減1,如果為0,便丟棄後給傳送端傳送乙個超時報文,若不為0,則繼續**給下一跳。唯一不同的是,當這個資料報到達最終目的節點時,由於傳送端傳送的是echo request報文,所以接收端就會相應乙個icmp型別為0的資料報文。這樣,當傳送端收到icmp型別為0的資料報文時,就知道了全部路由已經查詢完畢,終止繼續探測。

其他pathping

pathping是tracert和ping的混合體。命令列下輸入pathping www.aorb.org,返回兩部分內容,第一部分顯示到達目的地經過了哪些路由,第二部分顯示了路徑中每個路由器上資料報丟失方面的資訊。

路由跟蹤tracert

tracert命令 如果我們要測試某乙個ip都經過哪些路由,用trcert命令即可,這是dos下的乙個基本網路命令,具體使用方法 1,在windows系統下,開啟 執行 輸入 cmd 在彈出的dos視窗中輸入 tracert ip domain 2,ip是您要檢視的ip,網域名稱就是您的網域名稱 這...

C 路由跟蹤tracert

using system using system.threading using system.diagnostics using system.text.regularexpressions using system.net using system.net.networkinformation...

tracert 路由跟蹤程式

c users administrator tracert 10.0.0.1 通過最多 30 個躍點跟蹤到 10.0.0.1 的路由 1 1 毫秒 1 ms 3 ms 192.168.1.1 2 1 毫秒 1 ms 1 ms 10.0.0.1 跟蹤完成。c users administrator t...