网站搜索

使用 Ping、Mtr 和 Smokeping 在 Linux 中监控网络延迟


网络延迟 是指数据在你的计算机与远程服务器之间传输所需的时间。高延迟可能导致网页浏览缓慢、游戏延时以及云服务延迟。如果你使用的是 Linux,你已经拥有了一些有用的工具,可以实时或长期地 测量和监控网络延迟。

在本指南中,我们将说明如何:

  • 使用 ping 进行简单的延迟测试
  • 使用 mtr 跟踪网络路径并检测问题节点
  • 使用 smokeping 绘制随时间变化的图表延迟

所有工具都是免费的,并且可在大多数 Linux 发行版上使用。

什么是网络延迟?

延迟通常以毫秒(ms)为单位进行测量。它表示一个小数据包从你的电脑出发,到达目标服务器并返回所需的往返时间。

常见延迟值:

  • <30 毫秒: 优秀(局域网或光纤)
  • 30-70 毫秒: 良好(普通宽带)
  • 70-150 毫秒:可接受(有些延迟)
  • >150 毫秒: 高延迟(可能影响性能)

使用 ping 命令测试网络延迟

测试延迟最简单的方法是使用ping命令。ping命令向目标(如网站或服务器)发送ICMP回显请求数据包,并测量往返时间(RTT)——收到响应所花费的时间。

ping 命令是一个用于测量 Linux 网络延迟的强大工具。通过分析 最小/平均/最大延迟、数据包丢失和抖动,您可以诊断连接问题。

基础示例:

ping google.com

这会重复向 google.com 发送数据包。

你会看到类似这样的输出:

PING google.com(maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e)) 56 data bytes
64 bytes from maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e): icmp_seq=1 ttl=59 time=16.1 ms
64 bytes from maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e): icmp_seq=2 ttl=59 time=17.3 ms

上述命令将会持续运行,直到你手动按 CTRL+C 停止它。

这里

  • time=16.1 ms:这是该数据包的延迟(毫秒)。
  • 数值越低越好。大多数互联网连接的典型值低于 100 毫秒。

只发送5次 Ping:

ping -c 5 google.com

这会向 google.com 发送 5 个回显请求然后停止。输出显示每个回复的延迟。

PING google.com(maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e)) 56 data bytes
64 bytes from maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e): icmp_seq=1 ttl=59 time=15.4 ms
64 bytes from maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e): icmp_seq=2 ttl=59 time=16.3 ms
64 bytes from maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e): icmp_seq=3 ttl=59 time=17.2 ms
64 bytes from maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e): icmp_seq=4 ttl=59 time=18.2 ms
64 bytes from maa03s36-in-x0e.1e100.net (2404:6800:4007:814::200e): icmp_seq=5 ttl=59 time=69.2 ms

--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 15.362/27.250/69.246/21.019 ms

这里,

  • time=15.4 ms 是每个数据包的延迟。
  • 最后,你会得到 min/avg/max/mdev (最小值、平均值、最大值和标准偏差)。

ping 命令的摘要统计

--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 15.362/27.250/69.246/21.019 ms

数据包传输统计:

  • 已发送 5 个数据包:发送了 5 个 ICMP Echo 请求数据包。
  • 5 已接收:所有 5 个数据包都收到了响应(ICMP 回显应答)。
  • 0% 数据包丢失:没有丢失任何数据包(理想网络条件)。
  • 时间 4005毫秒:测试所花费的总时间(约4秒)。

往返时间 (RTT) 统计:

这显示了以毫秒(ms)为单位的延迟(延时):

  • 最小 (15.362 毫秒):最快的响应时间。
  • avg(27.250 毫秒):平均响应时间(对一般延迟最重要)。
  • max (69.246 毫秒):最慢的响应时间。
  • mdev(21.019 毫秒):平均偏差(衡量抖动——延迟的变化)。

根据上述统计数据,我们可以得出以下结论:

  • 您与 Google 的连接正常。
  • 延迟大多很低,但存在一些抖动(变化)。
  • 无数据包丢失——没有丢弃的数据包。
  • 这对于上网浏览甚至视频通话来说都是可以接受的。
  • 如果你看到频繁的高 mdev 或 packet loss,这是不稳定的迹象。

