精讲网络速率测试工具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

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

常见遇到的打流问题

  1. server端报出端口busy

解决办法:server和client设置到其他端口在进行打流

  1. client端报出iperf3:error - unable to read form stream socket:Resource temporarily unavailable

解决办法:server和client两端都是加上-B 192.168.132.xx(本地IP)