iperf
是一个网络性能测试工具,做服务开发或者测试的同学,接触的可能比较多。因为最近有用到这个工具,并且这个工具做的非常不错,这里记录一下工具的使用方法。iperf
是个开源并且跨平台的软件,代码托管在 GitHub 上,可以从 Releases 找到各个发行版本,也可以去 官网 下载各个平台的版本。 使用 iperf
时,需要分别运行服务端和客户端,在测试是最好保证两个端的软件版本一致,这样会免去一些没必要的麻烦。
下载好后,可以先在本机做一个简单的回环测试,结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 运行服务端 $ ./iperf -s ———————————————————— Server listening on TCP port 5001 TCP window size: 128 KByte (default) ———————————————————— [ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 54817 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 35.1 GBytes 30.1 Gbits/sec # 运行客户端 $ ./iperf -c 127.0.0.1 ———————————————————— Client connecting to 127.0.0.1, TCP port 5001 TCP window size: 144 KByte (default) ———————————————————— [ 4] local 127.0.0.1 port 54817 connected with 127.0.0.1 port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 35.1 GBytes 30.1 Gbits/sec |
默认情况下,会使用 TCP 连接,绑定在 5001 端口上,可以从上述结果看到,当前本机的带宽为 30.1 Gbits/sec
。
主要参数信息
适用于 服务端/客户端
1 2 3 4 5 6 7 8 9 10 11 |
-f 指定数据显示格式 [k|m|K|M] 分别表示 Kbits、Mbits、KBytes、MBytes,默认是 Mbits -l 读写缓冲区的大小,默认是 8K -u 使用 udp 协议 -i 以秒为单位统计带宽值 -m 显示最大的 TCP 数据段大小 -p 指定服务端或者客户端的端口号 -w 指定 TCP 窗口大小 -B 绑定道指定的主机地址或接口 -C 兼容旧版本 -M 设置 TCP 数据包的最大 MTU 值 -V 传输 IPV6 包 |
适用于 服务端
1 2 3 |
-s 以服务器模式启动 -U 单线程 UDP 模式 -D 以守护进程模式运行 |
适用于 客服端
1 2 3 4 5 6 7 8 9 10 |
-c 以客户端模式运行,并指定服务端的地址 -b 指定客户端通过 UDP 协议发送信息的带宽,默认为 1Mbit/s -d 同时进行双向传输测试 -n 指定传输的字节数 -r 单独进行双向传输测试 -t 指定 iperf 测试的时间,默认 10s -F 指定要传输的文件 -L 指定一个端口,服务利用这端口与客户端连接 -P 指定客户端到服务器的连接数,默认是 1 -T 指定 ttl 值 |
用 -u 参数来指定使用 UDP 协议,需要在 -p 参数之前指定
测试之前确保防火墙为关闭状态
网络性能测试
TCP 协议测试带宽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 运行服务端 $ iperf -s # 运行客户端 $ iperf -c 172.18.142.62 -i 1 -t 10 ———————————————————— Client connecting to 172.18.142.62, TCP port 5001 TCP window size: 129 KByte (default) ———————————————————— [ 4] local 172.18.98.209 port 57809 connected with 172.18.142.62 port 28756 [ ID] Interval Transfer Bandwidth [ 4] 0.0- 1.0 sec 384 KBytes 3.15 Mbits/sec [ 4] 1.0- 2.0 sec 256 KBytes 2.10 Mbits/sec [ 4] 2.0- 3.0 sec 256 KBytes 2.10 Mbits/sec [ 4] 3.0- 4.0 sec 256 KBytes 2.10 Mbits/sec [ 4] 4.0- 5.0 sec 512 KBytes 4.19 Mbits/sec [ 4] 5.0- 6.0 sec 1.12 MBytes 9.44 Mbits/sec [ 4] 6.0- 7.0 sec 1.12 MBytes 9.44 Mbits/sec [ 4] 7.0- 8.0 sec 1.12 MBytes 9.44 Mbits/sec [ 4] 8.0- 9.0 sec 1.25 MBytes 10.5 Mbits/sec [ 4] 9.0-10.0 sec 1.12 MBytes 9.44 Mbits/sec [ 4] 0.0-10.1 sec 7.50 MBytes 6.25 Mbits/sec |
使用 TCP 协议进行测试时,需要注意的就是 TCP 窗口大小,可以使用 -w
参数指定,网络通道的容量 capacity = bandwidth * round-trip time
,而理论 TCP 窗口大小就是网络通道的容量。例如,网络带宽为 40Mbit/s
,回环路径消耗时间是 2ms,那么 TCP 的窗口大小不小于 40Mbit/s×2ms = 80kbit = 10Kbytes
。
UDP 协议测试带宽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 运行服务端 $ iperf -u -s # 运行客户端 $ iperf -c 172.18.142.62 -u -i 1 -t 10 -b 30M ———————————————————— Client connecting to 172.18.142.62, UDP port 5001 Sending 1470 byte datagrams UDP buffer size: 9.00 KByte (default) ———————————————————— [ 4] local 172.18.98.209 port 53220 connected with 172.18.142.62 port 28756 [ ID] Interval Transfer Bandwidth [ 4] 0.0- 1.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 1.0- 2.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 2.0- 3.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 3.0- 4.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 4.0- 5.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 5.0- 6.0 sec 3.57 MBytes 30.0 Mbits/sec [ 4] 6.0- 7.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 7.0- 8.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 8.0- 9.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 9.0-10.0 sec 3.58 MBytes 30.0 Mbits/sec [ 4] 0.0-10.0 sec 35.8 MBytes 30.0 Mbits/sec [ 4] Sent 25511 datagrams [ 4] Server Report: [ 4] 0.0-11.6 sec 13.6 MBytes 9.83 Mbits/sec 1.971 ms 15786/25497 (62%) [ 4] 0.0-11.6 sec 140 datagrams received out-of-order |
上述命令指定了客户端以 30Mbit/s
速度发送数据,由于 UDP 协议是无连接不可靠的,并且只管发包,不确保包在服务端是否接收到,所以需要查看服务报告才能确定当前网络性能数据。如果在不知道当前网络带宽的情况下,需要不断的调整参数值,并且查看丢包率,来确定当前网络性能情况。如果你当前是远程登录到服务器上进行测试的,可以从小到大的方式进行测试,否则很容易导致服务当前带宽被占满。
最新评论