1、Tracert簡介
Tracert是測試報文從發(fā)送端到目的地所經(jīng)過的路由的方法。它能夠直觀展現(xiàn)報文在轉(zhuǎn)發(fā)的時候所經(jīng)過的路徑。Tracert基于ICMP協(xié)議來實現(xiàn)的。當網(wǎng)絡(luò)出現(xiàn)故障時,用戶可以使用Tracert確定出現(xiàn)故障的網(wǎng)絡(luò)節(jié)點。
2、Tracert實現(xiàn)過程
圖1 Tracert的流程
Tracert的實現(xiàn)如上圖1所示,Tracert的工作流程為:
1、源端(SwitchA)向目的端(日志主機)發(fā)送一個UDP報文,TTL值為1,目的UDP端口號是大于30000的一個數(shù),因為在大多數(shù)情況下,大于30000的UDP端口號是任何一個應(yīng)用程序都不可能使用的端口號。
2、第一跳(SwitchB)收到源端發(fā)出的UDP報文后,判斷出報文的目的IP地址不是本機IP地址,將TTL值減1后,判斷出TTL值等于0,則丟棄報文并向源端發(fā)送一個ICMP超時(Time Exceeded)報文(該報文中含有第一跳的IP地址10.1.1.2),這樣源端就得到了SwitchB的地址。
3、源端收到SwitchB的ICMP超時報文后,再次向目的端發(fā)送一個UDP報文,TTL值為2。
4、第二跳(SwitchC)收到源端發(fā)出的UDP報文后,回應(yīng)一個ICMP超時報文,這樣源端就得到了SwitchC的地址(10.1.2.2)。
5、以上過程不斷進行,直到目的端收到源端發(fā)送的UDP報文后,判斷出目的IP地址是本機IP地址,則處理此報文。根據(jù)報文中的目的UDP端口號尋找占用此端口號的上層協(xié)議,因目的端沒有應(yīng)用程序使用該UDP端口號,則向源端返回一個ICMP端口不可達(Destination Unreachable)報文(該報文含有目的端的IP地址10.1.3.2)。
6、源端收到ICMP端口不可達報文后,判斷出UDP報文已經(jīng)到達目的端,則停止Tracert程序,從而得到數(shù)據(jù)報文從源端到目的端所經(jīng)歷的路徑(10.1.1.2;10.1.2.2;10.1.3.2)。
3、華為設(shè)備支持的Tracert命令
華為設(shè)備《命令參考》手冊提供了詳細的命令參數(shù)和使用方法。這里只列舉了常用的參數(shù),并對參數(shù)進行解釋說明。tracert [ -a source-ip-address | -f first-ttl | -m max-ttl | -p port| -q nqueries | -vpn-instance vpn-instance-name | -w timeout ] *host
-a:
指定報文的源地址。如果不指定源地址,將采用出接口的IP地址作為Tracert報文發(fā)送的源地址。
-f:
指定初始TTL。當經(jīng)過的跳數(shù)小于此參數(shù)值,由于TTL字段的值大于0,經(jīng)過的這幾個節(jié)點不會返回ICMP超時報文給源主機。如果已經(jīng)設(shè)置了max-ttl參數(shù)值,first-ttl的取值必須小于max-ttl。
-m:
指定最大TTL。通常情況下,max-ttl的值被設(shè)置為經(jīng)過站點的跳數(shù)。如果已經(jīng)設(shè)置了first-ttl參數(shù)值,max-ttl的取值必須大于first-ttl。缺省情況下,最大TTL為30。
-p:
指定目的主機的UDP端口號。 如果不指定目的主機的UDP端口號,Tracert命令使用大于32768的隨機的端口作為目標設(shè)備的接收報文端口。 如果指定目的UDP端口號,需要避免采用對端已經(jīng)開啟的端口號,否則會導(dǎo)致Tracert失敗。
-q:
指定每次發(fā)送的UDP探測數(shù)據(jù)報文的個數(shù)。當網(wǎng)絡(luò)質(zhì)量不高時,可以增加發(fā)送探測數(shù)據(jù)報文的數(shù)目,保證探測報文能夠到達目的節(jié)點。缺省情況下,每次發(fā)送三個UDP探測數(shù)據(jù)報文。
-w:
等待響應(yīng)報文的超時時間。當發(fā)送數(shù)據(jù)報文到達某網(wǎng)關(guān)超時,則輸出“ * ”。如果網(wǎng)絡(luò)質(zhì)量不高且速度很慢,建議增加發(fā)送數(shù)據(jù)報文的超時時間。缺省超時時間為5000毫秒。
host:
可以是IP地址或域名,如果是域名會首先進行DNS解析,并顯示解析后的IP地址。
4、電腦支持的Tracert命令
電腦上的Tracert功能與操作系統(tǒng)相關(guān),這里以windows操作系統(tǒng)為例。這里只列舉了常用的參數(shù),并對參數(shù)進行解釋說明。tracert [ -d | -h maximum_hops | -j host-list | -w timeout ] *host
-d:不解析主機名。
-h:指定最大TTL的數(shù)值。
-j:設(shè)定松散源地址路由列表。
-w:用于設(shè)置UDP報文的超時時間,單位為毫秒。
host:指定目的主機的域名或IP地址。
5、Tracert示例
<SwitchA> tracert 10.26.0.115
traceroute to 10.26.0.115(10.26.0.115), max hops: 30 ,packet length: 40,press CTRL_C to break
1 10.3.112.1 10 ms 10 ms 10 ms
2 10.32.216.1 19 ms 19 ms 19 ms
4 10.32.136.23 19 ms 39 ms 39 ms
5 * * *
6 * * *
7 * * *
8 10.26.0.115 69 ms 79 ms 79 ms
表1 tracert命令輸出信息描述
項目
描述
traceroute to
到某個目的地址的tracert檢測。
max hops
最大TTL數(shù)。
packet length
發(fā)送的報文長度。
1 10.3.112.1 10 ms 10 ms 10 ms
“1”表示第一跳網(wǎng)關(guān)。每增加一跳,序號遞增。缺省情況下,最大跳數(shù)是30跳。
“10.3.112.1”表示第一跳的網(wǎng)關(guān)地址。每一跳序號后的IPv4地址表示本跳的網(wǎng)關(guān)地址。
“10 ms 10 ms 10 ms”表示發(fā)送的三個UDP報文和相應(yīng)接收的ICMP超時報文或者ICMP端口不可達報文的時間差。缺省情況下,檢測每跳時,發(fā)送的UDP探測數(shù)據(jù)包個數(shù)是三個。
當網(wǎng)絡(luò)上出現(xiàn)路由環(huán)路時,使用Ping命令只能知道接收端出現(xiàn)超時錯誤,而Tracert命令能夠很容易發(fā)現(xiàn)路由環(huán)路等潛在問題。在Tracert某地址時,多次出現(xiàn)相同的地址,即可認為出現(xiàn)了路由環(huán)路。
*
經(jīng)過第N跳時,在一定時間內(nèi)沒有收到ICMP超時報文或者ICMP端口不可達報文。缺省情況下,等待響應(yīng)報文的超時時間是5000ms。