文章目录
1、如何使用Tracert
Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据包访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。
- 进入Windows命令提示符程序,Win7/10系统直接在开始菜单下方的输入框中输入“cmd”或“命令提示符”就可以进入了;
- macOS打开终端输入traceroute + IP地址/域名。
注意:Windows系统使用tracert命令发送的数据包为ICMP协议,而Linux系统使用的命令为traceroute且发送的数据包为UDP 33434端口;
2、Tracert使用案例,
以Windows系统为例子!
2.1打开CMD;
2.2 打开抓包软件,运行命令并开启抓包模式
此处使用的抓包软件为wireshark,过滤命令为:ip.addr == [本地解析www.baidu.com的IP地址]
,我们可以使用ping命令或者tracert命令解析某一个域名,或着nslookup直接解析具体的域名均可以获得具体的IP地址,见下图;
数据包转发过程:
- 终端设备通过向目标发送不同IP生存时间 (TTL) 值的“Internet控制消息协议 (ICMP)”回应数据包,Tracert诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。
- Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将TTL递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert 实用程序中看不到。
- 从左到右的信息分别代表了“生存时间”(每途经一个路由器结点自增1)、“三次发送的ICMP包返回时间”(共计3个,单位为毫秒ms)和“途经路由器的IP地址”(如果有主机名,还会包含主机名)。
3、Tracert数据包转发过程解析
-
打开Windows系统抓到的数据包信息如下:
-
下图为Linux下的traceroute抓包结果,使用协议为UDP 33434端口发送数据包信息;
类型与代码对照表:
4、以下场景下不发送ICMP差错报文
- 对于携带ICMP差错报文的数据报,不会再产生ICMP差错报文;
- 对于分片的数据报,如果不是第一个分片,则不会产生ICMP差错报文;
- 对于具有组(多)播地址的数据报文,不会产生ICMP差错报文;
- 对于具有特殊地址(如:127.0.0.0和0.0.0.0)的数据报文,不会产生ICMP差错报文