服务器带宽测速iperf3工具使用

网络测速相信很多人都使用过,想要看看自己家里的宽带网速怎么样,最简单的方式就是搜索测速网,然后等结果出来就可以了,比较简单。今天要介绍的主角是:iperf3,由于经常要和vps打交到,想要测试本地到服务器的速度,使用iperf3会更准确一点,接下来就介绍一下iperf3,以及如何使用iperf3来进行测试速度。

iperf3是什么

iPerf3 是一种主动测量 IP 网络上可实现的最大带宽的工具。 它支持调整与计时、缓冲区和协议(TCP、UDP、SCTP 与 IPv4 和 IPv6)相关的各种参数。 对于每次测试,它都会报告带宽、损耗和其他参数。它是一个 C/S 类型的测速工具,在服务器上开放某个端口,然后在客户机上连接该服务器对应的端口,就可以开始进行 tcp 或 udp 的下载速度了

iperf3安装

iperf3的官网也详细介绍了几种操作平台的安装,具体的地址:安装iperf3。下边说明一下几种操作系统的安装。

Windows

直接去官方下载地址:budman.pw或者github去下载安装文件,下载最新的就可以了。

Mac OS

mac可以使用homebrew来进行安装,如果还没有安装homebrew可以参考我的另一篇文章来进行安装:Mac更换源更快速的安装Homebrew.然后通过命令brew install iperf3

Ubuntu/Debian

使用命令:sudo apt-get install iperf3进行安装。如果当前用户是root用户,则可以省略sudo.

Centos/Red hat

使用命令:yum install iperf3进行安装。

iperf3使用

iperf3分为客户端和服务端,服务端开放端口,客户端则连上对应的端口进行发包,达到测速。下边来使用命令来快速的进行一轮测速:

服务端

服务端执行命令iperf3 -s -p 1111就启动了:

