使用iperf3调试网络
介绍
Iperf是一款基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。网络管理员可以根据这些信息了解并判断网络性能问题,从而定位网络瓶颈,解决网络故障。
iperf的主要功能:
1)TCP方面
测试网络带宽。
支持多线程,在客户端与服务端支持多重连接。
报告MSS/MTU值的大小。
支持TCP窗口值自定义并可通过套接字缓冲。
2)UDP方面
可以设置指定带宽的UDP数据流
可以测试网络抖动值、丢包数
支持多播测试
支持多线程,在客户端与服务端支持多重连接。
安装方法:arm linux 移植 iperf3
用法
iperf分为客户端和服务器2个部分,因此参数也做了区分;iperf的命令行选项共分为三类,分别是:
注意,iperf 有2.x和3.x的版本不同,调试时需要配套使用,而不能2.x与3.x混用。
- 客户端与服务器端公用选项
- 服务器端专用选项
- 客户端专用选项
服务器端专用选项
| 命令行参数 | 含义描述 |
|---|---|
| -s | 将iperf以server模式启动,例如:iperf3 –s,iperf3默认启动的监听端口为5201,可以通过“-p”选项修改默认监听端口 |
| -D | 将iperf作为后台守护进程运行,例如:iperf3 -s -D |
客户端专用选项
| 命令行参数 | 含义描述 |
|---|---|
| -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无延时 |
公用选项
| 命令行参数 | 含义描述 |
|---|---|
| -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 |
TCP测试实例
服务端
在PC机上,启动 iperf 服务:
iperf3 -s -i 1
客户端
板子上,使用 iperf 客户端测试:
iperf3 -c 192.168.168.106 -i 1 -w 300k -t 10
日志
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.168.16, port 50850
[ 5] local 192.168.168.106 port 5201 connected to 192.168.168.16 port 50852
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.01 sec 67.8 MBytes 564 Mbits/sec
[ 5] 1.01-2.00 sec 74.2 MBytes 628 Mbits/sec
[ 5] 2.00-3.00 sec 70.1 MBytes 588 Mbits/sec
[ 5] 3.00-4.00 sec 77.8 MBytes 653 Mbits/sec
[ 5] 4.00-5.00 sec 75.0 MBytes 629 Mbits/sec
[ 5] 5.00-6.00 sec 79.1 MBytes 663 Mbits/sec
[ 5] 6.00-7.00 sec 78.8 MBytes 661 Mbits/sec
[ 5] 7.00-8.00 sec 77.5 MBytes 650 Mbits/sec
[ 5] 8.00-9.00 sec 77.8 MBytes 652 Mbits/sec
[ 5] 9.00-10.00 sec 78.3 MBytes 657 Mbits/sec
[ 5] 10.00-10.06 sec 4.17 MBytes 628 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.06 sec 761 MBytes 634 Mbits/sec receiver
可以看出,iperf默认的运行时间是10秒钟,每隔一秒钟输出一次传输状态,同时还可以看到每秒钟传输的数据量在67.8MB左右,刚好与“Bandwidth”列的值对应起来,网卡的带宽速率维持在634 Mbits/sec左右,而测试的服务器是千兆网卡,这个测试值也基本合理。
在输出的最后,iperf还给出了总的数据发送、接收量,并给出了带宽速率平均值,通过这些值,基本可以判断网络带宽是否正常,网络传输状态是否稳定。
UDP测试实例
由于UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务.
因此对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。
通过iperf的“-u”参数即可测试UDP应用的传输性能。
服务端命令相同iperf3 -s -i 1,客户端命令如下:
iperf3 -c 192.168.168.106 -i 1 -w 300k -t 10 -u # UDP 测试
日志如下:
Accepted connection from 192.168.168.16, port 50862
[ 6] local 192.168.168.106 port 5201 connected to 192.168.168.16 port 49242
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 6] 0.00-1.00 sec 123 KBytes 1.01 Mbits/sec 32475.353 ms 0/87 (0%)
[ 6] 1.00-2.01 sec 129 KBytes 1.05 Mbits/sec 91.498 ms 0/91 (0%)
[ 6] 2.01-3.00 sec 127 KBytes 1.05 Mbits/sec 0.979 ms 0/90 (0%)
[ 6] 3.00-4.01 sec 129 KBytes 1.05 Mbits/sec 0.127 ms 0/91 (0%)
[ 6] 4.01-5.00 sec 126 KBytes 1.04 Mbits/sec 0.170 ms 0/89 (0%)
[ 6] 5.00-6.00 sec 129 KBytes 1.05 Mbits/sec 0.245 ms 0/91 (0%)
[ 6] 6.00-7.00 sec 129 KBytes 1.05 Mbits/sec 0.238 ms 0/91 (0%)
[ 6] 7.00-8.00 sec 127 KBytes 1.04 Mbits/sec 0.302 ms 0/90 (0%)
[ 6] 8.00-9.00 sec 129 KBytes 1.05 Mbits/sec 0.236 ms 0/91 (0%)
[ 6] 9.00-10.00 sec 127 KBytes 1.04 Mbits/sec 0.117 ms 0/90 (0%)
[ 6] 10.00-10.05 sec 7.07 KBytes 1.13 Mbits/sec 0.145 ms 0/5 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 6] 0.00-10.05 sec 1.25 MBytes 1.04 Mbits/sec 0.145 ms 0/906 (0%) receiver
iperf3: the client has unexpectedly closed the connection
重点关注虚线下的一段内容,在这段输出中,“Jitter”列表示抖动时间,或者称为传输延迟,“Lost/Total”列表示丢失的数据报和总的数据报数量,后面的0%是平均丢包的比率,“Datagrams”列显示的是总共传输数据报的数量。
在UDP应用中随着传输数据的增大,丢包率和延时也随之增加。对于延时和丢包可以通过改变应用程序来缓解或修复,例如视频流应用,可以通过缓存数据的方式而可以容忍更大的延时。
使用iperf3调试网络的更多相关文章
- 利用 WireShark 深入调试网络请求
来源:伯乐在线 - bestswifter 如有好文章投稿,请点击 → 这里了解详情 背景 最近发现我们产品在打开广告链接(Webview)时有一定概率会非常慢,白屏时间超过 10s,追查广告的过程中 ...
- TCPflow:在Linux中分析和调试网络流量的利器(转)
TCPflow是一款功能强大的.基于命令行的免费开源工具,用于在Unix之类的系统(如Linux)上分析网络流量.它可捕获通过TCP连接接收或传输的数据,并存储在文件中供以后分析,采用的格式便于协议分 ...
- Erlang Shell调试网络程序真方便
Erlang的shell功能强大,这里我将它当成我的客户端.可以动态的输入你需要发送的内容,也可以动态的接收内容,就像调试器一样,在开发过程中起到很重要的作用.具体使用方式如下: C:\Documen ...
- 用python来调试网络程序
需要联调的程序,沟通联调起来总是各种麻烦,如果自己能写个简单一点的“测试机”,事情就很easy了:或者有时候想做“中间人”,看看网路上到底传些什么.前面写了串口的测试机,今天尝试了一下UDP的. im ...
- Android测试网络是否连接
一.布局页面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- 让你在PC上调试Web App,UC浏览器发布开发者版
目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实. 因此,UC使用技术将手机网页调试信息分离,实现一种能在大屏幕.高配置P ...
- iOS开发工具-网络封包分析工具Charles
转自唐巧的技术博客:http://blog.devtang.com/blog/2013/12/11/network-tool-charles-intr/ Charles是在Mac下常用的截取网络封包的 ...
- iOS开发工具——网络封包分析工具Charles
简介 Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.Charles通过将自己设置成系统的网络访问代理服务器,使 ...
- 网络封包分析工具Charles使用
网址:http://www.charlesproxy.com/ 截取网络封包的工具. 简介 Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议, ...
- linux网络配置相关命令、虚拟网络接口eth0:0
网络接口(interface)是网络硬件设备在操作系统中的表示方法,比如网卡在Linux操作系统中用ethX,是由0开始的正整数,比如eth0.eth1...... ethX.而普通猫和ADSL的接口 ...
随机推荐
- ESP32 I2C 总线主模式通信程序
一.概述 这里主要是记录 ESP32 中进行 I2C 通行的基本程序,也可以说是 I2C 总线驱动程序,当然这里只是作为主模式,从模式我还没需要这个需求,以后有机会贴上.此笔记的主要目的是防止以后写 ...
- C++里也有菱形运算符?
最近在翻<c++函数式编程>的时候看到有一小节在说c++14新增了"菱形运算符".我寻思c++里好像没什么运算符叫这名字啊,而且c++14新增的功能很少,我也不记得有添 ...
- [Cmake Qt]找不到文件ui_xx.h的问题?有关Qt工程的问题,看这篇文章就行了。
前言 最近在开发一个组件,但是这个东西是以dll的形式发布的界面库,所以在开发的时候就需要上层调用. 如果你是很懂CMake的话,ui_xx.h的文件目录在 $ 下 然后除了有关这个ui_xx.h,还 ...
- Ubuntu实现与主机Windows复制粘贴(安装VMware Tools)
若不能实现主机与客户机间粘贴复制执行以下命令 sudo apt-get autoremove open-vm-tools sudo apt-get install open-vm-tools sudo ...
- 使用SQL Server语句统计某年龄段人数占总人数的比例(多层查询语句嵌套-比例分析)
需求:需统计出某个集合内,某个段所占的比例,涉及SELECT查询语句的嵌套,如有疑问可留言. 如下: --按性别进行年度挂号年龄段分析--男SELECT 年龄段,SUM(人数) 数量,cast(cas ...
- C语言:找到在文件单词中字符个数最多的单词。
第一点:这是一个传回指针的指针函数,所以在定义的时候是char*类型的函数,传进的参数是一个文件指针,(敲重点了,一定一定一定要把文件打开了才能传这个文件指针进来!!)因为这是在你的文本文件里面进行查 ...
- mews/captcha 验证码组件
/** * 图像验证码 */ public function captcha(CaptchaBridge $captcha, $type = 'default') { $api_captcha = $ ...
- 基于Ubuntu20.04在k8s 1.25部署gin+MySQL服务
0. 前言 某天突发奇想,既然都学了 docker 了,那干脆,顺便把 kubernetes 也学了,于是开始了我长达一个月的环境搭建.踩坑历程. 最开始,我的想法是,在我的物理机使用 WSL + d ...
- 一款功能强大的Python工具,一键打包神器,一次编写、多平台运行!
1.项目介绍 Briefcase是一个功能强大的工具,主要用于将Python项目转化为多种平台的独立本地应用.它支持多种安装格式,使得Python项目能够轻松打包并部署到不同的操作系统和设备上,如ma ...
- JavaScript 中的 Range 和 Selection 对象
JavaScript 中的 Range 和 Selection 对象 前言 最近在做鼠标框选的需求,鼠标框选就需要用到 Range 和 Selection 对象. Range 表示选择的区间范围,Se ...