跟蹤路由(tracert)

跟蹤路由

tracert一般指本詞條

Tracert(跟蹤路由)是路由跟蹤實用程式,用於確定 IP 數據包訪問目標所採取的路徑。Tracert 命令用 IP 生存時間 (TTL) 欄位和 ICMP 錯誤訊息來確定從一個主機到網路上其他主機的路由。

基本介紹

  • 中文名:跟蹤路由
  • 外文名:trace router
  • 用於:確定 IP 數據包訪問
  • 縮寫:Tracert
工作原理,命令,解決問題,命令行,注意,其他,

工作原理

通過向目標傳送不同IP生存時間 (TTL) 值的“Internet控制訊息協定 (ICMP)”回應數據包,Tracert診斷程式確定到目標所採取的路由。要求路徑上的每個路由器在轉發數據包之前至少將數據包上的 TTL 遞減 1。數據包上的 TTL 減為 0 時,路由器應該將“ICMP 已逾時”的訊息發回源系統。
Tracert 先傳送 TTL 為 1 的回應數據包,並在隨後的每次傳送過程將TTL遞增 1,直到目標回響或 TTL 達到最大值,從而確定路由。通過檢查中間路由器發回的“ICMP 已逾時”的訊息確定路由。某些路由器不經詢問直接丟棄 TTL 過期的數據包,這在 Tracert 實用程式中看不到。

命令

tracert為trace router的縮寫。
按順序列印出返回“ICMP 已逾時”訊息的路徑中的近端路由器接口列表。如果使用 -d 選項,則 Tracert 實用程式不在每個 IP 地址上查詢 DNS。
windows xp 環境
在下例中,數據包必須通過兩個路由器(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.
windows 7環境
C:\Users\Administrator>tracert -d 172.168.10.99

解決問題

可以使用 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 [-d] [-h maximum_hops] [-j host-list] [-w timeout][-R] [-S srcaddr] [-4] [-6] target_name
選項:
-d 不將地址解析成主機名。
-h maximum_hops 搜尋目標的最大躍點數。
-j host-list 與主機列表一起的鬆散源路由(僅適用於 IPv4)。
-w timeout 等待每個回復的逾時時間(以毫秒為單位)。
-R 跟蹤往返行程路徑(僅適用於 IPv6)。
-S srcaddr 要使用的源地址(僅適用於 IPv6)。
-4 強制使用 IPv4。
-6 強制使用 IPv6。
target_name 目標主機的名稱或 IP 地址。
當我們不能通過網路訪問目的設備時,網路管理員就需要判斷是哪裡出了問題。問題不僅僅會出現在最終目的設備,也可能出現在轉發數據包的中間路由器
有3種方式用來探測一個數據包從源點到目的地經過了哪些中轉路由器,這3種方式分別是:基於記錄路由選項的路由探測,基於UDP協定的路由探測,基於ICMP Echo Request的路由探測。三種方式都可以用來探測一個數據包到達目的設備經過了哪些中間路由器,但實現的過程卻截然不同。

注意

基於記錄路由選項的路由探測
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位址了。
基於UDP協定的路由探測
tracert是Windows下常用的命令行工具(基於ICMP協定),UNIX下與之對應的是traceroute(基於UDP協定)。若想知道自己的電腦到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的信丟到垃圾桶里,然後給買家發一封名曰逾時的信,信上寫了丟信郵局的名字,以告訴買家信被誰丟掉了。
圖1圖1
通過第一步,買家知道了第一個中轉路由器。通過第二步,買家知道了第二個中轉路由器。那么買家只需要不斷的把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了,因為他已經知道了到達目的地的全部路由。
圖2圖2
基於ICMP Echo Request的路由探測
這種探測方式與基於UDP協定的路由探測的實現步驟一樣,但傳送端送出的不是一個UDP數據包,而傳送的是一個ICMP類型為8的Echo Request(回顯請求)數據報文。與基於UDP協定的路由探測技術一樣,每次傳送端都會把TTL值加1,每箇中轉路由器都對TTL值減1,如果為0,便丟棄後給傳送端傳送一個逾時報文,若不為0,則繼續轉發給下一跳。唯一不同的是,當這個數據報到達最終目的節點時,由於傳送端傳送的是Echo Request報文,所以接收端就會相應一個ICMP類型為0的數據報文。這樣,當傳送端收到ICMP類型為0的數據報文時,就知道了全部路由已經查詢完畢,終止繼續探測。
Dos命令Tracert跟蹤路由詳解
Tracert
通過遞減“存在時間 (TTL)”欄位的值將“Internet 控制訊息協定 (ICMP)回顯請求”或 ICMPv6 訊息傳送給目標可確定到達目標的路徑。路徑將以列表形式顯示,其中包含源主機與目標主機之間路徑中路由器的近側路由器接口。近側接口是距離路徑中的傳送主機最近的路由器的接口。如果使用時不帶參數,tracert 顯示幫助。
語法
tracert [-d] [-h MaximumHops] [-j HostList] [-w Timeout] [-R] [-S SrcAddr] [-4][-6] TargetName
參數
-d
防止 tracert 試圖將中間路由器的 IP地址解析為它們的名稱。這樣可加速顯示 tracert 的結果。
-h MaximumHops
指定搜尋目標(目的)的路徑中存在的躍點的最大數。默認值為 30 個躍點。
-j HostList
指定回顯請求訊息將 IP 報頭中的鬆散源路由選項與 HostList 中指定的中間目標集一起使用。使用鬆散源路由時,連續的中間目標可以由一個或多個路由器分隔開。HostList 中的地址或名稱的最大數量為 9。HostList 是一系列由空格分隔的 IP 地址(用帶點的十進制符號表示)。僅當跟蹤IPv4地址時才使用該參數。
-w Timeout
指定等待“ICMP 已逾時”或“回顯答覆”訊息(對應於要接收的給定“回現請求”訊息)的時間(以毫秒為單位)。如果逾時時間內未收到訊息,則顯示一個星號 (*)。默認的逾時時間為 4000(4 秒)。
-R
指定 IPv6 路由擴展標頭套用來將“回顯請求”訊息傳送到本地主機,使用目標作為中間目標並測試反向路由。
-S
指定在“回顯請求”訊息中使用的源地址。僅當跟蹤 IPv6 地址時才使用該參數。
-4
指定 Tracert.exe 只能將 IPv4 用於本跟蹤。
-6
指定 Tracert.exe 只能將 IPv6 用於本跟蹤。
TargetName
指定目標,可以是 IP 地址或主機名
-?
命令提示符下顯示幫助。
注釋
" 該診斷工具通過向目標傳送具有變化的“生存時間 (TTL)”值的“ICMP 迴響請求”訊息來確定到達目標的路徑。要求路徑上的每個路由器在轉發數據包之前至少將 IP 數據包中的 TTL 遞減 1。這樣,TTL 就成為最大鏈路計數器。數據包上的 TTL 到達 0 時,路由器應該將“ICMP 已逾時”的訊息傳送回源計算機。Tracert 傳送 TTL 為 1 的第一條“迴響請求”訊息,並在隨後的每次傳送過程將 TTL 遞增 1,直到目標回響或躍點達到最大值,從而確定路徑。默認情況下躍點的最大數量是 30,可使用 -h 參數指定。檢查中間路由器返回的“ICMP 逾時”訊息與目標返回的“回顯答覆”訊息可確定路徑。但是,某些路由器不會為其 TTL 值已過期的數據包返回“已逾時”訊息,而且這些路由器對於 tracert 命令不可見。在這種情況下,將為該躍點顯示一行星號 (*)。
" 要跟蹤路徑並為路徑中的每個路由器和鏈路提供網路延遲和數據包丟失信息,請使用pathping命令。
" 只有當“Internet 協定 (TCP/IP)”協定在“網路連線”中安裝為網路適配器屬性的組件時,該命令才可用。
示例
要跟蹤名為 corp7.microsoft.com 的主機的路徑,請鍵入:
tracert corp7.microsoft.com
要跟蹤名為 corp7.microsoft.com 的主機的路徑並防止將每個 IP地址解析為它的名稱,請鍵入:
tracert -d corp7.microsoft.com
要跟蹤名為 corp7.microsoft.com 的主機的路徑並使用鬆散源路由10.12.0.1-10.29.3.1-10.1.44.1,請鍵入:
tracert -j 10.12.0.1 10.29.3.1 10.1.44.1 corp7.microsoft.com
註:在使用 tracert程式測試到達目標節點所經過的路徑時,默認對每個 TTL 值 Traceroute 要測3次。

其他

pathping
pathping是tracert和ping的混合體。命令行下輸入pathpingwww.aorb.org,返回兩部分內容,第一部分顯示到達目的地經過了哪些路由,第二部分顯示了路徑中每個路由器數據包丟失方面的信息。

相關詞條

熱門詞條

聯絡我們