概念
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收到这个消息后,就知道目的地到达了