iPerf3 使用指南

发布时间:2024年01月19日

iPerf3 使用指南

1 iPerf3 简介

iPerf3 是用于主动测试 IP 网络上最大可用带宽的工具。它支持时序、缓冲区、协议(TCP,UDP,SCTP 与 IPv4 和IPv6)有关的各种参数。对于每次测试,它都会详细的带宽报告,延迟抖动和数据包丢失。
它与原始 iPerf 不共享任何代码,也不向后兼容。
它是一个 C/S 架构的测试工具,需要在同时运行在服务器端和客户端。
支持的平台:Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, iPhone/iPad 等。

2 安装指令

2.1 Windows

下载链接:https://iperf.fr/iperf-download.php

官网直接下载安装包,下载完成后解压,使用时进入 cmd 终端,cd 到解压路径,可以找到 iperf3.exe 程序即可正常使用。

iperf3

2.2 Linux

在 Ubuntu 系统中可以直接使用以下命令进行安装:

sudo apt install -y iperf3 

如果需要在开发板上运行,需要交叉编译 iperf3 源码到目标板,欲知后事如何,敬请关注。

3 入门用法

  • 在服务端(192.168.9.10)运行 iperf3,默认端口为 5201

    iperf3 -s
    
  • 在客户端运行 iperf3,填写服务端的地址:

    iperf3 -c 192.168.9.10
    

默认选项是使用 TCP 进行测试,测试时间 10 秒,报告间隔为 1 秒。

如果只是需要确认网络带宽,那么以上的方法即可满足需求。服务端与客户端运行截图如下:

iperf3 server

从客户端结果可知服务端与客户端的网络带宽为 940 Mbits/sec。

4 进阶用法

接下来,我们对 iperf3 提供的参数进行一些讲解同时进行一些更加深入的测试验证。

在测试过程中随时可以通过 iperf3 的帮助系统查看 iperf3 的命令的使用说明(参考 5 iPerf3 命令说明):

iperf3 -h

4.1 启动服务端

iperf3 -s
  • -s 以服务器模式运行

如果需要指定端口运行,使用 -p 参数带上端口号,在这种情况下客户端也必须指定相同端口:

iperf3 -s -p 8801    # server
iperf3 -c 192.168.9.10 -p 8801 # client
  • -s 以服务器模式运行
  • -c 客户端运行并指定服务端的 IP 地址
  • -p 要侦听/连接的服务器端口

在同一时刻只允许有一个客户端进行测试,如果有多个客户端同时发起测试请求,则后面连接的客户端会收到提示:

iperf3: error - the server is busy running a test. try again later

4.2 TCP 带宽测试

  1. 通用测试

iperf3 general test

iperf3 -c 192.168.9.10
  • -c 客户端运行并指定服务端的 IP 地址

