网络的主要性能参数包括带宽,时延,抖动和丢包率,用一个名词就是QOS(服务质量)。Iperf(可测丢包率)可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。参考:网络性能评估工具Iperf详解(可测丢包率)
(1)TCP方面
(2)UDP方面(对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标)
可以设置指定带宽的UDP数据流
可以统计网络抖动值、丢包数等
支持多播测试
使用iperf,需要两台服务器,一台运行在服务器模式下(默认监听TCP 5001端口),另一台运行在客户端模式下。
IPerf通过选项 -c 和 -s 决定其当前是作为客户端程序还是作为服务端程序运行,作为客户端程序运行时,-c 后面是对端服务器的IP或域名。
iperf2和iperf3是很大不同的产品,各有特点,https://iperf.fr/iperf-doc.php#3change
iPerf2 features currently supported by iPerf3 :
New Features in iPerf 3.0 :
New Features in iPerf 3.1 :
iPerf2 Features Not Supported by iPerf3 :
ipref支持手机、windows和Linux各种版本。支持多线程,在客户端与服务端支持多重连接。
龙芯mips rpm包:http://ftp.loongnix.cn/os/loongnix/1.0/os/Packages/i/,有iperf-2.0.5和iperf3-3.0.6
龙芯mips deb包:http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/i/iperf3/,只有3.6-2版本
中科方德:http://update.os.nfschina.com/static/NFS4.0/GenOS/RPMS/Releases/Packages/,有iperf3-3.5-3
手动安装(Linux X86):
sudo wget -O /usr/lib/libiperf.so.0 https://iperf.fr/download/ubuntu/libiperf.so.0_3.1.3
sudo wget -O /usr/bin/iperf3 https://iperf.fr/download/ubuntu/iperf3_3.1.3
sudo chmod +x /usr/bin/iperf3
还有一个比较老的java GUI版本Jpref,有2.0和3.0,内置对应的iperf命令行。
[客户端]
-b,--bandwidth 指定客户端通过UDP协议发送信息的带宽,默认值为1Mbit/s
-c host 以客户端模式运行,连接到IPerf服务端运行的主机IP地址或域名
-t ; -i -t(timing)测试的时长,默认10秒;-i(interval)带宽报告周期性显示的间隔时间
-n 设置测试所发送的数据总量,#[KM] 覆盖-t选项
-d, -L 双向传输测试模式,客户端与服务端建立双向连接,并相互发送数据进行测试
-r, -L 交易模式,在客户端到服务端的测试结束后,执行服务端到客户端的测试
-P 设置客户端同时连接到服务端的并发数(在多线程允许的条件下),默认值为1
-L,--listenport 指定一个端口,服务器将利用这个端口与客户机连接
-S, --tos 设置发出包的类型,具体类型请参阅man文档
-F 指定需要传输的文件
-T 指定ttl值
[服务端]
-s 以服务端模式运行,等待客户端的连接请求
-D Unix平台以后台守护程序运行;Windows平台下以服务形式运行
[服务端与客户端通用参数]
-f [kmKM] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位
-i sec 以秒为单位显示报告间隔
-l 缓冲区大小,默认是8KB
-R Run in reverse mode (server sends, client receives).
-m 显示tcp最大mtu
-o 将报告和错误信息输出到文件
-p 指定服务器端使用的端口或客户端所连接的端口
-u 使用udp协议
-w 指定TCP窗口大小,默认是8KB
-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C 兼容旧版本(当server端和client端版本不一样时使用)
-M 设定TCP数据包的最大mtu值
-N 设定TCP不延时
-V 传输ipv6数据包
[注] windows用iperf发流量可能需要增加-w的参数,在client端增加,如iperf3 -c 192.168.0.100 -w 16M -i 1 -P 5 -B 192.168.0.10 -t 10
一般iperf3和iperf2都会同时使用,注意版本最好一致。
其中抖动和丢包率适应于UDP测试,而带宽测试适应于TCP和UDP,iperf不能够用来测试时延(通过PING来测试)。
图中D1,D2分别表示包A和包B的时延。
抖动=|D2-D1|
jitter抖动值就是连续发送时延差值的平均值。如果延时不稳定,忽快忽慢,网络就存在抖动。抖动这个指标,在VOIP,视频会议等场合,是一个非常重要的指标,如果产生抖动,往往声音和图像也会抖动,无法听清楚或者看清楚。
测试htb的时候最好用udp,udp通信开销小,测试的带宽更准确
带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从 客户端到服务器之间的链路的理论带宽为100Mbps,先用 -b 100M进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。
几个测试的报告:
j假设:192.168.1.1 为服务端,192.168.1.2为客户端
ipserf -s #启动192.168.1.1服务端(默认监听5001端口)
(1)tcp模式下,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒
iperf -c 192.168.1.1 -t 60
iperf将尝试从客户端尽可能快地向服务端发送数据请求,并且会输出发送的数据量和网卡平均带宽值。
(2)客户端同时向服务器端发起30个连接线程
iperf -c 192.168.1.1 -P 30 -t 60
(3)测试上、下行带宽,测试时间60秒
iperf -c 192.168.1.1 -d -t 60
(4)通过“-n”参数指定要发送的数据量,或者"-F"一个大文件,模拟大量的数据传输。在指定“-n” “-F”参数后,“-t”参数失效。
iperf -c 192.168.1.1 -i 10 -n 10000000000 #-n 10G ,[KMG];
使用TCP来测试网络带宽,需要特别注意TCP窗口大小,可以使用-w参数指定。
网络通道的容量capacity = bandwidth * round-trip time
而理论TCP窗口的大小就是网络通道的容量。比如,网络带宽为40Mbit/s,回环路径消耗时间是2ms,那么TCP的窗口大小不小于40Mbit/s×2ms = 80kbit = 10Kbytes。查询iperf默认的TCP窗口大小来决定是否需要设置此参数,在此例中,窗口大小应设计大于10Kbytes,当然在实际测试中可能需要作出调整。
使用-u参数进行UDP测试。
服务端:
ipserf3 -s #iperf3,启动192.168.1.1服务端(默认监听5001端口)
ipserf -s -u #iperf2需要加-u,启动192.168.1.1服务端(默认监听5001端口)
客户端测试:
#测试在100Mbps带宽情况下的网络质量:指定100M带宽向对端发送数据,时间10秒,输出值间隔1秒,单位为Mbps
iperf -c 192.168.1.1 -u -i 1 -f M -t 10 -b 100M
#客户端起20个进程,每个进程 100k带宽,测试网络质量
iperf -c 192.168.1.1 -u -i 1 -w 1M -t 30 -P 20 -b 100k
改变包大小测速:
#服务器:
iperf -s -u -i 1 -p 8000 -l 1380 # 数据包大小是1380个字节
#客户端
iperf -u -c 192.168.1.1 -p 8000 -l 1380 -B 192.168.1.2 -t 100 -i 1 -b 100M #绑定本地ip
192.168.1.1 -u -i 1 -w 1M -t 30 -P 20 -b 100k
改变包大小测速:
```shell
#服务器:
iperf -s -u -i 1 -p 8000 -l 1380 # 数据包大小是1380个字节
#客户端
iperf -u -c 192.168.1.1 -p 8000 -l 1380 -B 192.168.1.2 -t 100 -i 1 -b 100M #绑定本地ip