iperf3 网络带宽测试工具
iperf3 是一个 TCP, UDP, 和 SCTP (传输层协议)网络带宽测量工具.
简介
iperf 是一个用于主动测量 IP 网络上最大可用带宽的工具. 它支持与时间、协议和缓冲区相关的各种参数的调优. 对于每个测试,它报告测量的吞吐量/比特率(带宽), 丢包率和其他参数.
这个版本,有时被称为 iperf3, 是 NLANR/DAST 开发的原始版本的重新设计. iperf3 是一个从头开始的新实现, 目标是更小, 更简单的代码库, 以及可以在其他程序中使用的功能的库版本. iperf3 还具有许多在其他工具(如 nutctp 和 netperf)中可以找到的特性, 但这些特性在最初的 iperf 中是没有的. 例如, 这包括
零复制模式
和可选的
JSON输出
. 注意 iperf3 与原来的 iperf 不向后兼容.
iperf3 的主要工作开发是在 CentOS Linux, FreeBSD 和 macOS 上进行的. 目前, 这些是唯一得到官方支持的平台, 但是已经有一些关于 OpenBSD, NetBSD, Android, Solaris 和其他 Linux 发行版的成功报告.
iperf3 主要由 ESnet / Lawrence Berkeley National 实验室开发. 它是在 three-clause BSD 许可下发布的.
更多信息: http://software.es.net/iperf
源代码和问题跟踪: https://github.com/esnet/iperf
获得 iperf3
iperf3 的下载地址:
http://downloads.es.net/pub/iperf/
https://iperf.fr/
要查看最新的代码, 克隆 git 存储库:
https://github.com/esnet/iperf.git
构建 iperf3
./configure
makemakeinstall
使用
iperf3 包含一个列出所有命令行选项的手册页. 手册页是对各种标志和参数的最新参考.
有关命令行使用示例,请参见:
https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/
使用默认选项, iperf 旨在显示典型的精心设计的应用程序(Typical well designed application)性能.
典型的精心设计的应用程序(Typical well designed application) 意味着避免只对测试有效的人工增强(例如 splice() 将数据发送到 /dev/null). iperf 也有用于 “极端最佳情况” 优化的标志, 但必须显式地激活它们.
这些标志包括:
-Z, --zerocopy 使用 ‘zero copy’ sendfile() 的方式数据发送
-A, --affinity n/n,m 设置 CPU 亲和力
快速开始
- 接收端
# 参数 -s 表示 iperf3 以服务端模式运行.
iperf3 -s
输出
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
iperf3 服务监听在默认端口 5201
- 发送端
# 参数 -c 表示 iperf3 以客户端模式运行, 192.168.101.7 为服务端的IP地址.
iperf3 -c 192.168.101.7
输出
[ 5] local 192.168.101.5 port 53506 connected to 192.168.101.7 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 91.2 MBytes 765 Mbits/sec 0 837 KBytes
[ 5] 1.00-2.00 sec 86.2 MBytes 724 Mbits/sec 0 969 KBytes
[ 5] 2.00-3.00 sec 87.5 MBytes 734 Mbits/sec 0 969 KBytes
[ 5] 3.00-4.00 sec 87.5 MBytes 734 Mbits/sec 0 969 KBytes
[ 5] 4.00-5.00 sec 87.5 MBytes 734 Mbits/sec 0 969 KBytes
[ 5] 5.00-6.00 sec 88.8 MBytes 744 Mbits/sec 0 969 KBytes
[ 5] 6.00-7.00 sec 87.5 MBytes 734 Mbits/sec 0 969 KBytes
[ 5] 7.00-8.00 sec 87.5 MBytes 734 Mbits/sec 0 1.04 MBytes
[ 5] 8.00-9.00 sec 87.5 MBytes 734 Mbits/sec 0 1.09 MBytes
[ 5] 9.00-10.00 sec 87.5 MBytes 734 Mbits/sec 0 1.09 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 879 MBytes 737 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 876 MBytes 735 Mbits/sec receiver
发送端使用端口 53506 连接到接收端的 5201 端口.
总共发送了
879 MBytes
数据, 发送端测得带宽为
737 Mbits/sec
.
接收端总共接收到
876 MBytes
数据, 接收端测得带宽为
735 Mbits/sec
.
常用参数
iperf3 参数分为服务端参数, 客户端参数, 通用参数.
参考文档
https://iperf.fr/iperf-doc.php
通用参数 (Server or Client)
-p, --port # 用于监听/连接的服务器端口, 默认值是 5201.
-f, --format [kmgtKMGT] 输出报告的单位(默认值: m): Kbits, Mbits, Gbits, Tbits (小写为bit, 大写为 Byte)
-i, --interval # 每次报告的间隔时间(单位: 秒, 默认值: 1)
-F, --file name 指定 xmit/recv 的文件, 客户端模式下表示要发送的文件名, 服务端模式下表示要写入的文件名.
-A, --affinity n/n,m 设置 CPU 亲和性
-B, --bind <host> 绑定到主机<host>, 这台机器的地址之一.
对于客户端, 这将设置出站网络接口.
对于服务器, 这将设置传入接口.
这只在具有多个网络接口的多主机上有用.
-V, --verbose 更详细的输出
-J, --json 使用 JSON 格式输出
--logfile f 输出日志到文件
--forceflush 在每个间隔强制 flush 输出
--timestamps <format> 在每个输出行开始处添加一个时间戳
(使用可选格式字符串按 strftime(3) 给定)
-d, --debug 打开调试输出
-v, --version 显示版本信息并退出
-h, --help 显示此消息并退出
服务端专用参数 (Server specific)
-s, --server 以服务器模式运行
-D, --daemon 将服务器作为守护进程运行
-I, --pidfile file 写到 PID 文件
-1, --one-off 处理一个客户端连接然后退出
--server-bitrate-limit #[KMG][/#] 服务器的总比特率(带宽)限制 (默认值: 0 = 无限制)
(可选的斜杠和数值(/#) 表示#秒间隔的平均值, 默认为5秒 )
--rsa-private-key-path 用于解密认证凭证的 RSA 私钥路径
--authorized-users-path 包含用户凭证的配置文件的路径
客户端专用参数 (Client specific)
-c, --client <host> 以客户端模式运行, 连接到 <host> (服务器地址)
--sctp 使用 SCTP 而不是 TCP
-X, --xbind <name> 将 SCTP 关联绑定到链接
--nstreams # SCTP 流的个数
-u, --udp 使用 UDP 而不是 TCP
--connect-timeout # 控制连接建立超时 (ms)
-b, --bitrate #[KMG][/#] 目标比特率 bits/sec (0 表示无限制)
(UDP: 默认为 1 Mbit/sec, TCP: 默认无限制)
(可选的斜杠和数字, 数字表示突发模式的包数)
--pacing-timer #[KMG] 设置 pacing 时间,以微秒为单位(default 1000)
--fq-rate #[KMG] 启用基于套接字的 pacing bits/sec 的加权公平队列(fair-queuing)(只有 Linux 可用).
-t, --time # 以秒为单位的传输时间(默认为10秒)
-n, --bytes #[KMG] 传输的字节数(代替 -t)
-k, --blockcount #[KMG] 要传输的块(包)数(代替 -t 或 -n)
-l, --length #[KMG] 读取或写入缓冲区的长度
(TCP默认: 128 KB, UDP: 动态调整或 1460)
--cport <port> 绑定到特定的客户端端口 (TCP 和 UDP, default: 临时端口)
-P, --parallel # 要运行的并行客户端流的数量(并行测试)
-R, --reverse 以反向模式运行(服务器发送,客户端接收)
--bidir 以双向模式运行.
客户端和服务器同时发送和接收数据.
-w, --window #[KMG] 设置窗口大小/套接字缓冲区大小
-C, --congestion <algo> 设置 TCP 的拥塞控制算法 (只有: Linux 和 FreeBSD 支持)
-M, --set-mss # 设置 TCP/SCTP 最大分段大小(MSS, MTU - 40字节)
-N, --no-delay 设置 TCP/SCTP 无延迟,禁用 Nagle's 算法
-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).
-L, --flowlabel N 配置IPv6流标签 (仅在 Linux 上支持)
-Z, --zerocopy 使用 "零拷贝" 方法发送数据
-O, --omit N 省略前 N 秒的测试(忽略 TCP 慢启动)
-T, --title str 在每个输出行前加上这个字符串
--extra-data str 包含客户端和服务器 JSON 数据字符串
--get-server-output 从服务器获取结果
--udp-counters-64bit 在 UDP 测试包中使用 64 位计数器(防止计数器溢出)
--repeating-payload 在有效载荷中使用重复模式,而不是随机有效载荷(如 iperf2)
--username 认证用户名
--rsa-public-key-path 用于加密认证凭证的 RSA 公钥的路径
用例
例: TCP 带宽测试
服务端
iperf3 -s
客户端
iperf3 -c 192.168.101.7
例: UDP 带宽测试
服务端
iperf3 -s
客户端
# UDP 模式下 -b 默认为 1Mbps, 手动设置为 0 = 无限制.
iperf3 -c 192.168.101.7 -u -b 0
例: 测试反向 TCP 带宽
服务端
iperf3 -s
客户端
iperf3 -c 192.168.101.7 -R
例: 测试双向 TCP 带宽
服务端
iperf3 -s
客户端
iperf3 -c 192.168.101.7 --bidir
[TX-C] 为客户端发送数据 对应 -> [RX-S] 为服务端接收数据
[RX-C] 为客户端接收数据 对应 <- [TX-S] 为服务端发送数据
参考
https://github.com/esnet/iperf
http://downloads.es.net/pub/iperf/
https://github.com/esnet/iperf.git
https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/
版权归原作者 洛水轻云 所有, 如有侵权,请联系我们删除。