【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  * * *
相关推荐
MayZork1 小时前
Windows 与 Linux 下 vcpkg 的安装部署指南
linux·运维·windows
zbyyd2 小时前
Linux 进程间通信学习笔记
linux·笔记·学习
CDN3602 小时前
节点智能调度实操:解决出海区域访问快慢不均、节点拥堵、跨洋延迟高,CDN 全网择优落地方案
运维·服务器·网络
roman_日积跬步-终至千里2 小时前
【数据治理(6)】DataOps 不是调度工具,而是让数据产品长期可信的运行机制
java·服务器·网络
可乐鸡翅yeah_4 小时前
个人 / 外包流媒体项目交付实战,M3U8 验收与问题闭环完整工作流
运维·网络·python·低代码·django·m3u8·在线播放
w200512245 小时前
Pod管理
linux·服务器·云原生·容器·k8s·podman
黄俊懿5 小时前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第十节:网关安全-单向加密
网络·数据库·计算机网络·安全·架构·系统架构·架构师
Patrick在香港6 小时前
Python 拉取城巴开放数据:406 条路线,香港岛巴士网络的数字画像
网络·python·数据分析·php·数据可视化·香港·开放数据
chen<>6 小时前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++
一直C6 小时前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code