iperf vs iperf3
iperf系列工具是使用最普遍的网络流量测试工具,除非测试组播,其他情况下都优先使用iperf2。
- iperf3 server端自适应tcp, ump, iperf3 -s即可,不需要使用-u参数决定开启tcp还是udp。网络测试经常udp与tcp交叉组合测试,自适应udp、tcp非常方便。
- iperf3 --omit参数支持忽略测试歧视的最初几秒,在测试是否丢包的场景下非常有用
- iperf3作者还在维护发布新版本,iperf2基本停滞了
- iperf3提供了library,可以通过python等语言直接调用iperf3库控制iperf3,iperf2不支持
- iperf3 -R 参数支持reverse模式,即在client端增加此参数即可进行反向流量测试
- iperf3目前不支持组播, iperf2支持
- iperf3是单进程模式,不支持多clients同时连接server端的iperf3
你必须了解的信息
在可以使用iperf3的情况下,不要使用iperf2
iperf3使用起来更方便一些,除此之外,iperf3能做到的,好像iperf2基本也能做到
编译新的版本,而不是使用发行版自带的版本
发行版自带的版本一般比较老,尤其是centos系列,建议自己编译安装一下。
- 请注意IPerf3编译后的二进制文件直接拷贝到其他服务器是不行的,因为还有so库,因此尽量不要尝试通过拷贝编译好的iperf3的方式,你可能会遇到某些莫名奇妙的问题
- iperf3进行测试时,服务器端和客户端要使用一致的版本,否则你可能会遇到莫名其妙的错误提示
IPerf3的错误提示比较丑陋,网上资料也不多,当你发现使用--bidir等参数无法进行测试时,请注意检查server端和client端的版本是否一致
容易犯的错误
- udp测试时,client端不需要与服务器端通信即可发送;tcp测试时,client端需要先与服务器端建立tcp连接后才会发送流量
为什么说这点,当进行udp测试时,不需要进行三次握手,client端马上打印发送数据情况,此时你可能误以为网络是通的,然后测试tcp时,就奇怪为什么iperf什么打印都没有。
- linux收取udp报文有限速,当发送udp报文过大时,会丢包
- iperf3在测试结束后会打印汇总信息:发送,接收报文数目,丢包数目等,udp测试的前1s一般会丢少量包,如果长时间测试需要看udp是否丢包,则使用--omit 2参数忽略前两秒的丢包统计
速率测试场景
速率测试一般测试带宽和收发报文数统计
考虑如下问题:
- 发送端与接收端(linux)带宽和速率统计
- 中间测试设备(网关)带宽和速率统计
linux下带宽和速率统计使用ifpps工具即可,ifpps默认统计间隔为1s,
iperf2 组播测试
server端、加入组播组:./iperf -s -u -B 230.1.1.1
[root@TENCENT64 ~]# iperf -c 230.1.1.110 -u -b 10m -t 100000 -i 10 -T 64 -B 192.70.70.1
Client connecting to 230.1.1.110, UDP port 5001
Binding to local address 192.70.70.1
Sending 1470 byte datagrams, IPG target: 1176.00 us (kalman adjust)
Setting multicast TTL to 64
UDP buffer size: 224 KByte (default)
[ 3] local 192.70.70.1 port 41673 connected with 230.1.1.110 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 11.9 MBytes 10.0 Mbits/sec** # 只有单通通,即iperf server和client能够交互数据后,才开始发送组播包**
[ 3] 10.0-20.0 sec 11.9 MBytes 10.0 Mbits/sec
client端、发送组播流:./iperf -c 230.1.1.1 -u -b 1m -i 5 -t 100 -B 192.168.100.1
[root@VM_0_14_centos ~]# iperf -s -u -i 5 -B 230.1.1.110
Server listening on UDP port 5001
Binding to local address 230.1.1.110
Joining multicast group 230.1.1.110
Receiving 1470 byte datagrams
UDP buffer size: 208 KByte (default)
[ 3] local 230.1.1.110 port 5001 connected with 192.70.70.1 port 41673
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0- 5.0 sec 5.96 MBytes 10.0 Mbits/sec 0.001 ms 365155/369407 (99%) # 当组播流量点播下来后,才开始打印。在单播通,组播不通的情况下,不会打印类似这行的信息
[ 3] 5.0-10.0 sec 5.96 MBytes 10.0 Mbits/sec 0.001 ms 0/ 4252 (0%)