iperf3 网络带宽测试工具

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
make
make install

使用


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 亲和力

快速开始

  1. 接收端
# 参数 -s 表示 iperf3 以服务端模式运行.
iperf3 -s

输出

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

iperf3 服务监听在默认端口 5201

  1. 发送端
# 参数 -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] 为服务端发送数据

参考

http://software.es.net/iperf

https://github.com/esnet/iperf

http://downloads.es.net/pub/iperf/

https://iperf.fr/

https://github.com/esnet/iperf.git

https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/

https://iperf.fr/iperf-doc.php

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值