记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

iPerf3使用教程

iPerf3使用教程

iPerf功能上分为:服务端和客户端,但程序用的都是官网下载的那个iperf,这一点不像ixchariot,它的控制端和客户端是不一样的。
要想测试一段链路的带宽,需要两端都安装iperf,然后用命令的方式指定哪一端工作在服务器模式,哪一端工作在客户端模式。
 
简单常用版
服务端:用-s参数,指明这端是服务端。
iperf3  -s  
服务端通常就用-s一个参数就可以了,更多的操作往往是在客户端加参数实现。
 
客户端:用-c参数,指明这端是客户端,后面要跟服务器端的ip。
iperf3  -c 192.168.3.120    
‍其中,192.168.3.120是服务端ip。
这种情况下,iperf默认是单线程、TCP连接,数据流方向是:客户端-->服务器端,也即客户端发送、服务端接收。
 
为了测试更准确,通常会用-P参数来启动多个线程,以保证吃满带宽,让测试结果更准确。但也不用太多,一般来说10个线程已经足够了。
iperf3  -c 192.168.3.120 -P 10
如果你想要测试下载方向的带宽(站在客户端角度),只需在客户端加参数-R,此时,数据流的方向就变成了:服务端-->客户端。
iperf3  -c 192.168.3.120 -R
 
UDP测试
在客户端加参数-u,表示使用UDP协议,如果不加-u参数,默认使用TCP协议。
iperf3  -c 192.168.100.3 -u
 
结合官方文档-b参数的介绍可知,UDP默认是1Mbits/s(TCP不限制),所以,上面才只跑出这么低的带宽。因此,-u通常需要与-b参数结合使用,才能测出实际链路最大带宽。
iperf3  -c 192.168.100.3 -u -b 1000M
 
进阶玩法
 
1、双向同时打流
这种方法主要为了测试上传、下载同时工作时的最大带宽,因为目前的链路基本上都是全双工,所以,理论上,上传和下载都应该同时达到链路最大带宽。
方法:
需要分别在服务端和客户端起2个进程,windows需要开2个CMD窗口,这样才能实现双向同时打流(客户端的其中一个进程加-R参数即可)、或单向多进程打流。
因为iperf3没有双向同时打流的参数,所以只能用这种方式。但iperf是支持的。
服务端:
iperf3  -s -p 5201
iperf3  -s -p 5202
客户端:
iperf3  -c 192.168.100.3 -p 5201
iperf3  -c 192.168.100.3 -p 5202 -R
论双向打流,还得用ixchariot。
 
2、小包测试
小包测试建议用UDP模式,TCP模式设置难度高,且很容易出问题。
方法:
UDP模式,并设置l=18,即可得到64B的最小帧(可通过抓包软件验证,wireshark抓包会显示为60B,至于为什么不是64B,详见-l参数介绍),这样也就能获得64B小包发送速率了。
iperf3  -c 192.168.100.3 -u -b 1000m -l 18
-b:设置发送带宽,注意它设置的是单个线程的带宽,单位bits/s。哪怕你是千兆链路,如果你-b=100M,那么测试结果最大也不会超过100Mbits/s。
默认值:UDP是1Mbits/s,TCP是不限制。因此,这个参数通常与-u搭配使用,虽然它也可以与TCP搭配使用。
-l:length of buffer to read or write。
设置每次发送报文的最大长度,默认TCP是128KB, UDP是8KB。
-i:设置输出频率,也就是多久报告一次结果。默认是1s一次,你不仅可以设置成5s一次,还可以设置成丧心病狂的0.1s一次。我测试最多也就精确到0.1s了,再往下0.01s这个级别是设置不成功的。还可以设置为0,表示仅输出一条,也就类似于仅输出结果。
iperf3  -c 192.168.100.3 -i 0.1
-t:设置测试时长,单位s,默认测试时长为10s。输出的频率跟你设置的-i参数有关,默认是i=1,也就是1s输出一次,如果t=3,则只输出3次(如下);如果-i=0.1,则输出3/0.1=30次。
iperf3  -c 192.168.100.3 -t 3
-n:指定要发送多少的数据量,单位是Byte。不指定单位,表示多少个字节;可以指定单位为k/m/g(大小写一样的效果)。注意:这个参数表示一共发送多少数据量,且直到发完为止,而不管多长时间,因此,它和-t参数是冲突的,不能同时使用的。它还与-k参数冲突。
iperf3  -c 192.168.100.3  -n 10m
-k:要发送多少个数据包,发完为止、发完即止。因此,它也是跟-t参数冲突的。而且也跟-n冲突。
iperf3  -c 192.168.100.3 -k 20
-tnk这3个参数是相互冲突的,不能同时使用这3个参数中的任意2个或3个,同一时间只能使用其中一个。且-nk参数会覆盖默认测试时长10s的限制。
另外,需要注意的是,如果某些参数设置的太小(比如-nkwl),可能会导致带宽测试结果不准确。比如:你是千兆带宽,却只设置发送一个1M的包,测试结果是不可能准确的。
-F:用在不同的端,代表不同的含义。用在客户端,表示发送实际文件,而不是用软件提供的随机数据;用在服务端,表示把从客户端发送过来的数据,写入文件(默认是写入iperf的文件夹中),而不是默认丢弃收到的数据。另外,发现我不管在客户端指定多大的文件,都只发送一部分(26%左右)大小的数据,而不是整个文件发送完再结束(均是在windows下测试的)。
iperf3  -c 192.168.100.3 -F d:\123.iso
因此,它可以跟-tnk同时使用,哪个值先到,以哪个为准。即最多只能发送文件的26%左右就停止了,不管你-t设置了多少s。除非你设置的t值小于发送26%所需时间,才生效。
iperf3  -c 192.168.100.3 -F d:\456.iso -t 10
iperf3  -c 192.168.100.3 -F d:\456.iso -t 3
-v(小写):查看iperf版本信息:
iperf3  -v
-V(大写):输出更为详细的信息:会发现多了iperf版本、TCP MSS大小、CPU占用率、时间等信息。
iperf3  -c 192.168.3.120
iperf3  -c 192.168.3.120 -V
-B:绑定网卡,用在有多个网卡的主机。对于客户端,这将设置出站接口。对于服务器,这将设置传入接口
iperf3  -s -B 192.168.100.3
-S:设置被发送出去报文的类型(TOS字段),用的不多,可以参考文末提供的链接文档。
-h:显示帮助
iperf3  -h
-O:官方文档写的忽略前几秒的测试结果,用来跳过TCP慢启动过程,从而让测试结果更加接近链路的最大带宽。但我测试发现,这个参数也是可以跟-u结合使用的,表示忽略前多少秒的输出结果。
UDP测试:
iperf3  -c 192.168.100.3 -u -b 1000M -O 2
TCP测试:
iperf3  -c 192.168.100.3 -O 2
-N:设置 TCP 无延迟选项,禁用 Nagle 算法。通常这个选项只用于交互式人机对话的应用程序中,比如Telnet。可与-l参数配合使用,来限制单个数据包的大小,用法可参见-l参数。
-d:输出debug信息。很有用,可以查看一些详细信息:
iperf3  -c 192.168.9.68 -d -l 1
 
常见问题:
1、命令参数要区分大小写的。
比如:-p的意思是指定端口,-P的意思是指定并发线程数量。
2、如果客户端连不上服务器,检查关闭防火墙,再试。
3、windows端和linux端的iperf是可以互通的。
iPerf官网:https://iperf.fr/
官方教程:
参考链接:

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):