概念
Tracert(跟蹤路由)是路由跟蹤實用程序,用於確定 IP數據包訪問目標所采取的路徑。Tracert 命令使用用 IP 生存時間 (TTL) 字段和 ICMP 錯誤消息來確定從一個主機到網絡上其他主機的路由。
常規使用
C:\Users\A>Tracert www.baidu.com
通過最多 30 個躍點跟蹤
到 www.a.shifen.com [112.80.248.76] 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 hzyj [192.168.2.1]
2 3 ms 2 ms 3 ms 101.71.194.1
3 3 ms 2 ms 2 ms 124.90.33.185
4 9 ms 8 ms 8 ms 101.69.245.197
5 15 ms 15 ms 15 ms 219.158.115.74
6 12 ms 12 ms 13 ms 153.3.228.154
7 14 ms 15 ms 14 ms 153.37.96.158
8 * * * 請求超時。
9 13 ms 12 ms 13 ms 112.80.248.76
跟蹤完成。
現在就可以用112.80.248.76來訪問百度了。

指令
tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name
其中參數說明如下:
-d 不將地址解析成主機名。
-h maximum_hops 搜索目標的最大躍點數,默認30。
-j host-list 與主機列表一起的松散源路由(僅適用於 IPv4)。指定沿host-list的稀疏源路由列表序進行轉發。
host-list是以空格隔開的多個路由器IP地址,最多9個;
-w timeout 等待每個回復的超時時間(以毫秒為單位)。
-R 跟蹤往返行程路徑(僅適用於 IPv6)。
-S srcaddr 要使用的源地址(僅適用於 IPv6)。
-4 強制使用 IPv4。
-6 強制使用 IPv6。
target_name 目標計算機的名稱。
wireshark 分析tracert過程

所以tracert是基於ICMP協議的。
本機共發送了6個請求,每發送兩個請求就會收到一個回復的消息。其中三條請求沒有回復,顯示no response,這表示丟包,。
wireshark會根據pacp文件中的icmp請求和回顯報文,自動補齊Response frame或no response found字段;這個是wireshark行為,不是包本身信息。
Tracert 命令用 IP 生存時間 (TTL) 字段和 ICMP 錯誤消息來確定從一個主機到網絡上其他主機的路由。
實現原理
1、tracert發出TTL值為1的ICMP數據包(40個字節、源地址、目標地址和發出時間標簽,一般發3個)
2、當到達路徑上第一個路由器時,路由器會將,TTL值減1
3、此時TTL值為0,該路由器將此數據包丟棄,向源地址返回一個ICMP超時通知(數據包的源地址、路由器的IP地址)
4、當tracert收到該數據包,獲得了這個路徑上的第一個路由器的地址
5、tracert再發送另一個TTL為2的數據包
6、第一個路由器會將此數據包轉發給第二個路由器
7、當TTL=0,第二個路由器返回一個超時通知,tracert得到第二個路由器地址
Tracert每次發出數據報時便會將TTL加1,發現下一個路由器
這個動作一直重復,直到到達目的地或者確定目標主機不可到達為止
到達目的IP后,目標主機並不返回超時報文
Tracert發送數據報時,會選擇一個一般應用程序不會使用的號碼來做端口(3000以上)
當到達目的地后,目標主機返回一個ICMP port unreachable(端口不可達)的消息
當tracert收到這個消息后,就知道目的地到達了

