精讲网络速率测试工具iperf3使用
iPerf3是用于主动测试IP网络上最大可用带宽的工具。
iperf3简介
iPerf3支持时序、缓冲区、协议(TCP,UDP,SCTP与IPv4和IPv6)有关的各种参数。对于每次测试,它都会详细的带宽报告,延迟抖动和数据包丢失。
它与原始 iPerf 不共享任何代码,也不向后兼容。
它是一个C/S架构的测试工具,需要在同时运行在服务器端和客户端。
支持的平台:Windows, Linux , Android, MacOS X, FreeBSD, OpenBSD, iPhone/iPad等
iperf 主要测试网络以下三个方面:吞吐量、稳定性、可靠性。
iperf 的参数比较多,主要从三个对象进行罗列,分别是客户端、服务端、公共使用
执行:iperf3 -h 可以查看所有的命令信息,以下是中文信息, iPerf 3.1.2 支持的所有参数:
iperf3安装
Windows
下载链接:https://iperf.fr/iperf-download.php
官网直接下载Android/iPhone/iPad安装包,下载完成后解压,使用时进入 cmd 终端,cd 到解压路径,可以找到 iperf3.exe 程序即可正常使用。
Linux
在 Ubuntu 系统中可以直接使用以下命令进行安装,或者 官网下载离线安装包:
sudo apt install -y iperf3
iperf3命令说明
用法:
iperf3 [-s|-c host] [options]
公共使用参数
-f, --format [kmKM] 报告格式: Kbits, Mbits, KBytes, MBytes。
-i, --interval # 设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。
-l, --len #[KM] 设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。
-m, --print_mss 输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。
-o, --output <filename> 将报告或错误消息输出到此指定文件。
-p, --port # 设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。
-u, --udp 使用UDP而不是TCP,默认是TCP
-w, --window #[KM] 设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。
-B, --bind <host> bind to <host>, an interface or multicast address
-C, --compatibility 与旧版本一起使用不会发送额外的MSG
-M, --mss # 通过TCP_MAXSEG选项尝试设置TCP最大信息段的值。MSS值的大小通常是TCP/IP头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。
-N, --nodelay 设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。
-V, --IPv6Version 绑定一个IPv6地址。服务端:$ iperf -s –V客户端:$ iperf -c <Server IPv6 Address> -V注意:在1.6.3或更高版本中,指定IPv6地址不需要使用-B参数绑定,在1.6之前的版本则需要。在大多数操作系统中,将响应IPv4客户端映射的IPv4地址。
服务端参数
-s, --server 在服务器模式下运行。
-U, --single_udp 在单线程UDP模式下运行。
-D, --daemon 将服务器作为守护进程运行。
客户端参数
-b, --bandwidth #[KM] UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。
-c, --client <host> 运行Iperf的客户端模式,连接到指定的 Iperf 服务器端。
-d, --dualtest 运行双测试模式。这将使服务器端反向连接到客户端,使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。
-n, --num #[KM] 指定传输的字节数,eg:iperf -c 222.35.11.23 -n 100000。
-r, --tradeoff 往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。
-t, --time # 设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。
-F, --fileinput <name> 使用特定的数据流测量带宽,例如指定的文件。$ iperf -c <server address> -F <file-name>
-I, --stdin 与-F一样,由标准输入输出文件输入数据。
-L, --listenport # 指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。
-P, --parallel # 线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。
-T, --ttl # 出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。
-Z, --linux-congestion <algo> 设置TCP拥塞控制算法(仅限Linux)。
iperf3操作实例解析
运行iperf3在客户端,使用UDP协议,并设置使用的测试带宽
iperf3 -c serverIP -b 1000M -t 60 -d
-c 为客户端运行并要指定服务端的IP地址
-b 表示使用的测试带宽
-t 表示以时间为测试结束条件进行测试,默认为 10 秒;
-d 打印出更详细的debug调试信息
iperf3 -c 192.168.1.1 -b 1000M -t 60 -d
运行iperf3在服务器端,默认端口号为5201
iperf3 -s
运行iperf3在服务器端,如果需要指定的端口号加上-p port
iperf3 -s -p 【这里写指定的端口号】
iperf3 -s -p 8888
运行iperf3在客户端,开始带宽测试
iperf3 -c [serverIP,这些写服务器的IP地址]
iperf3 -c 192.168.1.1
运行iperf3在客户端,设置多个并行数据流-P
iperf3 -c serverIP -P streams
iperf3 -c 192.168.1.1 -P 3
运行iperf3在客户端,反向测试(服务器端发送数据到客户端)
iperf3 -c serverIP -R
iperf3 -c 192.168.1.1 -R
常见遇到的打流问题
- server端报出端口busy
解决办法:server和client设置到其他端口在进行打流
- client端报出iperf3:error - unable to read form stream socket:Resource temporarily unavailable
解决办法:server和client两端都是加上-B 192.168.132.xx(本地IP)