环境:

  • iperf 3.18

简介

百科:
Iperf 是一个网络性能测试工具。Iperf可以测试最大 TCP 和 UDP 带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。

官方文档:https://iperf.fr/iperf-doc.php

安装

使用

命令语法格式:

iperf3 [-s|-c host] [options]

使用 iperf3 -help 查看所有的操作指令

服务器或客户端通用选项:

  • -p, --port #:指定服务器监听的端口号或客户端连接的端口号。
  • -f, --format [kmgtKMGT]:指定带宽报告的单位,可选 Kbits(千比特)、Mbits(兆比特)、Gbits(吉比特)、Tbits(太比特)。
  • -i, --interval #:设置周期性带宽报告的间隔时间(秒)。
  • -I, --pidfile file:将进程 ID(PID)写入指定的文件。
  • -F, --file name:发送或接收指定的文件。
  • -A, --affinity n[,m]:设置 CPU 亲和性,将进程绑定到指定的核心 n(可选客户端绑定到核心 m,服务器绑定到核心 n)。
  • -B, --bind <host>:绑定到指定主机地址关联的网络接口。
  • -V, --verbose:输出更详细的信息。
  • -J, --json:以 JSON 格式输出结果。
  • --json-stream:以行分隔的 JSON 格式输出结果。
  • --logfile f:将输出发送到指定的日志文件。
  • --forceflush:强制在每个间隔时间刷新输出。
  • --timestamps<=format>:在每行输出前添加时间戳(可选 = 和格式字符串,遵循 strftime(3) 的格式)。
  • --rcv-timeout #:设置接收数据的空闲超时时间(默认 120000 毫秒)。
  • -d, --debug[=#]:输出调试信息(可选 = 和调试级别:1-4,默认是 4,输出所有信息)。
  • -v, --version:显示版本信息并退出。
  • -h, --help:显示帮助信息并退出。

备注:

  • [KMG] 表示选项支持 K(千)、M(兆)、G(吉)后缀。

服务端

服务器特定选项:

  • -s, --server:以服务器模式运行。
  • -D, --daemon:以守护进程模式运行服务器。
  • -1, --one-off:处理一个客户端连接后退出。
  • --server-bitrate-limit #[KMG][/#]:设置服务器的总比特率限制(默认 0 表示无限制,可选斜杠和秒数用于平均数据速率,默认 5 秒)。
  • --idle-timeout #:在服务器空闲指定秒数后重启(默认无超时)。
  • --rsa-private-key-path:指定用于解密认证凭证的 RSA 私钥路径。
  • --authorized-users-path:指定包含用户凭证的配置文件路径。
  • --time-skew-threshold:设置服务器和客户端在认证过程中的时间偏差阈值(秒)。
  • --use-pkcs1-padding:使用 PKCS1 填充(需自行承担风险)。

启动服务端:

#默认监听5201端口
iperf3 -s

#指定监听端口
iperf3 -s -p 10086
#守护进程模式。守护进程是一种在后台运行的进程,通常不与任何终端或用户交互,适合长期运行的服务。
iperf3 -s -D
#--logfile,指定日志输出

#使用 taskkill 指令关闭守护进程服务
tasklist | findstr iperf3
taskkill /PID <PID> /F
#/T 终止指定进程及其所有子进程
#/F 强制终止进程

客户端

客户端特定选项:

  • -c, --client <host>[%<dev>]:以客户端模式运行,连接到指定主机(可选 <dev> 等同于 --bind-dev <dev>)。
  • -u, --udp:使用 UDP 而不是 TCP。
  • --connect-timeout #:设置控制连接建立的超时时间(毫秒)。
  • -b, --bitrate #[KMG][/#]:设置目标比特率(0 表示无限制,默认 UDP 为 1 Mbit/sec,TCP 无限制,可选斜杠和数据包数量用于突发模式)。
  • --pacing-timer #[KMG]:设置服务器的定时器用于数据发送节奏(微秒,默认 1000,已弃用,仅用于旧版本服务器的兼容性)。
  • -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]:设置发送/接收的套接字缓冲区大小(间接设置 TCP 窗口大小)。
  • -M, --set-mss #:设置 TCP/SCTP 最大段大小(MTU - 40 字节)。
  • -N, --no-delay:设置 TCP/SCTP 无延迟,禁用 Nagle 算法。
  • -4, --version4:仅使用 IPv4。
  • -6, --version6:仅使用 IPv6。
  • -S, --tos N:设置 IP 服务类型(0-255,支持十进制、八进制和十六进制,如 52、064、0x34)。
  • --dscp N 或 --dscp val:设置 IP DSCP 值(0-63 或符号值,支持十进制、八进制和十六进制)。
  • -Z, --zerocopy:使用“零拷贝”方法发送数据。
  • -O, --omit N:在测试前进行 N 秒的预测试,并忽略预测试的统计信息。
  • -T, --title str:在每行输出前添加前缀字符串。
  • --extra-data str:在客户端和服务器的 JSON 输出中包含额外的数据字符串。
  • --get-server-output:从服务器获取结果。
  • --udp-counters-64bit:在 UDP 测试数据包中使用 64 位计数器。
  • --repeating-payload:在负载中使用重复模式,而不是随机化负载(类似于 iperf2)。
  • --dont-fragment:设置 IPv4 的“不分片”标志。
  • --username:设置认证的用户名。
  • --rsa-public-key-path:指定用于加密认证凭证的 RSA 公钥路径。
