iperf命令通常用来测网络带宽,命令的相关参数网络上的资料很详细,此处不做赘述,本文旨在说明iperf产生的数据。
我们假设服务器端IP: 192.168.0.136 客户端IP: 192.168.0.112
服务器端运行命令:iperf -s
客户端运行命令:iperf -c 192.168.0.136 -P 5 -t 10 -i 1 -l 1K
与服务器192.168.0.136连接,同时运行5个线程,测试时间为10s,每1s总结一次带宽报告,读写缓冲区大小为1K
客户端数据如下:
------------------------------------------------------------
Client connecting to 192.168.0.136, TCP port 5001
TCP window size: 1.06 MByte (default)
------------------------------------------------------------
[ 3] local 192.168.0.112 port 53892 connected with 192.168.0.136 port 5001//启动了5了线程,开头方括号内数字为线程
[ 7] local 192.168.0.112 port 53896 connected with 192.168.0.136 port 5001//编号,主要为了在接下来的数据中可以分辨
[ 5] local 192.168.0.112 port 53894 connected with 192.168.0.136 port 5001//出各个线程。
[ 6] local 192.168.0.112 port 53895 connected with 192.168.0.136 port 5001//五个线程都成功连接上了服务器
[ 4] local 192.168.0.112 port 53893 connected with 192.168.0.136 port 5001//端口号默认5001
[ ID] Interval Transfer Bandwidth //第一列,interval,表示时间区间
[ 7] 0.0- 1.0 sec 1.49 MBytes 12.5 Mbits/sec //第二列,transfer,表示传输的数据量
[ 3] 0.0- 1.0 sec 699 KBytes 5.73 Mbits/sec //第三列,bandwidth,表示传输的带宽
[ 3] 1.0- 2.0 sec 2.76 MBytes 23.2 Mbits/sec
[ 7] 1.0- 2.0 sec 8.20 MBytes 68.8 Mbits/sec
[ 5] 0.0- 1.0 sec 8.73 MBytes 73.2 Mbits/sec //由于是多个线程同时运行,所以每个线程的带宽都不是真正的带宽
[ 5] 1.0- 2.0 sec 0.00 Bytes 0.00 bits/sec //真正的带宽是以SUM标识的行,我们的客户端命令是1s总结一次
[ 6] 0.0- 1.0 sec 699 KBytes 5.73 Mbits/sec //带宽报告,所以我们把相同时间区间的线程的运行带宽相加会发
[ 6] 1.0- 2.0 sec 0.00 Bytes 0.00 bits/sec //现大约等于SUM的实际带宽
[ 4] 0.0- 1.0 sec 699 KBytes 5.73 Mbits/sec
[SUM] 0.0- 1.0 sec 12.3 MBytes 103 Mbits/sec
[ 4] 1.0- 2.0 sec 0.00 Bytes 0.00 bits/sec
[SUM] 1.0- 2.0 sec 11.0 MBytes 92.0 Mbits/sec
[ 4] 2.0- 3.0 sec 2.43 MBytes 20.4 Mbits/sec
[ 3] 2.0- 3.0 sec 6.81 MBytes 57.1 Mbits/sec
[ 7] 2.0- 3.0 sec 698 KBytes 5.72 Mbits/sec
[ 5] 2.0- 3.0 sec 698 KBytes 5.72 Mbits/sec
[ 6] 2.0- 3.0 sec 698 KBytes 5.72 Mbits/sec
[SUM] 2.0- 3.0 sec 11.3 MBytes 94.7 Mbits/sec
[ 6] 3.0- 4.0 sec 1.16 MBytes 9.72 Mbits/sec
[ 3] 3.0- 4.0 sec 1.01 MBytes 8.50 Mbits/sec
[ 7] 3.0- 4.0 sec 698 KBytes 5.72 Mbits/sec
[ 5] 3.0- 4.0 sec 698 KBytes 5.72 Mbits/sec
[ 4] 3.0- 4.0 sec 8.76 MBytes 73.5 Mbits/sec
[SUM] 3.0- 4.0 sec 12.3 MBytes 103 Mbits/sec
[ 5] 4.0- 5.0 sec 1.95 MBytes 16.4 Mbits/sec
[ 7] 4.0- 5.0 sec 1.41 MBytes 11.8 Mbits/sec
[ 3] 4.0- 5.0 sec 1.36 MBytes 11.4 Mbits/sec
[ 4] 4.0- 5.0 sec 1.75 MBytes 14.7 Mbits/sec
[ 6] 4.0- 5.0 sec 8.67 MBytes 72.7 Mbits/sec
[SUM] 4.0- 5.0 sec 15.1 MBytes 127 Mbits/sec
[ 3] 5.0- 6.0 sec 1.36 MBytes 11.4 Mbits/sec
[ 7] 5.0- 6.0 sec 1.56 MBytes 13.0 Mbits/sec
[ 5] 5.0- 6.0 sec 3.79 MBytes 31.8 Mbits/sec
[ 6] 5.0- 6.0 sec 2.03 MBytes 17.0 Mbits/sec
[ 4] 5.0- 6.0 sec 1.93 MBytes 16.2 Mbits/sec
[SUM] 5.0- 6.0 sec 10.7 MBytes 89.5 Mbits/sec
[ 3] 6.0- 7.0 sec 3.18 MBytes 26.7 Mbits/sec
[ 5] 6.0- 7.0 sec 2.16 MBytes 18.1 Mbits/sec
[ 6] 6.0- 7.0 sec 1.36 MBytes 11.4 Mbits/sec
服务器端数据如下:
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 6] local 192.168.0.136 port 5001 connected with 192.168.0.112 port 53896
[ 4] local 192.168.0.136 port 5001 connected with 192.168.0.112 port 53892
[ 7] local 192.168.0.136 port 5001 connected with 192.168.0.112 port 53894
[ 5] local 192.168.0.136 port 5001 connected with 192.168.0.112 port 53893
[ 8] local 192.168.0.136 port 5001 connected with 192.168.0.112 port 53895
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.7 sec 25.6 MBytes 20.1 Mbits/sec
[ 6] 0.0-27.2 sec 22.7 MBytes 7.00 Mbits/sec
[ 7] 0.0-27.2 sec 25.1 MBytes 7.74 Mbits/sec
[ 5] 0.0-27.2 sec 24.7 MBytes 7.63 Mbits/sec
[ 8] 0.0-27.2 sec 21.7 MBytes 6.68 Mbits/sec
[SUM] 0.0-27.2 sec 120 MBytes 36.9 Mbits/sec
这时你可能会发现一个问题,服务器端和客户端的带宽不一样,服务器端只有36.9Mbits/s,而客户端基本上在90到130之间。
(以下是个人理解,不一定正确)这个原因是,服务器端运行的时间更长,传输的数据量两端都是一样的,运行时间长的,带宽就小,因为可能存在这样一段时间,服务器起了,而客户端还没启动之前,或者客户端已经结束传输,但是链路还没完全关闭,这个时候客户端已经开始计算带宽了,而服务器还要傻傻的在等待一段时间,所以服务器端带宽要小于客户端。
而实际上客户端的带宽是相对准确的
iperf命令的-t参数指定运行的时间,这个时间越长,服务器端和客户端的带宽越接近