Ping 和 Traceroute:故障排除的基本网络诊断工具
· 12分钟阅读
目录
网络连接问题可能会使生产力陷入停滞。无论您是管理企业基础设施的系统管理员、调试 API 超时的开发人员,还是遇到网速缓慢的家庭用户,了解如何诊断网络问题都是一项必备技能。
本综合指南探讨了最强大的网络诊断命令行工具:ping、traceroute 和 MTR。您不仅将学习如何使用这些工具,还将学习如何解释它们的结果并应用这些知识来解决实际的连接问题。
理解 Ping:网络测试的基础
Ping 是几乎所有操作系统上都可用的最基本的网络诊断工具。它通过向目标主机发送互联网控制消息协议 (ICMP) 回显请求数据包并等待回显应答数据包返回来工作。
"ping"这个名字来自潜艇声纳术语——就像声纳发出声波并监听回声以探测物体一样,ping 命令发送数据包并监听响应以探测网络主机并测量其响应能力。
Ping 的工作原理
当您执行 ping 命令时,会快速连续发生以下几件事:
- 您的计算机构造一个带有唯一标识符和序列号的 ICMP 回显请求数据包
- 数据包通过您的网络堆栈,从您的网络接口出去,并通过互联网到达目的地
- 目标主机接收数据包并发回 ICMP 回显应答
- 您的计算机接收应答并计算往返时间 (RTT)——从发送到接收所经过的总时间
- 此过程重复,通常每秒一次,直到您停止它
往返时间至关重要,因为它直接影响应用程序性能。网页加载、视频流或视频通话都依赖于低延迟才能流畅运行。
Ping 告诉您什么
成功的 ping 测试提供几个关键指标:
- 可达性:您的计算机能否到达目标主机?
- 延迟:数据包往返需要多长时间?
- 丢包:是否有任何数据包未能返回?
- 一致性:延迟是稳定的还是高度可变的?
专业提示:在排除连接故障时,Ping 通常是您应该首先使用的诊断工具。如果 ping 失败,在解决基本连接问题之前,更复杂的工具也无济于事。
基本 Ping 使用和解释
使用 ping 的最简单方法是只使用主机名或 IP 地址。打开您的终端或命令提示符并尝试:
# Ping 域名
ping example.com
# Ping IP 地址
ping 8.8.8.8
# Ping 您的本地路由器(常见网关地址)
ping 192.168.1.1
您可以立即使用我们的 Ping 工具测试您的网络连接,无需安装任何东西。
读取 Ping 输出
典型的 ping 响应如下所示:
PING example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=12.4 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.8 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=12.1 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=56 time=13.2 ms
--- example.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 11.8/12.4/13.2/0.5 ms
让我们分解每个组件的含义:
| 组件 | 含义 | 要注意什么 |
|---|---|---|
64 bytes |
应答数据包的大小 | 应与请求大小匹配(默认 56-64 字节) |
icmp_seq |
数据包的序列号 | 应递增 1;间隙表示丢包 |
ttl |
生存时间 - 剩余跳数 | 较低的值表示更多的网络跳数 |
time |
往返时间(毫秒) | 越低越好;一致性很重要 |
packet loss |
未返回的数据包百分比 | 应为 0%;超过 1% 需要调查 |
min/avg/max |
延迟统计 | 较大差异表示网络不稳定 |
延迟基准
理解什么是"良好"延迟取决于上下文:
- 1-10ms:优秀 - 典型的本地网络或附近服务器
- 10-50ms:良好 - 区域连接正常
- 50-100ms:可接受 - 跨国连接常见
- 100-200ms:明显 - 可能影响实时应用程序
- 200ms+:差 - 将显著影响用户体验
高级用户的高级 Ping 选项
Ping 提供了许多命令行选项,可以解锁强大的诊断功能。以下是最有用的标志以及何时使用它们:
控制数据包数量
默认情况下,ping 会无限期运行,直到您使用 Ctrl+C 停止它。-c 标志(或 Windows 上的 -n)限制数据包数量:
# 发送正好 10 个 ping
ping -c 10 example.com
# 只用 3 个 ping 进行快速连接测试
ping -c 3 8.8.8.8
这对于需要可预测执行时间的脚本和自动监控至关重要。
调整数据包大小
-s 标志更改数据包大小,用于测试 MTU(最大传输单元)问题或模拟不同的网络条件:
# 发送 1000 字节的数据包
ping -s 1000 example.com
# 测试最大数据包大小(1472 字节 + 28 字节头 = 1500 MTU)
ping -s 1472 example.com
# 测试分片问题
ping -s 1500 -M do example.com
快速提示:如果大数据包失败但小数据包成功,您可能在路径某处存在 MTU 不匹配。这通常会导致 VPN 和隧道连接出现问题。
设置超时值
-W 标志设置在将数据包视为丢失之前等待响应的时间:
# 每个响应最多等待 2 秒
ping -W 2 example.com
# 快速超时以快速检测故障
ping -W 1 -c 5 unreachable-host.com
调整 Ping 间隔
-i 标志控制发送数据包之间的时间:
# 每 0.2 秒发送一个 ping(需要 root/管理员权限)
sudo ping -i 0.2 example.com
# 每 5 秒发送一个 ping 用于长期监控
ping -i 5 example.com
请注意,低于 0.2 秒的间隔通常需要管理员权限,应谨慎使用以避免网络泛洪。
洪水 Ping 用于压力测试
-f 标志尽可能快地发送数据包(需要 root/管理员权限):
# 洪水 ping(负责任地使用!)
sudo ping -f example.com
警告:洪水 ping 可能会压垮网络,并可能被视为拒绝服务攻击。仅在您拥有或明确获得测试许可的网络上使用它。
实际 Ping 场景
以下是结合多个选项的实际示例:
# 通过快速 3 包测试来测试服务器是否正常运行
ping -c 3 -W 1 production-server.com
# 监控 5 分钟内的连接稳定性
ping -c 300 -i 1 example.com > ping-results.txt
# 测试数据包分片问题
ping -s 1472 -M do -c 10 example.com
# 通过扩展监控诊断间歇性连接
ping -i 0.5 -c 1000 problematic-host.com | grep -E "time=|loss"
探索 Traceroute:映射网络路径
虽然 ping 告诉您是否可以到达目的地以及需要多长时间,但 traceroute 向您显示数据包到达那里所采取的确切路径。它揭示了沿途的每个路由器(跳)并测量到每个路由器的延迟。
当 ping 显示问题但您需要知道网络路径中哪里出现问题时,这非常有价值。
Traceroute 的工作原理
Traceroute 使用涉及 IP 数据包中 TTL(生存时间)字段的巧妙技术:
- 它发送一个 TTL=1 的数据包,该数据包在第一个路由器处过期
- 该路由器发回 ICMP "超时"消息,揭示其身份
- 然后 Traceroute 发送一个 TTL=2 的数据包,该数据包在过期之前到达第二个路由器
- 此过程继续,递增 TTL 直到到达目的地
- 对于每个跳,traceroute 通常发送三个数据包以测量延迟一致性
结果是从您的计算机到目的地的网络路径的完整映射。
基本 Traceroute 使用
# 跟踪到域的路由
traceroute example.com
# 跟踪到 IP 地址的路由
traceroute 8.8.8.8
# 跟踪具有更详细输出的路由
traceroute -v example.com
您可以使用我们的 Traceroute 工具直接在浏览器中执行 traceroute。
理解 Traceroute 输出
典型的 traceroute 如下所示:
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
1 router.local (192.168.1.1) 1.234 ms 1.156 ms 1.089 ms
2 10.0.0.1 (10.0.0.1) 8.456 ms 8.234 ms 8.123 ms
3 isp-gateway.net (203.0.113.1) 12.345 ms 12.234 ms 12.456 ms
4 core-router-1.isp.net (203.0.113.50) 15.678 ms 15.567 ms 15.789 ms
5 * * *
6 peer-exchange.net (198.51.100.1) 28.901 ms 28.789 ms 28.912 ms
7 example-edge.net (93.184.216.1) 32.123 ms 32.045 ms 32.234 ms
8 example.com (93.184.216.34) 33.456 ms 33.345 ms 33.567 ms
每行代表路径中的一个跳(路由器):
- 数字表示跳数(距离您的计算机的距离)
- 主机名和 IP 地址标识路由器
- 三个时间测量显示三个探测数据包中每个的往返时间
- 星号(
* * *)表示该跳未响应(通常由于防火墙规则)
在 Traceroute 结果中要注意什么
分析 traceroute 输出时,注意这些模式:
- 突然的延迟跳跃:连续跳之间的大幅增加表示链路缓慢或拥塞点
- 不一致的时间:三个测量中的巨大变化表示网络不稳定
- 路由中途超时:跟踪中间的星号(不在末尾)可能表示有问题的路由器
- 地理跳跃:主机名通常揭示位置;意外路由可以解释高延迟
- 丢包模式:如果一个跳显示丢失但后续跳没有,问题可能在该特定路由器
专业提示:如果您在 traceroute 输出中看到星号,请不要惊慌。出于安全原因,许多路由器配置为不响应 traceroute 探测,但它们仍然正常转发您的流量。如果最终目的地响应,则路径正在工作。
不同平台上的 Traceroute
Traceroute 实现在不同操作系统上略有不同。了解这些差异可以帮助您为您的平台使用正确的工具。
Linux 和 macOS:traceroute
类 Unix 系统默认使用带有 UDP 数据包的 traceroute 命令:
# 基本 traceroute
traceroute example.com
# 使用 ICMP 而不是 UDP(更有可能通过防火墙成功)
traceroute -I example.com
# 设置最大跳数
traceroute -m 20 example.com
# 使用 TCP SYN 数据包(用于跟踪到 Web 服务器)
sudo traceroute -T -p 443 example.com
Windows:tracert
Windows 默认使用带有 ICMP 数据包的 tracert:
# 基本 tracert
tracert example.com
# 不解析主机名(更快)
tracert -d example.com
# 设置最大跳数
tracert -h 20 example.com
# 设置每跳超时
tracert -w 1000 example.com
高级 Traceroute 选项
| 选项 | Linux/macOS | Windows | 目的 |
|---|---|---|---|
| 使用 ICMP |