测试结果:

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.09 GBytes   939 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.09 GBytes   937 Mbits/sec                  receiver
  • Interval: 程序的运行时间
  • Transferf: 传输的数据总量
  • Bitrate: 测试出的带宽比特率(在 3.1.3 版本中称之为 Bandwidth
  • Retr: 重新传输的 TCP 数据包
  1. 时长测试(压测使用)

默认情况下 iPerf3 只进行 10 秒的测试,如果需要进行长时间的运行可以通过 -t 参数指定测试时长,单位为秒。

iperf3 -c 192.168.9.10 -t 60
  • -c 客户端运行并指定服务端的 IP 地址
  • -t 以秒为单位的传输时间(默认 10 秒)
  1. 并行测试

iperf3 para test

可以在客户端设置多个并行数据流进行测试,验证多个数据流同时发送的性能,并计算总带宽。

iperf3 -c 192.168.9.10 -P 3
  • -P, --parallel 大写的 P,要运行的并行客户端流的数量

测试结果:

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   371 MBytes   311 Mbits/sec    0             sender
[  5]   0.00-10.00  sec   366 MBytes   307 Mbits/sec                  receiver
[  7]   0.00-10.00  sec   373 MBytes   313 Mbits/sec    0             sender
[  7]   0.00-10.00  sec   366 MBytes   307 Mbits/sec                  receiver
[  9]   0.00-10.00  sec   373 MBytes   313 Mbits/sec    0             sender
[  9]   0.00-10.00  sec   366 MBytes   307 Mbits/sec                  receiver
[SUM]   0.00-10.00  sec  1.09 GBytes   937 Mbits/sec    0             sender
[SUM]   0.00-10.00  sec  1.07 GBytes   922 Mbits/sec                  receiver

通过 ID 区分不同的客户端流,最后结果在 [SUM] 体现。并行测试时总带宽并不会发生改变,速率与非并行测试的结果一致。

  1. 反向测试

iperf3 reverse test

反向测试可以理解为是在做「下行带宽」测试,由服务端发送数据,客户端接收,测试服务端到客户端的网络带宽与性能。

iperf3 -c 192.168.9.10 -R
  • -R, --reverse 大写的 R,以反向模式运行(服务器发送,客户端接收)

这个测试有意思的地方在于,上下行的速率并不总是一致的,以我们的服务器与客户端的测试为例:

  • 客户端往服务器发送的速率是 50.0 Mbits/sec
  • 而服务器往客户端发送速率是 92.0 Mbits/sec
  • 速率差异与网络配置有关

iperf3 reverse2 test

4.3 UDP 带宽测试

  1. 使用 UDP 协议进行测试
iperf3 -c 192.168.9.10 -u
  1. 使用 UDP 协议进行测试,同时设置测试带宽,因为 UDP 默认使用 1Mbits/sec,可以根据需要设置测试带宽,比如 1000M,同时使用 -t 参数配置测试时间为 60 秒。
iperf3 -c 192.168.9.10 -u -b 1000M -t 60

测试结果:

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-60.00  sec  6.68 GBytes   956 Mbits/sec  0.000 ms  0/4949773 (0%)  sender
[  5]   0.00-60.00  sec  1.72 GBytes   246 Mbits/sec  0.047 ms  4285962/4946689 (87%)  receiver
  • Interval: 程序的运行时间
  • Transferf: 传输的数据总量
  • Bitrate: 测试出的带宽比特率(在 3.1.3 版本中称之为 Bandwidth
  • Jitter: 抖动
  • Lost/Total Datagrams: 丢包率

使用大包进行测试时,客户端往服务器发送的速率为 956 Mbits/sec,无延时抖动,无丢包;A客户端数据接收的速率为 246 Mbits/sec,抖动 0.047 ms,丢包 13%。

需要下调测试带宽,比如 200M。

iperf3 -c 192.168.9.10 -u -b 200M -t 60

测试结果:

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-60.00  sec  1.40 GBytes   200 Mbits/sec  0.000 ms  0/1035910 (0%)  sender
[  5]   0.00-60.00  sec  1.40 GBytes   200 Mbits/sec  0.005 ms  0/1035910 (0%)  receiver
  1. 反向测试,从服务端往客户端发送,同时忽略掉前 10 秒的测试
iperf3 -c 192.168.9.10 -u -b 200M -t 60 -R -O 10

UDP 的测试有点神奇,当完成了上一个的测试之后再开始新的 UDP 测试时,前段部分的数据可信度不高,建议使用 -O 参数忽略掉。

5 iPerf3 命令说明

用法:

iperf3 [-s|-c host] [options]
参数说明备注
-p, --port #要侦听/连接的服务器端口
-f, --format [kmgtKMGT]报告格式:Kbits, Mbits, Gbits, Tbits
-i, --interval #每次报告的间隔,单位为秒
-F, --file name测试所用文件的文件名。如果在 Client 端使用,发送该文件用作测试;如果使用在 Server 端,则是将数据写入该文件
-A, --affinity n/n,m设置 CPU 亲和力
-B, --bind绑定指定的网卡接口
-V, --verbosevebose 模式,运行时输出最详细的日志信息
-J, --json运行时以 JSON 格式输出结果
--logfile f输出到文件
--forceflush强制刷新每次间隔的日志信息3.7 版本+
-d, --debug以 debug 模式输出结果
-v, --version显示版本信息并退出
-h, --help显示帮助信息并退出
Server 端参数
-s, --server以 Server 模式运行
-D, --daemon在后台以守护进程运行
-I, --pidfile file指定 pid 文件
-1, --one-off只接受 1 次来自 Client 端的测试,然后退出
--rsa-private-key-path用于解密身份验证凭据的RSA私钥的路径3.7 版本+
--authorized-users-path包含用户凭据的配置文件的路径3.7 版本+
Client 端参数
-c, --client <host>以 Client 模式运行,并指定 Server 端的地址
--sctp使用 SCTP 协议进行测试3.7 版本+
-X, --xbind <name>将 SCTP 关联绑定到链接3.7 版本+
--nstreams #SCTP流的数量3.7 版本+
-u, --udp以 UDP 协议进行测试
--connect-timeout #控制连接设置超时(毫秒)3.7 版本+
-b, --bitrate #[KMG][/#]限制测试带宽。UDP 默认为 1Mbit/秒,TCP 默认无限制
--pacing-timer #[KMG]设置起搏时间,单位为微秒(默认值为1000)3.7 版本+
--fq-rate #[KMG]以位/秒为单位启用基于公平排队的套接字调步(仅限Linux)3.7 版本+
-t, --time #以时间为测试结束条件进行测试,默认为 10 秒
-n, --bytes #[KMG]以数据传输大小为测试结束条件进行测试(代替-t)
-k, --blockcount #[KMG]以传输数据包数量为测试结束条件进行测试(代替-n或-t)
-l, --length #[KMG]读写缓冲区的长度,TCP 默认为 128K;UDP 默认为 8K,在 3.7 版本之后,UDP 默认使用动态分配或 1460 字节。
--cport <port>指定 Client 端运行所使用的 TCP 或 UDP 端口,默认为临时端口
-P, --parallel #测试数据流并发数量
-R, --reverse反向模式运行(Server 端发送,Client 端接收)
--bidir以双向模式运行。客户端和服务器发送和接收数据。3.7 版本+
-w, --window #[KMG]设置套接字缓冲区大小,TCP 模式下为窗口大小
-C, --congestion <algo>设置 TCP 拥塞控制算法(仅支持 Linux 和 FreeBSD )
-M, --set-mss #设置 TCP/SCTP 最大分段长度(MSS,MTU - 40 字节)
-N, --no-delay设置 TCP/SCTP no delay,屏蔽 Nagle 算法
-4, --version4仅使用 IPv4
-6, --version6仅使用 IPv6
-S, --tos N设置 IP 服务类型(TOS,Type Of Service),0-255。可以使用八进制和十六进制的常用前缀,即 52,064 和 0x34 都指定相同的值。
--dscp N or --dscp val设置 IP dscp 值,0-63 或符号。数值可以用十进制、八进制和十六进制指定(请参阅上面的–tos)。3.7 版本+
-L, --flowlabel N设置 IPv6 流标签(仅支持 Linux)
-Z, --zerocopy使用「zero copy」(零拷贝)方法发送数据
-O, --omit N忽略前 n 秒的测试
-T, --title str设置每行测试结果的前缀
--extra-data str要包含在客户端和服务器 JSON 中的数据字符串3.7 版本+
--get-server-output从 Server 端获取测试结果
--udp-counters-64bit在 UDP 测试包中使用 64 位计数器(防止计数器溢出)
--repeating-payload在有效载荷中使用重复模式,而不是随机化的有效载荷(如iperf2)3.7 版本+
--username身份验证用户名3.7 版本+
--rsa-public-key-path用于加密身份验证凭据的 RSA 公钥的路径3.7 版本+
文章来源:https://blog.csdn.net/bluebird_shao/article/details/135696668
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。