#连接到 iperf3 服务器并进行网络性能测试
#默认进行 TCP 测试
iperf3 -c <服务器IP> [-p 端口号]

#多链路测试。iperf3 是单线程的,这里是创建多个并发的客户端连接,从而模拟多线程的效果
iperf3 -c <服务器IP> [-p 端口号] -P 10
#结果看 SUM 一栏

#UDP 测试
iperf3 -c <服务器IP> [-p 端口号] -u -b 100M

#默认模式:客户端(-c)向服务器发送数据,服务器接收数据。用于测试从客户端到服务器的上行带宽(上传速度)
#客户端反向测试。服务器发送数据,客户端(-c)从服务器接收数据。用于测试从服务器到客户端的下行带宽(下载速度)
iperf3 -c <服务器IP> [-p 端口号] -R
#客户端同时测试双向流量。同时测试上行和下行带宽
iperf3 -c <服务器IP> [-p 端口号] --bidir

结果解析

客户端会显示测试结果,包括TCP和UDP带宽、丢包率等信息。

$ iperf3 -c 192.168.31.148 -u -b 1000M
Connecting to host 192.168.31.148, port 5201
[  5] local 192.168.31.108 port 63882 connected to 192.168.31.148 port 5201

#Interval: 测试的时间间隔
#Transfer: 表示测试的时间间隔内转输的数据量
#Bitrate: 在该时间间隔内的带宽
#Total Datagrams: 在该时间间隔内发送的数据包总数
[ ID] Interval           Transfer     Bitrate         Total Datagrams
[  5]   0.00-1.02   sec  50.6 MBytes   416 Mbits/sec  36364
[  5]   1.02-2.02   sec  52.3 MBytes   441 Mbits/sec  37543
...
[  5]   9.01-10.01  sec  62.5 MBytes   525 Mbits/sec  44872
- - - - - - - - - - - - - - - - - - - - - - - - -

#测试报告汇总
#Jitter: 网路抖动
#Lost/Total Datagrams: 丢包数/总数据包数(丢包率)
#sender: 发送端
#receiver: 接收端
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-10.01  sec   574 MBytes   481 Mbits/sec  0.000 ms  0/412333 (0%)  sender
[  5]   0.00-10.14  sec   300 MBytes   248 Mbits/sec  0.017 ms  196999/412304 (48%)  receiver

iperf Done.

YOLO