使用iperf3调试网络

摘要:
iperf的主要功能:1)TCP方面测试网络带宽。iperf将在指定的时间内,重复发送指定长度的数据包。例如:iperf3-c192.168.12.168-i2-F指定文件作为数据流进行带宽测试。在输出的最后,iperf还给出了总的数据发送、接收量,并给出了带宽速率平均值,通过这些值,基本可以判断网络带宽是否正常,网络传输状态是否稳定。通过iperf的“-u”参数即可测试UDP应用的传输性能。

介绍

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调试网络》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Apache seaTunnel 数据集成平台Windows不分区VHD装Linux多系统(五):Win7(物理机)添加引导下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python之路【第七篇】python基础 之socket网络编程

本篇文章大部分借鉴http://www.cnblogs.com/nulige/p/6235531.htmlpython socket 网络编程一、服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二、OSI七层模型 互联网协议按...

UDP单播和组播使用SO_REUSEADDR 测试结果

UDP单播通信 一、 预置条件A、B在同一台机器,网络中存在往A、B所在的机器的8888端口发送单播UDP数据A:端口复用绑定在端口8888上B:端口复用绑定在端口8888上操作步骤:(1)先启动A(2)再启动B(3)B退出预期结果:(1)A 正常接收数据(2)B 正常接收数据,A收不到数据(3)A 正常接收数据 二、 预置条件A、B在同一台机器,网络...

网口扫盲一:网卡初步认识

网口扫盲一:网卡初步认识 网络适配器又称网卡或网络接口卡(NIC),英文名Network Interface Card.它是使计算机联网的设备.平常所说的网卡就是将PC机和LAN连接的网络适配器.网卡(NIC) 插在计算机主板插槽中,负责将用户要传递的数据转换为网络上其它设备能够识别的格式,通过网络介质传输.数据在计算机总线中传输是并行方式即数据是肩并肩...

python socket基础

# socket """ Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯 语法: socket.socket(AddressFamily, Type) 该函数带有两个参数: Address Family:可以选择 AF_INET(用于 Internet 进程间通信)...

boost::asio 之udp协议的使用

write by http://blog.csdn.net/bojie5744 bj_末雨 udp sender [cpp] view plaincopyprint? #include "stdafx.h"  #include <string>  #include <boost/asio.hpp>  usingn...

TCP/UDP socket

TCP socket:有链接,绑定端口,接着去侦听,若有请求,那么accept(),获得新的socket,并且去接收/发送数据报. UDP socket:无连接,不需要侦听,也不用一个新的socket去接收/发送数据包,但发送时就取决本身绑定的端口. UDP和TCP的对比:从以上的流程图看出,tcp步骤会比udp多,(tcp三次握手我没有列出来)UD...