iperf作为一个常用的网络性能测试工具,可以在各个操作系统使用,如windows、linux主流发行版、macos、android。
iperf在man手册中定义为:perform network throughput tests,翻译过来就是测试网络吞吐量。支持tcp、udp协议测试,用户必须搭建服务端和客户端测试。
安装iperf2(RPM):
Centos:
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/i/iperf-2.0.13-1.el7.x86_64.rpm
rmp -ivh iperf-2.0.13-1.el7.x86_64.rpm
安装iperf3
Centos:
yum install iperf3
Windows:#点击链接下载.zip压缩包,解压到指定目录下,cd切换到解压目录,直接iperf.exe执行。
Home • Directory Lister (budman.pw)
例如:本人解压目录在E:\迅雷下载\iperf3,操作步骤如下:
- Win+R打开cmd
- E:
- cd \迅雷下载\iperf3
- Iperf.exe [参数]
基础用法:
server端和client端安装iperf,建议安装相同版本。
server端打开iperf监听:
iperf -s -p <端口>
client端发起探测:支持ipv6地址打流
Iperf -c <服务端ip> -p <端口>
Iperf2参数:
| 命令行选项 | 描述 |
| -f, --格式 [bkmaBKMA] | 指定打印带宽编号的格式的信函。 支持的格式是:自适应格式根据需要在千级和兆级之间进行选择。领域 除带宽外,始终打印字节,否则请遵循 请求的格式。默认值为“a”。 注意:这里 Kilo = 1024, 处理字节时,Mega = 1024^2 和 Giga = 1024^3。通常在网络中, Kilo = 1000、Mega = 1000^2 和 Giga = 1000^3,所以我们在处理时使用它 位。如果这真的困扰您,请使用 -f b 并进行数学运算。 'b' = bits/sec 'B' = Bytes/sec |
| -i, --间隔# | 设置周期性带宽、抖动、 和损失报告。如果不为零,则自上次报告以来,每隔带宽的几秒间隔进行一次报告。如果为零,则无周期 打印报告。默认值为零。 |
| -l, --len #[KM] | 要读取或写入的缓冲区的长度。iPerf 的工作原理是编写一个 Len 字节数组多次。TCP 的默认值为 8 KB,1470 UDP 的字节。UDP 注意,这是数据报大小,使用 时需要减小 IPv6 寻址为 1450 或更低,以避免分段。另请参阅 -n 和 -t 选项。 |
| -m, --print_mss | 打印报告的 TCP MSS 大小(通过 TCP_MAXSEG 选项)和 观察到的读取大小通常与 MSS 相关。MSS 通常是 MTU - TCP/IP 标头的 40 字节。通常,稍小的 MSS 是 由于 IP 选项中的额外标头空间而报告。接口类型 还打印了与 MTU 相对应的(以太网、FDDI 等)。这 选项在许多操作系统上未实现,但读取大小可能仍可能 指示 MSS。 |
| -p, --端口# | 服务器要侦听的服务器端口和客户端要连接的服务器端口 自。这在客户端和服务器中都应该相同。默认值为 5001, 与 TTCP 相同。 |
| -u, --udp | 使用 UDP 而不是 TCP。另请参阅 -b 选项。 |
| -w, --window #[KM] | 将套接字缓冲区大小设置为指定值。对于 TCP,这 设置 TCP 窗口大小。对于 UDP,它只是数据报的缓冲区 被接收,因此限制了最大的应收数据报大小。 |
| -B, --bind 主机 | 绑定到主机,这是本机的地址之一。对于客户 这将设置出站接口。对于服务器,这将设置传入 接口。这仅在具有多个 网络接口。 对于 UDP 服务器模式下的 iPerf,这也用于绑定和加入 组播组。使用范围为 224.0.0.0 到 239.255.255.255 的地址 用于组播。另请参阅 -T 选项。 |
| -C、--兼容性 | 兼容模式允许与旧版本的 iPerf 一起使用。此模式 不是互操作性所必需的,但强烈建议这样做。在 在某些情况下,使用代表性流式处理时,可能会导致 1.7 服务器 导致意外连接尝试崩溃或导致意外连接尝试。 |
| -M, --mss #[KM} | 尝试通过TCP_MAXSEG设置 TCP 最大段大小 (MSS) 选择。MSS 通常是 MTU - TCP/IP 报头的 40 字节。为 以太网,MSS 为 1460 字节(1500 字节 MTU)。此选项不是 在许多操作系统上实现。 |
| -N, --无延迟 | 设置 TCP 无延迟选项,禁用 Nagle 的算法。通常 仅对 Telnet 等交互式应用程序禁用此功能。 |
| -V(从 v1.6 或更高版本开始) | 绑定到 IPv6 地址 服务器端: $ iperf -s -V 客户端: $ iperf -c <服务器 IPv6 地址> -V
注意:在版本 1.6.3 及更高版本上,特定的 IPv6 地址会这样做 不需要绑定 -B 选项,上一版本为 1.6 版本可以。此外,在大多数操作系统上,使用此选项也将响应 IPv4 使用 IPv4 映射地址的客户端。 |
| -h, --帮助 | 打印出命令摘要并退出。 |
| -v、--版本 | 打印版本信息并退出。如果编译为 POSIX 线程,“win32 线程”如果使用 Microsoft Win32 线程编译, 或者,如果没有线程进行编译,则为“单线程”。 |
| 只能用于服务端的参数 |
|
| 命令行选项 | 描述 |
| -s、--服务器 | 在服务器模式下运行 iPerf。(iPerf2 可以处理多个客户端请求) |
| -D(从 v1.2 或更高版本开始) | 在 Win32 平台上将服务器作为守护程序运行(Unix 平台) 在服务可用的情况下,iPerf 将作为服务开始运行。 |
| -R(仅适用于 Windows,从 v1.2 或更高版本) | 删除 iPerf 服务(如果它正在运行)。 |
| -o(仅适用于 Windows v1.2 或更高版本) | 将输出重定向到给定文件。 |
| -c, --客户端主机 | 如果 iPerf 处于服务器模式,则使用 -c 指定主机 将 iPerf 将接受的连接到指定的主机。不适用于 UDP。 |
| -P, --并行# | 服务器之前要处理的连接数 关闭。默认值为 0(表示永远接受连接)。 |
| 只能用于客户端的参数 |
|
| 命令行选项 | 描述 |
| -b, --带宽 #[KM] | 要发送的 UDP 带宽,以位/秒为单位。这意味着 -u 选项。 默认值为 1 Mbit/秒。 |
| -c, --客户端主机 | 在客户端模式下运行 iPerf,连接到主机上运行的 iPerf 服务器。 |
| -d, --dualtest | 在双测试模式下运行 iPerf。这将导致服务器连接 返回到 -L 选项中指定的端口上的客户端(或默认值 到客户端连接到服务器的端口)。这是立即完成的 因此,同时运行测试。如果你想要一个交替的 test try -r。 |
| -n, --num #[KM] | 要传输的缓冲区数。通常,iPerf 发送 10 秒。-n 选项将覆盖此选项,并发送一个 len 字节数组 num 次,无论这需要多长时间。另请参阅 -l 和 -t 选项。 |
| -r, --权衡 | 在权衡测试模式下运行 iPerf。这将导致服务器连接 返回到 -L 选项中指定的端口上的客户端(或默认值 到客户端连接到服务器的端口)。这是在下面完成的 客户端连接终止,因此运行测试 交替。如果要同时测试,请尝试 -d。 |
| -t, --时间# | 传输的时间(以秒为单位)。iPerf 通常通过以下方式工作 重复发送时间秒的 len 字节数组。 默认值为 10 秒。另请参阅 -l 和 -n 选项。 |
| -L, --listenport# | 这指定了服务器将连接回 客户端打开。它默认为用于连接到服务器的端口 来自客户端。 |
| -P, --并行# | 要与服务器建立的同时连接数。违约 是 1。需要客户端和服务器上的线程支持。 |
| -S, --tos# | 传出数据包的服务类型。(许多路由器忽略 TOS 字段。您可以指定带有“0x”前缀的十六进制值,以八进制形式指定值 “0”前缀,或十进制。例如,'0x10' 十六进制 = '020' 八进制 = '16' 十进制。RFC 1349 中指定的 TOS 编号为: IPTOS_LOWDELAY minimize delay 0x10 |
| -T, --ttl# | 传出组播数据包的生存时间。这本质上是 要经过的路由器跃点数,也用于确定范围。 默认值为 1,链接本地。 |
| -F(从 v1.2 或更高版本) | 使用具有代表性的流来测量带宽,例如:- $ iperf -c <服务器地址> -F <文件名> |
| -I(从 v1.2 或更高版本开始) | 与 -F 相同,来自 stdin 的输入。 |
Iperf3常用参数:
| 常规选项 |
|
| 命令行选项 | 描述 |
| -p、--端口 n | 服务器要侦听的服务器端口和客户端要连接的服务器端口 自。这在客户端和服务器中都应该相同。默认值为 5201。 |
| --cport n | 用于指定客户端端口的选项。(iPerf 3.1 中的新功能) |
| -f, --format [kmKM] | 指定打印带宽编号的格式的信函。 支持的格式是:自适应格式根据需要在千级和兆级之间进行选择。 'k' = Kbits/sec 'K' = KBytes/sec |
| -i, --间隔 n | 设置周期性带宽、抖动、 和损失报告。如果不为零,则自上次报告以来,每隔带宽的几秒间隔进行一次报告。如果为零,则无周期 打印报告。默认值为零。 |
| -F、--文件名 | 客户端:从文件读取并写入网络,而不是使用随机数据; 服务器端:从网络读取并写入文件,而不是丢弃数据。 |
| -A, --亲和力 n/n,m-F | 如果可能,请设置 CPU 亲和力(仅限 Linux 和 FreeBSD)。在客户端和服务器上,您可以通过以下方式设置本地关联 使用此参数的 n 形式(其中 n 是 CPU 编号)。此外,在客户端,您可以覆盖服务器的 仅针对该测试的亲和力,使用 n,m 形式的参数。请注意,使用此功能时,只会绑定一个进程 到单个 CPU(而不是包含可能多个 CPU 的集合)。 |
| -B, --bind 主机 | 绑定到主机,这是本机的地址之一。对于客户 这将设置出站接口。对于服务器,这将设置传入 接口。这仅在具有多个 网络接口。 |
| -V, --verbose | 给出更详细的输出 |
| -J, --json | JSON格式输出 |
| --logfile 文件 | 将输出发送到日志文件。(iPerf 3.1 中的新功能) |
| --d, --调试 | 发出调试输出。主要(也许完全)供开发人员使用。 |
| -v、--版本 | 显示版本信息并退出。 |
| -h, --帮助 | 显示帮助概要并退出。 |
| 只能用于服务端的参数 |
|
| 命令行选项 | 描述 |
| -s、--服务器 | 在服务器模式下运行 iPerf。(这将一次只允许一个 iperf 连接) |
| -D、--守护进程 | 在后台运行服务器作为守护程序。 |
| -I, --pidfile文件 | 使用进程 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/秒,TCP 无限制)。如果有多个流(-P 标志), 带宽限制分别应用于每个流。您还可以在带宽说明符中添加“/”和数字。 这称为“突发模式”。它将发送给定数量的数据包而不暂停,即使这暂时超出了指定的带宽限制。 |
| -t, --时间 n | 传输的时间(以秒为单位)。iPerf 通常通过重复发送时间秒数组来工作。 默认值为 10 秒。另请参见 -l、-k 和 -n 选项。 |
| -n, --num n[KM] | 要传输的缓冲区数。通常,iPerf 发送 10 秒。-n 选项将覆盖此选项,并发送一个 len 字节数组 num 次,无论这需要多长时间。另请参阅 -l、-k 和 -t 选项。 |
| -k, --blockcount n[KM] | |
| -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 | 传出数据包的服务类型。(许多路由器忽略 TOS 字段。您可以指定带有“0x”前缀的十六进制值,以八进制形式指定值 “0”前缀,或十进制。例如,'0x10' 十六进制 = '020' 八进制 = '16' 十进制。RFC 1349 中指定的 TOS 编号为: IPTOS_LOWDELAY minimize delay 0x10 |
| -L, --flowlabel n | 设置 IPv6 流标签(目前仅在 Linux 上受支持)。 |
| -Z、--zerocopy | 使用“零拷贝”方法来发送数据,比如 sendfile(2),而不是通常的 write(2)。这使用的 CPU 要少得多。 |
| -O, --省略 n | 省略测试的前 n 秒,以跳过 TCP TCP 慢启动期。 |
| -T, --标题 str | 在每条输出行前加上前缀,请添加此字符串。 |
| -C, --linux-拥塞算法 | 设置塞控制算法(Linux 仅适用于 iPerf 3.0,Linux 和 FreeBSD 适用于 iPerf 3.1)。 |
用例:
测试网络带宽
server端#监听udp 889端口,1s报告一次,输出结果到udp.log文件并后台运行
Iperf -s -p 889 -u -i 1 > udp.log &
client端#发起探测,1s报告1次,单个探测带宽100Mbit,5个并行探测。总带宽会显示SUM,共探测10000s
Iperf -c <server ip> -p 889 -i 1 -b 100m -P 5 -t 10000
iperf进阶->调整 TCP 连接
iPerf 的主要目标是帮助调整特定路径上的 TCP 连接。最 TCP 的基本调整问题是 TCP 窗口大小,它控制网络中任何一个点的数据量。 如果它太小,发送方有时会处于空闲状态,性能不佳。用于 TCP窗口大小是带宽延迟的乘积,
瓶颈带宽 * 往返时间
在下面的 modi4/cyclops 示例中,瓶颈链路是 45 Mbit/秒的 DS3 链路,使用 ping 测量的往返时间为 42 毫秒。 带宽延延积为
45 Mbit/秒 * 42 ms
= (45e6) * (42e-3)
= 1890000 位
= 230 KB
这是确定最佳窗口大小的起点;将其设置得更高或更低可能会产生更好的结果。 在我们的示例中,尽管带宽延迟积为 230K,但超过 130K 的缓冲区大小并未提高性能。
请注意,许多操作系统和主机对 TCP 窗口大小都有上限。 它们可能低至 64 KB,也可能高达 6 MB。iPerf 尝试检测这些情况何时发生,并发出警告,指出实际和请求的窗口大小 不相等(如下图所示,尽管这是由于 IRIX 中的四舍五入)。 有关 TCP 窗口大小的详细信息,请参阅 LaFibre.info。 下面是伊利诺伊州的 node1 和北卡罗来纳州的 node2 之间的示例会话。它们通过 vBNS 主干网和 45 Mbit/秒 DS3 链路连接。 请注意,我们使用适当的 TCP 窗口大小将带宽性能提高了 3 倍。 在允许以字节为粒度设置窗口大小的平台上使用自适应窗口大小功能。
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/秒,但两个并行流 一起得到 16.7 + 9.4 = 26.1 Mbit/s,即使使用较大的 TCP 窗口大小也是如此:
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 Discovery 的主机通常使用 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%)
下面是一个不支持路径 MTU 发现的主机。它只会发送和接收 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。
iperf进阶->调整 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
iperf作为一个常用的网络性能测试工具,可以在各个操作系统使用,如windows、linux主流发行版、macos、android。
iperf在man手册中定义为:perform network throughput tests,翻译过来就是测试网络吞吐量。支持tcp、udp协议测试,用户必须搭建服务端和客户端测试。
- 安装
- 安装iperf2(RPM方式):
- Centos:
- 安装iperf2(RPM方式):
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/i/iperf-2.0.13-1.el7.x86_64.rpm
rmp -ivh iperf-2.0.13-1.el7.x86_64.rpm
- 安装iperf3
- Centos:
yum install iperf3
- Windows:#点击链接下载.zip压缩包,解压到指定目录下,cd切换到解压目录,直接iperf.exe执行。
Home • Directory Lister (budman.pw)
例如:本人解压目录在E:\迅雷下载\iperf3,操作步骤如下:
- Win+R打开cmd
- E:
- cd \迅雷下载\iperf3
- Iperf.exe [参数]
- iperf用法:
- server端和client端安装iperf,建议安装相同版本。
- server端打开iperf监听:
iperf -s -p <端口>
- client端发起探测:支持ipv6地址打流
Iperf -c <服务端ip> -p <端口>

