【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  * * *
相关推荐
chlk12319 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑20 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件20 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
木心月转码ing3 天前
WSL+Cpp开发环境配置
linux
崔小汤呀4 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应4 天前
vi编辑器使用
linux·后端·操作系统