透過回傳封包周遊的一系列躍點,traceroute 指令讓您判斷封包從指定來源抵達目的地所經過的路徑。該實用程式隨主機作業系統(例如,Linux或Microsoft(MS)Windows)以及Cisco IOS®軟體一起提供。
本文檔的讀者應具備以下作業系統之一的基本知識:
Cisco IOS軟體
Linux
Microsoft Windows
本檔案中的資訊適用於以下軟體和硬體版本:
執行Cisco IOS軟體版本12.2(27)的Cisco路由器
運行Red Hat Linux版本9的PC
運行MS Windows 2000的PC
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路正在作用,請確保您已瞭解任何指令可能造成的影響。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
如果在來源裝置(例如主機或充當主機的路由器)上執行traceroute ip-address 命令,則會向目的地傳送IP封包,且傳送的存留時間(TTL)值增加到指定的最大躍點數量。預設情況下為30。通常,通往目的地的路徑中的每個路由器在轉發這些資料包時都會將TTL欄位減少一個單位。當路徑中間的路由器找到TTL = 1的資料包時,它會以網際網路控制訊息通訊協定(ICMP)「超過時間」訊息回應來源。此訊息讓來源知道封包作為一個躍點會經過該特定路由器
在本檔案討論的各種作業系統中實現traceroute命令的方式有一些差異。
初始使用者資料包通訊協定(UDP)資料包探針的TTL設定為1(或最小TTL),這是使用者在延伸型traceroute指令中指定的。初始資料包探測的目標UDP埠設定為33434(或者按照擴展traceroute命令輸出中的指定)。 延伸型traceroute命令是普通traceroute命令的變化形式,允許修改traceroute操作所使用的引數的預設值,例如TTL和目的地連線埠號碼。有關如何使用擴展traceroute命令的詳細資訊,請參閱使用擴展ping和擴展traceroute命令。初始資料包探頭的源UDP埠是隨機的,具有邏輯運算子OR(使用0x8000)(確保最小源埠為0x8000)。 以下步驟說明啟動UDP資料包時發生的情況:
注意:引數是可配置的。此示例從n = 1開始,然後以n = 3結束。
使用TTL = 1、目標UDP埠= 33434和源埠隨機傳送UDP資料包。
UDP目標埠遞增,源UDP埠隨機化,然後傳送第二個資料包。
步驟2最多可重複執行三個探測(或在擴展traceroute命令輸出中所請求的次數)。 對於傳送的每個探測器,您都會收到「TTL超出」消息,該消息用於構建通往目標主機的逐步路徑。
TTL會遞增,如果收到ICMP「超出時間」訊息,此週期會以遞增目的地連線埠號碼重複。您還可以收到以下其中一條消息:
ICMP型別3,代碼3(「目的地無法連線」、「連線埠無法連線」)訊息,表示已到達主機。
「host unreachable」、「net unreachable」、「maximum TTL exceeded」或「timeout」型別的消息,表示已重新傳送探測。
Cisco路由器使用隨機源埠和增量目標埠傳送UDP探測資料包(以區分不同的探測)。 Cisco路由器將ICMP訊息「time exceeded」傳送回收到該UDP/ICMP封包的來源。
Linux traceroute命令類似於Cisco路由器實施。但是,它使用固定的源埠。traceroute命令中的-n選項用於避免對名稱伺服器的請求。
MS Windows tracert命令使用ICMP回應請求資料包而不是UDP資料包作為探測。ICMP回應請求以遞增的TTL啟動,並且執行與Cisco IOS和Linux中所述的相同操作。使用ICMP回應請求資料包的意義在於,最終躍點不依賴於來自目的地主機的ICMP「無法到達」訊息的回應。而是依賴ICMP回應回覆消息。
指令語法為:
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
下表說明命令引數:
引數 | 說明 |
---|---|
-d | 指定不將地址解析為電腦名。 |
-h maximum_hops | 指定要搜尋目標的最大跳數。 |
-j computer-list | 指定沿電腦清單的鬆散源路由。 |
-w超時 | 等待超時為每個回覆指定的毫秒數。 |
目標名稱 | 目標電腦的名稱。 |
在Cisco路由器中,ICMP不可達專案限製為每500毫秒一個封包(作為拒絕服務(DoS)攻擊的防護)。自Cisco IOS軟體版本12.1和更新版本起,此速率值可設定。引入的命令如下:
ip icmp rate-limit unreachable [DF] <1-4294967295 millisecond> no ip icmp rate-limit unreachable [DF] (DF limits rate for code=4)
如需進一步的詳細資訊,請參閱Cisco錯誤ID CSCdp28161(僅限註冊客戶)。
此限制適用於所有ICMP無法到達的聚合速率,如以下輸出所示。如需詳細資訊,請參閱RFC 792 。
type = 3, code 0 = net unreachable; 1 = host unreachable; 2 = protocol unreachable; 3 = port unreachable; 4 = fragmentation needed and DF set; 5 = source route failed.
此限制不會影響其他資料包,如ICMP回應請求或ICMP「超過時間」消息。
以下為網路拓撲的範例:
在三個示例的每個示例中,使用不同的裝置A。從裝置A,對裝置7C執行traceroute 150.1.4.2命令。
在每個示例中,debug ip packet detail命令在裝置11A上運行。
此延伸型traceroute命令範例顯示從Cisco路由器執行traceroute命令時可以變更的選項。在此範例中,所有內容均保留為預設值:
rp-10c-2611#traceroute Protocol [ip]: Target IP address: 150.1.4.2 Source address: 150.1.1.1 Numeric display [n]: Timeout in seconds [3]: Probe count [3]: Minimum Time to Live [1]: Maximum Time to Live [30]: Port Number [33434]: Loose, Strict, Record, Timestamp, Verbose[none]: Type escape sequence to abort. Tracing the route to 150.1.4.2 1 150.1.1.2 4 msec 0 msec 4 msec 2 150.1.2.2 4 msec 4 msec 0 msec 3 150.1.3.2 0 msec 0 msec 4 msec 4 150.1.4.2 4 msec * 0 msec rp-11a-7204# *Dec 29 13:13:57.060: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 13:13:57.060: ICMP type=11, code=0 *Dec 29 13:13:57.064: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 13:13:57.064: ICMP type=11, code=0 *Dec 29 13:13:57.064: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 13:13:57.068: ICMP type=11, code=0
在此偵錯輸出中,裝置11A將ICMP「超過時間」訊息傳送至探查的來源(150.1.1.1)。 這些ICMP消息響應具有TTL = 1的初始探測。裝置11A將TTL降低為零,並以「超過時間」消息進行響應。
附註: 在以下調試輸出中看不到UDP探測器有兩個原因:
裝置11A不是UDP探測的目的裝置。
TTL會減至零,且封包永遠不會路由。因此,偵錯從不會識別封包。
*Dec 29 13:13:57.068: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.068: UDP src=40309, dst=33437 *Dec 29 13:13:57.068: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.068: ICMP type=11, code=0 *Dec 29 13:13:57.072: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.072: UDP src=37277, dst=33438 *Dec 29 13:13:57.072: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.072: ICMP type=11, code=0 *Dec 29 13:13:57.076: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.076: UDP src=36884, dst=33439 *Dec 29 13:13:57.076: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.076: ICMP type=11, code=0
此調試輸出顯示從源150.1.1.1到150.1.4.2的UDP探測。
附註: 在這些探測中,TTL = 2(調試中無法看到這種情況)。 裝置11A將TTL減為1,並將UDP資料包轉發到裝置7A。裝置7A將TTL遞減為零,並使用ICMP「超出時間」消息進行響應。
*Dec 29 13:13:57.080: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.080: UDP src=37479, dst=33440 *Dec 29 13:13:57.080: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.080: ICMP type=11, code=0 *Dec 29 13:13:57.084: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.084: UDP src=40631, dst=33441 *Dec 29 13:13:57.084: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.084: ICMP type=11, code=0 *Dec 29 13:13:57.084: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.088: UDP src=39881, dst=33442 *Dec 29 13:13:57.088: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.088: ICMP type=11, code=0
在此調試輸出中,您將看到接下來的三個UDP探測。這些探測器的TTL為3。裝置11A將TTL遞減為2並將它們轉發到裝置7A。裝置7A將TTL遞減為1並將資料包轉發到裝置7B,裝置7B將TTL遞減為零,並以ICMP「time exceeded」消息做出響應。
*Dec 29 13:13:57.088: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.088: UDP src=39217, dst=33443 *Dec 29 13:13:57.092: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.092: ICMP type=3, code=3 *Dec 29 13:13:57.092: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.096: UDP src=34357, dst=33444 *Dec 29 13:14:00.092: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:14:00.092: UDP src=39587, dst=33445 *Dec 29 13:14:00.092: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:14:00.092: ICMP type=3, code=3
您可以在此調試輸出中看到最後三個UDP探測器。這些探針的原始TTL為4。裝置11A將TTL減小到3,裝置7A將其減小到2,裝置7B將其減小到1。裝置7C會使用ICMP「埠無法訪問」消息進行響應,因為它是探測的目的地。
注意:由於速率限制,裝置7C僅傳送兩個ICMP「埠無法到達」消息。
[root#linux-pc]#traceroute -n 150.1.4.2 traceroute to 150.1.4.2 (150.1.4.2), 30 hops max, 40 byte packets 1. 150.1.1.2 1.140 ms 0.793 ms 0.778 ms 2. 150.1.2.2 2.213 ms 2.105 ms 3.491 ms 1. 150.1.3.2 3.146 ms 2.314 ms 2.347 ms 1. 150.1.4.2 3.579 ms * 2.954 ms rp-11a-7204# *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Jan 2 07:17:27.894: ICMP type=11, code=0 *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Jan 2 07:17:27.894: ICMP type=11, code=0 *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Jan 2 07:17:27.894: ICMP type=11, code=0
在此偵錯輸出中,裝置11A將ICMP「超過時間」訊息傳送至探查的來源(150.1.1.1)。 這些ICMP消息響應具有TTL = 1的初始探測。裝置11A將TTL降低為零,並以「超過時間」消息進行響應。
注意:在以下調試輸出中看不到UDP探測,原因有二:
裝置11A不是UDP探測的目的裝置。
TTL會減至零,且封包永遠不會路由。因此,偵錯從不會識別封包。
*Jan 2 07:17:27.894: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.894: UDP src=33302, dst=33438 *Jan 2 07:17:27.898: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.898: ICMP type=11, code=0 *Jan 2 07:17:27.898: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.898: UDP src=33302, dst=33439 *Jan 2 07:17:27.898: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.898: ICMP type=11, code=0 *Jan 2 07:17:27.898: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.898: UDP src=33302, dst=33440 *Jan 2 07:17:27.902: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.902: ICMP type=11, code=0
注意:在此調試輸出中,現在可以看到來自源150.1.1.1到150.1.4.2的UDP探測。
注意:在這些探測中,TTL = 2(調試時無法看到這種情況)。 裝置11A將TTL減為1,並將UDP資料包轉發到裝置7A。裝置7A將TTL遞減為零,並使用ICMP「超出時間」消息進行響應。
*Jan 2 07:17:27.902: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.902: UDP src=33302, dst=33441 *Jan 2 07:17:27.906: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.906: ICMP type=11, code=0 *Jan 2 07:17:27.906: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.906: UDP src=33302, dst=33442 *Jan 2 07:17:27.910: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.910: ICMP type=11, code=0 *Jan 2 07:17:27.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.910: UDP src=33302, dst=33443 *Jan 2 07:17:27.910: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.910: ICMP type=11, code=0
現在可以在此調試輸出中看到接下來的三個UDP探測器。這些探測器的TTL為3。裝置11A將TTL遞減為2並將它們轉發到裝置7A。裝置7A將TTL遞減為1並將資料包轉發到裝置7B,裝置7B將TTL遞減為零,並以ICMP「time exceeded」消息做出響應。
*Jan 2 07:17:27.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.910: UDP src=33302, dst=33444 *Jan 2 07:17:27.914: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.914: ICMP type=3, code=3 *Jan 2 07:17:27.914: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.914: UDP src=33302, dst=33445 *Jan 2 07:17:32.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:32.910: UDP src=33302, dst=33446 *Jan 2 07:17:32.914: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:32.914: ICMP type=3, code=3
此調試輸出顯示最後三個UDP探測。這些探針的原始TTL為4。裝置11A將TTL減小到3,裝置7A將其減小到2,裝置7B將其減小到1。然後,裝置7C會使用ICMP「埠無法訪問」消息進行響應,因為它是探測的目的地。
注意:由於速率限制,裝置7C僅傳送兩個ICMP「埠無法到達」消息。
C:\>tracert 150.1.4.2 1 <10 ms <10 ms <10 ms 10.1.1.2 1 <10 ms <10 ms <10 ms 10.1.2.2 1 <10 ms <10 ms <10 ms 10.1.3.2 1 <10 ms 10 ms 10 ms 10.1.4.2 Trace complete rp-11a-7204# *Dec 29 14:02:22.236: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 78, forward *Dec 29 14:02:22.236: UDP src=137, dst=137 *Dec 29 14:02:22.240: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:22.240: ICMP type=3, code=3 *Dec 29 14:02:23.732: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 78, forward *Dec 29 14:02:23.732: UDP src=137, dst=137 *Dec 29 14:02:23.736: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:23.736: ICMP type=3, code=3 *Dec 29 14:02:25.236: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 78, forward *Dec 29 14:02:25.236: UDP src=137, dst=137 *Dec 29 14:02:25.236: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:25.240: ICMP type=3, code=3 *Dec 29 14:02:26.748: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 14:02:26.748: ICMP type=11, code=0 *Dec 29 14:02:26.752: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 14:02:26.752: ICMP type=11, code=0 *Dec 29 14:02:26.752: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 14:02:26.752: ICMP type=11, code=0
在此偵錯輸出中,裝置11A將ICMP「超過時間」訊息傳送至探查的來源(150.1.1.1)。 這些ICMP消息響應初始探測,即具有TTL = 1的ICMP回應請求資料包。裝置11A將TTL降低為零,並使用ICMP消息進行響應。
注意:在頂部您會看到NETBIOS名稱請求。這些請求被視為源埠和目標埠為137的UDP資料包。為清楚起見,將從調試輸出的其餘部分刪除NETBIOS資料包。您可以使用tracert命令中的-d選項禁用NETBIOS行為。
注意:出於以下兩個原因,未在此調試輸出中看到ICMP探測:
裝置11A不是ICMP探測的目的裝置。
TTL會減至零,且封包永遠不會路由。因此,偵錯從不會識別封包。
*Dec 29 14:02:32.256: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:32.256: ICMP type=8, code=0 *Dec 29 14:02:32.260: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:32.260: ICMP type=11, code=0 *Dec 29 14:02:32.260: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:32.260: ICMP type=8, code=0 *Dec 29 14:02:32.260: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:32.260: ICMP type=11, code=0 *Dec 29 14:02:32.264: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:32.264: ICMP type=8, code=0 *Dec 29 14:02:32.264: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:32.264: ICMP type=11, code=0
在此偵錯輸出中,現在會看到來自來源150.1.1.1且目的地為150.1.4.2的ICMP探測。
注意:在這些探測中,TTL = 2(調試時無法看到這種情況)。 裝置11A將TTL減為1,並將UDP資料包轉發到裝置7A。裝置7A將TTL遞減為零,並使用ICMP「超出時間」消息進行響應。
*Dec 29 14:02:37.776: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:37.776: ICMP type=8, code=0 *Dec 29 14:02:37.776: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:37.776: ICMP type=11, code=0 *Dec 29 14:02:37.780: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:37.780: ICMP type=8, code=0 *Dec 29 14:02:37.780: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:37.780: ICMP type=11, code=0 *Dec 29 14:02:37.780: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:37.780: ICMP type=8, code=0 *Dec 29 14:02:37.784: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 14:02:37.784: ICMP type=11, code=0
在此調試輸出中,您將看到接下來的三個ICMP探測。這些探測器的TTL為3。裝置11A將TTL遞減為2並將它們轉發到裝置7A。裝置7A將TTL遞減為1並將資料包轉發到裝置7B,裝置7B將TTL遞減為零,並以ICMP「time exceeded」消息做出響應。
*Dec 29 14:02:43.292: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:43.292: ICMP type=8, code=0 *Dec 29 14:02:43.296: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 92, forward *Dec 29 14:02:43.296: ICMP type=0, code=0 *Dec 29 14:02:43.296: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:43.296: ICMP type=8, code=0 *Dec 29 14:02:43.300: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 92, forward *Dec 29 14:02:43.300: ICMP type=0, code=0 *Dec 29 14:02:43.300: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 92, forward *Dec 29 14:02:43.300: ICMP type=8, code=0 *Dec 29 14:02:43.304: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 92, forward *Dec 29 14:02:43.304: ICMP type=0, code=0
此調試輸出顯示最後三個ICMP探測。這些探針的原始TTL為4。裝置11A將TTL減小到3,裝置7A將其減小到2,裝置7B將其減小到1。然後,裝置7C會使用ICMP回應應答消息(型別=0,代碼=0)進行響應,因為它是探測的目的地。
注意:ICMP回應回覆消息不受速率限制,因為ICMP「埠無法到達」消息是速率限制。在這種情況下,您會看到所有三條ICMP回應回覆消息都已傳送。
在Cisco路由器中,traceroute命令回覆的代碼為:
! -- success * -- time out N -- network unreachable H -- host unreachable P -- protocol unreachable A -- admin denied Q -- source quench received (congestion) ? -- unknown (any other ICMP message)
如果從UNIX運行traceroute命令,請注意以下事項:
您可以收到「traceroute:icmp套接字:許可權被拒絕」消息。
traceroute程式依靠網路介面分流器(NIT)進行網路窺探。此裝置只能由root使用者訪問。您必須以root使用者身份運行該程式,或者為root使用者設定使用者ID。
本檔案說明traceroute指令如何使用UDP和ICMP封包判斷封包從指定來源到指定目的地所行經的路徑。輸出中可能的ICMP消息型別包括:
如果在傳輸過程中超出TTL(型別=11,代碼=0),則在探測資料包的TTL在資料包到達目的地之前過期的所有情況下,傳輸路由器都會將資料包傳送回。
如果連線埠無法連線(type=3, code=3),則當封包到達目的地時,會傳回封包以回應UDP探測封包(未定義UDP應用程式)。 這些資料包限製為每500毫秒一個資料包。這解釋了為什麼來自目標的響應(請參閱Cisco路由器和Linux的輸出)在偶數響應中失敗。裝置7C不生成ICMP消息,並且每個裝置中的traceroute命令輸出等待一秒以上。在MS Windows tracert命令輸出的情況下,會產生ICMP訊息,因為Cisco路由器中不存在UDP連線埠137。
如果有回應,type=8,code=0,則回應探測資料包由MS Windows PC傳送。
如果有回應應答,type=0,code=0,則到達目的地時會傳送對上一個資料包的應答。這僅適用於MS Windows tracert命令。
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
10-Aug-2005 |
初始版本 |