iPerf 3.2 新增功能:是一个用于测试网络带宽的开源工具,它能够测量TCP和UDP带宽性能。它最初由NLANR/DAST项目开发,现在由多个开发者和组织维护和支持。iPerf 在各种操作系统上都可以运行,包括Windows、Linux、macOS等,因其简单易用和可靠的特性,广泛用于网络性能测试和故障排除。
iPerf - The TCP, UDP and SCTP network bandwidth measurement tool
GitHub - esnet/iperf: iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool
GitHub - CodeZombie/jPerf: Windows performance and analysis tool
iPerf - Download iPerf3 and original iPerf pre-compiled binaries
GitHub - ar51an/iperf3-win-builds: iperf3 binaries for Windows. Benchmark your network limits.
C:\Users\Administrator\Downloads\iperf-3.20-win64>iperf3 --help
______________________________________________________________________
用法: iperf3 [-s|-c 主机] [选项]
iperf3 [-h|--help] [-v|--version]
_______________________________________________________________________
服务器或客户端通用选项:
-p, --port # 监听/连接的服务器端口号
-f, --format [kmgtKMGT] 报告单位格式: K比特, M比特, G比特, T比特
-i, --interval # 定期吞吐量报告间隔时间(秒)
-I, --pidfile 文件 写入PID文件
-F, --file 文件名 发送/接收指定文件
-A, --affinity n[,m] 设置CPU亲和性核心编号为n(进程使用的核心)
(仅客户端可选参数m - 本次测试中服务器的核心编号)
-B, --bind <主机> 绑定到指定<主机>地址关联的网络接口
-V, --verbose 显示更详细的输出
-J, --json 以JSON格式输出
--json-stream 以行分隔JSON格式输出
--json-stream-full-output 启用JSON流式传输的JSON格式输出
--logfile 文件 将输出发送到日志文件
--forceflush 每个间隔强制刷新输出
--timestamps<=格式> 每行输出开头显示时间戳
(可选"="和格式字符串,遵循strftime(3)规范)
--rcv-timeout # 接收数据空闲超时(默认120000毫秒)
-d, --debug[=#] 输出调试信息
(可选"="和调试级别:1-4。默认为4 - 所有消息)
-v, --version 显示版本信息并退出
-h, --help 显示此帮助信息并退出
__________________________________________________________________________
服务器专用选项:
-s, --server 以服务器模式运行
-D, --daemon 以守护进程模式运行服务器
-1, --one-off 处理一个客户端连接后退出
--server-bitrate-limit #[KMG][/#] 服务器总比特率限制(默认0=无限制)
(可选斜杠和计算平均数据速率的时间间隔秒数,默认为5秒)
--idle-timeout # 服务器空闲#秒后重启(防止卡住,默认无超时)
--server-max-duration # 服务器上iperf测试最大运行时间(秒)
__________________________________________________________________________________
客户端专用选项:
-c, --client <主机>[%<网卡>] 以客户端模式运行,连接到<主机>
(选项<网卡>等效于`--bind-dev <网卡>`)
-u, --udp 使用UDP而非TCP
--connect-timeout # 控制连接建立超时时间(毫秒)
-b, --bitrate #[KMG][/#] 目标比特率(位/秒)(0表示无限制)
(UDP默认1 Mbit/秒,TCP默认无限制)
(可选斜杠和突发模式的数据包数量)
--pacing-timer #[KMG] 设置服务器 pacing 定时器(微秒)(默认1000)
(已弃用 - 用于旧版本服务器向后兼容)
-t, --time # 传输持续时间(秒)(默认10秒)
-n, --bytes #[KMG] 传输直到客户端(每个方向)发送或接收至少指定字节数时结束
(替代-t或-k)
-k, --blockcount #[KMG] 传输直到客户端(每个方向)发送或接收至少指定数据块数时结束
(替代-t或-n)
-l, --length #[KMG] 读写缓冲区长度
(TCP默认128 KB,UDP动态或1460)
--cport <端口> 绑定特定客户端端口(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或符号值
数值可用十进制、八进制和十六进制指定(参见--tos)
-Z, --zerocopy 使用"零拷贝"方式发送数据
--skip-rx-copy 使用MSG_TRUNC选项忽略接收的消息
-O, --omit N 执行N秒预测试并忽略预测试统计
-T, --title 字符串 每行输出前缀字符串
--extra-data 字符串 包含在客户端和服务器JSON中的额外数据字符串
--get-server-output 从服务器获取结果
--udp-counters-64bit UDP测试数据包中使用64位计数器
--repeating-payload 在负载中使用重复模式(而非像iperf2中的随机负载)
--dont-fragment 设置IPv4不分段标志
_______________________________________________
[KMG]表示支持K/M/G后缀表示千、兆或十亿倍的选项
iperf3主页:https://software.es.net/iperf/
提交错误报告至:https://github.com/esnet/iperf
______________________________________________
C:\Users\Administrator\Downloads\iperf-3.20-win64>iperf3 -v
___________________________________________________________
iperf 3.20 (cJSON 1.7.15)
CYGWIN_NT-10.0-26100 WIN-PSU1NT2DG2O 3.6.5-1.x86_64 2025-10-09 17:21 UTC x86_64
可选功能可用:CPU亲和性设置、支持IPv4不分段、POSIX线程
________________________________________________________________________________

目录:
- iPerf 2.0、iPerf 3.0 和 iPerf 3.1 之间的变更
- iPerf 3 用户文档
- iPerf 2.0.6、iPerf 2.0.7 和 iPerf 2.0.8 之间的变更
- iPerf 2 用户文档
iPerf 2.0、iPerf 3.0 和 iPerf 3.1 之间的变更
- iPerf3目前支持的iPerf2功能:
- TCP和UDP测试
- 设置端口(-p)
- 设置TCP选项:无延迟、MSS等。
- 设置UDP带宽(-b)
- 设置套接字缓冲区大小 (-w)
- 报告间隔 (-i)
- 设置iPerf缓冲区(-l)
- 绑定到特定接口(-B)
- IPv6测试(-6)
- 传输字节数(-n)
- 测试长度(-t)
- 并行流(-P)
- 设置DSCP/TOS位向量(-S)
- 更改编号输出格式(-f)
- iPerf 3.0 的新功能:
- 动态服务器(客户端/服务器参数交换)——iPerf2 中的大多数服务器选项现在可以由客户端动态设置
- 客户端/服务器结果交换
- iPerf3服务器同时接受单个客户端(iPerf2则支持多个客户端)
- iPerf API(libiperf)——提供一种简便的方式来使用、定制和扩展 iPerf 功能
- -R,反向测试模式——服务器发送,客户端接收
- -O, --省略N:省略前n秒(以忽略TCP慢启动))
- -b, --带宽 n[KM]用于 TCP(仅 IPERF 2 支持 UDP):将目标带宽设置为 n bit/sec(默认为 UDP 为 1 Mbit/sec,TCP 为无限)。
- -V, --冗长:比以前更详细的输出
- -J, --json : 以 JSON 格式输出
- -Z, --zerocopy : 使用“零复制”sendfile() 方法发送数据。这样CPU消耗少得多。
- -T, --title str : 在每个输出行前加上该字符串
- -F, --文件名 : xmit/recv 指定文件
- -A, --亲和力 n/n,m:设置CPU亲和力(核心编号从0开始——仅限Linux和FreeBSD)
- -k, --块数 #[KMG]:传输块数(包数)(代替 -t 或 -n)
- -4, --version4 :只使用 IPv4
- -6, --version6 :仅使用 IPv6
- -L, --flowlabel :set IPv6 flow label(仅限Linux)
- -C, --linux-congestion :集合拥塞控制算法(仅限 Linux 和 FreeBSD)(iPerf2 中的 -Z)
- -d, --调试 : 发送调试输出。主要(也许是专门)对开发者有用。
- -s, --server : iPerf2 可以处理多个客户端请求。iPerf3一次只能允许一个iperf连接。
- iPerf 3.1 新增功能:
- -I, --pidfile 文件写入进程 ID,在作为守护进程运行时最有用。
- --cport :指定客户端端口。
- --sctp 使用 SCTP 而非 TCP(Linux、FreeBSD 和 Solaris)。
- --udp-counters-64bit:支持非常长时间运行的UDP测试,可能导致计数器溢出
- --logfile 文件:将输出发送到日志文件。
- iPerf3 不支持 iPerf2 的功能:
- 双向测试(-d / -r)
- 从标准(-I)传输的数据
- TTL:多播时的存活时间(-T)
- 排除 C(连接) D(数据) M(多播) S(设置) V(服务器) 报告 (-x)
- 以逗号分隔值(-y)报告
- 兼容模式允许使用较早版本的iPerf(-C)
iPerf 3 用户文档
| 通用选项 | |
|---|---|
| 命令行选项 | 描述 |
| -p, --端口 n | 服务器端口用于监听,客户端连接端口 自。客户端和服务器端应该都是一样的。默认是5201。 |
| ——cport n | 选择指定客户端端口。(iPerf 3.1 新增内容) |
| -f, --格式 [kmKM] | 一个字母,指定打印带宽数字的格式。 支持的格式包括:自适应格式可根据情况选择千万和百万。
|
| -i, --区间n | 将周期带宽之间的间隔时间设定为秒,抖动, 以及损失报告。如果非零,则自上次报告以来,每隔一秒钟发送一次报告。如果为零,则无周期性 报告会被印刷出来。默认值是零。 |
| -F, --文件名 | 客户端:从文件读取并写入网络,而非使用随机数据; 服务器端:从网络读取数据并写入文件,而不是丢弃数据。 |
| -A, --亲和力 n/n,m-F | 如果可能的话,设置CPU亲和度(仅限Linux和FreeBSD)。客户端和服务器端都可以设置本地亲和力: 使用该参数的n形式(其中n是CPU编号)。此外,客户端可以覆盖服务器的 只喜欢那一个测试,使用N,M形式论证。注意,使用此功能时,进程只会被绑定 切换到单个CPU(而非包含多个CPU的集合)。 |
| -B, --束缚宿主 | 绑定到主机,这台机器的某个地址。对客户来说 这会设定出站接口。对于服务器,这会设定接收的 接口。这只适用于多宿主主机,因为多宿主拥有多个 网络接口。 |
| -V,--冗长 | 提供更详细的输出 |
| -J, --json | JSON 格式输出 |
| --logfile 文件 | 将输出发送到日志文件。(iPerf 3.1 新增内容) |
| --d, --调试 | 发送调试输出。主要(也许是专门)对开发者有用。 |
| -v, --版本 | 显示版本信息后退出。 |
| -h, --救命 | 展示帮助摘要,然后退出。 |
| 服务器专用选项 | |
| 命令行选项 | 描述 |
| -s, --server | 在服务器模式下运行iPerf。(这样一次只能允许一个iperf连接) |
| -D, --恶魔 | 把服务器作为守护进程在后台运行。 |
| -I, --pidfilefile | 写入带有进程 ID 的文件,这在作为守护进程运行时最为有用。(iPerf 3.1 新增内容) |
| 客户专用选项 | |
| 命令行选项 | 描述 |
| -c, --客户端主机 | 以客户端模式运行iPerf,连接到主机上运行的iPerf服务器。 |
| ——SCTP | 使用SCTP而不是TCP(Linux、FreeBSD和Solaris)。(iPerf 3.1 新增内容) |
| -u, --udp | 使用UDP代替TCP。另见 -b 选项。 |
| -b, --带宽 n[KM] | 将目标带宽设置为n比特/秒(默认UDP为1 Mbit/sec,TCP为无限)。如果存在多个流(-P 标志), 带宽限制分别应用于每个流。你也可以在带宽指定符里加一个“/”和一个数字。 这被称为“爆发模式”。即使暂时超过规定带宽限制,它也会在不暂停的情况下发送给定数量的数据包。 |
| -t, --时间n | 传输所需的时间(秒数)。iPerf 通常通过反复发送一个 len 字节数组来工作,时间秒数。 默认是10秒。另见 -l、-k 和 -n 选项。 |
| -n, --num n[KM] | 需要传输的缓冲区数量。通常,iPerf会发送10 秒。-n 选项覆盖了这个选项,发送一个 len 字节数的数次,无论需要多长时间。另见 -l、-k 和 -t 选项。 |
| -k, --区块计数 n[KM] | 传输的块数(数据包)。(代替 -t 或 -n) 另见 -t、-l 和 -n 选项。 |
| -l, --长度 n[KM] | 读取或写入缓冲区的长度。iPerf 的工作原理是写入 将 len 字节数组多次送入。默认为 TCP 为 128 KB,UDP 为 8 KB。 另见 -n、-k 和 -t 选项。 |
| -P, --平行 n | 同时连接服务器的数量。默认是1。 |
| -R, --反转 | 以反向模式运行(服务器发送,客户端接收)。 |
| -w, --窗口n[KM] | 将套接字缓冲区大小设置为指定的值。对于TCP,这是 设置TCP窗口大小。(这些数据会被发送到服务器,并在那边使用) |
| -M, --set-mss n | 尝试设置TCP的最大分段大小(MSS)。MSS通常是MTU——TCP/IP头部的40字节。 以太网的MSS为1460字节(1500字节MTU)。 |
| -N, --不拖延 | 设置TCP无延迟选项,禁用Nagle算法。 通常只有在像telnet这样的交互应用中才会禁用此功能。 |
| -4, --版本4 | 只用IPv4。 |
| -6, --版本4 | 只用IPv6。 |
| -S, --tos n | 输出数据包的服务类型。(许多路由器忽视服务条款 田野。)你可以用“0x”前缀在十六进制中指定值,用八进制表示 “0”前缀,或用十进制。例如,“0x10”十六进制 = “020” 八进制 = “16” 十进制。RFC 1349 中规定的服务条款编号为:
|
| -L, --flowlabel n | 设置IPv6流标签(目前仅支持Linux)。 |
| -Z, --零复制 | 使用“零复制”方式发送数据,如 sendfile(2),而非通常的写入(2)。这样CPU消耗少得多。 |
| -O, --省略 n | 省略测试的前n秒,跳过TCP TCP的慢启动阶段。 |
| -T, --标题 str | 在每行输出线前加上这个字符串。 |
| -C, --linux-拥塞算法 | 设置拥塞控制算法(iPerf 3.0仅限Linux,iPerf 3.1仅Linux和FreeBSD)。 |
参见 https://github.com/esnet/iperf
iPerf 2.0.6、iPerf 2.0.7 和 iPerf 2.0.8 之间的变更
- 2.0.6 变更集(rjmcmahon@rjmcmahon.com)2014年3月:
- 增加报告头的共享内存,减少互斥争用。需要提升性能。一些小的代码修改,应该与平台和作系统无关
- 2.0.7 变更集(rjmcmahon@rjmcmahon.com)2014年8月:
- 仅支持端/端延迟的Linux版本(假设时钟同步)
- 支持更小的报告间隔(5毫秒或更大)
- UDP的端/端延迟(平均/最小/最大),显示以毫秒为单位,分辨率为微秒级
- 套接字读取超时(仅服务器),因此无论是否收到数据包,iperf报告都会发生
- 报告时间戳现在显示毫秒分辨率
- 本地绑定支持使用冒号作为分隔值的端口值(-B 10.10.1:60001)
- 使用Linux实时调度器和数据包级时间戳以提升延迟准确性
- 建议客户端和服务器端使用PTP来同步时钟到微秒级
- 推荐PTP大师级的优质参考,比如Spectracom等公司的GPS纪律振荡器
- 2.0.8 变更集(截至2015年1月12日):
- 修复可移植性,并用Linux、Win10、Win7、WinXP、MacOS和Android编译和测试
- 客户端现在要求 -u 用于 UDP(不再默认为 -b 的 UDP)
- 保持遗留报告格式
- 支持对 -e 的提升报告
- 通过令牌桶支持TCP速率限制流(通过-b)
- 支持数据包每秒(UDP)通过pps单位表示,(例如-b 1000pps)
- 在客户端和服务器报告(UDP)中显示PPS。
- 支持实时调度器作为命令行选项(--realtime 或 -z)
- 改进客户端的传输码路径,使实际提供的传输速率收敛到-b值
- 提高微秒延迟呼叫的准确性(以平台无关的方式)
- (使用卡尔曼滤波器预测延迟误差并根据预测误差调整延迟)
- 在初始客户端头部(UDP)中显示目标环路时间
- Fix final latency report sent from server to client (UDP)
- Include standard deviation in latency output
- Suppress unrealistic latency output (-/-/-/-)
- Support SO_SNDTIMEO on send so socket write won't block beyond -t (TCP)
- Use clock_gettime if available (preferred over gettimeofday())
- TCP write and error counts (TCP retries and CWND for linux)
- TCP read count, TCP read histogram (8 bins)
- Server will close the socket after -t seconds of no traffic
See also https://sourceforge.net/projects/iperf2/
iPerf 2 user documentation
![]() |
![]() |
调优 TCP 连接 调优 UDP 连接 运行多播服务器和客户端 IPv6 模式 代表性流 运行 iPerf 作为守护进程 运行 运行 iPerf 作为 Windows 服务 自适应窗口大小 编译 |
| 通用选项 | ||
|---|---|---|
| 命令行选项 | 环境变量选项 | 描述 |
| -f, --格式 [bkmaBKMA] | $IPERF_格式 | 一个字母,指定打印带宽数字的格式。 支持的格式包括:自适应格式可根据情况选择千万和百万。领域 除了带宽外,始终打印字节,否则遵循 请求格式。默认是“a”。 注:此处 Kilo = 1024, 在处理字节时,Mega = 1024^2,Giga = 1024^3。在社交网络中,常见的做法是, Kilo = 1000,Mega = 1000^2,Giga = 1000^3,所以我们用这个来处理 位。如果你真的在意,可以用-f-b来算算。
|
| -i, --音程# | $IPERF间隔 | 将周期带宽之间的间隔时间设定为秒,抖动, 以及损失报告。如果非零,则自上次报告以来,每隔一秒钟发送一次报告。如果为零,则无周期性 报告会被印刷出来。默认值是零。 |
| -l, --len #[KM] | $IPERF_LEN | 读取或写入缓冲区的长度。iPerf 的工作原理是写入 将 len 字节数组多次送入。TCP 默认是 8 KB,1470 UDP的字节。关于UDP的注意,这是数据报大小,使用时需要降低 IPv6地址设置为1450或更低,以避免分片。另见 -n 和 -t 选项。 |
| -嗯,--print_mss | $IPERF打印手稿 | 通过TCP_MAXSEG选项打印报告的TCP MSS大小,以及 观察到的读长大小通常与MSS相关。MSS通常为 MTU - TCP/IP 头部的 40 字节。通常稍小的MSS是 报告是因为IP选项增加了额外的头部空间。接口类型 对应的MTU也会被打印(以太网、FDDI等)。这 选项在许多作系统上未实现,但读取大小仍可能存在 标注MSS。 |
| -p, --端口# | $IPERF端口 | 服务器端口用于监听,客户端连接端口 自。客户端和服务器端应该都是一样的。违约是5001, 和《TTCP》一样。 |
| -u, --udp | $IPERF_UDP | 使用UDP代替TCP。另见 -b 选项。 |
| -w, --窗口 #[KM] | $TCP窗大小 | 将套接字缓冲区大小设置为指定的值。对于TCP,这是 设置TCP窗口大小。对于UDP来说,它只是缓冲区,用于存储数据报 在 接收到 ,因此限制了最大可接收数据报大小。 |
| -B, --束缚宿主 | $IPERF_绑定 | 绑定到主机,这台机器的某个地址。对客户来说 这会设定出站接口。对于服务器,这会设定接收的 接口。这只适用于多宿主主机,因为多宿主拥有多个 网络接口。
对于 iPerf 在 UDP 服务器模式下,这也用于绑定和加入 多播组。地址范围为224.0.0.0至239.255.255.255 用于多播。另见 -T 选项。 |
| -C, --兼容性 | $IPERF 计算机 | 兼容模式允许使用较旧版本的iPerf。此模式 虽然不是互作性所必需,但强烈推荐。在 在某些情况下,使用代表性流媒体可能会导致服务器出现1.7 导致崩溃或导致不必要的连接尝试。 |
| -M, --mss #[KM} | $IPERF MSS | 尝试通过TCP_MAXSEG设置TCP的最大段大小(MSS) 选择。MSS通常是MTU——TCP/IP头部的40字节。为 以太网,MSS为1460字节(1500字节MTU)。这个选项不是 在许多作系统上实现。 |
| -N, --无延迟 | $IPERF_无延迟 | 设置TCP无延迟选项,禁用Nagle算法。通常 仅在交互式应用如telnet时禁用此功能。 |
| -V(从v1.6或更高) | . | 绑定到IPv6地址 服务器端: $ iperf -s -V 客户端: |
| -h, --救命 | 打印命令摘要然后退出。 | |
| -v, --版本 | 打印版本信息然后退出。如果编译为 POSIX 线程,如果用 Microsoft Win32 线程编译,则称为“win32 threads”, 如果编译时没有线程,则称为“单线程”。 | |
| 服务器专用选项 | ||
| 命令行选项 | 环境变量选项 | 描述 |
| -s, --server | $IPERF_服务器 | 在服务器模式下运行iPerf。(iPerf2 可以处理多个客户端请求) |
| -D(从v1.2或更高版本) | . | 在Win32平台上运行服务器作为守护进程(Unix平台) 在有服务的情况下,iPerf 将作为服务开始运行。 |
| -R(仅适用于Windows,从v1.2及以上) | . | 如果iPerf服务在运行,请移除它。 |
| -o(仅适用于Windows,从v1.2及以上) | . | 将输出重定向到给定的文件。 |
| -c, --客户端主机 | $IPERF_客户端 | 如果iPerf处于服务器模式,则指定一个带有-c的主机 将限制iPerf对指定主机的连接。它对UDP效果不好。 |
| -P, --平行# | $IPERF平行 | 服务器之前需要处理的连接数量 关闭。默认值为0(意味着永远接受连接)。 |
| 客户专用选项 | ||
| 命令行选项 | 环境变量选项 | 描述 |
| -b, --带宽 #[KM] | $IPERF带宽 | 发送的UDP带宽,单位是比特/秒。这意味着有 -u 选项。 默认是1 Mbit/sec。 |
| -c, --客户端主机 | $IPERF_客户端 | 以客户端模式运行iPerf,连接到主机上运行的iPerf服务器。 |
| -d, --对偶测试 | $IPERF_DUALTEST | 在双重测试模式下运行iPerf。这会导致服务器连接 返回客户端,使用-L选项指定的端口(或默认选项) 连接到客户端连接到服务器的端口)。这会立即完成 因此可以同时进行测试。如果你想要交替 测试,试试 -r。 |
| -n, --num #[KM] | $IPERF NUM | 需要传输的缓冲区数量。通常,iPerf会发送10 秒。-n 选项覆盖了这个选项,发送一个 len 字节数的数次,无论需要多长时间。另见 -l 和 -t 选项。 |
| -r, --权衡 | $IPERF权衡 | 在权衡测试模式下运行iPerf。这会导致服务器连接 返回客户端,使用-L选项指定的端口(或默认选项) 连接到客户端连接到服务器的端口)。具体作如下 客户端连接终止,因此运行测试 交替。如果你想同时考,试试 -d。 |
| -t, --时间# | $IPERF_TIME(时间) | 传输所需的时间(秒数)。iPerf 通常的工作原理是 反复发送一个 len 字节数组,时间秒数。 默认是10秒。另见 -l 和 -n 选项。 |
| -L, --监听端口# | $IPERF_LISTENPORT | 这指定了服务器将连接回的端口 客户开启。它默认使用连接服务器的端口 来自客户。 |
| -P, --平行# | $IPERF平行 | 同时连接服务器的数量。违约 是1。需要客户端和服务器端都支持线程。 |
| -S, --tos# | $IPERF服务条款 | 输出数据包的服务类型。(许多路由器忽视服务条款 田野。)你可以用“0x”前缀在十六进制中指定值,用八进制表示 “0”前缀,或用十进制。例如,“0x10”十六进制 = “020” 八进制 = “16” 十进制。RFC 1349 中规定的服务条款编号为:
|
| -T, --ttl# | $IPERF时间线 | 输出组播数据包的存活时间。这本质上是 路由器跳数也用于范围测量。 默认是1,链接本地。 |
| -F(从v1.2或更高版本) | . | 使用具有代表性的流来测量带宽,例如 :- $ iperf -c <server address> -F <file-name> |
| -I(从v1.2或更高版本开始) | . | 和 -F 一样,输入是 stdin。 |
调优TCP连接
iPerf 的主要目标是帮助调整特定路径上的 TCP 连接。最 TCP的根本调优问题是TCP窗口大小,它控制了网络中任意一点可以存储的数据量。 如果容量太小,发送端有时会空闲,性能会很差。理论上的值用于 TCP窗口大小是带宽延迟积,
瓶颈带宽 * 往返时间
在下面的modi4/cyclops示例中,瓶颈链路是45 Mbit/sec的DS3链路,ping测量的往返时间为42毫秒。 带宽延迟积为
45 Mbit/sec * 42毫秒
= (45e6) * (42e-3)
= 1890000 bit
= 230 KByte
这是确定最佳窗口大小的一个起点;调高或调低可能会有更好的效果。 在我们的例子中,缓冲区大小超过130K并未提升性能,尽管带宽延迟积为230K。
请注意,许多作系统和主机对TCP窗口大小有上限。 这些数据可能低至64 KB,也可能高达数MB。iPerf 尝试检测这些情况,并警告实际窗口大小和请求窗口大小为 不等于(如下文,但这是IRIX中的四舍五入)。 有关TCP窗口大小的更多信息,请参见 LaFibre.info。 这里有一个示例会话,节点1位于伊利诺伊州,节点2位于北卡罗来纳州。这些设备通过vBNS骨干网和45 Mbit/sec的DS3链路连接。 注意,使用合适的TCP窗口大小,带宽性能提升了三倍。 在允许按字节粒度设置窗口大小的平台上,使用自适应窗口大小功能。
node2> iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 60.0 KByte (default) ------------------------------------------------------------ [ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 2357 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.1 sec 6.5 MBytes 5.2 Mbits/sec node1> iperf -c node2 ------------------------------------------------------------ Client connecting to node1, TCP port 5001 TCP window size: 59.9 KByte (default) ------------------------------------------------------------ [ 3] local <IP Addr node1> port 2357 connected with <IP Addr node2> port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 6.5 MBytes 5.2 Mbits/sec
node2> iperf -s -w 130k ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 130 KByte ------------------------------------------------------------ [ 4] local <IP Addr node 2> port 5001 connected with <IP Addr node 1> port 2530 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.1 sec 19.7 MBytes 15.7 Mbits/sec node1> iperf -c node2 -w 130k ------------------------------------------------------------ Client connecting to node2, TCP port 5001 TCP window size: 129 KByte (WARNING: requested 130 KByte) ------------------------------------------------------------ [ 3] local <IP Addr node1> port 2530 connected with <IP Addr node2> port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 19.7 MBytes 15.8 Mbits/sec
另一个测试是运行并行TCP流。 如果总总带宽超过单个流的带宽,那就说明有问题。 要么是 TCP 窗口太小,要么作系统的 TCP 实现存在漏洞,或者网络本身存在缺陷。 见上文关于TCP窗口大小;否则诊断就比较困难。 如果iPerf是用pthreads编译的,单个客户端和服务器可以测试,否则就在不同端口设置多个客户端和服务器。 这里有一个例子,单个流能达到16.5 Mbit/s,但有两个并行流 即使使用较大的 TCP 窗口,总共获得 16.7 + 9.4 = 26.1 Mbit/sec:
node2> iperf -s -w 300k ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 300 KByte ------------------------------------------------------------ [ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 6902 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.2 sec 20.9 MBytes 16.5 Mbits/sec [ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 6911 [ 5] local <IP Addr node2> port 5001 connected with <IP Addr node2> port 6912 [ ID] Interval Transfer Bandwidth [ 5] 0.0-10.1 sec 21.0 MBytes 16.7 Mbits/sec [ 4] 0.0-10.3 sec 12.0 MBytes 9.4 Mbits/sec node1> ./iperf -c node2 -w 300k ------------------------------------------------------------ Client connecting to node2, TCP port 5001 TCP window size: 299 KByte (WARNING: requested 300 KByte) ------------------------------------------------------------ [ 3] local <IP Addr node2> port 6902 connected with <IP Addr node1> port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.2 sec 20.9 MBytes 16.4 Mbits/sec node1> iperf -c node2 -w 300k -P 2 ------------------------------------------------------------ Client connecting to node2, TCP port 5001 TCP window size: 299 KByte (WARNING: requested 300 KByte) ------------------------------------------------------------ [ 4] local <IP Addr node2> port 6912 connected with <IP Addr node1> port 5001 [ 3] local <IP Addr node2> port 6911 connected with <IP Addr node1> port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.1 sec 21.0 MBytes 16.6 Mbits/sec [ 3] 0.0-10.2 sec 12.0 MBytes 9.4 Mbits/sec
TCP的次要调优问题是最大传输单元(MTU)。 为了达到最佳效果,两个主机都应支持路径 MTU 发现。 没有路径MTU发现的主机通常使用536作为MSS,这会浪费带宽和处理时间。 用 -m 选项显示使用的 MSS,看看是否符合你的预期。 以太网通常大约是1460字节。
node3> iperf -s -m ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 60.0 KByte (default) ------------------------------------------------------------ [ 4] local <IP Addr node3> port 5001 connected with <IP Addr node4> port 1096 [ ID] Interval Transfer Bandwidth [ 4] 0.0- 2.0 sec 1.8 MBytes 6.9 Mbits/sec [ 4] MSS size 1448 bytes (MTU 1500 bytes, ethernet) [ 4] Read lengths occurring in more than 5% of reads: [ 4] 952 bytes read 219 times (16.2%) [ 4] 1448 bytes read 1128 times (83.6%)
这里有一个主机不支持 Path MTU Discovery。它只能发送和接收576字节的小数据包。
node4> iperf -s -m ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 32.0 KByte (default) ------------------------------------------------------------ [ 4] local <IP Addr node4> port 5001 connected with <IP Addr node3> port 13914 [ ID] Interval Transfer Bandwidth [ 4] 0.0- 2.3 sec 632 KBytes 2.1 Mbits/sec WARNING: Path MTU Discovery may not be enabled. [ 4] MSS size 536 bytes (MTU 576 bytes, minimum) [ 4] Read lengths occurring in more than 5% of reads: [ 4] 536 bytes read 308 times (58.4%) [ 4] 1072 bytes read 91 times (17.3%) [ 4] 1608 bytes read 29 times (5.5%)
iPerf 支持其他调优选项,这些选项是在特殊网络情况下添加的,比如通过 ATM 从 HIPPI 转 HIPPI 的特殊网络情况。
调优UDP连接
iPerf 创建恒定比特率的 UDP 流。这是一种非常人工的流,类似于语音通信,但没有其他什么。
你需要根据应用所需的大小调整数据报大小(-l)。
服务器通过数据报中的ID编号检测UDP数据报丢失。 通常,一个UDP数据报会变成多个IP数据包。丢失一个IP包就会丢失整个数据报。 要测量数据包丢失而非数据报丢失,可以将数据报做得足够小,以便能放入单个数据包,使用-l选项。 以太网默认大小为1470字节。还会检测到乱序包。 (乱序包会导致丢包计数存在一定模糊性; iPerf 假设它们不是重复包,因此不计入丢失的数据包计数。) 由于TCP不会向用户报告丢包,我觉得UDP测试有助于观察路径上的丢包情况。
抖动计算由服务器持续计算,具体如下 RFC 1889 中的 RTP。客户端在 包。服务器计算相对传输时间为(服务器的接收时间) - 客户发送时间)。客户端和服务器的时钟不必是 同步;抖动计算中会扣除任何差值。抖动 是连续运输时间差的平滑平均值。
node2> iperf -s -u -i 1 ------------------------------------------------------------ Server listening on UDP port 5001 Receiving 1470 byte datagrams UDP buffer size: 60.0 KByte (default) ------------------------------------------------------------ [ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 9726 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.0- 1.0 sec 1.3 MBytes 10.0 Mbits/sec 0.209 ms 1/ 894 (0.11%) [ 4] 1.0- 2.0 sec 1.3 MBytes 10.0 Mbits/sec 0.221 ms 0/ 892 (0%) [ 4] 2.0- 3.0 sec 1.3 MBytes 10.0 Mbits/sec 0.277 ms 0/ 892 (0%) [ 4] 3.0- 4.0 sec 1.3 MBytes 10.0 Mbits/sec 0.359 ms 0/ 893 (0%) [ 4] 4.0- 5.0 sec 1.3 MBytes 10.0 Mbits/sec 0.251 ms 0/ 892 (0%) [ 4] 5.0- 6.0 sec 1.3 MBytes 10.0 Mbits/sec 0.215 ms 0/ 892 (0%) [ 4] 6.0- 7.0 sec 1.3 MBytes 10.0 Mbits/sec 0.325 ms 0/ 892 (0%) [ 4] 7.0- 8.0 sec 1.3 MBytes 10.0 Mbits/sec 0.254 ms 0/ 892 (0%) [ 4] 8.0- 9.0 sec 1.3 MBytes 10.0 Mbits/sec 0.282 ms 0/ 892 (0%) [ 4] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec 0.243 ms 1/ 8922 (0.011%) node1> iperf -c node2 -u -b 10m ------------------------------------------------------------ Client connecting to node2, UDP port 5001 Sending 1470 byte datagrams UDP buffer size: 60.0 KByte (default) ------------------------------------------------------------ [ 3] local <IP Addr node1> port 9726 connected with <IP Addr node2> port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec [ 3] Sent 8922 datagrams
注意当使用更大的32 KB数据报时,由于数据报重组导致的抖动增加,每个数据报被拆分为23个1500字节的数据包。 这里看到的较高数据报丢失可能是由于流量的突发性,即连续23个包,然后是一个长包 暂停,而不是均匀分布的单个数据包。
node2> iperf -s -u -l 32k -w 128k -i 1 ------------------------------------------------------------ Server listening on UDP port 5001 Receiving 32768 byte datagrams UDP buffer size: 128 KByte ------------------------------------------------------------ [ 3] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 11303 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 3] 0.0- 1.0 sec 1.3 MBytes 10.0 Mbits/sec 0.430 ms 0/ 41 (0%) [ 3] 1.0- 2.0 sec 1.1 MBytes 8.5 Mbits/sec 5.996 ms 6/ 40 (15%) [ 3] 2.0- 3.0 sec 1.2 MBytes 9.7 Mbits/sec 0.796 ms 1/ 40 (2.5%) [ 3] 3.0- 4.0 sec 1.2 MBytes 10.0 Mbits/sec 0.403 ms 0/ 40 (0%) [ 3] 4.0- 5.0 sec 1.2 MBytes 10.0 Mbits/sec 0.448 ms 0/ 40 (0%) [ 3] 5.0- 6.0 sec 1.2 MBytes 10.0 Mbits/sec 0.464 ms 0/ 40 (0%) [ 3] 6.0- 7.0 sec 1.2 MBytes 10.0 Mbits/sec 0.442 ms 0/ 40 (0%) [ 3] 7.0- 8.0 sec 1.2 MBytes 10.0 Mbits/sec 0.342 ms 0/ 40 (0%) [ 3] 8.0- 9.0 sec 1.2 MBytes 10.0 Mbits/sec 0.431 ms 0/ 40 (0%) [ 3] 9.0-10.0 sec 1.2 MBytes 10.0 Mbits/sec 0.407 ms 0/ 40 (0%) [ 3] 0.0-10.0 sec 12.3 MBytes 9.8 Mbits/sec 0.407 ms 7/ 401 (1.7%) node1> iperf -c node2 -b 10m -l 32k -w 128k ------------------------------------------------------------ Client connecting to node2, UDP port 5001 Sending 32768 byte datagrams UDP buffer size: 128 KByte ------------------------------------------------------------ [ 3] local <IP Addr node2> port 11303 connected with <IP Addr node1> port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec [ 3] Sent 401 datagrams
组 播
测试多播时,运行多个服务器,设置绑定选项(-B, --bind) 转至多播组地址。运行客户端,连接到多播 并根据需要设置 TTL(-T, --ttl)。与普通TCP不同,且 UDP测试,组播服务器可以在客户端之后启动。那么, 服务器启动前发送的数据报会在第一次周期性中显示为丢失 报告(下文有61个关于Arno的数据报)。
node5> iperf -c 224.0.67.67 -u --ttl 5 -t 5 ------------------------------------------------------------ Client connecting to 224.0.67.67, UDP port 5001 Sending 1470 byte datagrams Setting multicast TTL to 5 UDP buffer size: 32.0 KByte (default) ------------------------------------------------------------ [ 3] local <IP Addr node5> port 1025 connected with 224.0.67.67 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 5.0 sec 642 KBytes 1.0 Mbits/sec [ 3] Sent 447 datagrams node5> iperf -s -u -B 224.0.67.67 -i 1 ------------------------------------------------------------ Server listening on UDP port 5001 Binding to local address 224.0.67.67 Joining multicast group 224.0.67.67 Receiving 1470 byte datagrams UDP buffer size: 32.0 KByte (default) ------------------------------------------------------------ [ 3] local 224.0.67.67 port 5001 connected with <IP Addr node5> port 1025 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 3] 0.0- 1.0 sec 131 KBytes 1.0 Mbits/sec 0.007 ms 0/ 91 (0%) [ 3] 1.0- 2.0 sec 128 KBytes 1.0 Mbits/sec 0.008 ms 0/ 89 (0%) [ 3] 2.0- 3.0 sec 128 KBytes 1.0 Mbits/sec 0.010 ms 0/ 89 (0%) [ 3] 3.0- 4.0 sec 128 KBytes 1.0 Mbits/sec 0.013 ms 0/ 89 (0%) [ 3] 4.0- 5.0 sec 128 KBytes 1.0 Mbits/sec 0.008 ms 0/ 89 (0%) [ 3] 0.0- 5.0 sec 642 KBytes 1.0 Mbits/sec 0.008 ms 0/ 447 (0%) node6> iperf -s -u -B 224.0.67.67 -i 1 ------------------------------------------------------------ Server listening on UDP port 5001 Binding to local address 224.0.67.67 Joining multicast group 224.0.67.67 Receiving 1470 byte datagrams UDP buffer size: 60.0 KByte (default) ------------------------------------------------------------ [ 3] local 224.0.67.67 port 5001 connected with <IP Addr node5> port 1025 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 3] 0.0- 1.0 sec 129 KBytes 1.0 Mbits/sec 0.778 ms 61/ 151 (40%) [ 3] 1.0- 2.0 sec 128 KBytes 1.0 Mbits/sec 0.236 ms 0/ 89 (0%) [ 3] 2.0- 3.0 sec 128 KBytes 1.0 Mbits/sec 0.264 ms 0/ 89 (0%) [ 3] 3.0- 4.0 sec 128 KBytes 1.0 Mbits/sec 0.248 ms 0/ 89 (0%) [ 3] 0.0- 4.3 sec 554 KBytes 1.0 Mbits/sec 0.298 ms 61/ 447 (14%)
如上所述,启动多个客户端或服务器,将数据发送到同一台多播服务器。 (如果有多台服务器监听多播地址,每台服务器都会接收数据)
IPv6 模式
- 用“ifconfig”命令获取节点的IPv6地址。
请使用-V选项表示您使用的是IPv6地址。请注意,我们还需要明确绑定服务器地址。服务器端:
$ iperf -s -V客户端:
$ iperf -c <Server IPv6 Address> -v>注意:iPerf 1.6.2 及更早版本要求明确绑定 IPv6 地址 服务器的 -B 选项。
使用代表性流测量带宽
- 使用-F或-I选项。如果你想测试你的网络表现 对于压缩或未压缩的流,只需创建代表性的流, 用 -F 选项来测试。这通常是由于链路层的存在 压缩数据。
-F 选项用于文件输入。
-I 选项用于 stdin 输入。例如:
Client: $ iperf -c <server address> -F <file-name>
Client: $ iperf -c <server address> -I
将服务器运行为守护进程
- 使用-D命令行选项将服务器作为守护进程运行。重定向 输出为文件。
例如:iperf -s -D > iperflog。这样会运行iPerf服务器 作为守护进程,服务器消息会记录在文件 iperfLog 中。
在 Win32 下使用 iPerf 作为服务
- Win32有三种选择:
- -o 输出文件名
- 将消息输出到指定的文件中
- -s -D
- 将iPerf安装为服务并运行它
- -s -R
- 卸载iPerf服务
例子:
- iperf -s -D -o iperflog.txt
- 会安装iPerf服务并运行它。消息会被报告到“%windir%\system32\iperflog.txt”。
- iperf -s -R
- 如果安装了iPerf服务,我会卸载它。
注意:如果你停止使用,建议在用Microsoft关闭iPerf后重启它 管理控制台或Windows任务管理器中,确保在服务属性对话框中使用正确的选项。
自适应窗口尺寸(开发中)
- 在客户端上使用-W选项,运行带有自适应窗口大小的客户端。 确保服务器窗口大小足够大。
例如,如果服务器的 TCP 窗口大小是 8KB,那么客户端 TCP 窗口大小为 256KB 也无济于事。
256KB 服务器 TCP 窗口大小对于大多数高带宽网络来说应该足够了。客户端通过二进制指数算法更改TCP窗口大小。 这意味着你可能会注意到建议的TCP窗口大小可能会根据网络中的流量而变化, iPerf会建议当前网络场景中的最佳窗口大小。
编译
有了发行版后,在UNIX上用gzip和tar解包。 这会创建一个新的目录 'iperf-<version#>',里面有源文件和文档。
iPerf 在包括 Linux、SGI IRIX、HP-UX 在内的多种系统上都能干净地编译, Solaris、AIX 和 Cray UNICOS。用“make”来配置你的作系统并编译源代码。
gunzip -c iperf-<version>.tar.gz | tar -xvf - cd iperf-<version> ./configure make
要安装iPerf,请使用“make install”,它会问你安装在哪里。 重编译最简单的方法是重新开始。先做“make distclean”,然后“./conconfiguration;make”。 更多选项请参见Makefile。
iPerf - TCP、UDP 和 SCTP 的终极测速工具
测试您网络的极限 + 网络中立性测试
什么是 iPerf / iPerf3?
iPerf3 是一款用于在 IP 网络上主动测量最大可达带宽的工具。它支持调节与定时、缓冲区和协议(TCP、UDP、SCTP,支持 IPv4 和 IPv6)相关的各种参数。对于每个测试,iPerf3 会报告带宽、丢包率及其他相关参数。这是一个全新的实现,不与原始的 iPerf 共享代码,并且不向后兼容。iPerf 最初由 NLANR/DAST 开发,而 iPerf3 主要由 ESnet / 劳伦斯·伯克利国家实验室(Lawrence Berkeley National Laboratory)开发。它在三条 BSD 许可证下发布。
iPerf 功能
- TCP 和 SCTP:
- 测量带宽
- 报告 MSS/MTU 大小和观察到的读取大小
- 支持通过套接字缓冲区调整 TCP 窗口大小
- UDP:
- 客户端可以创建指定带宽的 UDP 流
- 测量丢包率
- 测量延迟抖动
- 支持多播
- 跨平台: 支持 Windows、Linux、Android、MacOS X、FreeBSD、OpenBSD、NetBSD、VxWorks、Solaris 等系统
- 客户端和服务器可同时建立多个连接(-P 选项)
- 服务器能够处理多个连接,而不是在一次测试后退出
- 可以运行指定时间(-t 选项),而不仅仅是传输固定数量的数据(-n 或 -k 选项)
- 在指定间隔打印周期性中间带宽、抖动和丢包报告(-i 选项)
- 以守护进程模式运行服务器(-D 选项)
- 使用代表性流来测试链路层压缩对可达带宽的影响(-F 选项)
- 服务器可以同时接受一个客户端(iPerf3)或多个客户端(iPerf2)
- 新功能:忽略 TCP 慢启动(-O 选项)
- 新功能:为 UDP 和(新增的)TCP 设置目标带宽(-b 选项)
- 新功能:设置 IPv6 流标签(-L 选项)
- 新功能:设置拥塞控制算法(-C 选项)
- 新功能:使用 SCTP 代替 TCP(--sctp 选项)
- 新功能:以 JSON 格式输出(-J 选项)
- 新功能:磁盘读取测试(服务器:iperf3 -s / 客户端:iperf3 -c testhost -i1 -F 文件名)
- 新功能:磁盘写入测试(服务器:iperf3 -s -F 文件名 / 客户端:iperf3 -c testhost -i1)
iperf-3.18 版本不同压缩包文件的表格,增加了应用场景的说明:
| 文件名 | 文件大小 | 发布日期 | 描述 | 应用场景 |
|---|---|---|---|---|
| iperf-3.18-win64-dynamic-auth.zip | 2.71 MB | Dec 14, 2024 | 包含动态链接库(DLL)的64位Windows版本,支持认证功能。 | 适用于需要认证的高安全性网络环境,尤其是共享库的场景。适用于企业级、跨平台的应用。 |
| iperf-3.18-win64-static-auth.zip | 2.43 MB | Dec 14, 2024 | 包含静态链接库的64位Windows版本,支持认证功能。 | 适用于不希望依赖外部动态库的环境,尤其是封装成单一可执行文件的应用场景。 |
| iperf-3.18-win64.zip | 1.12 MB | Dec 14, 2024 | 标准的64位Windows版本,不包含认证功能。 | 适用于一般网络性能测试和无认证需求的环境。适合开发人员和家庭用户。 |
| iperf-3.18-win7-64Bit.zip | 1.15 MB | Dec 14, 2024 | 专为Windows 7 64位系统优化的版本,不包含认证功能。 | 适用于运行Windows 7 64位操作系统的旧设备,进行常规的网络测试。 |
关键区别与应用场景:
-
动态链接与静态链接:
- 动态链接库 (
dynamic-auth.zip) 适用于跨多个系统共享相同DLL库的场景,节省存储空间,适合较为复杂的企业级应用。 - 静态链接库 (
static-auth.zip) 提供一个独立的可执行文件,适用于不依赖外部库的环境,适合简单、易于部署的场景。
- 动态链接库 (
-
认证功能:
- 包含认证功能的版本 (
dynamic-auth.zip和static-auth.zip) 适合在需要验证身份或授权的安全性较高的网络环境中使用。 - 不含认证功能的版本 (
win64.zip和win7-64Bit.zip) 适合普通的网络性能测试,适用于无需认证的测试场景。
- 包含认证功能的版本 (
-
操作系统支持:
win7-64Bit.zip专为 Windows 7 64位系统优化,适合老旧设备和系统的网络性能测试。win64.zip适用于 Windows 10、11 等现代 64 位操作系统的网络测试。
这样更加详细的表格和应用场景描述有助于选择适合的版本进行不同的网络测试任务。
C:\Users\Administrator\Downloads\iperf-3.20-win64>iperf3 -v
————————————————————————————————————————————
iperf 3.20 (cJSON 1.7.15)
CYGWIN_NT-10.0-26100 WIN-PSU1NT2DG2O 3.6.5-1.x86_64 2025-10-09 17:21 UTC x86_64
Optional features available: CPU affinity setting, support IPv4 don't fragment, POSIX threads
—————————————————————————————————————————————————
C:\Users\Administrator\Downloads\iperf-3.20-win64>iperf3 --help
——————————————————————————————————————————————————
Usage: iperf3 [-s|-c host] [options]
iperf3 [-h|--help] [-v|--version]
——————————————————————
Server or Client:
-p, --port # server port to listen on/connect to
-f, --format [kmgtKMGT] format to report: Kbits, Mbits, Gbits, Tbits
-i, --interval # seconds between periodic throughput reports
-I, --pidfile file write PID file
-F, --file name xmit/recv the specified file
-A, --affinity n[,m] set CPU affinity core number to n (the core the process will use)
(optional Client only m - the Server's core number for this test)
-B, --bind <host> bind to the interface associated with the address <host>
-V, --verbose more detailed output
-J, --json output in JSON format
--json-stream output in line-delimited JSON format
--json-stream-full-output output in JSON format with JSON streams enabled
--logfile f send output to a log file
--forceflush force flushing output at every interval
--timestamps<=format> emit a timestamp at the start of each output line
(optional "=" and format string as per strftime(3))
--rcv-timeout # idle timeout for receiving data (default 120000 ms)
-d, --debug[=#] emit debugging output
(optional optional "=" and debug level: 1-4. Default is 4 - all messages)
-v, --version show version information and quit
-h, --help show this message and quit
Server specific:
-s, --server run in server mode
-D, --daemon run the server as a daemon
-1, --one-off handle one client connection then exit
--server-bitrate-limit #[KMG][/#] server's total bit rate limit (default 0 = no limit)
(optional slash and number of secs interval for averaging
total data rate. Default is 5 seconds)
--idle-timeout # restart idle server after # seconds in case it
got stuck (default - no timeout)
--server-max-duration # max time, in seconds, that an iperf test can run against the server
——————————————————————————————————————————————————
Client specific:
-c, --client <host>[%<dev>] run in client mode, connecting to <host>
(option <dev> equivalent to `--bind-dev <dev>`)
-u, --udp use UDP rather than TCP
--connect-timeout # timeout for control connection setup (ms)
-b, --bitrate #[KMG][/#] target bitrate in bits/sec (0 for unlimited)
(default 1 Mbit/sec for UDP, unlimited for TCP)
(optional slash and packet count for burst mode)
--pacing-timer #[KMG] set the Server timing for pacing, in microseconds (default 1000)
(deprecated - for servers using older versions ackward compatibility)
-t, --time # time in seconds to transmit for (default 10 secs)
-n, --bytes #[KMG] transmit until the end of the interval when the client sent or received
(per direction) at least this number of bytes (instead of -t or -k)
-k, --blockcount #[KMG] transmit until the end of the interval when the client sent or received
(per direction) at least this number of blocks (instead of -t or -n)
-l, --length #[KMG] length of buffer to read or write
(default 128 KB for TCP, dynamic or 1460 for UDP)
--cport <port> bind to a specific client port (TCP and UDP, default: ephemeral port)
-P, --parallel # number of parallel client streams to run
-R, --reverse run in reverse mode (server sends, client receives)
--bidir run in bidirectional mode.
Client and server send and receive data.
-w, --window #[KMG] set send/receive socket buffer sizes
(indirectly sets TCP window size)
-M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes)
-N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm
-4, --version4 only use IPv4
-6, --version6 only use IPv6
-S, --tos N set the IP type of service, 0-255.
The usual prefixes for octal and hex can be used,
i.e. 52, 064 and 0x34 all specify the same value.
--dscp N or --dscp val set the IP dscp value, either 0-63 or symbolic.
Numeric values can be specified in decimal,
octal and hex (see --tos above).
-Z, --zerocopy use a 'zero copy' method of sending data
--skip-rx-copy ignore received messages using MSG_TRUNC option
-O, --omit N perform pre-test for N seconds and omit the pre-test statistics
-T, --title str prefix every output line with this string
--extra-data str data string to include in client and server JSON
--get-server-output get results from server
--udp-counters-64bit use 64-bit counters in UDP test packets
--repeating-payload use repeating pattern in payload, instead of
randomized payload (like in iperf2)
--dont-fragment set IPv4 Don't Fragment flag
——————————————————————————————————————————————————
[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-
iperf3 homepage at: https://software.es.net/iperf/
Report bugs to: https://github.com/esnet/iperf
——————————————————————————————————————————————
————————————————————————————————————————————————————
iPerf 是一个用于测试网络带宽的开源工具,它能够测量TCP和UDP带宽性能。它最初由NLANR/DAST项目开发,现在由多个开发者和组织维护和支持。iPerf 在各种操作系统上都可以运行,包括Windows、Linux、macOS等,因其简单易用和可靠的特性,广泛用于网络性能测试和故障排除。
iperf-3.18-win64-dynamic-auth>iperf3 --help
————————————————————————————————————————————
Usage: iperf3 [-s|-c host] [options]
iperf3 [-h|--help] [-v|--version]
——————————————————————————————————————————
Server or Client:
-p, --port # server port to listen on/connect to
-f, --format [kmgtKMGT] format to report: Kbits, Mbits, Gbits, Tbits
-i, --interval # seconds between periodic throughput reports
-I, --pidfile file write PID file
-F, --file name xmit/recv the specified file
-A, --affinity n[,m] set CPU affinity core number to n (the core the process will use)
(optional Client only m - the Server's core number for this test)
-B, --bind <host> bind to the interface associated with the address <host>
-V, --verbose more detailed output
-J, --json output in JSON format
--json-stream output in line-delimited JSON format
--logfile f send output to a log file
--forceflush force flushing output at every interval
--timestamps<=format> emit a timestamp at the start of each output line
(optional "=" and format string as per strftime(3))
--rcv-timeout # idle timeout for receiving data (default 120000 ms)
-d, --debug[=#] emit debugging output
(optional optional "=" and debug level: 1-4. Default is 4 - all messages)
-v, --version show version information and quit
-h, --help show this message and quit
————————————————————————————————————————————————
Server specific:
-s, --server run in server mode
-D, --daemon run the server as a daemon
-1, --one-off handle one client connection then exit
--server-bitrate-limit #[KMG][/#] server's total bit rate limit (default 0 = no limit)
(optional slash and number of secs interval for averaging
total data rate. Default is 5 seconds)
--idle-timeout # restart idle server after # seconds in case it
got stuck (default - no timeout)
--rsa-private-key-path path to the RSA private key used to decrypt
authentication credentials
--authorized-users-path path to the configuration file containing user
credentials
--time-skew-threshold time skew threshold (in seconds) between the server
and client during the authentication process
--use-pkcs1-padding use pkcs1 padding at your own risk
————————————————————————————————————————————
Client specific:
-c, --client <host>[%<dev>] run in client mode, connecting to <host>
(option <dev> equivalent to `--bind-dev <dev>`)
-u, --udp use UDP rather than TCP
--connect-timeout # timeout for control connection setup (ms)
-b, --bitrate #[KMG][/#] target bitrate in bits/sec (0 for unlimited)
(default 1 Mbit/sec for UDP, unlimited for TCP)
(optional slash and packet count for burst mode)
--pacing-timer #[KMG] set the Server timing for pacing, in microseconds (default 1000)
(deprecated - for servers using older versions ackward compatibility)
-t, --time # time in seconds to transmit for (default 10 secs)
-n, --bytes #[KMG] number of bytes to transmit (instead of -t)
-k, --blockcount #[KMG] number of blocks (packets) to transmit (instead of -t or -n)
-l, --length #[KMG] length of buffer to read or write
(default 128 KB for TCP, dynamic or 1460 for UDP)
--cport <port> bind to a specific client port (TCP and UDP, default: ephemeral port)
-P, --parallel # number of parallel client streams to run
-R, --reverse run in reverse mode (server sends, client receives)
--bidir run in bidirectional mode.
Client and server send and receive data.
-w, --window #[KMG] set send/receive socket buffer sizes
(indirectly sets TCP window size)
-M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes)
-N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm
-4, --version4 only use IPv4
-6, --version6 only use IPv6
-S, --tos N set the IP type of service, 0-255.
The usual prefixes for octal and hex can be used,
i.e. 52, 064 and 0x34 all specify the same value.
--dscp N or --dscp val set the IP dscp value, either 0-63 or symbolic.
Numeric values can be specified in decimal,
octal and hex (see --tos above).
-Z, --zerocopy use a 'zero copy' method of sending data
-O, --omit N perform pre-test for N seconds and omit the pre-test statistics
-T, --title str prefix every output line with this string
--extra-data str data string to include in client and server JSON
--get-server-output get results from server
--udp-counters-64bit use 64-bit counters in UDP test packets
--repeating-payload use repeating pattern in payload, instead of
randomized payload (like in iperf2)
--dont-fragment set IPv4 Don't Fragment flag
--username username for authentication
--rsa-public-key-path path to the RSA public key used to encrypt
authentication credentials
——————————————————————————————————————————————
[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-
iperf3 homepage at: https://software.es.net/iperf/
Report bugs to: https://github.com/esnet/iperf
————————————————————————————————————
iperf3 服务器或客户端
| 参数 | 描述 | 模式 | 示例 | 应用场景 |
|---|---|---|---|---|
| iperf3 -p, --port | 服务器监听/连接的端口号 | Client/Server | iperf3 -p 5201 |
在默认端口(5201)上进行测试,或指定自定义端口进行测试。 |
| iperf3 -f, --format | 报告格式,支持 Kbits, Mbits, Gbits, Tbits | Client/Server | iperf3 -f m |
输出带有 Mbits 的报告,适合大带宽测试。 |
| iperf3 -i, --interval | 每次周期性吞吐量报告的间隔时间(单位:秒) | Client/Server | iperf3 -i 1 |
每 1 秒报告一次吞吐量,适合对短时间内带宽变化进行监控。 |
| iperf3 -I, --pidfile | 输出 PID 文件 | Client/Server | iperf3 -I iperf3.pid |
输出服务器进程 ID 到文件,以便监控进程运行状态或进行后续操作。 |
| iperf3 -F, --file | 发送/接收指定的文件 | Client/Server | iperf3 -F file_to_send |
在文件传输性能测试中使用此选项,模拟文件的上传/下载。 |
| iperf3 -A, --affinity | 设置 CPU 核心亲和性,n 为进程使用的核心编号(可选:Client 模式中 m 为服务器的核心编号) |
Client | iperf3 -A 0 |
绑定到特定 CPU 核心,优化性能,避免其他进程干扰带宽测试。 |
| iperf3 -B, --bind | 绑定到与地址 <host> 相关的网络接口 |
Client/Server | iperf3 -B 192.168.1.100 |
在特定 IP 地址上进行测试,适用于多网卡或多 IP 地址的设备。 |
| iperf3 -V, --verbose | 显示更详细的输出 | Client/Server | iperf3 -V |
用于调试或深入分析测试过程,查看更详细的内部处理信息。 |
| iperf3 -J, --json | 输出 JSON 格式数据 | Client/Server | iperf3 -J |
输出 JSON 格式的数据,适用于将结果进一步处理或集成到其他系统。 |
| iperf3 --json-stream | 输出行分隔的 JSON 格式数据 | Client/Server | iperf3 --json-stream |
输出逐行的 JSON 格式,适合实时监控和处理数据。 |
| iperf3 --logfile f | 将输出发送到日志文件 | Client/Server | iperf3 --logfile test_log.txt |
将测试结果保存到文件中,便于后期分析和共享。 |
| iperf3 --forceflush | 强制在每个间隔后刷新输出 | Client/Server | iperf3 --forceflush |
强制每个报告周期后刷新输出,确保数据实时可见。 |
| iperf3 --timestamps<=format> | 在每行输出开始时输出时间戳(可选:"=" 和格式字符串,遵循 strftime(3)) |
Client/Server | iperf3 --timestamps="%Y-%m-%d %H:%M:%S" |
在每行结果前添加时间戳,便于记录和分析测试时的精确时间。 |
| iperf3 --rcv-timeout | 接收数据的空闲超时时间(默认为 120000 ms) | Client/Server | iperf3 --rcv-timeout 60000 |
设置接收超时,防止客户端/服务器在数据丢失时长时间等待。 |
| iperf3 -d, --debug[=#] | 输出调试信息(可选调试级别:1-4,默认值为 4) | Client/Server | iperf3 -d |
启用调试模式,输出更多的调试信息,有助于分析问题的根本原因。 |
| iperf3 -v, --version | 显示版本信息并退出 | Client/Server | iperf3 -v |
检查当前 iperf3 版本信息,适合了解工具的版本。 |
| iperf3 -h, --help | 显示帮助信息并退出 | Client/Server | iperf3 -h |
显示所有可用命令和选项的帮助文档。 |
| iperf3 -s, --server | 运行在服务器模式 | Server | iperf3 -s |
服务器端运行,等待客户端连接并进行性能测试。 |
| iperf3 -D, --daemon | 将服务器作为守护进程运行 | Server | iperf3 -D |
在后台运行服务器,适用于长期持续的带宽监控。 |
| iperf3 -1, --one-off | 处理一个客户端连接后退出 | Server | iperf3 -1 |
处理单次测试,测试结束后服务器自动退出,适合临时性的小范围测试。 |
| iperf3 --server-bitrate-limit #[KMG][/#] | 服务器的总比特率限制(默认为 0 即无上限),可选:斜杠和时间间隔(单位:秒)用于计算平均数据率 | Server | iperf3 --server-bitrate-limit 100M/60 |
设置服务器端的带宽限制,例如限制服务器上传带宽不超过 100 Mbps,并且在 60 秒内保持该限制。 |
| iperf3 --idle-timeout # | 设置空闲服务器重启的时间(单位:秒),防止服务器卡死 | Server | iperf3 --idle-timeout 300 |
如果服务器在 5 分钟内没有收到数据,自动重启以避免资源占用过久。 |
| iperf3 --rsa-private-key-path | 设置 RSA 私钥路径,用于解密认证凭证 | Server | iperf3 --rsa-private-key-path /path/to/key |
需要身份验证时,配置服务器使用私钥进行安全连接。 |
| iperf3 --authorized-users-path | 设置包含用户认证信息的配置文件路径 | Server | iperf3 --authorized-users-path /path/to/users |
配置用户认证文件,以限制哪些用户可以访问服务器进行测试。 |
| iperf3 --time-skew-threshold | 设置在认证过程中服务器和客户端之间的最大时间偏差(单位:秒) | Server | iperf3 --time-skew-threshold 2 |
配置允许的最大时间偏差,适用于有严格时间同步要求的测试。 |
| iperf3 --use-pkcs1-padding | 使用 PKCS1 填充方式,注意此选项可能存在风险 | Server | iperf3 --use-pkcs1-padding |
在需要加密的网络连接中使用此选项,增加连接的安全性,适用于高安全性环境。 |
客户端特定选项(带示例与应用场景):
| 选项 | 描述 | 示例 | 应用场景 |
|---|---|---|---|
iperf3 -c, --client <host>[%<dev>] |
以客户端模式运行,连接到 <host>。<dev> 选项等同于 --bind-dev <dev>。 |
iperf3 -c 192.168.1.1 |
用于测试从客户端到远程服务器的网络性能 |
iperf3 -u, --udp |
使用 UDP 而非 TCP。 | iperf3 -c 192.168.1.1 -u |
适用于测试实时流量,如视频流或在线游戏 |
iperf3 --connect-timeout # |
设置控制连接的超时(单位:毫秒)。 | iperf3 -c 192.168.1.1 --connect-timeout 5000 |
网络环境不稳定时,避免长时间挂起等待连接 |
iperf3 -b, --bitrate #[KMG][/#] |
目标比特率(单位:比特/秒)。设置为 0 表示无限制。默认:UDP 为 1 Mbit/秒,TCP 为无限制。可选的斜杠和包计数用于突发模式。 |
iperf3 -c 192.168.1.1 -u -b 5M |
用于模拟不同网络条件下的流量,测试带宽限制 |
iperf3 --pacing-timer #[KMG] |
设置服务器节奏定时器,单位:微秒(默认值为 1000)。此选项已废弃,仅适用于使用旧版本的服务器。 | iperf3 -c 192.168.1.1 --pacing-timer 500 |
旧版网络环境中使用,以控制包发送节奏 |
iperf3 -t, --time # |
传输时间,单位:秒(默认:10 秒)。 | iperf3 -c 192.168.1.1 -t 60 |
测试持续时间,评估长期连接的稳定性 |
iperf3 -n, --bytes #[KMG] |
要传输的字节数(替代 -t 选项)。 |
iperf3 -c 192.168.1.1 -n 100M |
测试指定字节数的传输速率,适合特定流量测试 |
iperf3 -k, --blockcount #[KMG] |
要传输的数据块(数据包)数量(替代 -t 或 -n 选项)。 |
iperf3 -c 192.168.1.1 -k 100 |
测试基于数据包数的性能,适合于短时间测试 |
iperf3 -l, --length #[KMG] |
设置读取或写入的缓冲区长度(默认:TCP 为 128 KB,UDP 为动态或 1460)。 | iperf3 -c 192.168.1.1 -l 256K |
调整缓冲区大小,测试对性能的影响 |
iperf3 --cport <port> |
绑定到指定的客户端端口(TCP 和 UDP,默认:临时端口)。 | iperf3 -c 192.168.1.1 --cport 5001 |
在多端口环境中测试不同端口的性能 |
iperf3 -P, --parallel # |
设置要运行的并行客户端流的数量。 | iperf3 -c 192.168.1.1 -P 4 |
测试多连接的负载,适用于高并发场景 |
iperf3 -R, --reverse |
以反向模式运行(服务器发送,客户端接收)。 | iperf3 -c 192.168.1.1 -R |
测试服务器到客户端的反向传输速率 |
iperf3 --bidir |
以双向模式运行。客户端和服务器既发送也接收数据。 | iperf3 -c 192.168.1.1 --bidir |
双向通信测试,适用于实时应用 |
iperf3 -w, --window #[KMG] |
设置发送/接收套接字的缓冲区大小(间接设置 TCP 窗口大小)。 | iperf3 -c 192.168.1.1 -w 256K |
测试缓冲区对性能的影响,适合高带宽延迟网络 |
iperf3 -M, --set-mss # |
设置 TCP/SCTP 最大报文段大小(MTU - 40 字节)。 | iperf3 -c 192.168.1.1 -M 1460 |
用于在某些网络环境下优化 TCP 性能 |
iperf3 -N, --no-delay |
设置 TCP/SCTP 无延迟,禁用 Nagle 算法。 | iperf3 -c 192.168.1.1 -N |
测试低延迟应用,如 VoIP 或游戏 |
iperf3 -4, --version4 |
仅使用 IPv4。 | iperf3 -c 192.168.1.1 -4 |
网络环境只支持 IPv4 时使用 |
iperf3 -6, --version6 |
仅使用 IPv6。 | iperf3 -c 2001:db8::1 -6 |
IPv6 网络环境下的测试 |
iperf3 -S, --tos N |
设置 IP 服务类型,值范围为 0-255。可以使用八进制和十六进制前缀,如 52、064、0x34 都表示相同的值。 | iperf3 -c 192.168.1.1 -S 0x34 |
用于在 QoS 环境中指定优先级 |
iperf3 --dscp N 或 --dscp val |
设置 IP DSCP 值,范围为 0-63 或符号值。可以使用十进制、八进制和十六进制表示(参考 --tos 选项)。 |
iperf3 -c 192.168.1.1 --dscp 46 |
测试不同优先级流量在网络中的表现 |
iperf3 -Z, --zerocopy |
使用“零拷贝”方法发送数据。 | iperf3 -c 192.168.1.1 -Z |
高效数据传输,减少 CPU 占用 |
iperf3 -O, --omit N |
执行 N 秒的预测试并省略预测试统计信息。 | iperf3 -c 192.168.1.1 -O 5 |
测试主要数据传输时,忽略初始的暖机时间 |
iperf3 -T, --title str |
在每一行输出前加上指定的前缀字符串。 | iperf3 -c 192.168.1.1 -T "Test #" |
适合有多个测试,便于区分 |
iperf3 --extra-data str |
在客户端和服务器的 JSON 中包含的额外数据字符串。 | iperf3 -c 192.168.1.1 --extra-data "user=test" |
用于传递额外的诊断或身份验证信息 |
iperf3 --get-server-output |
获取服务器端的结果。 | iperf3 -c 192.168.1.1 --get-server-output |
服务器与客户端之间进行更深层次的结果分析 |
iperf3 --udp-counters-64bit |
在 UDP 测试数据包中使用 64 位计数器。 | iperf3 -c 192.168.1.1 --udp-counters-64bit |
长时间运行 UDP 测试时避免计数溢出 |
iperf3 --repeating-payload |
使用重复的负载模式,而非随机化负载(如同 iperf2 中的方式)。 | iperf3 -c 192.168.1.1 --repeating-payload |
需要稳定且可预测流量模式的测试 |
iperf3 --dont-fragment |
设置 IPv4 “不分片”标志。 | iperf3 -c 192.168.1.1 --dont-fragment |
测试大数据包传输是否能在没有分片的情况下工作 |
iperf3 --username |
用于身份验证的用户名。 | iperf3 -c 192.168.1.1 --username testuser |
测试需要身份验证的网络环境 |
iperf3 --rsa-public-key-path |
用于加密身份验证凭证的 RSA 公钥路径。 | iperf3 -c 192.168.1.1 --rsa-public-key-path /path/to/key.pub |
在高安全性网络环境中测试加密身份验证 |
iperf3 命令的功能分类及其使用方法表格化:
| 类别 | 选项 | 描述 |
|---|---|---|
| 基本命令 | `iperf3 [-s | -c 主机] [选项]` |
| `iperf3 [-h | --help]` | |
| `iperf3 [-v | --version]` | |
| 服务器或客户端 | -p, --port |
服务器监听或客户端连接的端口 |
-f, --format |
设置报告格式(Kbits, Mbits, Gbits, Tbits) | |
-i, --interval |
周期性吞吐量报告的间隔时间(秒) | |
-I, --pidfile |
写入 PID 文件 | |
-F, --file |
发送或接收指定的文件 | |
-A, --affinity |
设置 CPU 核心亲和力 | |
-B, --bind |
绑定到指定主机地址的接口 | |
-V, --verbose |
输出更详细的信息 | |
-J, --json |
以 JSON 格式输出 | |
--json-stream |
以行分隔的 JSON 格式输出 | |
--logfile |
将输出发送到日志文件 | |
--forceflush |
强制每个间隔刷新输出 | |
--timestamps |
添加时间戳到每行输出的开头 | |
--rcv-timeout |
设置接收数据的空闲超时时间 | |
-d, --debug |
输出调试信息 | |
-v, --version |
显示版本信息并退出 | |
-h, --help |
显示帮助信息并退出 | |
| 服务器特定选项 | -s, --server |
以服务器模式运行 |
-D, --daemon |
以守护进程模式运行服务器 | |
-1, --one-off |
处理一个客户端连接后退出 | |
--server-bitrate-limit |
设置服务器的总比特率限制 | |
--idle-timeout |
设置服务器空闲后重启的超时时间 | |
--rsa-private-key-path |
解密认证凭证所用的 RSA 私钥路径 | |
--authorized-users-path |
包含用户凭证的配置文件路径 | |
--time-skew-threshold |
认证过程中服务器和客户端之间的时间偏差阈值 | |
--use-pkcs1-padding |
使用 PKCS1 填充 | |
| 客户端特定选项 | -c, --client <host> |
以客户端模式运行,连接到指定主机 |
-u, --udp |
使用 UDP 代替 TCP | |
--connect-timeout |
设置控制连接的超时时间 | |
-b, --bitrate |
设置目标比特率 | |
--pacing-timer |
设置服务器节奏计时器 | |
-t, --time |
设置传输时间 | |
-n, --bytes |
要传输的字节数 | |
-k, --blockcount |
要传输的块(数据包)数 | |
-l, --length |
设置缓冲区长度 | |
--cport |
绑定到特定的客户端端口 | |
-P, --parallel |
设置并行客户端流数 | |
-R, --reverse |
反向模式运行(服务器发送,客户端接收) | |
--bidir |
双向模式运行(服务器与客户端同时发送接收数据) | |
-w, --window |
设置发送/接收套接字缓冲区大小 | |
-M, --set-mss |
设置 TCP/SCTP 最大分段大小 | |
-N, --no-delay |
设置 TCP/SCTP 无延迟 | |
-4, --version4 |
仅使用 IPv4 | |
-6, --version6 |
仅使用 IPv6 | |
-S, --tos |
设置 IP 服务类型 | |
--dscp |
设置 IP DSCP 值 | |
-Z, --zerocopy |
使用零拷贝数据传输 | |
-O, --omit |
执行预测试并省略预测试统计数据 | |
-T, --title |
在输出前添加标题字符串 | |
--extra-data |
向 JSON 中包含额外数据 | |
--get-server-output |
从服务器获取输出结果 | |
--udp-counters-64bit |
在 UDP 包中使用 64 位计数器 | |
--repeating-payload |
使用重复有效载荷 | |
--dont-fragment |
设置 IPv4 不分片标志 | |
--username |
设置身份验证时的用户名 | |
--rsa-public-key-path |
用于加密认证凭证的 RSA 公钥路径 |
备注:
[KMG]表示支持 K/M/G 后缀的选项,用于表示千、兆或吉。
功能和特点:
-
带宽测量:
- iPerf 主要用于测量网络连接的带宽。通过在客户端和服务器之间发送特定大小的数据包,并记录传输时间和数据传输量,可以计算出网络的吞吐量(throughput)。
-
支持TCP和UDP:
- iPerf 支持TCP和UDP两种传输协议。TCP用于可靠的数据传输,而UDP则用于测量无连接的传输性能,例如实时应用程序或音视频流媒体。
-
多种测试模式:
- 提供了多种测试模式,包括单向和双向带宽测试。单向测试测量数据从客户端到服务器的传输速率,而双向测试还会同时测量反向传输速率。
-
跨平台:
- 支持跨多种操作系统平台,使其在不同环境下均能广泛应用。
-
灵活的参数配置:
- 用户可以通过命令行参数或GUI界面(如某些第三方图形界面)来配置测试的参数,例如测试持续时间、数据包大小、并发连接数等。
-
开源和免费:
- iPerf 是开源软件,遵循GNU通用公共许可证(GPL),可以免费使用和修改。
使用场景:
-
网络性能评估:管理员可以使用 iPerf 来评估局域网或广域网中的网络性能,包括延迟和带宽。
-
网络规划和优化:在设计和部署网络时,可以通过 iPerf 测试不同配置对网络性能的影响,帮助优化网络结构和设备部署。
-
故障排除:当网络出现性能问题时,iPerf 可以用于识别网络瓶颈和瓶颈原因,有助于快速定位和解决问题。
-
服务级别协议(SLA)验证:服务提供商可以使用 iPerf 测试实际的服务提供带宽是否符合合同中的服务级别协议。
iPerf 是一个强大的网络带宽测量工具,广泛用于各种网络相关的测试和分析工作,是网络工程师和系统管理员日常工作中不可或缺的一部分。
iPerf 起源于2003年,最初由NLANR/DAST项目组开发。NLANR(National Laboratory for Applied Network Research)是一个致力于网络研究的组织,而DAST(Distributed Application Support Team)则是其下的一个团队,专注于分布式应用支持和网络性能测试。
iPerf 最初的目的是为了提供一个开源的工具,帮助研究人员和网络管理员评估和测试网络带宽性能。它被设计用来代替旧有的 ttcp 工具,并提供更多的功能和灵活性。随着时间的推移,iPerf 的开发和维护由开源社区继续推动,成为一个跨平台的网络性能测量工具,受到广泛欢迎和使用。
今天,iPerf 仍然是网络工程师和系统管理员中常用的工具之一,用于诊断网络问题、评估网络设备性能以及验证服务级别协议(SLA)。
iPerf 的发展可以大致分为几个阶段,主要涵盖其从最初版本到现在的功能增强和改进:
-
初期版本(2003年):
- 最初版本由NLANR/DAST团队开发,主要用于基本的带宽测试和性能评估。功能相对简单,但已经提供了基本的TCP和UDP带宽测试功能。
-
开源社区接管(2008年以后):
- 2008年后,iPerf 的开发由NLANR/DAST项目组转移到开源社区。这一阶段标志着更多开发者和贡献者加入,为软件带来了更多功能和改进。
-
跨平台支持:
- 随着开源社区的参与,iPerf 逐渐实现了在多个操作系统平台上的支持,包括Windows、Linux、macOS等,使其能够广泛应用于各种环境中。
-
功能增强:
- 随着时间的推移,iPerf 的功能得到了不断扩展和改进。增加了更多的测试模式和选项,如单向和双向测试、不同的数据包大小设置、并发连接数控制等,以满足不同场景下的需求。
-
用户界面改进:
- 初期版本的 iPerf 主要通过命令行进行操作,后来也出现了一些第三方图形用户界面(GUI),使其更易于使用和配置。
-
持续的更新和维护:
- iPerf 持续受到开源社区的维护和更新,以适应新的网络技术和用户需求。不断修复bug、改进性能、优化代码结构是其持续发展的关键。
今天的 iPerf 已经成为一款成熟、稳定且功能丰富的网络性能测试工具,被广泛用于网络规划、故障排除、服务级别验证等各种应用场景中。
iPerf 的功能可以按照其主要的网络性能测试和评估功能进行分类,主要包括以下几个方面:
-
带宽测量:
- iPerf 可以用于测量网络连接的带宽,包括TCP和UDP模式。通过测试,可以
评估网络链路的实际吞吐量,帮助确认网络服务提供商承诺的带宽是否得到实现,或者用于网络规划和优化。网络链路的实际吞吐量是指在特定时间内通过网络链路传输的实际数据量或速率。它是衡量网络性能和带宽利用率的重要指标之一。具体来说,实际吞吐量考虑了以下几个方面:
-
单位和测量:通常以比特每秒(bps)或字节每秒(Bps)为单位。在实际应用中,也可以使用更大单位如千兆比特每秒(Gbps)或千兆字节每秒(GBps)等来表示。
-
数据传输效率:实际吞吐量反映了网络链路在特定条件下的传输效率,包括数据包的到达率、丢包率、延迟等因素的影响。
-
影响因素:实际吞吐量受多种因素影响,例如链路的带宽限制、网络拥塞程度、传输协议的效率、数据包大小以及网络设备的性能等。这些因素决定了在实际使用中链路能够实现的最大传输速率。
-
测量方法:评估实际吞吐量通常通过网络性能测试工具(如iperf、speedtest)来进行。这些工具可以在实验室或现场环境中对链路进行测试,以测量其在特定条件下的传输速率和性能表现。
实际吞吐量的概念帮助网络管理员和工程师了解和优化网络资源的利用情况,从而更有效地管理网络流量、优化数据传输和提升用户体验。
评估网络链路的实际吞吐量是指通过测量和分析网络链路在特定条件下实际能够传输数据的速率。它是衡量网络性能和有效利用带宽的重要指标之一。具体来说,实际吞吐量考虑了以下几个方面:
-
测量单位:通常使用的单位是比特每秒(bps)或者更大单位如千兆比特每秒(Gbps)等。
-
测量方法:实际吞吐量可以通过多种方法来测量。常见的方法包括使用网络性能测试工具(如iperf、speedtest)在实验室或生产环境中进行测量,或者通过网络设备本身提供的性能监控工具来实时监测。
-
影响因素:实际吞吐量受到多种因素的影响,包括网络拓扑结构、设备性能、传输协议、网络拥塞程度以及使用的数据包大小等。这些因素共同决定了在实际使用情况下链路可以达到的最大传输速率。
-
分析和优化:评估实际吞吐量不仅仅是测量数据传输速率,还需要分析数据传输过程中的延迟、丢包率、抖动等参数,以找出网络性能瓶颈并进行优化。通过合理的QoS配置、设备升级或网络调整,可以提高网络链路的实际吞吐量,以更好地满足用户的需求和提升网络性能。
评估网络链路的实际吞吐量是网络管理中的关键任务之一,它帮助管理员了解和优化网络的性能表现,确保网络资源的有效利用,提高数据传输的效率和稳定性。
-
- iPerf 可以用于测量网络连接的带宽,包括TCP和UDP模式。通过测试,可以
-
延迟测试:
- 除了带宽测量,iPerf 还可以测试网络连接的延迟(或称为延时)。这对于评估网络连接的响应速度和实时性非常重要,特别是在需要高效率和低延迟的应用场景中。
测试
网络连接的延迟是指测量数据从一个计算机发送到另一个计算机并返回所需的时间。延迟通常用来衡量网络的响应速度和效率。它是指网络中数据包传输所需的时间,从发送方发送数据开始到接收方确认接收完成为止的总时间。延迟通常以毫秒(ms)为单位计量,较低的延迟意味着网络连接速度更快、响应更迅速。延迟可以分为几种主要类型:
-
往返延迟(Round-Trip Time, RTT):即数据从发送方发送到接收方并返回发送方所需的时间。在网络测试中,常用ping命令来测量往返延迟。
-
单向延迟(One-Way Delay):指数据从发送方到接收方的传输时间,不包括返回时间。单向延迟通常比往返延迟小,因为它不包含返回数据的时间。
-
传输延迟(Transmission Delay):数据从发送方开始传输到接收方所需的时间,不包括传播和处理的时间。传输延迟受到数据量和网络带宽的影响。
-
处理延迟(Processing Delay):在路由器或计算机上处理数据包所需的时间。处理延迟取决于设备的处理能力和负载。
-
排队延迟(Queueing Delay):数据包在路由器或网络设备的输出队列中等待传输的时间。排队延迟取决于网络拥塞情况和设备队列的长度。
这些延迟类型共同决定了网络连接的总体响应速度和效率。理解和测量延迟对于网络性能优化、故障排除和服务质量(QoS)评估至关重要。
-
- 除了带宽测量,iPerf 还可以测试网络连接的延迟(或称为延时)。这对于评估网络连接的响应速度和实时性非常重要,特别是在需要高效率和低延迟的应用场景中。
-
抖动测量:
- 抖动是指网络数据包传输的时间间隔不稳定性,对于实时音视频传输等应用尤为关键。iPerf 可以测量网络连接的抖动,帮助评估其稳定性和可靠性。
网络抖动测量是指评估网络数据包传输时延的不稳定性或变化程度的过程。具体来说,抖动指的是数据包在传输过程中到达时间间隔的变动性。在一个稳定的网络中,数据包应当以固定的时间间隔到达目的地;而抖动则表示这些到达时间间隔的不规则性。网络抖动的测量通常以毫秒为单位,通过分析数据包到达的时间戳来计算。较高的抖动意味着数据包的到达时间不稳定,可能会影响实时应用程序的性能,如VoIP电话、视频会议等,因为这些应用需要稳定的数据传输以确保声音和图像的连贯性。
因此,网络抖动测量是网络管理和优化中重要的一部分,帮助网络管理员评估网络的稳定性,并采取必要的措施来减少抖动,提高网络的性能和服务质量。
- 抖动是指网络数据包传输的时间间隔不稳定性,对于实时音视频传输等应用尤为关键。iPerf 可以测量网络连接的抖动,帮助评估其稳定性和可靠性。
-
单向和双向测试:
- iPerf 支持单向和双向测试模式。单向测试用于评估数据在一个方向上传输的性能,而双向测试则同时测试数据在两个方向上的传输性能,对于
全双工网络连接的评估尤为重要。全双工网络连接是指网络中的通信设备(如交换机、路由器、网络接口卡等)可以同时进行发送和接收数据的能力。这种连接方式允许数据在两个方向上同时传输,不会发生数据冲突或碰撞,因此能够显著提高网络的传输效率和带宽利用率。在全双工连接中,设备能够独立地发送和接收数据包,这与半双工连接和单工连接形成对比:
-
半双工连接:在半双工连接中,通信设备只能在两个方向的其中一个方向上进行通信,即同时只能进行发送或接收操作,不能同时进行。
-
单工连接:在单工连接中,通信设备只能在一个方向上传输数据,而不能反向传输。这种连接方式通常用于一方向数据流明确且不需要回应的情况,如广播电台的发射端。
全双工连接的优点包括:
- 高效性:能够充分利用带宽,同时进行发送和接收,不会浪费时间等待转换方向或冲突检测。
- 快速响应:允许设备实时接收和处理来自网络的数据,因此在实时应用如视频会议、在线游戏中表现更为出色。
- 减少碰撞:由于能够同时进行双向通信,减少了数据碰撞和重传的可能性,提高了数据传输的稳定性和可靠性。
全双工连接在现代网络设备中广泛应用,特别是在需要高吞吐量和低延迟的应用场景中,如企业网络、数据中心内部网络以及云服务提供商的基础设施中。
-
- iPerf 支持单向和双向测试模式。单向测试用于评估数据在一个方向上传输的性能,而双向测试则同时测试数据在两个方向上的传输性能,对于
-
并发连接测试:
- iPerf 允许同时建立多个连接进行测试,这对于评估网络设备或服务在高负载条件下的表现至关重要。用户可以控制
并发连接的数量,以模拟实际网络使用情况。并发连接是指在计算机网络中,多个设备或应用程序能够同时建立和维护多个连接的能力。这些连接可以是同一设备或应用程序与多个其他设备或应用程序之间的连接,也可以是多个设备或应用程序之间互相之间建立的连接。具体来说,并发连接可以在以下几个方面体现:
-
客户端-服务器模型中的并发连接:服务器可以同时处理多个客户端的连接请求。这意味着服务器能够并行地与多个客户端建立通信连接,并处理它们发送的请求。
-
多路复用技术:通过多路复用技术(如TCP的多路复用技术),一个应用程序可以同时管理多个连接。这使得应用程序能够同时与多个远程主机建立通信连接,而无需为每个连接创建一个单独的进程或线程。
-
并发网络应用程序:许多现代网络应用程序(如Web服务器、聊天程序、在线游戏等)需要同时处理来自多个用户的请求或数据流。这些应用程序需要具备并发连接的能力,以便有效地管理和响应多个用户的请求。
并发连接的实现可以通过操作系统和网络协议栈的支持,以及应用程序的设计和开发来实现。它对于提升系统的性能、响应速度以及用户体验至关重要,特别是在大规模、高负载的网络环境中。
并发连接的数量指的是在某一时刻或某一时间段内,一个系统、设备或应用程序能够同时处理或支持的连接总数。这是一个重要的性能指标,特别是对于网络设备、服务器和应用程序来说。具体来说,一个系统或设备能够处理的并发连接数量受到多种因素的影响,包括但不限于以下几点:
-
硬件资源:系统的处理器性能、内存大小、网络接口的带宽等硬件资源对并发连接数量有直接影响。较高性能的硬件可以支持更多的并发连接。
-
操作系统支持:操作系统在处理网络连接时的效率和能力是限制并发连接数量的一个重要因素。优化的网络协议栈和并发处理能力能够提高系统的并发连接支持能力。
-
应用程序设计:应用程序本身的设计和实现对并发连接的支持程度很重要。合理的线程或进程管理、事件驱动的编程模型以及使用合适的并发控制机制(如锁、信号量、队列等)都能影响到应用程序能够同时处理的连接数量。
-
网络协议的选择:不同的网络协议有不同的连接管理机制和开销,影响系统能够支持的最大并发连接数量。例如,TCP和UDP在连接管理和资源消耗上有所不同。
在实际应用中,管理员或开发人员需要评估和优化系统以支持足够的并发连接数量,以满足预期的用户或设备连接需求,并确保系统在高负载时仍能提供稳定和高效的服务。
-
- iPerf 允许同时建立多个连接进行测试,这对于评估网络设备或服务在高负载条件下的表现至关重要。用户可以控制
-
数据包大小设置:
- 用户可以通过iPerf设置不同大小的
数据包来测试网络连接的不同传输特性。这对于评估不同应用程序在网络上的性能表现具有重要意义。数据包是计算机网络中传输的基本单位,它包含了要传输的信息及相关的控制信息。数据包通常由以下几个要素组成:-
数据部分:数据包携带的实际信息内容,例如发送者要传输的文件、网页内容或其他应用数据。
-
控制信息:用于管理和控制数据传输的信息。这些信息可能包括源地址、目标地址、校验和、序列号等,以确保数据能够正确地到达目的地并且在传输过程中不被篡改。
-
协议头部:数据包的开头通常包含协议头部,用来标识数据包所使用的网络协议类型(如TCP、UDP、IP等)以及其他必要的控制信息。
数据包在网络中通过物理介质(如电缆、光纤)或无线信道进行传输,经过多个网络设备(如路由器、交换机)转发,最终到达目的地。在传输过程中,数据包可能会被分片、重新组装或重新排序,以适应不同的网络条件和路由路径。
数据包的大小可以根据所使用的网络协议而有所不同。例如,以太网中的数据包最大长度为1500字节(不包括帧头和帧尾),而IPv4中的数据包最大长度为65535字节。数据包的大小直接影响到网络传输的效率和延迟,因此在设计网络应用程序时,需要考虑数据包大小对性能的影响。
数据包是计算机网络中传输数据的基本单元,它通过网络协议进行封装和传输,确保数据的有效传输和接收。
数据包的大小是指在计算机网络中,数据包所能够携带的最大数据量或字节数量。它是网络通信中一个重要的参数,直接影响到数据传输的效率、延迟以及网络资源的利用率。具体来说,数据包的大小由以下几个因素决定:
-
网络协议限制:每种网络协议都规定了数据包的最大大小。例如,在以太网中,标准的最大数据包长度是1500字节(不包括帧头和帧尾)。对于IPv4,IP层的数据包最大长度为65535字节。
-
网络设备能力:网络设备(如路由器、交换机)在转发数据包时,可能会对数据包的大小有限制。例如,某些路由器可能无法处理超过某一特定大小的数据包,或者需要对超大的数据包进行分片处理。
-
传输介质特性:不同的传输介质(如以太网、无线网络)对数据包的大小有不同的限制。无线网络通常对传输的数据包大小有更为严格的限制,因为大数据包可能会导致较高的丢包率或延迟。
-
应用程序需求:不同的应用程序对数据包大小的要求也可能有所不同。某些应用程序需要传输大量的数据,因此可能会利用网络协议允许的最大数据包大小来提高传输效率。
数据包大小的选择需要在考虑网络协议的限制、设备能力以及实际应用需求之间进行权衡。过大的数据包可能增加传输时的延迟和出错率,而过小的数据包则可能会增加网络开销和传输效率下降。因此,在设计网络应用程序或配置网络设备时,合理地选择和调整数据包大小是非常重要的。
-
- 用户可以通过iPerf设置不同大小的
-
服务质量(QoS)验证:
- iPerf 可以用于
验证服务质量(QoS)参数,如带宽限制、延迟、抖动等。这对于确保网络服务符合预期的性能水平非常重要,特别是对于网络服务供应商和企业用户。服务质量(Quality of Service,QoS)参数是网络管理中用来衡量和控制网络中数据传输服务质量的指标。它通常涵盖了多个方面,以确保网络能够提供满足用户需求的高效和可靠的服务。服务质量的主要参数包括以下几个方面:
-
带宽:带宽是指网络中可以传输数据的最大速率。在QoS中,带宽参数可以用来限制每个用户或每个应用程序可以使用的最大带宽,从而保证各个用户或应用程序之间的公平共享和资源优化。
-
延迟:延迟是数据从发送端到接收端所需的时间。QoS中的延迟参数通常用来确保实时应用程序(如语音通话、视频会议)能够在传输过程中保持较低的延迟,以减少通信双方之间的响应时间。
-
抖动:抖动是指数据包到达时间的变化或波动。QoS参数中的抖动控制通常用来保证在实时传输中(如视频流)数据包的到达时间波动较小,从而提供更稳定和连贯的服务。
-
丢包率:丢包率是指在数据传输过程中丢失的数据包的比例。QoS中的丢包率参数用来控制网络中丢包的情况,以确保在重要数据传输(如文件传输、在线游戏)中能够尽量减少数据包丢失的影响。
-
优先级:QoS中的优先级参数用来定义不同类型数据流的优先级顺序。通过设定优先级,可以确保网络在拥塞或高负载时能够优先处理重要的数据流,从而提高关键应用的服务质量。
服务质量(QoS)参数是通过对带宽、延迟、抖动、丢包率和优先级等指标进行有效管理和控制,以达到优化网络资源利用、提高数据传输效率和保证关键应用程序正常运行的目的。通过合理配置和监控QoS参数,网络管理员能够更好地满足用户和应用程序的服务需求,提升整体网络性能和用户体验。
-
- iPerf 可以用于
iPerf 是一个灵活而强大的工具,适用于各种网络性能测试和评估需求,可以帮助用户深入了解和优化其网络基础设施的表现。
iPerf 是一个基于客户端-服务器模型的网络性能测试工具,其底层原理涉及网络数据传输、流控制、数据包生成和接收等几个关键方面:
-
客户端-服务器模型:
- iPerf 分为客户端和服务器两个角色。客户端通过向服务器发送数据流来测试网络连接的性能。服务器接收来自客户端的数据并进行处理,通常是测量和记录数据传输的性能指标。
-
TCP 和 UDP 测试:
- iPerf 支持基于TCP和UDP协议的测试。在TCP模式下,它通过建立TCP连接并测量数据的传输速率、延迟等参数。在UDP模式下,它发送UDP数据包,并测量丢包率、带宽和抖动等参数。
-
数据包生成和接收:
- 客户端和服务器之间的数据传输通过生成数据包(或数据流)来实现。数据包的大小和频率由用户设置,以模拟不同的网络负载和条件。
-
流控制:
- 在数据传输过程中,iPerf 使用流控制机制来确保数据按照预期的速率和顺序进行传输。这涉及到如何调整数据传输的速率,以避免网络拥塞或数据包丢失。
-
实时性能指标:
- iPerf 在测试过程中实时测量并显示带宽、延迟、抖动和丢包率等性能指标。这些指标对于评估网络连接的质量和性能至关重要,特别是在要求高效率和稳定性的应用场景中。
-
多平台支持:
- iPerf 被设计为跨平台的工具,支持在各种操作系统上运行,包括Windows、Linux、macOS等。这使得它成为一个通用的网络性能测试工具,适用于不同的网络环境和设备。
iPerf 的底层原理包括了数据生成、传输、接收和性能评估等多个方面,通过这些功能帮助用户深入了解和优化其网络基础设施的性能。
iPerf 的架构基于经典的客户端-服务器模型,它的工作方式如下:
-
客户端(Client):
- 客户端是发起性能测试的一方。它通过连接到运行着 iPerf 服务器端的主机,发送测试数据并收集测试结果。客户端通常由用户在命令行或图形界面中启动,并设置测试的参数如目标服务器地址、端口、测试时长、数据流量等。
-
服务器(Server):
- 服务器端是接收来自客户端的测试请求,并处理测试数据的一方。服务器端收到客户端发来的连接请求后,根据指定的参数(如端口号)开始接收并处理来自客户端的数据流。它会测量和记录数据传输的性能指标,如带宽、延迟、抖动等,并在测试结束后将结果返回给客户端。
-
TCP 和 UDP 模式:
- iPerf 支持两种主要的测试模式:TCP 和 UDP。在 TCP 模式下,客户端和服务器之间建立可靠的连接,数据按顺序传输,同时测量吞吐量、延迟和其他性能指标。在 UDP 模式下,客户端发送无连接的数据报,服务器端测量带宽、丢包率和抖动等指标。
-
多平台支持:
- iPerf 被设计为跨平台的工具,可以在多种操作系统上运行,包括 Windows、Linux、macOS 等。这使得它非常灵活,可以适用于各种网络环境和设备。
-
实时性能监控:
- 在测试过程中,iPerf 提供实时的性能监控和显示,包括传输速率、丢包率、延迟等指标。这些信息可以帮助用户在测试过程中实时了解网络连接的状况。
iPerf 的架构简单而有效,通过客户端和服务器的配合,提供了全面的网络性能测试和评估功能,帮助用户优化和管理其网络基础设施。
iPerf 的工作原理涉及以下几个关键方面,主要是基于客户端-服务器模型进行的网络性能测试:
-
客户端和服务器角色:
- 客户端(Client):负责向指定的 iPerf 服务器发送数据流,并监控测试的各种性能指标。
- 服务器(Server):接收来自客户端的连接请求,并处理测试数据流,同时测量和记录性能指标。
-
TCP 和 UDP 测试模式:
- TCP 模式:在 TCP 模式下,iPerf 使用 TCP 协议建立连接,并在连接上发送数据流。通过测量数据传输的速率、丢包率、延迟等指标,评估网络的可靠性和性能。
- UDP 模式:在 UDP 模式下,iPerf 发送无连接的数据包。服务器端测量接收到的数据包数量、丢包率、带宽以及数据包的抖动情况,这对于评估实时应用程序的性能尤为重要。
-
数据流的生成和处理:
- 在测试期间,客户端会生成一定数量和大小的数据流,并将其发送到服务器端。服务器端则接收这些数据流,并根据需要进行测量和分析,以确定网络的各种性能参数。
-
性能指标的测量和显示:
- 在测试过程中,iPerf 实时地测量和显示性能指标,例如带宽、吞吐量、延迟、丢包率等。这些指标不仅可以帮助用户评估当前的网络状况,还能帮助发现网络中潜在的瓶颈和问题。
-
跨平台支持:
- iPerf 被设计为跨平台的工具,支持在各种操作系统上运行,包括 Windows、Linux、macOS 等,使其适用于多种不同环境下的网络性能测试需求。
iPerf 通过客户端和服务器的协作,提供了一个简单但强大的工具,用于评估和优化网络连接的性能,无论是在本地网络还是在广域网中。
在 Windows 上使用 iPerf 进行网络性能测试的基本教程大纲可以包括以下内容:
1. 安装 iPerf
- 下载适用于 Windows 的 iPerf 安装程序或二进制文件。
- 安装并设置环境变量(可选)。
2. 准备测试环境
- 确定你要测试的两台计算机(一台作为客户端,一台作为服务器)。
- 确保两台计算机在同一个局域网或广域网中,能够相互访问。
3. 启动服务器端
- 在服务器计算机上打开命令提示符(或 PowerShell)。
- 运行 iPerf 服务器端命令,如:
iperf3 -s。 - 确保服务器端正常运行并等待客户端连接。
4. 运行客户端测试
- 在客户端计算机上打开命令提示符(或 PowerShell)。
- 运行 iPerf 客户端命令,连接到服务器进行测试,如:
iperf3 -c server_ip。server_ip是你服务器的 IP 地址。
- 根据需要设置测试参数,如测试时间、数据报大小等。
5. 分析测试结果
- 在客户端和服务器端观察 iPerf 的输出结果。
- 分析测量得到的带宽、延迟、丢包率等性能指标。
- 根据结果评估网络连接的质量和性能瓶颈。
6. 使用其他功能和选项(可选)
- 探索 iPerf 的其他命令行选项,如不同的测试模式(TCP/UDP)、并发连接数等。
- 针对特定的网络测试需求调整参数,并观察测试结果的变化。
7. 结束测试
- 测试完成后,关闭 iPerf 客户端和服务器端进程。
8. 高级功能和扩展(可选)
- 考虑使用 iPerf 的图形用户界面(GUI)或其他第三方封装工具,简化测试配置和结果分析。
- 如果需要长时间或定期运行测试,可以编写脚本自动化 iPerf 的启动和结果收集过程。
这些步骤提供了一个基本的框架,可以帮助你在 Windows 环境下使用 iPerf 进行网络性能测试。具体的操作细节和结果分析将依赖于你的具体网络环境和测试需求。
中级使用者,以下是一个更深入的 Windows iPerf 使用教程大纲,涵盖更复杂的测试和参数配置:
1. 配置和准备工作
-
多线程测试:
- 使用
-P参数设置多个并发线程,以模拟多用户或并行连接的情况。 - 示例:
iperf3 -c server_ip -P 5表示使用5个并发线程连接到服务器。
- 使用
-
自定义报文大小:
- 使用
-l参数设置发送报文的大小(字节)。 - 示例:
iperf3 -c server_ip -l 1460设置发送报文的大小为1460字节(通常用于模拟特定应用层协议的数据包大小)。
- 使用
2. 测试不同的协议和模式
-
UDP 测试:
- 使用
-u参数进行 UDP 测试,以测量带宽、丢包率和抖动。 - 示例:
iperf3 -c server_ip -u -b 10M -l 1000进行 UDP 测试,限制带宽为10 Mbps,设置数据包大小为1000字节。
- 使用
-
设置测试持续时间:
- 使用
-t参数设置测试持续时间(秒)。 - 示例:
iperf3 -c server_ip -t 60进行60秒的测试。
- 使用
3. 结果分析和图形化展示
-
保存测试结果:
- 使用
-y参数将测试结果保存为 JSON 格式,便于后续分析。 - 示例:
iperf3 -c server_ip -J > results.json将结果保存到 results.json 文件中。
- 使用
-
使用图形界面分析工具:
- 探索 iPerf 的图形用户界面(GUI)或第三方工具,如 JPerf,用于更直观地分析测试结果。
4. 高级网络性能测试和优化
-
TCP 窗口大小设置:
TCP 窗口(TCP Window)是 TCP 协议中用来控制数据流量的关键机制,其底层原理涉及到 TCP 流量控制和拥塞控制的方面。
基本概念
TCP 窗口是指接收方允许发送方在不需要等待确认的情况下发送数据量的大小。发送方通过 TCP 窗口大小来控制自己发送数据的速率,从而避免发送数据速度过快而导致网络拥塞或丢包。
TCP 窗口的工作原理
-
发送方窗口(Sender Window):
- 发送方维护一个发送窗口的大小,即发送方可以在不收到接收方确认的情况下发送的字节数量。
- 发送方会根据接收方返回的窗口大小(接收窗口)来调整自己的发送窗口大小,以避免发送过多数据导致接收方无法处理或网络拥塞。
-
接收方窗口(Receiver Window):
- 接收方也维护一个接收窗口的大小,即接收方愿意接收的未确认数据的字节数量。
- 当接收方收到数据后,会发送确认(ACK)给发送方,并告知发送方它的接收窗口大小,发送方便据此调整发送窗口。
-
滑动窗口协议:
- TCP 使用滑动窗口协议来动态调整窗口大小。发送方在每次收到确认时,将窗口向前滑动,并根据接收方的窗口大小调整窗口的尺寸。
-
拥塞窗口与接收窗口的关系:
- TCP 的拥塞控制机制(例如拥塞窗口)会与 TCP 窗口进行交互,以确保在网络拥塞时减少发送数据的速率,避免数据丢失和网络性能下降。
TCP 窗口的优化
-
自适应窗口调整:TCP 实现了自适应的窗口调整算法,如慢启动和拥塞避免,以便在不同的网络条件下调整发送速率和窗口大小。
-
窗口缩放选项:TCP 还支持窗口缩放选项(Window Scaling),允许发送和接收方在 TCP 头部中使用更大的窗口大小值,以支持更高速率的数据传输。
总结
TCP 窗口的底层原理涉及到发送方和接收方之间的动态交互,通过窗口大小的调整来优化数据的传输效率和网络的稳定性。这种机制确保了 TCP 协议在各种网络环境下都能够高效地运行,并在遇到网络拥塞时进行适当的调整,从而保证数据的可靠传输。
- 使用
-w参数设置 TCP 窗口大小,优化大文件传输的性能。 - 示例:
iperf3 -c server_ip -w 1M设置 TCP 窗口大小为1 MB。
-
-
深入分析网络延迟:
- 使用
-R参数进行反向测试,测量双向传输的性能。 - 示例:
iperf3 -c server_ip -R进行反向测试。
- 使用
5. 自动化和扩展
-
脚本自动化测试:
- 编写批处理脚本或 PowerShell 脚本,自动化 iPerf 的启动、参数配置和结果收集过程。
提供一个用于自动化 iPerf 启动、参数配置和结果收集的 PowerShell 脚本示例。iPerf 是一个用于测量网络带宽性能的工具,以下是一个基本的 PowerShell 脚本示例:
powershellCopy Code# 定义变量 $serverIP = "10.0.0.1" # 替换为你的 iPerf 服务器 IP 地址 $iperfPath = "C:\iperf\iperf3.exe" # iPerf 可执行文件路径 $outputFile = "C:\iperf\iperf_results.txt" # 结果输出文件路径 # 定义函数:运行 iPerf 测试 function Run-iPerf { param ( [string]$serverIP, [string]$iperfPath, [string]$outputFile ) # 准备 iPerf 命令 $iperfCommand = "$iperfPath -c $serverIP -i 1 -t 10 -f m -P 5 > $outputFile" # 运行 iPerf 测试 Write-Host "开始 iPerf 测试..." Write-Host "命令: $iperfCommand" Invoke-Expression $iperfCommand Write-Host "iPerf 测试完成。结果保存至: $outputFile" } # 调用函数运行 iPerf 测试 Run-iPerf -serverIP $serverIP -iperfPath $iperfPath -outputFile $outputFile解释:
-
变量:
$serverIP: 替换为你的 iPerf 服务器 IP 地址。$iperfPath: 指定 iPerf 可执行文件的完整路径(在此例中为iperf3.exe)。$outputFile: 结果输出文件的路径。
-
函数
Run-iPerf:- 此函数接受三个参数:
$serverIP、$iperfPath和$outputFile。 - 使用指定的参数构建 iPerf 命令:
-c $serverIP: 连接到指定 IP 的 iPerf 服务器。-i 1: 设置每秒报告一次的间隔。-t 10: 运行 10 秒的测试时间(根据需要调整)。-f m: 设置输出格式为兆比特每秒(Mbps)。-P 5: 指定并行客户端线程数(根据需要调整)。> $outputFile: 将输出重定向到指定的文件。
- 此函数接受三个参数:
-
执行:
- 脚本调用
Run-iPerf函数,并传入定义的参数。 - 显示执行的 iPerf 命令,并等待测试完成。
- 测试完成后,通知结果保存在
$outputFile中。
- 脚本调用
使用方法:
-
准备 iPerf:
- 如果尚未安装,请下载并安装 iPerf。
- 确保 iPerf 服务器正在运行,并能从运行此脚本的计算机访问。
-
修改脚本变量:
- 替换
$serverIP为你的 iPerf 服务器的 IP 地址。 - 如果 iPerf 安装在不同的目录,请调整
$iperfPath。 - 设置
$outputFile为你想要保存结果的路径。
- 替换
-
运行脚本:
- 将脚本保存为
.ps1文件(例如run_iperf.ps1)。 - 打开 PowerShell 并导航到包含脚本的目录。
- 输入
.\run_iperf.ps1并按 Enter 执行。
- 将脚本保存为
-
查看结果:
- 脚本完成后,打开指定的输出文件(在本例中为
iperf_results.txt),查看 iPerf 测试结果。
- 脚本完成后,打开指定的输出文件(在本例中为
这个脚本提供了一个基本框架。根据你的具体需求(如不同的 iPerf 参数或额外的错误处理),你可以进一步修改它。
-
- 编写批处理脚本或 PowerShell 脚本,自动化 iPerf 的启动、参数配置和结果收集过程。
-
持续集成和定期测试:
- 将 iPerf 集成到持续集成系统中,定期执行性能测试,检测网络性能变化和问题。
6. 多平台和跨网络测试
-
跨平台测试:
- 在不同操作系统(如 Linux、macOS)上运行 iPerf,比较和分析跨平台的网络性能。
-
远程服务器测试:
- 使用 SSH 或远程桌面连接到远程服务器上执行 iPerf 测试,评估广域网或云服务的性能。
这些中级使用教程的内容将帮助用户更深入地了解和利用 iPerf 工具进行复杂的网络性能测试和优化。
更高级的 Windows 上 iPerf 的使用时,以下是一个详细的大纲,包括各种高级功能和配置选项:
1. 安装和基本配置
-
安装 iPerf:
- 下载并安装最新版本的 iPerf 工具,确保将其添加到系统的 PATH 环境变量中,以便在任何位置都能访问到。
-
基本测试:
- 确认基本的 TCP 连接测试功能正常运行:
iperf3 -c server_ip。
- 确认基本的 TCP 连接测试功能正常运行:
2. 多线程和并发连接
- 使用
-P参数设置并发线程:- 示例:
iperf3 -c server_ip -P 5表示使用5个并发线程连接到服务器。
- 示例:
3. UDP 测试和性能调优
-
UDP 测试:
- 使用
-u参数进行 UDP 测试:iperf3 -c server_ip -u -b 10M。 - 设置带宽
-b参数,控制 UDP 测试的带宽。
- 使用
-
设置 UDP 数据报大小:
- 使用
-l参数设置 UDP 数据报的大小:iperf3 -c server_ip -u -b 10M -l 1000。
- 使用
4. TCP 窗口大小调整
- 设置 TCP 窗口大小:
- 使用
-w参数设置 TCP 窗口大小,优化大文件传输的性能:iperf3 -c server_ip -w 1M。
- 使用
5. 测试持续时间和自定义报告格式
-
设置测试持续时间:
- 使用
-t参数设置测试持续时间(秒):iperf3 -c server_ip -t 60进行60秒的测试。
- 使用
-
保存 JSON 格式的结果:
- 使用
-J参数将测试结果保存为 JSON 格式:iperf3 -c server_ip -J > results.json。
- 使用
6. 反向测试和双向传输
- 反向测试:
- 使用
-R参数进行反向测试,测试双向传输的性能:iperf3 -c server_ip -R。
- 使用
7. 图形化界面分析工具
- 使用第三方图形化工具:
- 探索 iPerf 的图形用户界面(GUI),如 JPerf,用于更直观地分析测试结果。
8. 自动化和脚本化
- 批处理脚本和自动化:
- 编写批处理脚本或 PowerShell 脚本,自动化 iPerf 的配置、执行和结果分析。
提供一个自动化 iPerf 测试的 PowerShell 脚本示例,该脚本将配置 iPerf 客户端并执行带宽测试,并对结果进行分析。
powershellCopy Code# 定义变量 $serverIP = "10.0.0.1" # iPerf 服务器的 IP 地址 $testDuration = 10 # 测试持续时间(秒) $outputFile = "iperf_results.txt" # 结果输出文件 # 函数:运行 iPerf 测试 function Run-iPerfTest { param ( [string]$serverIP, [int]$testDuration, [string]$outputFile ) # 准备 iPerf 命令 $iperfCommand = "iperf3.exe -c $serverIP -t $testDuration -f m -P 5" # 执行 iPerf 测试 Write-Host "开始 iPerf 测试..." Write-Host "命令: $iperfCommand" $iperfOutput = Invoke-Expression $iperfCommand # 将输出写入文件 $iperfOutput | Out-File -FilePath $outputFile -Encoding UTF8 Write-Host "iPerf 测试完成。结果保存至: $outputFile" } # 调用函数运行 iPerf 测试 Run-iPerfTest -serverIP $serverIP -testDuration $testDuration -outputFile $outputFile # 分析结果示例(可根据需要扩展) # 从结果文件中提取带宽数据(示例:平均带宽) $bandwidth = Get-Content $outputFile | Where-Object { $_ -match "sender" } | ForEach-Object { ($_ -split "\s+")[6] } # 输出分析结果 Write-Host "平均带宽: $bandwidth Mbps"解释:
-
变量定义:
$serverIP: 指定 iPerf 服务器的 IP 地址。$testDuration: 测试持续时间,单位为秒。$outputFile: 用于保存 iPerf 测试结果的文件名。
-
函数
Run-iPerfTest:- 此函数接受三个参数:
$serverIP、$testDuration和$outputFile。 - 构建并执行 iPerf 命令:
-c $serverIP: 连接到指定 IP 的 iPerf 服务器。-t $testDuration: 设置测试持续时间。-f m: 指定输出格式为兆比特每秒(Mbps)。-P 5: 指定并行客户端线程数(可以根据需要调整)。
- 此函数接受三个参数:
-
执行 iPerf 测试:
- 使用
Invoke-Expression执行 iPerf 命令,并将结果保存到指定的$outputFile中。
- 使用
-
结果分析示例:
- 从输出文件中提取带宽数据的示例(这里假设输出中有
sender的行,并从中提取带宽)。 - 这只是一个简单的示例,实际需求可能需要更复杂的数据提取和分析过程。
- 从输出文件中提取带宽数据的示例(这里假设输出中有
-
注意事项:
- 脚本假设 iPerf 已经安装在系统中,并且
iperf3.exe可以直接在 PowerShell 中执行。 - 可以根据实际情况调整 iPerf 的其他参数或结果的处理方式。
- 脚本假设 iPerf 已经安装在系统中,并且
通过这个脚本,你可以自动化执行 iPerf 测试并获取基本的带宽数据。根据你的具体需求,可以进一步扩展脚本以包括更复杂的测试配置和结果分析。
-
- 编写批处理脚本或 PowerShell 脚本,自动化 iPerf 的配置、执行和结果分析。
9. 高级网络性能优化
- 针对特定应用层协议的测试:
- 使用
-l参数设置特定应用层协议的数据包大小,如 VoIP 或视频流的数据包大小。
- 使用
10. 跨平台和远程测试
-
跨平台测试:
- 在不同操作系统上运行 iPerf,比较和分析跨平台的网络性能。
-
远程服务器测试:
- 使用 SSH 或远程桌面连接到远程服务器上执行 iPerf 测试,评估广域网或云服务的性能。
11. 结果分析和持续集成
-
结果分析:
- 分析 iPerf 测试生成的详细结果,包括带宽、延迟、丢包率等指标。
-
持续集成:
- 将 iPerf 集成到持续集成系统中,定期执行性能测试,检测网络性能变化和问题。
通过这些高级功能和配置选项,用户可以更深入地了解和优化其网络环境的性能,适应复杂的应用场景和需求。
Windows 系统上使用 iPerf 进行专家级的网络性能测试和调优时,以下是一个详细的大纲,涵盖了各种高级功能和配置选项:
1. 安装和基本配置
- 安装 iPerf:
- 下载最新版本的 iPerf 工具并安装,在系统的 PATH 环境变量中添加 iPerf 的路径,以便在命令提示符中全局访问。GitHub - esnet/iperf: iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool
2. 基本测试
- TCP 带宽测试:
- 使用基本的 TCP 连接测试服务器带宽:
iperf3 -c server_ip。
- 使用基本的 TCP 连接测试服务器带宽:
3. 多线程和并发连接
- 设置并发线程数:
- 使用
-P参数设置并发线程数,以增加测试负载:iperf3 -c server_ip -P 5。
- 使用
4. UDP 测试和性能调优
- 进行 UDP 测试:
- 使用
-u参数进行 UDP 测试,并设置带宽限制:iperf3 -c server_ip -u -b 10M。 - 调整 UDP 数据包大小:
iperf3 -c server_ip -u -l 1000。
- 使用
5. TCP 窗口大小调整
- 优化 TCP 窗口大小:
- 使用
-w参数调整 TCP 窗口大小以优化大文件传输的性能:iperf3 -c server_ip -w 1M。
- 使用
6. 测试持续时间和报告格式
-
设置测试持续时间:
- 使用
-t参数设置测试持续时间(秒):iperf3 -c server_ip -t 60进行60秒的测试。
- 使用
-
保存 JSON 格式的结果:
- 使用
-J参数将测试结果保存为 JSON 格式以便后续分析:iperf3 -c server_ip -J > results.json。
- 使用
7. 反向测试和双向传输
- 进行反向测试:
- 使用
-R参数进行反向测试,评估双向传输的性能:iperf3 -c server_ip -R。
- 使用
8. 高级网络性能优化
- 应用层协议测试:
- 根据需要调整 UDP 数据包大小或 TCP 窗口大小,以适应特定的应用层协议要求。
9. 跨平台和远程测试
-
跨平台测试:
- 在不同操作系统上运行 iPerf,比较不同平台的网络性能。
-
远程服务器测试:
- 使用 SSH 或远程桌面连接到远程服务器进行 iPerf 测试,评估广域网或云服务的性能。
10. 结果分析和持续集成
-
结果分析:
- 分析 iPerf 测试生成的详细结果,包括带宽、延迟、丢包率等指标。
-
持续集成:
- 将 iPerf 集成到持续集成系统中,定期执行性能测试,检测网络性能的变化和问题。
11. 图形化界面和自动化脚本
-
使用图形化界面工具:
- 探索 iPerf 的图形用户界面(GUI),如 JPerf,用于更直观地分析和比较测试结果。
-
自动化测试:
- 编写批处理脚本或 PowerShell 脚本,自动化 iPerf 的配置、执行和结果收集。
通过掌握这些高级功能和配置选项,用户可以深入了解和优化其网络环境的性能,适应各种复杂的应用场景和需求。
Windows 系统上使用 iPerf 进行顶级专家级的网络性能测试和调优时,以下是一个详细的大纲,覆盖了各种高级功能和配置选项:
1. 安装和基本配置
- 安装 iPerf:
- 下载最新版本的 iPerf 工具并安装,在系统的 PATH 环境变量中添加 iPerf 的路径,以便在命令提示符中全局访问。
2. 基本测试
- TCP 带宽测试:
- 使用基本的 TCP 连接测试服务器带宽:
iperf3 -c server_ip。
- 使用基本的 TCP 连接测试服务器带宽:
3. 多线程和并发连接
- 设置并发线程数:
- 使用
-P参数设置并发线程数,以增加测试负载:iperf3 -c server_ip -P 5。
- 使用
4. UDP 测试和性能调优
- 进行 UDP 测试:
- 使用
-u参数进行 UDP 测试,并设置带宽限制:iperf3 -c server_ip -u -b 10M。 - 调整 UDP 数据包大小:
iperf3 -c server_ip -u -l 1000。
- 使用
5. TCP 窗口大小调整
- 优化 TCP 窗口大小:
- 使用
-w参数调整 TCP 窗口大小以优化大文件传输的性能:iperf3 -c server_ip -w 1M。
- 使用
6. 测试持续时间和报告格式
-
设置测试持续时间:
- 使用
-t参数设置测试持续时间(秒):iperf3 -c server_ip -t 60进行60秒的测试。
- 使用
-
保存 JSON 格式的结果:
- 使用
-J参数将测试结果保存为 JSON 格式以便后续分析:iperf3 -c server_ip -J > results.json。
- 使用
7. 反向测试和双向传输
- 进行反向测试:
- 使用
-R参数进行反向测试,评估双向传输的性能:iperf3 -c server_ip -R。
- 使用
8. 高级网络性能优化
- 应用层协议测试:
- 根据需要调整 UDP 数据包大小或 TCP 窗口大小,以适应特定的应用层协议要求。
9. 跨平台和远程测试
-
跨平台测试:
- 在不同操作系统上运行 iPerf,比较不同平台的网络性能。
-
远程服务器测试:
- 使用 SSH 或远程桌面连接到远程服务器进行 iPerf 测试,评估广域网或云服务的性能。
10. 结果分析和持续集成
-
结果分析:
- 分析 iPerf 测试生成的详细结果,包括带宽、延迟、丢包率等指标。
-
持续集成:
- 将 iPerf 集成到持续集成系统中,定期执行性能测试,检测网络性能的变化和问题。
11. 图形化界面和自动化脚本
-
使用图形化界面工具:
- 探索 iPerf 的图形用户界面(GUI),如 JPerf,用于更直观地分析和比较测试结果。Iperf - Browse Files at SourceForge.net
-
自动化测试:
- 编写批处理脚本或 PowerShell 脚本,自动化 iPerf 的配置、执行和结果收集。
通过掌握这些高级功能和配置选项,用户可以深入了解和优化其网络环境的性能,适应各种复杂的应用场景和需求。
使用方法:
iperf3 [-s|-c 主机] [选项]
iperf3 [-h|--help] [-v|--version]
服务器或客户端:
-p, --port # 服务器监听/连接的端口
-f, --format [kmgtKMGT] 报告格式:Kbits, Mbits, Gbits, Tbits
-i, --interval # 周期性吞吐量报告的间隔时间(秒)
-I, --pidfile 文件 写入 PID 文件
-F, --file 文件名 发送/接收指定的文件
-A, --affinity n[,m] 设置 CPU 核心亲和力为 n(进程将使用的核心)
(可选:客户端只有 m - 用于此测试的服务器核心号)
-B, --bind <host> 绑定到与地址 <host> 关联的接口
-V, --verbose 输出更详细的信息
-J, --json 以 JSON 格式输出
--json-stream 以行分隔的 JSON 格式输出
--logfile f 将输出发送到日志文件
--forceflush 强制每个间隔刷新输出
--timestamps<=格式> 在每行输出的开头添加时间戳
(可选:“=”和格式字符串,符合 strftime(3))
--rcv-timeout # 接收数据的空闲超时时间(默认 120000 毫秒)
-d, --debug[=#] 输出调试信息
(可选:可选的“=”和调试级别:1-4。默认为 4 - 所有消息)
-v, --version 显示版本信息并退出
-h, --help 显示此信息并退出
服务器特定:
-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 填充
客户端特定选项:
-c, --client <host>[%<dev>] 以客户端模式运行,连接到 <host>
(选项 <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 或符号值。
数值可以用十进制、八进制或十六进制表示(见上面的 --tos)。
-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 公钥路径
[KMG] 表示支持 K/M/G 后缀的选项,用于表示千、兆或吉。
C:\Users\Administrator\Downloads\iperf3.18_64>iperf3 -v
iperf 3.18 (cJSON 1.7.15)
CYGWIN_NT-10.0-26100 WIN-SIM65JFFMVQ 3.5.4-1.x86_64 2024-08-25 16:52 UTC x86_64
Optional features available: CPU affinity setting, authentication, support IPv4 don't fragment, POSIX threads
iperf 是一个简单的工具,可让您测量访问网络的内存到内存性能。 iperf3 是一个从头开始的较新实现,其目标是更小、更简单的代码库,以及可在其他程序中使用的功能的库版本。iperf3 不向后兼容 iperf2。
最新版本的 iperf3 可以在 github 上找到,并且 perfSONAR 存储库中可用于基于 Debian 和 RHEL 的系统的最新版本。iperf3 也在标准 Linux 存储库中,但通常有点过时。
此处提供了吞吐量测量工具的比较。
iperf2 和 iperf3 的基本命令是相同的:
| 服务器: | |
|
iperf -s iperf3 -s |
在默认端口上启动服务器 |
|
iperf -s -w 32M -D iperf3 -s -D |
使用较大的 TCP 窗口启动服务器,并处于守护进程模式 |
|
iperf -i1 -u -s -p 5003 iperf3 -s -p 5003 |
在端口 5003 上启动 UDP 服务器,并给出 1 秒间隔的报告。请注意,对于 iperf3,-u 选项从客户端传递到服务器。 |
| 客户 | |
| iperf/iperf3 -c 远程主机 -i 1 -t 30 | 运行 30 秒的测试,每 1 秒给出一次结果 |
| iperf/iperf3 -c 远程主机 -i 1 -t 20 -r | 从 remotehost 运行测试到 localhost |
| iperf/iperf3 -c 远程主机 -i 1 -t 20 -w 32M -P 4 | 使用 4 个并行流和 32M TCP 缓冲区运行测试 |
| iperf/iperf3 -c 远程主机 -u -i 1 -b 200M | 运行 200 Mbps UDP 测试 |
iperf3 添加了许多附加功能。例如,-i 模式报告 TCP 重传信息(默认情况下处于打开状态),而详细模式现在提供许多有关 CPU 使用率等的有用信息。其他新选项包括:
| 客户: | |
| iperf3 -c 远程主机 -i.5 -0 2 | 在收集结果之前运行测试 2 秒钟,以允许 TCP 慢启动完成。(省略模式) |
| iperf3 -Z -c 远程主机 | 将 sendfile() 系统调用用于“零复制”模式。这在旧硬件上使用的 CPU 要少得多。 |
| iperf3 -c 192.168.12.12 -T s1 和 iperf3 -c 192.168.12.13 -T s2 | 一次对多个接口运行测试,并标记行以指示哪个测试是哪个 |
| iperf3 -c 远程主机 -J | 以 JSON 格式输出结果,以便于解析。 |
| iperf3 -A 4,4 -c 远程主机 | 设置发送方、接收方的 CPU 亲和性(内核从 0 开始编号)。这与在客户端和服务器上执行“numactl -C 4 iperf3”具有相同的影响。 |
|
iperf3 -c 10.20.1.20 -A2,2 -T “1” & ;iperf3 -c 10.20.1.20 -p 5400 -A3,3 -T “2” & |
在 2 个不同的内核上运行 2 个流,并使用“-T”标志标记每个流。 |
iperf3 通常用于测量内存到内存的性能,但您也可以使用 iperf3 来确定网络还是磁盘是瓶颈。
iperf3 线程模型
为了尽可能保持代码的简单性和可维护性,iperf3 最初是单线程的。这意味着多流 iperf3 通常受 CPU 限制。要在多个内核上运行并行流 iperf3,您需要使用上表所示的方法,或者使用多行步的 iperf2。
从 iperf3 v3.16 开始,支持多个线程,消除了此约束。
有关详细信息,请参阅 iperf3 常见问题解答。
iperf-3.19.1 版本更新日志 2025-07-25
显著的用户可见变更
安全公告:感谢 Apple 信息安全的 Han Lee 发现并报告了多个内存错误,其中包括:
- 在
--skip-rx-copy选项中存在缓冲区溢出; - 认证过程中存在两个内存错误,包括明文密码中的堆溢出和一个断言错误。
已修复一个堆溢出错误,该错误出现在认证过程中。
(CVE-2025-54349,ESNET-SECADV-2025-0003)
已移除认证中的断言错误。
(CVE-2025-54350,ESNET-SECADV-2025-0002)
已修复 --skip-rx-copy 选项中的缓冲区溢出问题,该选项用于零拷贝模式。
(CVE-2025-54351,ESNET-SECADV-2025-0001)
iperf-3.19 版本更新日志 2025-05-16
显著的用户可见变更
- iperf3 现在支持在 Linux 上使用多路径 TCP (MPTCPv1),可以通过
-m或--mptcp标志启用。 (PR #1661) - iperf3 现在支持
--cntl-ka选项,用于在控制连接上启用 TCP 保活功能。 (#812, #835, PR #1423) - iperf3 现在支持
MSG_TRUNC接收选项,可以通过--skip-rx-copy来指定。理论上,这通过不将网络负载数据传递到用户空间,提高了高比特率测试的吞吐量。 (#1678, PR #1717) - 修复了一个错误,该错误导致在设置突发(bursts)时比特率设置被忽略。 (#1773, #1820, PR #1821, PR #1848)
- 如果使用了拥塞控制协议设置,现在会在测试之间正确重置。 (PR #1812)
- 如果通过 SIGTERM、SIGHUP 或 SIGINT 退出,iperf3 现在会以非错误的 0 退出代码退出。 (#1009, PR# 1829)
- 关于
-n和-k选项的当前行为,现在已被文档化为正确的行为。 (#1768, #1775, #596, PR #1800)
显著的开发者可见变更
- iperf3 现在支持一个回调函数,用于获取 JSON 输出字符串。 (#1711, PR #1798)
- iperf3 现在能够在 gcc-15 下正确编译。 (#1838, PR #1805)
- 修复了各种内存泄漏问题 (#1881, PR#1823, #1814, PR#1822)
- 修复了一个可能导致段错误(segfault)的崩溃问题 (#1807)
- 改进了读取格式错误的 JSON 消息时的警告信息 (PR #1817)
- 更改了 Github CI 配置,以使用更现代的运行器集。 (PR #1864)
C:\Users\Administrator\Downloads\iperf-3.19.1-win64>iperf3 -h
Usage: iperf3 [-s|-c host] [options]
iperf3 [-h|--help] [-v|--version]
Server or Client:
-p, --port # server port to listen on/connect to
-f, --format [kmgtKMGT] format to report: Kbits, Mbits, Gbits, Tbits
-i, --interval # seconds between periodic throughput reports
-I, --pidfile file write PID file
-F, --file name xmit/recv the specified file
-A, --affinity n[,m] set CPU affinity core number to n (the core the process will use)
(optional Client only m - the Server's core number for this test)
-B, --bind <host> bind to the interface associated with the address <host>
-V, --verbose more detailed output
-J, --json output in JSON format
--json-stream output in line-delimited JSON format
--logfile f send output to a log file
--forceflush force flushing output at every interval
--timestamps<=format> emit a timestamp at the start of each output line
(optional "=" and format string as per strftime(3))
--rcv-timeout # idle timeout for receiving data (default 120000 ms)
-d, --debug[=#] emit debugging output
(optional optional "=" and debug level: 1-4. Default is 4 - all messages)
-v, --version show version information and quit
-h, --help show this message and quit
Server specific:
-s, --server run in server mode
-D, --daemon run the server as a daemon
-1, --one-off handle one client connection then exit
--server-bitrate-limit #[KMG][/#] server's total bit rate limit (default 0 = no limit)
(optional slash and number of secs interval for averaging
total data rate. Default is 5 seconds)
--idle-timeout # restart idle server after # seconds in case it
got stuck (default - no timeout)
Client specific:
-c, --client <host>[%<dev>] run in client mode, connecting to <host>
(option <dev> equivalent to `--bind-dev <dev>`)
-u, --udp use UDP rather than TCP
--connect-timeout # timeout for control connection setup (ms)
-b, --bitrate #[KMG][/#] target bitrate in bits/sec (0 for unlimited)
(default 1 Mbit/sec for UDP, unlimited for TCP)
(optional slash and packet count for burst mode)
--pacing-timer #[KMG] set the Server timing for pacing, in microseconds (default 1000)
(deprecated - for servers using older versions ackward compatibility)
-t, --time # time in seconds to transmit for (default 10 secs)
-n, --bytes #[KMG] transmit until the end of the interval when the client sent or received
(per direction) at least this number of bytes (instead of -t or -k)
-k, --blockcount #[KMG] transmit until the end of the interval when the client sent or received
(per direction) at least this number of blocks (instead of -t or -n)
-l, --length #[KMG] length of buffer to read or write
(default 128 KB for TCP, dynamic or 1460 for UDP)
--cport <port> bind to a specific client port (TCP and UDP, default: ephemeral port)
-P, --parallel # number of parallel client streams to run
-R, --reverse run in reverse mode (server sends, client receives)
--bidir run in bidirectional mode.
Client and server send and receive data.
-w, --window #[KMG] set send/receive socket buffer sizes
(indirectly sets TCP window size)
-M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes)
-N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm
-4, --version4 only use IPv4
-6, --version6 only use IPv6
-S, --tos N set the IP type of service, 0-255.
The usual prefixes for octal and hex can be used,
i.e. 52, 064 and 0x34 all specify the same value.
--dscp N or --dscp val set the IP dscp value, either 0-63 or symbolic.
Numeric values can be specified in decimal,
octal and hex (see --tos above).
-Z, --zerocopy use a 'zero copy' method of sending data
--skip-rx-copy ignore received messages using MSG_TRUNC option
-O, --omit N perform pre-test for N seconds and omit the pre-test statistics
-T, --title str prefix every output line with this string
--extra-data str data string to include in client and server JSON
--get-server-output get results from server
--udp-counters-64bit use 64-bit counters in UDP test packets
--repeating-payload use repeating pattern in payload, instead of
randomized payload (like in iperf2)
--dont-fragment set IPv4 Don't Fragment flag
[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-
iperf3 homepage at: https://software.es.net/iperf/
Report bugs to: https://github.com/esnet/iperf
C:\Users\Administrator\Downloads\iperf-3.19.1-win64>iperf3 -V
iperf3: parameter error - must either be a client (-c) or server (-s)
Usage: iperf3 [-s|-c host] [options]
Try `iperf3 --help' for more information.
C:\Users\Administrator\Downloads\iperf-3.19.1-win64>iperf3 -v
iperf 3.19.1 (cJSON 1.7.15)
CYGWIN_NT-10.0-26100 WIN-6PUVSSQFM7B 3.6.4-1.x86_64 2025-07-15 07:55 UTC x86_64
Optional features available: CPU affinity setting, support IPv4 don't fragment, POSIX threads
C:\Users\Administrator\Downloads\iperf-3.19.1-win64>iperf3 -V
iperf3:参数错误 - 必须指定客户端(-c)或服务器(-s)
用法:iperf3 [-s|-c 主机] [选项]
请尝试 iperf3 --help 获取更多信息。
C:\Users\Administrator\Downloads\iperf-3.19.1-win64>iperf3 -v
iperf 3.19.1 (cJSON 1.7.15)
CYGWIN_NT-10.0-26100 WIN-666 3.6.4-1.x86_64 2025-07-15 07:55 UTC x86_64
可选功能:CPU 亲和性设置、支持 IPv4 不分片、POSIX 线程
iperf3 命令的参数表格化:
| 参数 | 简写/选项 | 描述 | 应用场景 | 服务器/客户端 |
|---|---|---|---|---|
| 服务器端口 | -p, --port |
设置服务器端口,用于监听或连接 | 用于指定服务器监听的端口,或客户端连接到该端口 | 服务器/客户端 |
| 结果报告格式 | -f, --format |
设置结果报告格式,如 Kbits、Mbits、Gbits、Tbits | 用于指定报告的单位,便于更好地理解测试结果 | 服务器/客户端 |
| 周期性吞吐量报告的间隔时间 | -i, --interval |
设置周期性报告的间隔时间(秒) | 适用于每秒获取一次吞吐量或其他相关指标的数据 | 服务器/客户端 |
| 写入 PID 文件 | -I, --pidfile |
将进程的 PID 写入指定的文件 | 用于记录进程 ID,便于后续操作或监控 | 服务器/客户端 |
| 发送/接收指定的文件 | -F, --file |
发送或接收指定的文件 | 用于文件传输测试,确保文件内容传输的速度和稳定性 | 客户端/服务器 |
| 设置 CPU 亲和性 | -A, --affinity |
设置进程使用的核心编号 | 适用于需要指定 CPU 核心的高性能测试,减少 CPU 核心切换 | 服务器/客户端 |
| 绑定到指定接口 | -B, --bind |
绑定到指定的主机接口 | 用于指定与特定接口绑定,确保网络测试使用正确的接口 | 服务器/客户端 |
| 输出更详细的信息 | -V, --verbose |
输出更详细的调试和进程信息 | 适用于调试过程中获取详细的操作过程和中间信息 | 服务器/客户端 |
| 输出 JSON 格式 | -J, --json |
输出测试结果为 JSON 格式 | 用于数据分析、自动化处理结果或与其他工具集成 | 服务器/客户端 |
| 行分隔的 JSON 输出 | --json-stream |
输出行分隔的 JSON 格式 | 用于实时数据流处理和分析,特别是在动态环境下使用 | 服务器/客户端 |
| 将输出发送到日志文件 | --logfile |
将输出写入指定的日志文件 | 用于长时间运行测试,需要保存所有输出记录的场景 | 服务器/客户端 |
| 强制每个间隔刷新输出 | --forceflush |
强制每个报告间隔刷新输出 | 适用于需要实时查看测试结果的场景 | 服务器/客户端 |
| 输出时间戳 | --timestamps |
在每行输出开始处添加时间戳(可选格式) | 用于日志记录或精确追踪数据的时间 | 服务器/客户端 |
| 接收数据的空闲超时 | --rcv-timeout |
设置接收数据的空闲超时(默认 120000 毫秒) | 用于调整测试中的超时行为,防止长时间无响应影响测试 | 服务器/客户端 |
| 输出调试信息 | -d, --debug |
输出调试信息,可选调试级别(1-4) | 用于深度调试,查看详细的操作信息 | 服务器/客户端 |
| 显示版本信息并退出 | -v, --version |
显示 iperf3 的版本信息并退出 |
用于检查当前使用的版本信息 | 服务器/客户端 |
| 显示帮助信息并退出 | -h, --help |
显示帮助信息并退出 | 用于查看命令的使用方法和参数说明 | 服务器/客户端 |
iperf3 命令的完整表格,涵盖了服务器和客户端的不同选项。你可以根据实际需求选择相应的参数配置进行网络测试。下面是针对 服务器特定参数 的表格:
| 参数 | 简写/选项 | 描述 | 应用场景 | 服务器/客户端 |
|---|---|---|---|---|
| 服务器模式 | -s, --server |
以服务器模式运行 | 在测试中设置为服务器,监听客户端的连接请求 | 服务器 |
| 后台运行模式 | -D, --daemon |
将服务器进程放入后台运行 | 用于后台运行 iperf3 服务器,在不干扰其他任务的情况下持续监听 |
服务器 |
| 单一客户端连接 | -1, --one-off |
仅处理一个客户端连接,处理完后退出 | 在需要单次连接测试时使用,避免长时间运行 | 服务器 |
| 限制服务器的总带宽 | --server-bitrate-limit |
设置服务器的总带宽限制(默认不限制) | 用于控制服务器的带宽,模拟不同的带宽限制条件 | 服务器 |
| 空闲超时重启 | --idle-timeout |
如果服务器在指定时间内没有活动,则重启服务器 | 用于在测试中防止服务器长时间没有活动时挂起,确保连接正常 | 服务器 |
这些参数通常用于优化服务器性能,特别是在长时间运行的测试中。你可以根据自己的网络环境和需求,灵活配置 iperf3 服务器的行为。
iperf3 客户端特定参数的中文翻译:
| 参数 | 简写/选项 | 描述 | 应用场景 | 服务器/客户端 |
|---|---|---|---|---|
| 客户端模式 | -c, --client <host> |
以客户端模式运行,连接到指定的主机 <host> |
用于设置客户端并连接到指定的服务器主机 | 客户端 |
| 使用 UDP 协议 | -u, --udp |
使用 UDP 协议而非 TCP 协议 | 用于进行基于 UDP 的性能测试 | 客户端 |
| 连接超时 | --connect-timeout # |
设置控制连接的超时时间(毫秒) | 用于设置客户端与服务器连接的最大等待时间 | 客户端 |
| 目标带宽 | -b, --bitrate #[KMG][/#] |
设置目标带宽(比特/秒)(0 为无限制) | 用于指定带宽限制,适合带宽限制测试(可选斜杠和数据包计数) | 客户端 |
| 定时器间隔 | --pacing-timer #[KMG] |
设置服务器的定时器间隔(微秒,默认 1000) | 用于旧版本服务器的兼容性测试 | 客户端 |
| 传输时长 | -t, --time # |
设置传输持续的时间(秒,默认 10 秒) | 用于指定客户端传输数据的时间长度 | 客户端 |
| 传输字节数 | -n, --bytes #[KMG] |
直到客户端发送或接收到指定字节数后停止传输 | 代替 -t 或 -k,用于根据字节数来控制传输结束 |
客户端 |
| 传输块数 | -k, --blockcount #[KMG] |
直到客户端发送或接收到指定块数后停止传输 | 代替 -t 或 -n,用于根据块数来控制传输结束 |
客户端 |
| 缓冲区长度 | -l, --length #[KMG] |
设置读取或写入的缓冲区长度(默认 128 KB 对于 TCP,UDP 为动态或 1460) | 用于指定传输数据的缓冲区大小 | 客户端 |
| 绑定到特定客户端端口 | --cport <port> |
绑定到指定的客户端端口 | 用于指定客户端使用的端口(TCP 或 UDP) | 客户端 |
| 并行流数量 | -P, --parallel # |
设置并行客户端流的数量 | 用于在客户端进行多个并行流测试 | 客户端 |
| 反向模式 | -R, --reverse |
反向模式运行(服务器发送,客户端接收) | 用于反向测试,服务器充当发送方,客户端充当接收方 | 客户端 |
| 双向模式 | --bidir |
双向模式运行(客户端和服务器同时发送和接收数据) | 用于双向数据传输测试 | 客户端 |
| 设置窗口大小 | -w, --window #[KMG] |
设置发送/接收套接字的缓冲区大小(间接设置 TCP 窗口大小) | 用于调整数据传输的窗口大小 | 客户端 |
| 设置最大分段大小 | -M, --set-mss # |
设置 TCP/SCTP 最大分段大小(最大传输单元减去 40 字节) | 用于优化 TCP 连接的分段大小 | 客户端 |
| 禁用延迟 | -N, --no-delay |
设置 TCP/SCTP 无延迟,禁用 Nagle 算法 | 用于减少延迟,优化实时传输 | 客户端 |
| 仅使用 IPv4 | -4, --version4 |
仅使用 IPv4 | 用于确保客户端仅通过 IPv4 进行通信 | 客户端 |
| 仅使用 IPv6 | -6, --version6 |
仅使用 IPv6 | 用于确保客户端仅通过 IPv6 进行通信 | 客户端 |
| 设置服务类型 | -S, --tos N |
设置 IP 服务类型,范围 0-255 | 用于设置 IP 数据包的服务类型 | 客户端 |
| 设置 DSCP 值 | --dscp N or --dscp val |
设置 IP DSCP 值,范围 0-63 或使用符号值 | 用于设置 IP 数据包的 DSCP 标识符 | 客户端 |
| 使用零拷贝方法发送数据 | -Z, --zerocopy |
使用零拷贝方法发送数据 | 用于提高传输效率,减少 CPU 消耗 | 客户端 |
| 忽略接收的消息 | --skip-rx-copy |
忽略接收到的消息,使用 MSG_TRUNC 选项 | 用于避免接收数据包时的额外复制操作 | 客户端 |
| 跳过预测试 | -O, --omit N |
进行 N 秒的预测试,跳过预测试统计信息 | 用于不包括预测试统计信息,集中在正式测试数据 | 客户端 |
| 添加前缀字符串到每一行输出 | -T, --title str |
将指定的字符串添加到每一行输出的前面 | 用于在输出中增加自定义标题 | 客户端 |
| 添加额外数据到 JSON | --extra-data str |
向客户端和服务器的 JSON 输出中添加额外的数据字符串 | 用于测试时附加额外的数据,方便在 JSON 结果中查看 | 客户端 |
| 获取服务器结果 | --get-server-output |
获取来自服务器的结果 | 用于从服务器端获取测试结果 | 客户端 |
| 使用 64 位计数器 | --udp-counters-64bit |
在 UDP 测试数据包中使用 64 位计数器 | 用于 UDP 测试时支持更高精度的数据包计数 | 客户端 |
| 使用重复负载模式 | --repeating-payload |
使用重复模式的有效负载,而不是随机化负载(如 iperf2 中的模式) | 用于通过使用固定模式的负载进行负载测试 | 客户端 |
| 设置 IPv4 不分片标志 | --dont-fragment |
设置 IPv4 的“不分片”标志 | 用于确保 IPv4 数据包不进行分片传输 | 客户端 |
这些参数提供了对客户端行为的广泛控制,可以帮助你进行各种网络性能测试。
iperf3 是一个非常流行的网络性能测试工具,它主要用于测量网络带宽、延迟、丢包率等性能指标,并且支持 TCP、UDP 等协议。如果你想要了解类似 iperf3 或者更高级的网络性能测试工具,以下是一些推荐的替代品或更高级的工具:
1. iperf3 的高级功能
虽然 iperf3 已经是非常强大的工具,但它提供了一些高级功能可以帮助你更深入地分析网络性能:
- 多线程支持:
iperf3可以通过-P参数启动多个并行连接,模拟更复杂的网络流量。 - UDP 测试:可以使用 UDP 协议进行带宽测试,测试丢包率和时延。
- 自定义数据包大小和间隔:可以设置传输的数据包大小、窗口大小、带宽、传输间隔等,进行精确的测试。
- 延迟、丢包和 jitter 测试:
iperf3支持测试网络延迟、丢包率以及抖动(jitter)。
如果你已经在使用 iperf3,可以通过这些高级功能来优化和精细化测试。
2. 更高级或替代工具
1. bwping
- 简介:
bwping是一个基于ping命令的带宽测试工具,通过发送多个 ICMP 请求来计算网络的带宽和延迟。 - 特点:
- 支持带宽测量
- 可以进行带宽测试和延迟测量
- 可以选择发送多次 ICMP 请求并显示详细的统计数据
2. NetFlow / sFlow
- 简介:
NetFlow和sFlow是网络流量分析工具,常用于监控和优化网络性能。 - 特点:
- 提供流量的详细视图,可以追踪单个连接的数据流。
- 提供实时和历史流量数据分析。
- 支持广泛的协议和流量类型,可以用于大规模网络分析。
3. Wireshark
- 简介:
Wireshark是一个强大的网络抓包工具,可以捕获并分析网络流量。 - 特点:
- 实时流量监控,支持多种协议的分析。
- 可以深入分析每个数据包,检测带宽瓶颈、延迟和丢包等问题。
- 比
iperf3更详细,但需要更高的技术水平来解析结果。
4. nload
- 简介:
nload是一个实时网络流量监控工具,专门用于显示当前的网络流量(输入和输出带宽)。 - 特点:
- 实时流量监控工具,适合用来监视网络流量的即时变化。
- 具有图形界面,显示上传和下载的实时速度。
5. netperf
- 简介:
netperf是另一个网络性能测试工具,提供了丰富的网络性能测试选项,支持 TCP、UDP 和其他协议。 - 特点:
- 提供比
iperf3更丰富的测试选项,支持更多的协议和流量模式。 - 适用于更复杂的网络测试,支持大规模、长时间测试。
- 支持多种客户端和服务器配置,可以进行多种类型的性能测试。
- 提供比
6. MTR (My Traceroute)
- 简介:
MTR是一个将ping和traceroute功能结合的网络诊断工具。 - 特点:
- 用于诊断网络连接的质量。
- 可以识别路由问题、延迟高的节点和丢包等。
- 适用于排查网络问题的工具。
7. Speedtest-cli
- 简介:
speedtest-cli是一个命令行工具,用于测试网络的上传和下载速度。 - 特点:
- 基于 Speedtest.net 提供的数据中心,可以快速测试互联网连接速度。
- 易于使用,适合进行快速的带宽测速。
Speedtest by Ookla 是官方的命令行客户端,用于测试您互联网连接的速度和性能。 版本:speedtest 1.2.0.84 使用方法:speedtest [<选项>] -h, --help 显示使用信息 -V, --version 显示版本号 -L, --servers 列出最近的服务器 -s, --server-id=# 使用服务器列表中的 id 指定服务器 -I, --interface=ARG 尝试在连接服务器时绑定到指定的接口 -i, --ip=ARG 尝试在连接服务器时绑定到指定的 IP 地址 -o, --host=ARG 使用主机的完全限定域名指定服务器 -p, --progress=yes|no 启用或禁用进度条(注意:仅适用于“人类可读”或“json”格式,默认在交互模式下启用) -P, --precision=# 使用的小数位数(0-8,默认=2) -f, --format=ARG 输出格式(有效格式请参见下文) --progress-update-interval=# 进度更新间隔(100-1000 毫秒) -u, --unit[=ARG] 显示速度的输出单位(注意:仅适用于“人类可读”输出格式,默认单位是 Mbps) -a 相当于 [-u auto-decimal-bits] -A 相当于 [-u auto-decimal-bytes] -b 相当于 [-u auto-binary-bits] -B 相当于 [-u auto-binary-bytes] --selection-details 显示服务器选择的详细信息 -v 日志详细程度。可指定多次以提高详细程度 --output-header 显示 CSV 和 TSV 格式的输出头 有效输出格式:人类可读(默认)、csv、tsv、json、jsonl、json-pretty 机器可读格式(csv、tsv、json、jsonl、json-pretty)使用字节作为度量单位,并具有最大精度 [-u] 标志的有效单位: 十进制前缀,位每秒: bps, kbps, Mbps, Gbps 十进制前缀,字节每秒: B/s, kB/s, MB/s, GB/s 二进制前缀,位每秒: kibps, Mibps, Gibps 二进制前缀,字节每秒: kiB/s, MiB/s, GiB/s 自动缩放前缀: auto-binary-bits, auto-binary-bytes, auto-decimal-bits, auto-decimal-bytes
8. IperfX (GUI for Iperf)
- 简介:
IperfX是iperf3的图形化界面版本,使得iperf3更加易于使用,尤其适合不习惯命令行的用户。 - 特点:
- 提供图形化界面,可以直观显示带宽、延迟等测试结果。
- 支持基本的
iperf3测试功能,同时也支持更复杂的配置和测试。
3. 选择合适的工具
- 如果你需要简单的带宽测试和性能验证,
iperf3和Speedtest-cli已经足够。 - 如果你需要更详细的流量分析或诊断,
Wireshark和netperf会是更强大的选择。 - 如果你需要实时监控和更直观的带宽可视化,
nload和MTR可能是更好的选择。
iperf3 已经是一个功能强大的工具,但如果你有更高的需求,可以尝试 netperf 或 Wireshark 等更高级的工具。每个工具都有其特定的优势,根据你的需求选择最合适的工具。
iperf2、iperf3、netperf、pfsense 和 Ostinato 之间的区别,以表格形式呈现:
| 工具 | 功能 | 主要特点 | 支持的协议 | 易用性 | 安装平台 | 典型应用场景 |
|---|---|---|---|---|---|---|
| iperf2 | 网络性能测试工具,用于测试TCP、UDP带宽性能 | - 支持多线程、同时测试多个连接- 提供详细的性能数据和统计 | TCP, UDP | 简单 | Windows, Linux, macOS | 测试局域网或广域网的吞吐量,网络带宽测试 |
| iperf3 | 网络性能测试工具,iperf2的升级版,优化了性能和功能 |
- 改进的性能报告- 支持JSON输出- 支持双向数据传输测试 | TCP, UDP, SCTP, HTTP/2, QUIC | 简单 | Windows, Linux, macOS | 高效的带宽、延迟测试,支持多种传输协议的性能测试 |
| netperf | 网络性能测试工具,提供比iperf更丰富的性能测试功能 |
- 高度定制化的测试场景- 适合专业的网络性能测试人员- 支持多种传输协议 | TCP, UDP, SCTP, DCCP, TCP-RDMAP | 中等 | Linux, macOS, FreeBSD | 高精度的网络性能测试,适用于多种协议和网络设备的测试 |
| pfsense | 开源的网络防火墙和路由平台,提供网络监控和性能测试工具 | - 基于FreeBSD- 强大的防火墙功能- 支持VPN、流量管理、IDS等功能 | 无特定协议(更侧重于防火墙管理) | 中等 | FreeBSD(基于) | 网络安全、流量管理、VPN、防火墙、路由器、网络监控 |
| Ostinato | 网络流量生成和分析工具,可以模拟并分析网络流量 | - 提供图形界面- 支持流量生成和接收- 可以配置多种协议类型 | TCP, UDP, ICMP, HTTP, IPv6等 | 较为复杂 | Windows, Linux | 模拟和测试网络流量,网络设备性能评估,流量生成 |
iperf2和iperf3主要用于网络带宽和吞吐量的测试,iperf3在功能上更强大。netperf提供更复杂和定制化的网络性能测试,适合专业用户。pfsense是一款防火墙和路由器平台,更多用于网络管理、安全和监控。Ostinato适用于模拟和生成网络流量,测试网络设备的性能。
常见的网络性能测试工具的比较,以表格形式呈现:
| 工具 | 功能 | 主要特点 | 支持的协议 | 易用性 | 安装平台 | 典型应用场景 |
|---|---|---|---|---|---|---|
| iperf2 | 测试TCP、UDP带宽性能 | - 支持多线程和并行连接- 提供详细的性能统计 | TCP, UDP | 简单 | Windows, Linux, macOS | 局域网、广域网带宽测试 |
| iperf3 | iperf2的升级版,提供更强大的功能和报告 |
- 支持JSON输出- 双向数据传输测试- 改进的性能报告 | TCP, UDP, SCTP, HTTP/2, QUIC | 简单 | Windows, Linux, macOS | 高效带宽、延迟测试,支持多种传输协议 |
| netperf | 提供复杂的网络性能测试功能 | - 高度定制化测试场景- 精确的协议性能测试 | TCP, UDP, SCTP, DCCP, TCP-RDMAP | 中等 | Linux, macOS, FreeBSD | 高精度网络性能测试,适用于多协议和网络设备测试 |
| Ostinato | 网络流量生成与分析工具,支持协议仿真和性能评估 | - 提供图形界面- 支持多种协议类型配置- 流量生成与接收 | TCP, UDP, ICMP, HTTP, IPv6等 | 较为复杂 | Windows, Linux | 模拟网络流量,网络设备性能评估,流量生成 |
| Wireshark | 网络协议分析工具,用于捕获和分析数据包 | - 细致的流量捕获与分析- 支持实时分析和后期分析- 丰富的协议解码 | 各种网络协议 | 中等 | Windows, Linux, macOS | 网络问题诊断,流量分析,网络安全监控 |
| bwping | 基于Ping的带宽测试工具 | - 简单易用- 测试通过ICMP或UDP的带宽 | ICMP, UDP | 简单 | Windows, Linux | 简单的带宽测试,适用于网络延迟和连接稳定性测试 |
| PingPlotter | 网络延迟和丢包的可视化工具 | - 提供图形化界面- 路由追踪与延迟分析 | ICMP, TCP, UDP | 简单 | Windows, macOS | 路由追踪,延迟和丢包分析,网络故障排查 |
| MTR | 路由追踪工具,结合了Ping和Traceroute功能 | - 实时显示路由信息和延迟- 提供实时数据更新 | ICMP, TCP | 简单 | Linux, macOS, FreeBSD | 网络延迟和路由路径分析,网络问题定位 |
| Speedtest CLI | Speedtest的命令行版本,提供带宽测量 | - 简单命令行工具- 与Speedtest网站同步 | TCP, UDP | 简单 | Windows, Linux, macOS | 互联网带宽测速,适用于家庭和企业用户 |
| ntttcp | 测试TCP性能的工具,主要用于服务器间的带宽和延迟测试 | - 多线程支持- 高速传输测试- 支持UDP和TCP | TCP, UDP | 中等 | Windows, Linux | 高性能TCP/UDP带宽测试,适合大规模测试 |
| SockPerf | 用于高性能TCP/UDP测试的工具,适合测试低延迟和高吞吐量的网络环境 | - 高速网络测试- 优化的低延迟性能 | TCP, UDP | 中等 | Linux | 低延迟、高吞吐量的网络性能测试,适用于数据中心和高性能环境 |
iperf系列 和netperf主要适用于常规的带宽测试,netperf提供更多定制化的功能。Ostinato和Wireshark提供强大的流量生成和捕获能力,适用于更为复杂的网络分析。Speedtest CLI和bwping是简单易用的带宽测试工具,适合日常使用。PingPlotter和MTR更多用于路由和延迟的可视化分析,帮助快速定位网络瓶颈。



浙公网安备 33010602011771号