【Linux】网络诊断工具traceroute命令详解

一、traceroute介绍

1、基本介绍

在Linux系统中,traceroute 是一个常用的网络诊断命令,用于追踪数据包从源主机到目标主机所经过路由节点(每一跳)的路径。通过分析每一跳(Hop)的延迟和丢包情况,可以精准诊断网络连接问题(如延迟高、路由环路、防火墙拦截等)。

2、核心原理

traceroute 通过发送一系列数据包(默认使用UDP协议,端口从33434递增)并监控其路径,实现路由追踪。其核心逻辑基于数据包的TTL(Time-To-Live)机制:

1)发送第一个数据包时设置TTL=1,到达第一个路由器后TTL减为0,路由器返回 ICMP "超时"消息(Time Exceeded),记录第 1 跳路由;

2)发送第二个数据包时设置TTL=2,重复上述过程。

3)逐步增加TTL值(TTL=3,4...),直至数据包到达目标主机或达到最大跳数(默认30跳),目标返回 ICMP Port Unreachable(默认 UDP 协议)或 ICMP Echo Reply(ICMP 协议)。

4)对于无法响应的节点,连接状态将显示为 *,预设数据包大小是 60Bytes,探测30跳。

通过这一过程,Traceroute 会记录每一跳的IP地址和响应时间,绘制出完整的路径图。

3、常见用途

在网络诊断中,traceroute的用途非常广泛:

• 定位网络延迟:发现数据包在哪一跳耗时过长。

• 识别路径阻断:找出数据包无法到达目标的原因。

• 排查防火墙问题:检测防火墙是否错误拦截了数据包。

• 优化网络性能:分析路由选择是否合理。

二、traceroute安装

在大多数Linux发行版中,traceroute 工具默认没有安装。如果没有,你可以使用包管理器安装它,例如:

  • 对于基于Debian的系统(如Ubuntu):
bash 复制代码
sudo apt-get install traceroute
  • 对于基于RPM的系统(如CentOS7/RHEL7):
bash 复制代码
sudo yum install traceroute
  • 对于较新的RHEL/CentOS 8及以上版本:
bash 复制代码
sudo dnf install traceroute

三、traceroute使用

1、使用帮助

  • 使用 --help 选项查询 traceroute 命令的帮助信息
bash 复制代码
traceroute --help

2、基本用法

bash 复制代码
traceroute [选项] 目标主机/IP

3、常见选项

四、traceroute使用实例

1、基本用法

  • 默认使用UDP协议
bash 复制代码
traceroute 223.5.5.5

traceroute to 223.5.5.5 (223.5.5.5), 30 hops max, 60 byte packets
 1  bogon (192.168.10.2)  0.123 ms  0.101 ms  0.075 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
  • 从输出结果中可以看到,traceroute命令首先会输出目标主机的IP地址和最大跳数(30),发送的数据包大小为60字节,然后每一行显示一个路由节点的信息。
  • 例如,第一个路由节点的IP地址(192.168.10.2),主机名(bogon),三次ping探测的返回时间(0.123 ms,0.101 ms,0.075 ms)。
  • 第 2-30 跳,输出均为 *,表示这些跳数对应的路由节点未返回响应。
  • 出现连续* * *的原因是中间路由节点或网络策略拦截了追踪请求,无法返回响应。

2、使用TCP协议追踪

bash 复制代码
traceroute -T -p 80 www.baidu.com

traceroute to www.baidu.com (110.242.70.57), 30 hops max, 60 byte packets
 1  bogon (192.168.10.2)            0.092 ms  0.033 ms   0.030 ms
 2  110.242.70.57 (110.242.70.57)  28.195 ms  27.508 ms  26.462 ms

3、禁用DNS反向解析

bash 复制代码
traceroute -T -p 80 -n  www.baidu.com

traceroute to www.baidu.com (110.242.69.21), 30 hops max, 60 byte packets
 1  192.168.10.2    0.109 ms  0.120 ms   0.087 ms
 2  110.242.69.21  28.930 ms  28.358 ms  29.610 ms

4、使用ICMP协议追踪

bash 复制代码
traceroute -n -I www.baidu.com

traceroute to www.baidu.com (110.242.69.21), 30 hops max, 60 byte packets
 1  192.168.10.2     0.096 ms  0.069 ms   0.057 ms
 2  192.168.0.1      1.767 ms  2.012 ms   2.019 ms
 3  192.168.1.1      2.643 ms  2.641 ms   2.630 ms
 4  220.202.88.1     5.595 ms  5.596 ms   5.585 ms
 5  * * *
 6  * * *
 7  * * *
 8  110.242.66.170  27.867 ms   *          *
 9  221.194.45.134  27.330 ms  27.011 ms  27.811 ms
10  * * *
11  * * *
12  * * *
13  110.242.69.21   32.532 ms  32.529 ms  32.514 ms

5、自定义最大跳数和超时追踪

bash 复制代码
traceroute -m 20 -w 5 www.baidu.com

traceroute to www.baidu.com (110.242.69.21), 10 hops max, 60 byte packets
 1  bogon (192.168.10.2)  0.038 ms  0.020 ms  0.063 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
相关推荐
AlfredZhao8 小时前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐1 天前
Linux内存扩容指南
linux
zylyehuo2 天前
Linux 彻底且安全地删除文件
linux
用户805533698032 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297912 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Web3探索者4 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo4 天前
Linux系统中网线与USB网络共享冲突
linux
Sokach10155 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
AlfredZhao6 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3107 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql