前言
哈喽家人们!今天咱们来聊点实用的东西——如何在 Linux 系统中测试两台 VPS 之间的网络速度。
一般在咱们的日常操作里,大家可能都会用 ping
来测试服务器之间的网络延迟。
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=60 time=0.854 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=60 time=0.856 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=60 time=0.975 ms
--- 1.1.1.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5071ms
rtt min/avg/max/mdev = 0.850/0.885/0.975/0.047 ms
Python
确实,ping
是个很方便的小工具,但问题是,延迟只是网络性能的一个小维度而已,真正决定体验的还有带宽和吞吐量!
那么,这时候我们该怎么办呢?别担心,这就给大家介绍一个超棒的工具——iperf3。它不仅可以帮你精准测试网络速度,还非常简单易用。
教程
1.安装
在Linux上安装iperf3是非常简单的,首先我们连接SSH获取root权限,apt安装iperf3。
sudo -i
CSS
apt install iperf3
Undefined
安装中可能会需要我们确认,我们输入y或选择yes同意即可。
安装好后,我们可以通过--help
来获取详细的iperf3帮助。
iperf3 --help
Bash
要注意,两台服务器都要安装哦!
2.启动服务端
首先,我们先挑选一方作为服务端,使用-s启动。
iperf3 -s
Undefined
启动成功后,可以看到启动成功的界面,并告诉你正在监听的端口。
如果没有在安全组或防火墙内放通提示中的端口,或是端口已经被占用,是无法测速的。我这边已经在安全组放通了相应的端口,在这里就不做演示了。
3.客户端测速
接下来,我们来到客户端,并执行以下命令。这里要将1.1.1.1
替换为你的客户端IPv4。
示例:
iperf3 -c 1.1.1.1 -b 0 -n 10G -f M -4
CSS
-c 1.1.1.1
指定的服务器端的IP地址。
-b 0
指定的带宽,0代表跑满宽带。
-n 10G
指定的测试数据包的大小。
-f M
指定显示的单位,M就是Mbits。
-4
指定使用IPv4进行测速。
接下来,客户端会开始给我们返回测速的数据。同时服务端也会显示相应的上传数据。
Connecting to host x.x.x.x, port 5201
[ 5] local 192.168.100.22 port 39932 connected to x.x.x.x port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.04 sec 2.86 MBytes 2.74 MBytes/sec 0 164 KBytes
[ 5] 1.04-2.12 sec 1.14 MBytes 1.06 MBytes/sec 0 556 KBytes
[ 5] 2.12-3.00 sec 1.25 MBytes 1.42 MBytes/sec 0 1021 KBytes
[ 5] 3.00-4.03 sec 1.25 MBytes 1.22 MBytes/sec 2 1012 KBytes
...
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-39.27 sec 27.8 MBytes 0.71 MBytes/sec 2 sender
[ 5] 0.00-39.27 sec 0.00 Bytes 0.00 MBytes/sec receiver
iperf3: interrupt - the client has terminated
CSS
怎么样?是不是非常简单?快去自己的服务器上测试一下吧!
--help解析
使用方法: iperf3 [-s|-c host] [选项]
iperf3 [-h|--help] [-v|--version]
服务器或客户端通用选项:
-p, --port # 服务器监听或客户端连接的端口号
-f, --format [kmgtKMGT] 输出数据单位格式: Kbits, Mbits, Gbits, Tbits
-i, --interval # 定期吞吐量报告的时间间隔(秒)
-F, --file name 指定文件进行发送或接收
-A, --affinity n/n,m 设置CPU绑定
-B, --bind <host> 绑定到与指定地址关联的接口
-V, --verbose 输出详细信息
-J, --json 输出为JSON格式
--logfile f 将输出发送到指定日志文件
--forceflush 强制每个间隔刷新输出
-d, --debug 输出调试信息
-v, --version 显示版本信息并退出
-h, --help 显示此帮助信息并退出
服务器专用选项:
-s, --server 启动为服务器模式
-D, --daemon 将服务器作为守护进程运行
-I, --pidfile file 写入PID文件
-1, --one-off 仅处理一个客户端连接然后退出
--rsa-private-key-path 用于解密认证凭据的RSA私钥路径
--authorized-users-path 包含用户凭据的配置文件路径
客户端专用选项:
-c, --client <host> 启动为客户端模式并连接到<host>
--sctp 使用SCTP协议而非TCP
-X, --xbind <name> 将SCTP关联绑定到链接
--nstreams # SCTP流的数量
-u, --udp 使用UDP而非TCP
--connect-timeout # 控制连接设置超时时间(毫秒)
-b, --bitrate #[KMG][/#] 目标比特率(0表示无限制)
(UDP默认1 Mbit/sec,TCP默认无限制)
(可选斜杠加上数据包数量用于突发模式)
--pacing-timer #[KMG] 设置节奏计时器(微秒,默认1000)
--fq-rate #[KMG] 启用基于公平队列的套接字节速控制(仅Linux)
-t, --time # 发送数据的时间(秒,默认10秒)
-n, --bytes #[KMG] 发送数据的字节数(替代-t选项)
-k, --blockcount #[KMG] 发送数据的块数(替代-t或-n选项)
-l, --length #[KMG] 读写缓冲区长度
(TCP默认128 KB,UDP动态或1460字节)
--cport <port> 绑定到特定客户端端口(TCP和UDP,默认随机端口)
-P, --parallel # 并行客户端流的数量
-R, --reverse 启用反向模式(服务器发送,客户端接收)
--bidir 启用双向模式(客户端和服务器都发送和接收数据)
-w, --window #[KMG] 设置窗口大小/套接字缓冲区大小
-C, --congestion <algo> 设置TCP拥塞控制算法(仅限Linux和FreeBSD)
-M, --set-mss # 设置TCP/SCTP的最大分段大小(MTU减去40字节)
-N, --no-delay 禁用Nagle算法(TCP/SCTP无延迟)
-4, --version4 仅使用IPv4
-6, --version6 仅使用IPv6
-S, --tos N 设置IP服务类型值(0-255)
支持八进制和十六进制前缀,例如52、064或0x34
--dscp N or --dscp val 设置IP的DSCP值(0-63或符号值)
数值支持十进制、八进制和十六进制(参见--tos)
-L, --flowlabel N 设置IPv6流标签(仅Linux支持)
-Z, --zerocopy 使用“零拷贝”方法发送数据
-O, --omit N 忽略前N秒
-T, --title str 为每行输出加上指定的字符串前缀
--extra-data str 在客户端和服务器JSON中包含的数据字符串
--get-server-output 从服务器获取结果
--udp-counters-64bit 在UDP测试包中使用64位计数器
--repeating-payload 使用重复的有效负载模式(如iperf2),而不是随机有效负载
--username 用于认证的用户名
--rsa-public-key-path 用于加密认证凭据的RSA公钥路径
[KMG] 表示支持的后缀: K(千)、M(兆)、G(吉)
iperf3主页: https://software.es.net/iperf/
报告问题: https://github.com/esnet/iperf