在进行跨地域 Linux 服务器之间的网络质量测试时,iperf3 是一个非常强大的命令行工具。本文将介绍如何使用 iperf3 重点测试线路的 UDP 丢包率,以及如何解决服务端常见的端口占用报错。
1. 客户端测试命令详解
UDP 模式 (测试丢包率与延迟)
要测试线路质量,特别是 UDP 丢包率 (Datagrams lost),请使用:
iperf3 -c 192.0.2.1 -u -R -t 15 -b 128M
TCP 模式 (测试最大带宽)
如果仅测试 TCP 最大带宽,可使用:
iperf3 -c 192.0.2.1 -R
(注:TCP 模式会自动重传丢包,无法直接看到丢包率,但适合测试最大吞吐量)
参数解析
-c 192.0.2.1: 指定客户端模式 (Client),并连接到目标服务器 IP192.0.2.1。-u: 关键参数。使用 UDP 协议而不是默认的 TCP。UDP 测试不会进行重传,因此能更直观地反映线路的丢包情况(Packet Loss)和抖动(Jitter)。-R: 反向模式 (Reverse)。- 默认情况下,客户端发送数据,服务端接收(测试上传速度)。
- 加上
-R后,服务端发送数据,客户端接收(测试下载速度)。这对于测试“服务器到我本地”或“源站到中转机”的入站网络质量非常有用。
-t 15: 测试持续时间为 15 秒。-b 128M: 目标带宽 (Bandwidth) 设置为 128 Mbits/sec。- 如果不设置此项,UDP 模式下 iperf3 默认只使用 1Mbps,无法测出高带宽下的丢包表现。建议将其设置为略低于你的物理带宽上限。
结果关注点
执行命令后,重点关注最后报告中的 Lost/Total 和 Datagrams 一栏:
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams[ 5] 0.00-15.00 sec 229 MBytes 128 Mbits/sec 0.038 ms 0/169410 (0%) receiver
如果 Lost 百分比过高(例如 > 5%),说明线路质量较差,用于视频推流或游戏可能会出现卡顿。
2. 服务端常见报错与修复
在服务端启动 iperf3 时,你通常会运行:
iperf3 -s
但有时会遇到如下报错,提示地址已被占用:
root@us-free-center:~# iperf3 -s iperf3: error - unable to start listener for connections: Address already in useiperf3: exiting
原因分析
这通常意味着 5201 端口(iperf3 默认端口)已经被另一个 iperf3 进程占用,或者上一次异常退出后进程卡死。
解决方案
我们需要找到占用该端口的进程并将其终止。最简单的方法是使用 fuser 命令:
fuser -k 5201/tcp
5201/tcp: 指定要查找的端口和协议。-k:不仅仅是查找,直接 Kill 掉占用该端口的进程。
执行完上述命令后,再次运行 iperf3 -s 即可恢复正常。
