traceroute
是一个非常有用的网络诊断工具,用于追踪从源主机到目标主机的路径。这个工具在 Linux 系统中广泛使用,帮助网络管理员和用户了解数据包在网络中的传输情况,从而诊断网络问题。
工作原理
- 生存时间(TTL):
traceroute
利用 IP 数据包的 TTL 字段来确定数据包经过的每个网络设备。初始 TTL 值通常设置为 1。 - 逐步增加 TTL:
traceroute
发送一个 TTL 为 1 的数据包,如果该数据包到达第一个路由器,路由器会将其 TTL 减 1,然后丢弃它并返回一个 ICMP 时间超过(TTL exceeded)的消息。 - 收集信息:
traceroute
收集这个 ICMP 消息,并显示第一个路由器的 IP 地址和往返时间(RTT)。 - 重复过程:然后
traceroute
增加 TTL 值并重复这个过程,每次增加 1,直到数据包到达目标主机或达到最大 TTL 值。
基本方法
输入命令 traceroute
后跟目标主机的域名或者 IP 地址。例如:
traceroute qq.com
输出解释
第一行显示了目标地址和一些其他参数信息,比如尝试探测的最大跳数、探测报文的字节数。
后续的每一行代表一个“跃点”,从本地网络开始,直到目标服务器,其中
- 第1列:网络路径上跃点的序号。
- 第2列:通常形式是跃点的主机名后跟着(IP)。
- 第3列:三次尝试的 RTT(往返时间),显示为最小值、平均值、最大值。
- 星号 (*):如果某个跃点的网络设备没有响应,或者由于网络策略不发送 ICMP 消息,那么该行将显示星号。
常用选项
-m
:设置最大 TTL 值,即最大跳数。例如,-m 10
表示最多追踪 10 个跃点。-n
:不将 IP 地址解析为主机名,减少 DNS 查找的时间。-w
:设置超时时间。-i
:使用指定的网络接口送出数据包。-p
:指定发送数据包时使用的端口号,对于 ICMP 协议则是指定初始的 ICMP 序号。-q
:设置每跳探测数据包的数量,默认值为 3。-I
:使用 ICMP ECHO 报文进行探测。-T
:使用 TCP SYN 报文进行探测。-z
:每发送完一个 TTL 值的数据包后暂停一段时间,默认为 1 秒。
注意事项
traceroute
可能需要管理员权限,特别是在使用 ICMP 时。- 某些网络可能配置为不响应
traceroute
请求,导致路径中的某些跃点不显示。 - linux 系统中,我们称之为
traceroute
,在 Windows 系统中为tracert
。