root@docker:~# iperf3 -s -p 1111
-----------------------------------------------------------
Server listening on 1111 (test #1)
-----------------------------------------------------------

服务端开启1111端口后就等待客户端连上来。

客户端

客户端执行命令iperf3 -c 192.168.1.222 -p 1111 -i 1 -t 10 ,其中192.168.1.222是你服务端所在服务器的ip,执行后客户端输出如下:

$ iperf3 -c 192.168.1.222 -p 1111 -i 1 -t 10

Connecting to host 192.168.1.222, port 1111
Reverse mode, remote host 192.168.1.222 is sending
[  5] local 192.168.1.10 port 56431 connected to 192.168.1.222 port 1111
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  52.1 MBytes   435 Mbits/sec                  
[  5]   1.00-2.00   sec  67.4 MBytes   567 Mbits/sec                  
[  5]   2.00-3.00   sec  58.6 MBytes   492 Mbits/sec                  
[  5]   3.00-4.00   sec  71.4 MBytes   600 Mbits/sec                  
[  5]   4.00-5.00   sec  69.2 MBytes   579 Mbits/sec                  
[  5]   5.00-6.00   sec  69.8 MBytes   586 Mbits/sec                  
[  5]   6.00-7.00   sec  67.5 MBytes   568 Mbits/sec                  
[  5]   7.00-8.00   sec  70.9 MBytes   593 Mbits/sec                  
[  5]   8.00-9.00   sec  73.1 MBytes   613 Mbits/sec                  
[  5]   9.00-10.00  sec  73.1 MBytes   613 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.03  sec   676 MBytes   565 Mbits/sec    2             sender
[  5]   0.00-10.00  sec   673 MBytes   564 Mbits/sec                  receiver

iperf Done.

一次测速就完成了。服务端也会有同样的日志输出。可见速度大概是500Mb/s。

 

参数详解

具体的参数详细解释可以参考官网的文档;这里我也简单的介绍一下。

通用参数

通用参数就是客户端和服务端都可以使用的参数。

通用选项
命令行选项 说明
-p, --port n 服务器侦听和客户端连接的服务器端口。 这在客户端和服务器中应该是相同的。 默认值为 5201。
--cport n 指定客户端端口的选项。 (iPerf 3.1新特性)
-f, --format [kmKM] 指定打印带宽数字的格式的字母。支持的格式有

    'k' = Kbits/sec           'K' = KBytes/sec
    'm' = Mbits/sec           'M' = MBytes/sec

自适应格式根据需要在千级和兆级之间进行选择。

-i, --interval n 设置周期性带宽、抖动和丢失报告之间的间隔时间(以秒为单位)。 如果非零,则自上次报告以来每隔带宽秒数就会生成一份报告。 如果为零,则不打印定期报告。 默认为零。
-F, --file name 客户端: 从文件中读取并写入网络,而不是使用随机数据;
服务端: 从网络读取并写入文件,而不是丢弃数据。
-A, --affinity n/n,m-F 如果可能的话,设置 CPU 关联性(仅限 Linux 和 FreeBSD)。 在客户端和服务器上,您可以使用此参数的 n 形式(其中 n 是 CPU 编号)来设置本地关联性。 此外,在客户端,您可以使用 n,m 形式的参数覆盖服务器的关联性,仅用于该测试。 请注意,使用此功能时,进程将仅绑定到单个 CPU(而不是包含潜在多个 CPU 的集合)。
-B, --bind host 绑定到特定网卡,即该计算机的地址之一。 对于客户端,这设置出站网卡接口。 对于服务器,这设置传入网卡接口。 这仅在具有多个网卡接口的多宿主主机上有用。
-V, --verbose 给出更详细的输出
-J, --json 以 JSON 格式输出
--logfile file 将输出发送到日志文件。(iPerf 3.1新特性)
--d, --debug 发出调试输出。 主要供开发人员使用。
-v, --version 显示版本信息并退出。
-h, --help 显示帮助概要并退出。

以上是通用的参数说明,可以根据需求在执行命令的时候添加。

服务端参数

下边对服务端特有参数进行说明:

服务端特定选项
命令行选项 说明
-s, --server 在服务器模式下运行 iPerf。 (这一次只允许一个 iperf 连接)
-D, --daemon 服务器作为守护进程在后台运行。
-I, --pidfilefile 写入一个包含进程 ID 的文件,这在作为守护进程运行时最有用。 (iPerf 3.1新特性)

服务端的命令选项相对来说少一些。

客户端参数

下边对客户端特有参数进行说明:

客户端特定选项
命令行选项 说明
-c, --client host 在客户端模式下运行 iPerf,连接到主机上运行的 iPerf 服务器。
--sctp 使用 SCTP 而不是 TCP(Linux、FreeBSD 和 Solaris)。 (iPerf 3.1新特性)
-u, --udp 使用 UDP 而不是 TCP。 另请参阅 -b 选项。
-b, --bandwidth n[KM] 将目标带宽设置为 n 位/秒(UDP 默认为 1 Mbit/秒,TCP 无限制)。 如果有多个流(-P 标志),则带宽限制将单独应用于每个流。 您还可以向带宽说明符添加“/”和数字。 这称为“突发模式”。 它将发送给定数量的数据包而不会暂停,即使暂时超出了指定的带宽限制。
-t, --time n 传输时间(以秒为单位)。 iPerf 通常通过在 time 秒内重复发送 len 个字节的数组来工作。 默认值为 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, --length n[KM] 要读取或写入的缓冲区的长度。 iPerf 的工作原理是多次写入 len 个字节的数组。 TCP 默认为 128 KB,UDP 默认为 8 KB。 另请参见 -n、-k 和 -t 选项。
-P, --parallel n 与服务器建立的同时连接数。 默认值为 1。
-R, --reverse 以反向模式运行(服务器发送,客户端接收)。
-w, --window n[KM] 将套接字缓冲区大小设置为指定值。 对于 TCP,这设置 TCP 窗口大小。 (这会被发送到服务器并在该端使用)
-M, --set-mss n 尝试设置 TCP 最大分段大小 (MSS)。 MSS 通常是 TCP/IP 标头的 MTU - 40 字节。 对于以太网,MSS 为 1460 字节(1500 字节 MTU)。
-N, --no-delay 设置 TCP 无延迟选项,禁用 Nagle 算法。 通常,只有交互式应用程序(如 telnet)才禁用此功能。
-4, --version4 仅使用 IPv4。
-6, --version4 仅使用 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, --omit n 省略测试的前 n 秒,以跳过 TCP TCP 慢启动期。
-T, --title str 使用此字符串作为每个输出行的前缀。
-C, --linux-congestion algo 设置拥塞控制算法(Linux 仅适用于 iPerf 3.0,Linux 和 FreeBSD 适用于 iPerf 3.1)。

以上就是服务端和客户端的所有参数说明。

 

THE END