iperf测试带宽
iperf测试带宽
iperf是开源的跨平台网络带宽测试工具,支持windows、linux、macos、bsd等众多系统。可以测试带宽吞吐量、延迟、丢包等;支持使用TCP和UDP测试,结果比较准。由于是C/S架构,使用时需要在测试宽带的两端分别运行一个装有iperf的电脑,我是测试连接两个机房的专线,直接拿机房里的Linux服务器测试。
iperf有两个版本,一个是iperf2和iperf3,建议使用iperf3,iperf2比较老,对10G网卡测试速度上不来。两个版本用法基本上是一样的,我这里是测试百兆的带宽,以ipser2来做演示
安装
1 | yum install iperf iperf3 #需要安装epel源 |
测试
无论是tcp还是udp方式测试,都要一端运行服务器模式,另一端运行客户端模式,另外如果开了iptables,要打开tcp 5001端口,当然也可以指定端口。
tcp方式
服务器端:
1 | iperf -s |
客户端:
1 | iperf -c SERVERIP -t 60 -i 1 |
在实际测试中(100M MPLS专线),使用tcp方式测试带宽经常跑不满,联系供应商后得到回复说是因为“TCP窗口大小”导致的。iperf也有一个“-w”参数可以调整TCP窗口大小值,但是无论改TCP窗口大小设置成多少,就是跑不满带宽。我猜测是因为单线程的tcp的传输效率有限,所以无论tcp窗口设置成多大,也不可能跑满全部带宽。在内网环境使用iperf测试时,网络条件比较好,多线程和单线程测试结果基本上没有区别。但是在测试专线时,合适的线程数是可以跑满带宽的,设置太大反而速度会下降。
1 | iperf -c SERVERIP -t 60 -i 1 -P 5 |
udp方式
服务器端:
1 | iperf -u -s |
客户端:
1 | iperf -c SERVERIP -t 60 -i 1 -b 100M |
注意:udp是无连接不可靠的,只管发包不确保接收,发包速度非常快。如果-b指定的带宽值过大(例如100M专线,这里设置成200M),会将整个宽带占满,起到了dos的效果,这时如果你是用ssh连接到两端的服务器就悲剧了(tcp方式就不会),别问我是怎么知道的 TT~
参数说明:
linux下iperf 2.0.5 版本
适用客户端/服务器:
1 | -f --格式[k|m|K|M] 分别表示以Kbits、Mbits、KBytes、MBytes显示报告,默认是Mbits |
适用服务器端:
1 | -s 以服务器模式启动 |
适用客户端:
1 | -b 指定客户端通过UDP协议发送信息的带宽,默认值为1Mbit/s |
参考文章
http://linux-guys.blogspot.com/2011/01/iperf.html
http://wenku.baidu.com/view/4cedc8728e9951e79b8927a7.html