用于网络测试的高级 Ping 命令

A. 限制 Ping 数量 (-c)

ping -c 5 google.com  # Sends only 5 packets

B. 修改数据包大小 (-s)

ping -s 1000 google.com  # Sends 1000-byte packets

C. 更快的 Ping (-i)

ping -i 0.2 google.com  # Sends a ping every 0.2 seconds

D. 时间戳记录 (-D)

ping -D google.com >> ping_log.txt  # Logs with timestamps

E. 持续 Ping 监控

ping google.com  # Runs until manually stopped (Ctrl+C)

使用 mtr 分析网络延迟(Ping + 路由跟踪)

mtr 显示数据包如何通过网络传输。它结合了 ping 和 traceroute 的功能。对于不了解的人来说,mtr 代表 My traceroute。

您可以使用 mtr,当;

  • 诊断连接缓慢,
  • 找到网络故障点
  • 发现跳点间歇性丢失。

在你的 Linux 系统上使用以下命令安装 mtr 工具:

sudo apt install mtr         # Debian/Ubuntu
sudo dnf install mtr         # Fedora

现在使用命令分析网络延迟:

mtr google.com

这显示了跳数、延迟和丢包的实时表格。

使用 mtr 分析网络延迟

你也可以生成一份报告:

mtr -c 100 -r google.com > report.txt

其他有用的选项:

  • -T:使用 TCP 而不是 ICMP
  • -u:使用 UDP
  • -c:要发送的数据包数量

使用 smokeping 监控网络延迟随时间变化

对于历史延迟跟踪,请使用 smokeping。它在后台运行并存储可以在浏览器中查看的图表。请注意,此工具需要像 Apache 或 Nginx 这样的 Web 服务器来查看图表。

Smokeping 有用的地方是,

  • 长期监测
  • 发现模式(例如,晚上放缓),
  • 多个服务器监控。

要在基于 Debian 的系统上安装 smokeping,请使用以下命令:

sudo apt install smokeping apache2

安装完成后,编辑 Targets 文件:

sudo nano /etc/smokeping/config.d/Targets

添加一个类似的部分:

+ Google
menu = Google DNS
title = Google Ping
host = 8.8.8.8

重新启动 smokeping 服务:

sudo systemctl restart smokeping

然后,打开你的网页浏览器并导航到 http://localhost/smokeping。

你会看到延迟和丢包的图表。

使用 smokeping 监控网络延迟

点击左侧窗格中的每个链接以查看相应的图表。

高延迟与数据包丢失故障排除

如果你的 ping 结果显示高延迟或丢包,请尝试以下修复方法:

1. 检查您的互联网连接

  • 重新启动你的路由器/调制解调器。
  • 使用有线连接进行测试(Wi-Fi可能会引入延迟)。

2. 比较不同的目标

ping google.com
ping facebook.com

如果只有一个网站延迟很高,问题很可能出在他们那一端。

3. 使用 Traceroute 查找网络跳数

traceroute google.com  # Shows each hop’s latency

在特定跳数出现高延迟?那就是瓶颈。

4. 检查 ISP 问题

如果多个网站延迟很高,请联系你的互联网服务提供商。

结论

一旦知道使用哪些工具,在 Linux 上测量网络延迟就很简单。首先使用 ping 进行快速测试。使用 mtr 排查特定路径的问题。如果你想要随时间变化的可视化报告,可以部署 smokeping。

使用这些工具,您可以:

  • 检测缓慢或故障的网络链路,
  • 证明问题出在你的互联网服务提供商(ISP)
  • 监控随时间变化的延迟模式。

好了,就到这里。你使用哪些工具来测量和监控网络延迟?请在下方评论区分享。

相关阅读:

  • 如何在 Linux 中使用 Sniffnet 轻松监控您的互联网流量
  • 在 Linux 中使用 ping 命令输出打印时间戳
  • 使用 Gping 以图形格式显示 Ping 命令输出
  • Prettyping - 让 Ping 命令的输出更美观、更易读
  • 如何在 Linux 中一次性 Ping 多个主机
  • Ping 多个服务器并在类似 Top 的文本界面中显示输出

精选图片由 Pixabay 提供。