- Iperf2参数:
| 命令行选项 | 环境变量选项 | 描述 |
| -f, --格式 [bkmaBKMA] | $IPERF_FORMAT | 指定打印带宽编号的格式的信函。 支持的格式是:自适应格式根据需要在千级和兆级之间进行选择。领域 除带宽外,始终打印字节,否则请遵循 请求的格式。默认值为“a”。 注意:这里 Kilo = 1024, 处理字节时,Mega = 1024^2 和 Giga = 1024^3。通常在网络中, Kilo = 1000、Mega = 1000^2 和 Giga = 1000^3,所以我们在处理时使用它 位。如果这真的困扰您,请使用 -f b 并进行数学运算。 'b' = bits/sec 'B' = Bytes/sec |
| -i, --间隔# | $IPERF_间隔 | 设置周期性带宽、抖动、 和损失报告。如果不为零,则自上次报告以来,每隔带宽的几秒间隔进行一次报告。如果为零,则无周期 打印报告。默认值为零。 |
| -l, --len #[KM] | $IPERF_LEN | 要读取或写入的缓冲区的长度。iPerf 的工作原理是编写一个 Len 字节数组多次。TCP 的默认值为 8 KB,1470 UDP 的字节。UDP 注意,这是数据报大小,使用 时需要减小 IPv6 寻址为 1450 或更低,以避免分段。另请参阅 -n 和 -t 选项。 |
| -m, --print_mss | $IPERF_PRINT_MSS | 打印报告的 TCP MSS 大小(通过 TCP_MAXSEG 选项)和 观察到的读取大小通常与 MSS 相关。MSS 通常是 MTU - TCP/IP 标头的 40 字节。通常,稍小的 MSS 是 由于 IP 选项中的额外标头空间而报告。接口类型 还打印了与 MTU 相对应的(以太网、FDDI 等)。这 选项在许多操作系统上未实现,但读取大小可能仍可能 指示 MSS。 |
| -p, --端口# | $IPERF_端口 | 服务器要侦听的服务器端口和客户端要连接的服务器端口 自。这在客户端和服务器中都应该相同。默认值为 5001, 与 TTCP 相同。 |
| -u, --udp | $IPERF_UDP | 使用 UDP 而不是 TCP。另请参阅 -b 选项。 |
| -w, --window #[KM] | $TCP_WINDOW_SIZE | 将套接字缓冲区大小设置为指定值。对于 TCP,这 设置 TCP 窗口大小。对于 UDP,它只是数据报的缓冲区 被接收,因此限制了最大的应收数据报大小。 |
| -B, --bind 主机 | $IPERF_绑定 | 绑定到主机,这是本机的地址之一。对于客户 这将设置出站接口。对于服务器,这将设置传入 接口。这仅在具有多个 网络接口。 对于 UDP 服务器模式下的 iPerf,这也用于绑定和加入 组播组。使用范围为 224.0.0.0 到 239.255.255.255 的地址 用于组播。另请参阅 -T 选项。 |
| -C、--兼容性 | $IPERF_COMPAT | 兼容模式允许与旧版本的 iPerf 一起使用。此模式 不是互操作性所必需的,但强烈建议这样做。在 在某些情况下,使用代表性流式处理时,可能会导致 1.7 服务器 导致意外连接尝试崩溃或导致意外连接尝试。 |
| -M, --mss #[KM} | $IPERF_MSS | 尝试通过TCP_MAXSEG设置 TCP 最大段大小 (MSS) 选择。MSS 通常是 MTU - TCP/IP 报头的 40 字节。为 以太网,MSS 为 1460 字节(1500 字节 MTU)。此选项不是 在许多操作系统上实现。 |
| -N, --无延迟 | $IPERF_NODELAY | 设置 TCP 无延迟选项,禁用 Nagle 的算法。通常 仅对 Telnet 等交互式应用程序禁用此功能。 |
| -V(从 v1.6 或更高版本开始) | . | 绑定到 IPv6 地址 服务器端: $ iperf -s -V 客户端: $ iperf -c <服务器 IPv6 地址> -V
注意:在版本 1.6.3 及更高版本上,特定的 IPv6 地址会这样做 不需要绑定 -B 选项,上一版本为 1.6 版本可以。此外,在大多数操作系统上,使用此选项也将响应 IPv4 使用 IPv4 映射地址的客户端。 |
| -h, --帮助 |
| 打印出命令摘要并退出。 |
| -v、--版本 |
| 打印版本信息并退出。如果编译为 POSIX 线程,“win32 线程”如果使用 Microsoft Win32 线程编译, 或者,如果没有线程进行编译,则为“单线程”。 |
| 只能用于服务端的参数 |
|
|
| 命令行选项 | 环境变量选项 | 描述 |
| -s、--服务器 | $IPERF_服务器 | 在服务器模式下运行 iPerf。(iPerf2 可以处理多个客户端请求) |
| -D(从 v1.2 或更高版本开始) | . | 在 Win32 平台上将服务器作为守护程序运行(Unix 平台) 在服务可用的情况下,iPerf 将作为服务开始运行。 |
| -R(仅适用于 Windows,从 v1.2 或更高版本) | . | 删除 iPerf 服务(如果它正在运行)。 |
| -o(仅适用于 Windows v1.2 或更高版本) | . | 将输出重定向到给定文件。 |
| -c, --客户端主机 | $IPERF_CLIENT | 如果 iPerf 处于服务器模式,则使用 -c 指定主机 将 iPerf 将接受的连接到指定的主机。不适用于 UDP。 |
| -P, --并行# | $IPERF_平行 | 服务器之前要处理的连接数 关闭。默认值为 0(表示永远接受连接)。 |
| 只能用于客户端的参数 |
|
|
| 命令行选项 | 环境变量选项 | 描述 |
| -b, --带宽 #[KM] | $IPERF_带宽 | 要发送的 UDP 带宽,以位/秒为单位。这意味着 -u 选项。 默认值为 1 Mbit/秒。 |
| -c, --客户端主机 | $IPERF_CLIENT | 在客户端模式下运行 iPerf,连接到主机上运行的 iPerf 服务器。 |
| -d, --dualtest | $IPERF_双重测试 | 在双测试模式下运行 iPerf。这将导致服务器连接 返回到 -L 选项中指定的端口上的客户端(或默认值 到客户端连接到服务器的端口)。这是立即完成的 因此,同时运行测试。如果你想要一个交替的 test try -r。 |
| -n, --num #[KM] | $IPERF_NUM | 要传输的缓冲区数。通常,iPerf 发送 10 秒。-n 选项将覆盖此选项,并发送一个 len 字节数组 num 次,无论这需要多长时间。另请参阅 -l 和 -t 选项。 |
| -r, --权衡 | $IPERF_权衡 | 在权衡测试模式下运行 iPerf。这将导致服务器连接 返回到 -L 选项中指定的端口上的客户端(或默认值 到客户端连接到服务器的端口)。这是在下面完成的 客户端连接终止,因此运行测试 交替。如果要同时测试,请尝试 -d。 |
| -t, --时间# | $IPERF_TIME | 传输的时间(以秒为单位)。iPerf 通常通过以下方式工作 重复发送时间秒的 len 字节数组。 默认值为 10 秒。另请参阅 -l 和 -n 选项。 |
| -L, --listenport# | $IPERF_LISTENPORT | 这指定了服务器将连接回 客户端打开。它默认为用于连接到服务器的端口 来自客户端。 |
| -P, --并行# | $IPERF_平行 | 要与服务器建立的同时连接数。违约 是 1。需要客户端和服务器上的线程支持。 |
| -S, --tos# | $IPERF_TOS | 传出数据包的服务类型。(许多路由器忽略 TOS 字段。您可以指定带有“0x”前缀的十六进制值,以八进制形式指定值 “0”前缀,或十进制。例如,'0x10' 十六进制 = '020' 八进制 = '16' 十进制。RFC 1349 中指定的 TOS 编号为: IPTOS_LOWDELAY minimize delay 0x10 |
| -T, --ttl# | $IPERF_TTL | 传出组播数据包的生存时间。这本质上是 要经过的路由器跃点数,也用于确定范围。 默认值为 1,链接本地。 |
| -F(从 v1.2 或更高版本) | . | 使用具有代表性的流来测量带宽,例如:- $ iperf -c <服务器地址> -F <文件名> |
| -I(从 v1.2 或更高版本开始) | . | 与 -F 相同,来自 stdin 的输入。 |
- Iperf3常用参数:
| 常规选项 |
|
| 命令行选项 | 描述 |
| -p、--端口 n | 服务器要侦听的服务器端口和客户端要连接的服务器端口 自。这在客户端和服务器中都应该相同。默认值为 5201。 |
| --cport n | 用于指定客户端端口的选项。(iPerf 3.1 中的新功能) |
| -f, --format [kmKM] | 指定打印带宽编号的格式的信函。 支持的格式是:自适应格式根据需要在千级和兆级之间进行选择。 'k' = Kbits/sec 'K' = KBytes/sec |
| -i, --间隔 n | 设置周期性带宽、抖动、 和损失报告。如果不为零,则自上次报告以来,每隔带宽的几秒间隔进行一次报告。如果为零,则无周期 打印报告。默认值为零。 |
| -F、--文件名 | 客户端:从文件读取并写入网络,而不是使用随机数据; 服务器端:从网络读取并写入文件,而不是丢弃数据。 |
| -A, --亲和力 n/n,m-F | 如果可能,请设置 CPU 亲和力(仅限 Linux 和 FreeBSD)。在客户端和服务器上,您可以通过以下方式设置本地关联 使用此参数的 n 形式(其中 n 是 CPU 编号)。此外,在客户端,您可以覆盖服务器的 仅针对该测试的亲和力,使用 n,m 形式的参数。请注意,使用此功能时,只会绑定一个进程 到单个 CPU(而不是包含可能多个 CPU 的集合)。 |
| -B, --bind 主机 | 绑定到主机,这是本机的地址之一。对于客户 这将设置出站接口。对于服务器,这将设置传入 接口。这仅在具有多个 网络接口。 |
| -V, --verbose | 给出更详细的输出 |
| -J, --json | JSON格式输出 |
| --logfile 文件 | 将输出发送到日志文件。(iPerf 3.1 中的新功能) |
| --d, --调试 | 发出调试输出。主要(也许完全)供开发人员使用。 |
| -v、--版本 | 显示版本信息并退出。 |
| -h, --帮助 | 显示帮助概要并退出。 |
| 只能用于服务端的参数 |
|
| 命令行选项 | 描述 |
| -s、--服务器 | 在服务器模式下运行 iPerf。(这将一次只允许一个 iperf 连接) |
| -D、--守护进程 | 在后台运行服务器作为守护程序。 |
| -I, --pidfile文件 | 使用进程 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/秒,TCP 无限制)。如果有多个流(-P 标志), 带宽限制分别应用于每个流。您还可以在带宽说明符中添加“/”和数字。 这称为“突发模式”。它将发送给定数量的数据包而不暂停,即使这暂时超出了指定的带宽限制。 |
| -t, --时间 n | 传输的时间(以秒为单位)。iPerf 通常通过重复发送时间秒数组来工作。 默认值为 10 秒。另请参见 -l、-k 和 -n 选项。 |
| -n, --num n[KM] | 要传输的缓冲区数。通常,iPerf 发送 10 秒。-n 选项将覆盖此选项,并发送一个 len 字节数组 num 次,无论这需要多长时间。另请参阅 -l、-k 和 -t 选项。 |
| -k, --blockcount n[KM] | |
| -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 | 传出数据包的服务类型。(许多路由器忽略 TOS 字段。您可以指定带有“0x”前缀的十六进制值,以八进制形式指定值 “0”前缀,或十进制。例如,'0x10' 十六进制 = '020' 八进制 = '16' 十进制。RFC 1349 中指定的 TOS 编号为: IPTOS_LOWDELAY minimize delay 0x10 |
| -L, --flowlabel n | 设置 IPv6 流标签(目前仅在 Linux 上受支持)。 |
| -Z、--zerocopy | 使用“零拷贝”方法来发送数据,比如 sendfile(2),而不是通常的 write(2)。这使用的 CPU 要少得多。 |
| -O, --省略 n | 省略测试的前 n 秒,以跳过 TCP TCP 慢启动期。 |
| -T, --标题 str | 在每条输出行前加上前缀,请添加此字符串。 |
| -C, --linux-拥塞算法 | 设置塞控制算法(Linux 仅适用于 iPerf 3.0,Linux 和 FreeBSD 适用于 iPerf 3.1)。 |
- Iperf用例:
- 测试网络带宽
- server端#监听udp 889端口,1s报告一次,输出结果到udp.log文件并后台运行
- 测试网络带宽
Iperf -s -p 889 -u -i 1 > udp.log &
- client端#发起探测,1s报告1次,单个探测带宽100Mbit,5个并行探测。总带宽会显示SUM,共探测10000s
Iperf -c <server ip> -p 889 -i 1 -b 100m -P 5 -t 10000
- iperf进阶->调整 TCP 连接
iPerf 的主要目标是帮助调整特定路径上的 TCP 连接。最 TCP 的基本调整问题是 TCP 窗口大小,它控制网络中任何一个点的数据量。 如果它太小,发送方有时会处于空闲状态,性能不佳。用于 TCP窗口大小是带宽延迟的乘积,
瓶颈带宽 * 往返时间
在下面的 modi4/cyclops 示例中,瓶颈链路是 45 Mbit/秒的 DS3 链路,使用 ping 测量的往返时间为 42 毫秒。 带宽延延积为
45 Mbit/秒 * 42 ms
= (45e6) * (42e-3)
= 1890000 位
= 230 KB
这是确定最佳窗口大小的起点;将其设置得更高或更低可能会产生更好的结果。 在我们的示例中,尽管带宽延迟积为 230K,但超过 130K 的缓冲区大小并未提高性能。
请注意,许多操作系统和主机对 TCP 窗口大小都有上限。 它们可能低至 64 KB,也可能高达 6 MB。iPerf 尝试检测这些情况何时发生,并发出警告,指出实际和请求的窗口大小 不相等(如下图所示,尽管这是由于 IRIX 中的四舍五入)。 有关 TCP 窗口大小的详细信息,请参阅 LaFibre.info。 下面是伊利诺伊州的 node1 和北卡罗来纳州的 node2 之间的示例会话。它们通过 vBNS 主干网和 45 Mbit/秒 DS3 链路连接。 请注意,我们使用适当的 TCP 窗口大小将带宽性能提高了 3 倍。 在允许以字节为粒度设置窗口大小的平台上使用自适应窗口大小功能。
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/秒,但两个并行流 一起得到 16.7 + 9.4 = 26.1 Mbit/s,即使使用较大的 TCP 窗口大小也是如此:
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 Discovery 的主机通常使用 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%)
下面是一个不支持路径 MTU 发现的主机。它只会发送和接收 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。
- iperf进阶->调整 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
&spm=1001.2101.3001.5002&articleId=140068209&d=1&t=3&u=1f5fd301b0d24e33933f6d6ec7619599)
3666

被折叠的 条评论
为什么被折叠?



