[转]网络性能评估工具Iperf详解(可测丢包率)
原文链接:安全运维之:网络性能评估工具Iperf详解:http://os.51cto.com/art/201410/454889.htm
参考博文:http://linoxide.com/monitoring-2/install-iperf-test-network-speed-bandwidth/ http://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf-and-iperf3/
一、网络性能评估工具Iperf
网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导致网络带宽利用率不高。要找到网络带宽利用率不高的原因,就需要对网络传输进行监控,此时就需要用到一些网络性能评估工具,而Iperf就是这样一款网络带宽测试工具,本节将详细介绍一下Iperf的使用。
1、Iperf能做什么
Iperf是一款基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。网络管理员可以根据这些信息了解并判断网络性能问题,从而定位网络瓶颈,解决网络故障。
下面介绍Iperf的主要功能。
(1)TCP方面
q 测试网络带宽。
q 支持多线程,在客户端与服务端支持多重连接。
q 报告MSS/MTU值的大小。
q 支持TCP窗口值自定义并可通过套接字缓冲。
(2)UDP方面
q 可以设置指定带宽的UDP数据流
q 可以测试网络抖动值、丢包数
q 支持多播测试
q 支持多线程,在客户端与服务端支持多重连接。
二、Iperf的安装与使用
iperf可以运行在任何IP网络上,包括本地以太网、接入因特网、Wi-Fi网络等。在工作模式上,iperf运行于服务器、客户端模式下,其服务器端主要用于监听到达的测试请求,而客户端主要用于发起连接会话,因此要使用iperf,需要两台服务器,一台运行在服务器模式下,另一台运行在客户端模式下。
1.安装iperf
iperf支持Win32、Linux、FreeBSD、MacOS X、OpenBSD和Solaris等多种操作系统平台。读者可以从iperf官方主页http://iperf.fr/ 下载各种版本,目前最新的版本是iperf3.0,这里下载的软件包为iperf-3.0.tar.gz,安装过程如下:
# wget http://downloads.es.net/pub/iperf/iperf-3.0.6.tar.gz
# tar zxvf iperf-3.0.6.tar.gz # cd iperf-3.0.6
# ./configure
# make
# make install
2.iperf参数介绍
在完成iperf安装后,执行“iperf3 –h”即可显示iperf的详细用法。iperf的命令行选项共分为三类,分别是客户端与服务器端公用选项、服务器端专用选项和客户端专用选项,下面对常用的选项进行介绍。
服务器端专用选项的含义如表1所示。
表1 服务器端专用选项的含义
命令行参数 |
含义描述 |
-s |
将iperf以server模式启动,例如:iperf3 –s,iperf3默认启动的监听端口为5201,可以通过“-p”选项修改默认监听端口 |
-D |
将iperf作为后台守护进程运行,例如:iperf3 -s -D |
客户端专用选项的含义如表2.5所示。
表2 客户端专用选项的含义
命令行参数 |
含义描述 |
-c |
将iperf以client模式启动 例如:iperf3 -c 192.168.12.168,其中192.168.12.168是server端的IP地址 |
-u |
指定使用UDP协议 |
-b [K|M|G] |
指定UDP模式使用的带宽,单位bits/sec。此选项与“-u”选项相关。默认值是1 Mbit/sec |
-t |
指定传输数据包的总时间。iperf将在指定的时间内,重复发送指定长度的数据包。默认是10秒钟 |
-n [K|M|G] |
指定传输数据包的字节数,例如:iperf3 -c 192.168.12.168 –n 100M |
-l |
指定读写缓冲区的长度。TCP方式默认大小为8KB,UDP方式默认大小为1470字节 |
-P |
指定客户端与服务端之间使用的线程数。默认是1个线程。需要客户端与服务器端同时使用此参数 |
-R |
切换数据发送接收模式,例如默认客户端发送,服务器端接收,设置此参数后,数据流向变为客户端接收,服务器端发送 |
-w |
指定套接字缓冲区大小,在TCP方式下,此设置为TCP窗口的大小。在UDP方式下,此设置为接受UDP数据包的缓冲区大小,用来限制可以接收数据包的最大值 |
-B |
用来绑定一个主机地址或接口,这个参数仅用于具有多个网络接口的主机。在UDP模式下,此参数用于绑定和加入一个多播组 |
-M |
设置TCP最大信息段的值 |
-N |
设置TCP无延时 |
客户端与服务器端公用选项的含义如表3所示。
表3 客户端与服务器端公用选项的含义
命令行参数 |
含义描述 |
-f [k|m|g|K|M|G] |
指定带宽输出单位,“[k|m|g|K|M|G]”分别表示以Kbits, Mbits, Gbits, KBytes, MBytes,GBytes显示输出结果,默认以Mbits为单位,例如:iperf3 -c 192.168.12.168 -f M |
-p |
指定服务器端使用的端口或客户端所连接的端口,例如: iperf3 -s -p 9527; iperf3 -c 192.168.12.168 -p 9527 |
-i |
指定每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为1。 例如:iperf3 -c 192.168.12.168 -i 2 |
-F |
指定文件作为数据流进行带宽测试。 例如:iperf3 -c 192.168.12.168 -F web-ixdba.tar.gz |
2.3.3 Iperf应用实例
要使用iperf,首先要启用一个服务端,这里假定服务端的IP地址为192.168.12.168,在此服务器上运行“iperf3 -s”即可开启iperf的服务器模式。在默认情况下,iperf3将在服务端打开一个5201监听端口,此时就可以将另一台服务器作为客户端执行iperf功能测试了。
1.测试TCP吞吐量
为了确定网卡的最大吞吐量,可以在任意客户端运行iperf命令,iperf将尝试从客户端尽可能快地向服务端发送数据请求,并且会输出发送的数据量和网卡平均带宽值。图1是一个最简单的带宽测试命令。
图1通过iperf测试网络带宽利用率
从图1可以看出,iperf默认的运行时间是10秒钟,每隔一秒钟输出一次传输状态,同时还可以看到每秒钟传输的数据量在112MB左右,刚好与“Bandwidth”列的值对应起来,网卡的带宽速率维持在941Mbits/sec左右,而测试的服务器是千兆网卡,这个测试值也基本合理。在输出的最后,iperf还给出了总的数据发送、接收量,并给出了带宽速率平均值,通过这些值,基本可以判断网络带宽是否正常,网络传输状态是否稳定。
iperf提供很多参数,可以多角度、全方位地测试网络带宽利用率,例如,要改变iperf运行的时间和输出频率,可以通过“-t”和“-i”参数来实现,如图2所示。
图2 添加“-t”和“-i”参数后的iperf输出
从图2 可以看出,输出状态的间隔变为每5秒钟一次,总共执行测试时间为20秒,测试的带宽速率仍然保持在941Mbits/sec左右,唯一变化的是失败重传次数增加了。
为了模拟大量的数据传输,也可以指定要发送的数据量,这可以通过“-n”参数来实现。在指定“-n”参数后,“-t”参数失效,iperf在传输完毕指定大小的数据包后,自动结束,如图3所示。
图3 iperf客户端通过“-n”参数指定要传输的数据量
图3的例子是指定发送一个5GB左右的数据包,并且每隔10秒钟输出一次传输状态,从这个输出可以看出,当失败重传次数较多时,传输速率急速下降。
有时候,为了模拟更真实的TCP应用,iperf客户端允许从一个特定的文件发送数据,这可以通过“-F”参数实现,如图4所示。
图4 iperf客户端通过“-F”参数指定文件来发送数据
在图4的例子中,通过“-F”参数指定了一个webdata.tar.gz文件作为iperf要传输的数据,在使用此参数时,需要同时指定一个“-t”参数来设置要测试传输的时间,这个时间尽量设置长一些,因为在默认传输时间10秒内,这个文件可能还没有传完。
在使用iperf进行网络带宽测试时,如果没有指定发送方式,iperf客户端只会使用一个单一的线程,而iperf是支持多线程的,可以使用iperf提供的“-P”参数来设置多线程的数目,通过使用多线程,可以在一定程度上增加网络的吞吐量。
下面通过两个例子进行简单对比,图5是iperf使用单线程传输1.86GBytes数据所消耗的时间和带宽使用情况。为了速率单位统一,这里使用“-f”参数将输出结果都通过MBytes来显示。
图5 iperf在单线程模式下的传输时间和传输速率
从图5中可以看出,传输1.86GBytes的数据消耗了17秒的时间,平均带宽速率为112MBytes/sec(注意单位).下面再看看使用多线程后,iperf传输同样大小数据量所消耗的时间和平均带宽速率,如图6所示。
图6 iperf使用多线程后的数据传输状态
这里通过“-P”参数开启了2个多线程,从传输时间上看,传输1.86GBytes的数据,消耗时间为10.79秒,比之前单线程的传输时间少了近7秒钟,在平均带宽速率上,从之前单线程的112MBytes/sec提高到177MBytes/sec,从这个结果可以看出,多线程对网络传输性能的提高不小。
2 . 测试UDP丢包和延迟
iperf也可以用于UDP数据包吞吐量、丢包率和延迟指标,但是由于UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过iperf的“-u”参数即可测试UDP应用的传输性能,图7测试的是在iperf客户端传输100MB的UDP数据包的输出结果.:
图7 iperf传输100MB的UDP数据包的输出结果
在图7中,重点关注虚线下的一段内容,在这段输出中,“Jitter”列表示抖动时间,或者称为传输延迟,“Lost/Total”列表示丢失的数据报和总的数据报数量,后面的0.33%是平均丢包的比率,“Datagrams”列显示的是总共传输数据报的数量。
这个输出结果过于简单,要了解更详细的UDP丢包和延时信息,可以在iperf服务端查看,因为在客户端执行传输测试的同时,服务端也会同时显示传输状态,如图8所示。
图8 iperf服务端显示的UDP传输状态
在这个输出中,详细记录了在传输过程中,每个阶段的传输延时和丢包率,在UDP应用中随着传输数据的增大,丢包率和延时也随之增加。对于延时和丢包可以通过改变应用程序来缓解或修复,例如视频流应用,可以通过缓存数据的方式而可以容忍更大的延时。
三. 出错处理
错误:
iperf3: error - unable to read from stream socket: No route to host
是防火墙默认关闭了 icmp
需要将客户端和服务端的防火墙 将
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
删掉或注释掉即可。
[转]网络性能评估工具Iperf详解(可测丢包率)的更多相关文章
- Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量
网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高.要找到网络带宽利用率不高的原因,就需要对网 ...
- Linux 性能测试工具Lmbench详解
Linux 性能测试工具Lmbench详解 2010-06-04 16:07 佚名 评测中心 字号:T | T Lmbench 是一套简易可移植的,符合ANSI/C 标准为UNIX/POSIX 而制定 ...
- 牛客网 Java 工程师能力评估 20 题 - 详解
牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...
- Linux命令工具 top详解
Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...
- 自动化运维工具——ansile详解
自动化运维工具——ansible详解(一) 目录 ansible 简介 ansible 是什么? ansible 特点 ansible 架构图 ansible 任务执行 ansible 任务执行模式 ...
- [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解 http://www.52im.net/thread-1309-1-1.html 本文来自腾讯资深研发工程师罗成的技术分享, ...
- linux网络性能评估
Linux网络性能评估 参考自:自学it网,http://www.zixue.it/. 网络性能评估(1)通过ping命令检测网络的连通性.(2)通过netstat -i 组合检测网络接口状况.(3) ...
- 常用开发库 - MapStruct工具库详解
常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanU ...
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
随机推荐
- Retrofit2 上传图片等文件
普通写法: //创建表单的普通字段public static RequestBody createFormBody(String content) { RequestBody body = Reque ...
- [LeetCode]题解(python):134-Gas Station
题目来源: https://leetcode.com/problems/gas-station/ 题意分析: 在一个圈子路线里面有N个汽油站,i站的汽油有gas[i]汽油.现在有一辆无限容量的车,它从 ...
- Loadrunner11点击录制脚本无响应,IE页面弹不出——解决方案汇总
以前用Loadrunner的时候都没有遇到过这个问题,后来将服务器重装系统(win7)后,重新安装Loadrunner11,浏览器版本刚开始为IE11,后来降为IE8,IE访问部署在虚拟机里的平台能正 ...
- appium 学习各种小功能总结--功能有《滑动图片、保存截图、验证元素是否存在、》---新手总结(大牛勿喷,新手互相交流)
1.首页滑动图片点击 /** * This Method for swipe Left * 大距离滑动 width/6 除数越大向左滑动距离也越大. * width:720 *height:1280 ...
- java json的处理
maven依赖 <dependencies> <dependency> <groupId>com.alibaba</groupId> <artif ...
- HDU 2852 KiKi's K-Number
权值线段树 #include <cstdio> #include <cstring> const int N=200000,M=220000; int k,q,x,y,sum[ ...
- $.getJSON(url,function success(){})回调函数不起作用
有个问题好久没有解决,就是: $.getJSON(url,function success(){}) 其中的回调函数,总也不执行. 以前也做过,但那都是CTRL+C,CTRL+V,也没有细想. 目标就 ...
- nyoj-709-异形卵(水题)
异 形 卵 时间限制:1000 ms | 内存限制:65535 KB 难度: 描写叙述 我们探索宇宙,是想了解浩瀚星空的奥妙.但我们却非常少意识到宇宙深处藏匿的危急,它们无时无刻不紧盯着我们的地球 ...
- Android 中文API (68) —— BluetoothClass.Service
前言 本章内容是 android.bluetooth.BluetoothClass.Service,为Android蓝牙部分的章节翻译,版本为 Android 2.3 r1,翻译来自中山大学的&q ...
- Python 参数传递
python中的变量: 一个变量是局部还是全局,在编译函数的时候就已经决定,因此读变量值的时候也不会逐层向外查找.变量是全局还是局域,根据如下3条: 1. 如果函数内部有global语句,那么它声明的 ...