tracert命令用于跟踪一个消息从一台计算机到另一台计算机所走的路径,用于确定 IP 数据包访问目标所采取的路径。通过向目标计算机发送具有不同生存时间的ICMP数据包来确定至目标计算机的路由。tracert 会先发送 TTL 为 1的三个探测分组,之后每次发送都将TTL加1并且每次都发送三个探测分组,直到目标响应或 TTL 达到最大值,从而确定路由。
使用tracert跟踪本机到百度的路径,分析其具体原理。
具体过程:
从源地址发出一个ICMP请求回显数据包到目的地址,并将TTL设置为1;
到达路由器时,将TTL减1;
当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知,其中包括发送IP包的源地址,IP包的所有内容及路由器的IP地址;
当源地址收到该ICMP包时,显示这一跳路由信息;
重复上述步骤,并每次设置TTL加1;
直至目标地址收到探测数据包,并返回ICMP回应答复;
当源地址收到ICMP回应答复包时停止tracert。
主机192.168.1.103向183.232.231.174发送一个信息类型为8,代码为0的ICMP请求回显包,路径上第一个路由器192.168.1.1在转发数据包之前将数据包上的TTL递减 1,当数据包上的TTL减为0时,路由器丢弃该数据包,并将“ICMP Time Exceeded”(超时)的消息发回源主机A,此时,发现路径上的第一个路由器。
Tracert命令将 TTL 值加1,主机192.168.1.103发送TTL值为2的回显数据包,数据报由路由器A转发至路由器B,由于该数据报的TTL值在第一跳时被减去了1,因此在到达路由器B后,TTL值为0。路由器B丢弃该数据包,并向主机A返回“ICMP Time Exceeded(超时)”的报文,从而获得路径上的第二个路由器信息。
之后一直重复上述步骤,可以看到之后只有TTL为3、4、7时收到了超时消息,与cmd中显示的tracert命令执行结果一致,未收到ICMP差错报文无法确定路由信息,只显示请求超时。在TTL为10时,收到ICMP回应答复包时停止tracert,由此可知TTL域为10。
tracert命令行选项: