A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-bash/zsh: traceroute: command not found #Debian apt-get install traceroute #Ubuntu apt-get install traceroute #Alpine apk add traceroute #Arch Linux pacman -S traceroute #Kali Linux apt-get install traceroute #CentOS yum install traceroute #Fedora dnf install traceroute #OS X brew install traceroute #Raspbian apt-get install traceroute
互联网是由网关连接在一起的大型复杂的网络硬件集合。跟踪数据包遵循的路由(或找到丢弃数据包的网关)可能很困难。 traceroute 命令利用 IP 协议的“生存时间”字段,并尝试从每个网关到某个主机的路径引发 ICMP TIME_EXCEEDED 响应。
唯一必需的参数是目标主机名或 IP 地址。默认的探测数据报长度为 40 - 60 字节,但是可以通过在目标主机名之后指定数据包大小(以字节为单位)来增加长度。
traceroute 尝试通过启动具有较小 ttl(生存时间)的探测数据包,然后侦听来自网关的 ICMP
“超过时间” 答复来跟踪 IP 数据包将遵循的路由到某些 Internet 主机的路由。它以 1 的 ttl 开始其探测,并将其增加 1,直到获得 ICMP “端口不可达”(或 TCP 重置),这意味着我们到达了“主机”,或者达到了最大值(默认为 30 跳)...在每个 ttl 设置下发送三个探针(默认情况下),并打印一行以显示 ttl,网关地址和每个探针的往返时间。要求时,地址后可以有其他信息。如果探测答案来自不同的网关,则将打印每个响应系统的地址。如果在 5.0 秒内(默认)没有响应,则为该探针打印一个 “*”(星号)。
traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...] [-i device] [-m max_ttl] [-p port] [-s src_addr] [-q nqueries] [-N squeries] [-t tos] [-l flow_label] [-w waittime] [-z sendwait] [-UL] [-D] [-P proto] [--sport=port] [-M method] [-O mod_options] [--mtu] [--back] host [packet_len]
-d:使用Socket层级的排错功能; -f<存活数值>:设置第一个检测数据包的存活数值TTL的大小; -F:设置勿离断位; -g<网关>:设置来源路由网关,最多可设置8个; -i<网络界面>:使用指定的网络界面送出数据包; -I:使用ICMP回应取代UDP资料信息; -m<存活数值>:设置检测数据包的最大存活数值TTL的大小; -n:直接使用IP地址而非主机名称; -p<通信端口>:设置UDP传输协议的通信端口; -r:忽略普通的Routing Table,直接将数据包送到远端主机上。 -s<来源地址>:设置本地主机送出数据包的IP地址; -t<服务类型>:设置检测数据包的TOS数值; -v:详细显示指令的执行过程; -w<超时秒数>:设置等待远端主机回报的时间; -x:开启或关闭数据包的正确性检验。
主机:指定目的主机IP地址或主机名。
traceroute to www.58.com (123.206.235.141), 30 hops max, 60 byte packets 1 * * * 2 * * * 3 100.127.3.115 (100.127.3.115) 1.297 ms 100.127.3.121 (100.127.3.121) 1.067 ms 100.127.3.115 (100.127.3.115) 0.821 ms 4 * * * 5 100.127.125.210 (100.127.125.210) 2.185 ms 100.127.125.146 (100.127.125.146) 3.881 ms 100.127.113.235 (100.127.113.235) 2.098 ms 6 61.48.72.74 (61.48.72.74) 2.683 ms 7.758 ms 2.334 ms 7 180.149.129.165 (180.149.129.165) 5.694 ms 5.182 ms 180.149.137.137 (180.149.137.137) 4.076 ms 8 180.149.159.77 (180.149.159.77) 2.467 ms 180.149.159.17 (180.149.159.17) 3.209 ms 180.149.159.37 (180.149.159.37) 2.672 ms 9 * * * 10 * * * 11 * * * 12 * * * 13 * * * 14 * * * 15 * * * 16 * * * 17 * * * 18 * * * 19 * * * 20 * * * 21 * * * 22 * * * 23 * * * 24 * * * 25 * * * 26 * * * 27 * * * 28 * * * 29 * * * 30 * * *
记录按序列号从 1 开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms
,其实就是 -q 的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用 traceroute -q 4 www.58.com
,表示向每个网关发送 4 个数据包。
有时我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了 ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台 DNS 出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加 -n 参数来避免 DNS 解析,以 IP 格式输出数据。
如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到 traceroute 追踪数据包所经过的网关,提交 IDC 服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
traceroute 跳数设置
traceroute to www.baidu.com (220.181.38.150), 10 hops max, 60 byte packets 1 * * * 2 * * * 3 100.127.3.121 (100.127.3.121) 1.041 ms 100.127.3.119 (100.127.3.119) 1.091 ms 100.127.3.115 (100.127.3.115) 0.796 ms 4 * 100.127.203.9 (100.127.203.9) 4.667 ms * 5 100.127.125.208 (100.127.125.208) 2.178 ms 100.127.125.210 (100.127.125.210) 2.210 ms 100.127.125.146 (100.127.125.146) 2.109 ms 6 61.48.72.74 (61.48.72.74) 2.428 ms 2.467 ms 2.220 ms 7 180.149.137.137 (180.149.137.137) 122.753 ms 180.149.129.61 (180.149.129.61) 7.753 ms 180.149.137.145 (180.149.137.145) 22.433 ms 8 180.149.159.77 (180.149.159.77) 2.539 ms 2.354 ms * 9 180.149.128.37 (180.149.128.37) 3.363 ms 36.110.246.201 (36.110.246.201) 2.743 ms 36.110.246.205 (36.110.246.205) 2.985 ms 10 * * *
traceroute 其它一些实例:
traceroute -m 10 www.baidu.com # 跳数设置 traceroute -n www.baidu.com # 显示IP地址,不查主机名 traceroute -p 6888 www.baidu.com # 探测包使用的基本UDP端口设置6888 traceroute -q 4 www.baidu.com # 把探测包的个数设置为值4 traceroute -r www.baidu.com # 绕过正常的路由表,直接发送到网络相连的主机 traceroute -w 3 www.baidu.com # 把对外发探测包的等待响应时间设置为3秒