深入浅出-iperf详解(附带下载链接)

iperf作为一个常用的网络性能测试工具,可以在各个操作系统使用,如windowslinux主流发行版、macosandroid

iperfman手册中定义为:perform network throughput tests,翻译过来就是测试网络吞吐量。支持tcpudp协议测试,用户必须搭建服务端和客户端测试。

安装iperf2RPM):

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
    'k' = Kbits/sec           'K' = KBytes/sec
    'm' = Mbits/sec           'M' = MBytes/sec
    'g' = Gbits/sec           'G' = GBytes/sec
    'a' = adaptive bits/sec   'A' = adaptive 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
    IPTOS_THROUGHPUT   maximize throughput   0x08
    IPTOS_RELIABILITY  maximize reliability  0x04
    IPTOS_LOWCOST      minimize cost         0x02

-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
    'm' = Mbits/sec           'M' = MBytes/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]

要传输的块(数据包)数。(而不是 -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

传出数据包的服务类型。(许多路由器忽略 TOS 字段。您可以指定带有“0x”前缀的十六进制值,以八进制形式指定值 “0”前缀,或十进制。例如,'0x10' 十六进制 = '020' 八进制 = '16' 十进制。RFC 1349 中指定的 TOS 编号为:

    IPTOS_LOWDELAY     minimize delay        0x10
    IPTOS_THROUGHPUT   maximize throughput   0x08
    IPTOS_RELIABILITY  maximize reliability  0x04
    IPTOS_LOWCOST      minimize cost         0x02

-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次,单个探测带宽100Mbit5个并行探测。总带宽会显示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作为一个常用的网络性能测试工具,可以在各个操作系统使用,如windowslinux主流发行版、macosandroid

iperfman手册中定义为:perform network throughput tests,翻译过来就是测试网络吞吐量。支持tcpudp协议测试,用户必须搭建服务端和客户端测试。

  1. 安装
    1. 安装iperf2RPM方式):
      1. 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

  1. 安装iperf3
    1. Centos:

yum install iperf3

  1. Windows:#点击链接下载.zip压缩包,解压到指定目录下,cd切换到解压目录,直接iperf.exe执行。

Home • Directory Lister (budman.pw)

例如:本人解压目录在E:\迅雷下载\iperf3,操作步骤如下:

  • Win+R打开cmd
  • E:
  • cd \迅雷下载\iperf3
  • Iperf.exe [参数]
  1. iperf用法:
    1. server端和client端安装iperf,建议安装相同版本。
    2. server端打开iperf监听:

iperf -s -p <端口>

  1. client端发起探测:支持ipv6地址打流

Iperf -c <服务端ip> -p <端口>

  1. 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
    'k' = Kbits/sec           'K' = KBytes/sec
    'm' = Mbits/sec           'M' = MBytes/sec
    'g' = Gbits/sec           'G' = GBytes/sec
    'a' = adaptive bits/sec   'A' = adaptive 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
    IPTOS_THROUGHPUT   maximize throughput   0x08
    IPTOS_RELIABILITY  maximize reliability  0x04
    IPTOS_LOWCOST      minimize cost         0x02

-T, --ttl#

$IPERF_TTL

传出组播数据包的生存时间。这本质上是 要经过的路由器跃点数,也用于确定范围。 默认值为 1,链接本地。

-F(从 v1.2 或更高版本)

.

使用具有代表性的流来测量带宽,例如:-

$ iperf -c <服务器地址> -F <文件名>

-I(从 v1.2 或更高版本开始)

.

与 -F 相同,来自 stdin 的输入。

 

  1. Iperf3常用参数:

常规选项

 

命令行选项

描述

-p、--端口 n

服务器要侦听的服务器端口和客户端要连接的服务器端口 自。这在客户端和服务器中都应该相同。默认值为 5201。

--cport n

用于指定客户端端口的选项。(iPerf 3.1 中的新功能)

-f, --format [kmKM]

指定打印带宽编号的格式的信函。 支持的格式是:自适应格式根据需要在千级和兆级之间进行选择。

    'k' = Kbits/sec           'K' = KBytes/sec
    'm' = Mbits/sec           'M' = MBytes/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]

