轉載于:https://www.cnblogs.com/lisenlin/p/10763905.html
一、tracert和traceroute簡介
相同點:都是用來跟蹤路由,幫助排查問題,關注的是過程,而ping關注的是結果。
不同點:
- tracert請求是icmp echo封包。
- traceroute請求是UDP的封包,目标端口是30000以上随機端口。
二、tracert使用到三種封包
- icmp echo request #icmp Type8,用戶端發起封包,traceroute使用udp封包發起。
- icmp echo replay #icmp Type 0,到了目标位址,未禁ping,回複此封包。
- icmp time-exceeded #icmp Type11,經過的路由回複封包(到此路由ttl=1或0回複給用戶端)。
三、traceroute使用的三種封包
- UDP随機端口發起請求 #用戶端發起封包,traceroute使用udp封包發起。
- icmp time-exceeded #icmp Type11,經過的路由回複封包(到此路由ttl=1或0回複給用戶端) 。
- icmp unreachable #icmp Type3(Destination unreachable),到了目标位址,未禁ping,回複此封包。
四、tracert原理
- tracert送出一個TTL是1的ICMP echo request資料包a到目的地。
- 當路徑上的第一個路由器收到這個資料包a時,它将TTL減1。
- TTL變為0,該路由器會将此資料包丢掉,并送回一個「ICMP time exceeded」消息。
- tracert 收到這個消息後,再送出另一個TTL是2 的資料包,發現第2 個路由器。
- 當資料包到達目的地後,目标會送回一個icmp echo reply(前提是目标未禁ping)。
ps:
- tracert 有一個固定的時間等待響應(ICMP TTL到期消息)。如果這個時間過了,它将列印出一系列的*号,表明在這個路徑上,這個裝置不能在給定的時間内發出ICMP TTL到期消息的響應。
- 有些時候tracert都是打星号,但是抓包顯示icmp time-exceeded(即可知所經路由器),是以以抓包結果為準。
五、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。
六、traceroute工具參數使用
traceroute [ -46dFITnreAUDV ] [ -f first_ttl ] [ -g gate,… ] [ -i device ] [ -m max_ttl ] [ -N squeries ] [ -p port ] [ -t tos ] [ -l flow_label ] [ -w waittime ] [ -q nqueries ] [ -s src_addr ] [ -z sendwait ] [ --fwmark=num ] host [ packetlen ]
-d #使用Socket層級的排錯功能。
-f first_ttl #設定第一個檢測資料包的存活數值TTL的大小。
-F #設定勿離斷位。
-g gate,… #設定來源路由網關,最多可設定8個。
-i device #使用指定的網絡接口送出資料包。
-I #使用ICMP echo request取代UDP請求,即類似使用tracert工具。
-T #使用TCP SYN取代UDP請求。
-m max_ttl #設定檢測資料包的最大存活數值TTL的大小。
-n #直接使用IP位址而非主機名稱。
-p port #設定UDP傳輸協定的通信端口,預設33434。
-r #忽略普通的Routing Table,直接将資料包送到遠端主機上。
-s src_addr #設定本地主機送出資料包的IP位址。
-t tos #設定檢測資料包的TOS數值。
-w waittime #設定等待遠端主機回應的時間,預設5s。