Traceroute 命令是众所周知的网络工具,使用该命令我们可以确认网络数据包源和目标之间的跳数。Traceroute 命令除了显示具体的条数,还可以让我们清晰的了解到数据包经过的具体路径/服务器( path/server )。

通常情况下我们会在网络丢包的时候使用到 Traceroute 命令,因为 `` 可以显示出它每一个心跳包经过的具体地址或服务器节点,所以我们可以方便的确认网络丢包是在哪个地址或节点发生的。

相关阅读推荐:使用 iftop 命令监控网络带宽

本文将讲述如何在 Linux 中安装 traceroute 命令,已经如何使用它定位和解决网络问题。

Linux 安装 traceroute 命令

CentOS/RHEL/Oracle Linux/Amazon Linux

# yum install traceroute

Ubuntu/Debian/Mint

# apt-get install traceroute

Fedora

# dnf install traceroute

如果使用的是 sudo 用户,那么需要在安装命令时加上 sudo 。接下来让我们讨论下具体语法。

语法

traceroute [选项] 参数

Linux 中 traceroute 使用举例

1. 检查某个服务器路由

通过下面的命令我们可以非常简单的通过网络心跳包而获得到达某个服务器或网站(如:google.com )的具体的路由信息。

$ traceroute google.com

同样的我们也可以通过 traceroute 跟踪某个服务器或网站的具体IP

$ traceroute 8.8.8.8

具体命令运行结果如下图:

traceroute

命令运行结果展示了下面的信息:

  • 第一行中命令后面的信息表明具体的目标IP地址(截图中用黑色标识)

  • 接下来一行及后面的所有行展示了具体的心跳,IP地址,响应时间等。

    默认情况下,linux 中 traceroute 会向每个节点发送 3 个数据包,因此每一行应该有 3 个响应时间。

  • 有些时候在响应时间的地方会显示 * ,这表明我们无法得到对应请求的响应时间

以上 2 个例子中我们使用的都是 IPV4 ,而发送 IPV6 的路由查询我们可以使用下面的命令

$ traceroute -6 ipv6.google.com

2. 配置 traceroute 的 TTL 值

traceroute 默认情况下的 TTL 值是 1 ,但是我们可以通过 -f 选项修改该值,如:

$ traceroute -f 5 google.com

3. 配置响应时间

通过 w 可以修改默认的响应时间

$ traceroute -w 0.5 google.com

4. 配置查询数据包数量

traceroute 会默认向每个心跳发送 3 个数据包,同时返回 3 个响应时间。我们可以通过 q 修改查询数据包数量

$ traceroute -q 6 google.com

表示向每个网关发送 6 个数据包。

5. 禁用主机名而使用IP

有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台 DNS 出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加 -n 参数来避免 DNS 解析,以 IP 格式输出数据。

$ traceroute -n google.com

6. 配置 traceroute 的数据网卡

如果你的 Linux 系统中有多块网卡,那么可以通过 i 选项配置 traceroute 的数据使用的网卡。

$ traceroute -i p2p0 google.com

以上我们仅仅讨论了 traceroute 的部分命令,具体更多相关命令我们可以参照具体的 MAN 帮助页。

具体参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-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:开启或关闭数据包的正确性检验。