要传输的块(数据包)数。(而不是 -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

传出数据包的服务类型。(许多路由器忽略 TOS 字段。您可以指定带有“0x”前缀的十六进制值,以八进制形式指定值 “0”前缀,或十进制。例如,'0x10' 十六进制 = '020' 八进制 = '16' 十进制。RFC 1349 中指定的 TOS 编号为:

    IPTOS_LOWDELAY     minimize delay        0x10
    IPTOS_THROUGHPUT   maximize throughput   0x08
    IPTOS_RELIABILITY  maximize reliability  0x04
    IPTOS_LOWCOST      minimize cost         0x02

-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)。

  1. Iperf用例:
    1. 测试网络带宽
      1. server#监听udp 889端口,1s报告一次,输出结果到udp.log文件并后台运行

Iperf -s -p 889 -u -i 1 > udp.log &

  1. client#发起探测,1s报告1次,单个探测带宽100Mbit5个并行探测。总带宽会显示SUM,共探测10000s

Iperf -c <server ip> -p 889 -i 1 -b 100m -P 5 -t 10000

 

  1. 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。

  1. 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 是一个网络性能测试工具Iperf可以测试TCP和UDP带宽质量。Iperf可以测量最大TCP带宽,具有多种参数和UDP特性。Iperf可以报告带宽,延迟抖动和数据包丢失。 功能介绍 TCP 测量网络带宽 报告MSS/MTU值的大小和观测值 支持TCP窗口值通过套接字缓冲 当P线程或Win32线程可用时,支持多线程。客户端与服务端支持同时多重连接 UDP 客户端可以创建指定带宽的UDP流 测量丢包 测量延迟 支持多播 当P线程可用时,支持多线程。客户端与服务端支持同时多重连接(不支持Windows) 在适当的地方,选项中可以使用K(kilo-)和M(mega-)。例如131072字节可以用128K代替。 可以指定运行的总时间,甚至可以设置传输的数据总量。 在报告中,为数据选用最合适的单位。 服务器支持多重连接,而不是等待一个单线程测试。 在指定时间间隔重复显示网络带宽,波动和丢包情况。 服务器端可作为后台程序运行。 服务器端可作为Windows 服务运行。 使用典型数据流来测试链接层压缩对于可用带宽的影响。 参数与说明 命令行选项 环境变量选项 描述 客户端与服务器端选项 -f, --format [bkmaBKMA] $IPERF_FORMAT 格式化带宽数输出。支持的格式有: 'b' = bits/sec 'B' = Bytes/sec 'k' = Kbits/sec 'K' = KBytes/sec 'm' = Mbits/sec 'M' = MBytes/sec 'g' = Gbits/sec 'G' = GBytes/sec 'a' = adaptive bits/sec 'A' = adaptive Bytes/sec 自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。 注意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。 -i, --interval # $IPERF_INTERVAL 设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。 -l, --len #[KM] $IPERF_LEN 设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。 -m, --print_mss $IPERF_PRINT_MSS 输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况 -p, --port # $IPERF_PORT 设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。 -u, --udp $IPERF_UDP 使用UDP方式而不是TCP方式。参看-b选项。 -w, --window #[KM] $TCP_WINDOW_SIZE 设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。 -B, --bind host $IPERF_BIND 绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T 参数。 -C, --compatibility $IPERF_COMPAT 与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。 -M, --mss #[KM} $IPERF_MSS 通过TCP_MAXSEG选项尝试设置TCP最大信息段的值。MSS值的大小通常是TCP/IP头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。 -N, --nodelay $IPERF_NODELAY 设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。 -V (fro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值