iperf 命令是一个网络性能测试工具。iperf 可以测试 TCP 和 UDP 带宽质量。iperf 可以测量最大 TCP 带宽,具有多种参数和 UDP 特性。iperf 可以报告带宽,延迟抖动和数据包丢失。利用 iperf 这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。

iperf 在内存中运行,不会涉及到文件系统。iperf 存在非常多的版本,Windows,Linux,Android,iOS 都有对应的版本。可以到官网下载

安装

Linux 下安装:

sudo apt-get install iperf

其他系统到参考官网

iperf 是一个命令行工具,当然如果搜索也能发现 GUI 的工具,比如 jperf, xjerf 等等。不过还是推荐使用命令行。

iperf 使用非常简单的 C/S 架构,client 使用 -c 参数,服务端使用 -s

实例

宽带测试通常采用 UDP 模式,首先以链路理论带宽作为数据发送速率进行测试,从客户端到服务器之间的链路理论带宽为 100 Mbps,先使用 -b 100M 测试,然后根据测试结果,以实际带宽测试

服务端:

iperf -u -s # UDP 模式

客户端第一种模式

iperf -u -c server_address -b 100M -t 60

在 UDP 模式下,以 100Mbps 为数据发送速率,客户端到 IP 上传带宽测试,测试时间 60 秒。

客户端同时发起 30 个线程连接,以 5Mbps 为数据发送速率

iperf -u -c server_address -b 5M -P 30 -t 60

或者客户端直接进行上下行带宽测试

iperf -u -c server_address -b 100M -d -t 60

如果不加 -u 则使用 TCP 模式

iperf -s

客户端持续 60 秒

iperf -c server_address -t 60

设置服务端端口

使用 -p port 来指定服务端端口,默认是 5201

间隔时间报告

使用 -i interval 参数来表示间隔时间

iperf -c 192.168.2.105(server address) -i 2

表示间隔 2 秒打印结果

iperf 版本区别

iperf 自身存在很多个版本,Ubuntu 默认源中可能有一个叫做 iperf, 也有一个叫做 iperf3, 这两个是不同版本的 iperf, 在使用 iperf 的时候要确保版本一致。不同的版本有不同的架构和不同的特性。

然而这两个版本 iperf3 是不兼容 iperf 2.x 的。可以这么理解 iperf 是内存中的网络性能测试工具,而 iperf3 是从头还是编写的一套新程序,目标是简化代码量,并且设计为工具库,可以嵌入到其他工具中。1

两者不同的区别

服务端:

功能 iperf iperf3
使用默认端口 iperf -s iperf3 -s
守护模式下,使用 TCP window iperf -s -w 32M -D iperf3 -s -D
Start UDP server on port 5003, and give 1 sec interval reports. Note that for iperf3 the -u option is passed to the server from the client. iperf -i1 -u -s -p 5003 iperf3 -s -p 5003

客户端:

功能 iperf / iperf3
执行 30 秒测试,每秒发送结果 iperf/iperf3 -c server_address -i 1 -t 30
执行逆向从服务端到本地测试 iperf/iperf3 -c server_address -i 1 -t 10 -R
使用 4 个并发,32M TCP buffer iperf/iperf3 -c server_address -i 1 -t 20 -w 32M -P 4
测试 200Mbps UDP iperf/iperf3 -c server_address -u -i 1 -b 200M

iperf3 增加了一些额外的功能,比如 -i 模式可以提供 TCP retransit (中继)结果,并且 verbose 模式可以打印更多有效的信息,比如 CPU 利用率等等。

更多的使用可以参考这里

更多 iperf 2.0.5 和 iperf 2.0.8+ 和 iperf 3.1.5+ 的区别可以在这里 查看。

使用

外延

  • 另外一个 TCP 性能测试工具 nuttcp

Android

在 Android 手机上可以使用一款叫做 Magic iPerf 的工具来进行测试。

或者使用 Termux 来直接使用命令测试。

reference