iPerf 3 测试UDP和TCP方法详解

文章目录

  • 前言
  • 一、What is iPerf / iPerf3 ?
  • 二、功能
    • 1. TCP and SCTP
    • 2. UDP
    • 3. 其他
  • 三、 Iperf的使用
    • 1.Iperf的工作模式
    • 2. 通用指令
    • 3. 服务端特有选项
    • 4. 客户端特有选项
    • 5. -t -n参数联系
  • 四、Iperf使用实例
    • 1. 调整 TCP 连接
      • 1. 1TCP 窗口大小调节
      • 1. 2 最大传输单元 (MTU)调整
    • 2. 调整 UDP 连接
    • 3. 测试TCP吞吐量
    • 4. 测试UDP吞吐量

前言

工具安装、说明等详细信息可参考官方文档ipef user doc

一、What is iPerf / iPerf3 ?

Perf3 是一款用于主动测量 IP 网络最大带宽的工具。它支持调整与定时、缓冲区和协议(TCP、UDP、SCTP 与 IPv4 和 IPv6)相关的各种参数。每次测试都会报告带宽、损耗和其他参数。

二、功能

1. TCP and SCTP

  • 测量带宽
  • 报告 MSS/MTU 大小和观察到的读取大小
  • 通过套接字缓冲区支持 TCP 窗口大小。

2. UDP

  • 客户端可创建指定带宽的 UDP 数据流
  • 测量数据包丢失
  • 测量延迟抖动
  • 支持组播

3. 其他

  • 客户端和服务器可同时进行多个连接(-P 选项)。
  • 服务器处理多个连接,而不是在一次测试后退出。
  • 可在指定时间(-t 选项)内运行,而不是在设定的数据传输量(-n 或 -k 选项)内运行。
  • 以指定时间间隔打印定期的中间带宽、抖动和损耗报告(-i 选项)。
  • 将服务器作为守护进程运行(-D 选项)
  • 使用代表性数据流测试链路层压缩对可实现带宽的影响(-F 选项)。
  • 服务器同时接受单个客户端(iPerf3)或多个客户端(iPerf2)
  • 新功能:忽略 TCP 慢启动(-O 选项)。
  • 新功能:为 UDP 和(新)TCP 设置目标带宽(-b 选项)。
  • 新功能:设置 IPv6 流量标签(-L 选项)
  • 新功能:设置拥塞控制算法(-C 选项)
  • 新功能: 使用 SCTP 而非 TCP(–sctp 选项)
  • 新功能: 以 JSON 格式输出(-J 选项)。
  • 新功能: 磁盘读取测试(服务器:iperf3 -s / 客户端:iperf3 -c testhost -i1 -F 文件名)
  • 新功能: 磁盘写入测试(服务器:iperf3 -s -F 文件名/客户端:iperf3 -c testhost -i1)

三、 Iperf的使用

1.Iperf的工作模式

Iperf可以运行在任何IP网络上,包括本地以太网、接入因特网、Wi-Fi网络等。在工作模式上,iperf运行于服务器、客户端模式下,其服务器端主要用于监听到达的测试请求,而客户端主要用于发起测试连接会话,因此要使用iperf至少需要两台服务器,一台运行在服务器模式下,另一台运行在客户端模式下。

2. 通用指令

在这里插入图片描述

3. 服务端特有选项

在这里插入图片描述

4. 客户端特有选项

在这里插入图片描述

5. -t -n参数联系

-t 参数说明如下:
在这里插入图片描述

-n 参数说明如下:
在这里插入图片描述
-n会重写-t参数,-n参数会使-t参数失效。
-n 30M 意思表明,传输完30M便停止,-t失效。
在这里插入图片描述

四、Iperf使用实例

1. 调整 TCP 连接

1. 1TCP 窗口大小调节

iPerf 的主要目标是帮助调整特定路径上的 TCP 连接。TCP 最基本的调整问题是 TCP 窗口大小,它控制着网络中任何一点的数据量。如果窗口大小太小,发送方有时就会处于空闲状态,从而导致性能低下。
窗口大小的理论值为:
~~~~~~~~~~~~~~~~~~                   瓶颈带宽*往返时间
若瓶颈链路是 45 Mbit/sec 链路,用 ping 测量的往返时间是 42 ms。带宽延迟乘积为:
45 Mbit/sec * 42 ms
= (45e6) * (42e-3)
= 1890000 bits
= 230 KByte
这是计算最佳窗口大小的一个起点;将其设置得更高或更低可能会产生更好的结果。
请注意,许多操作系统和主机都有 TCP 窗口大小的上限。iPerf 会尝试检测这些限制,并在实际窗口大小与请求的窗口大小不相等时发出警告。
另一个测试方法是运行并行 TCP 流。如果总带宽大于单个数据流的带宽,就说明出了问题。要么是 TCP 窗口大小太小,要么是操作系统的 TCP 实现有问题,要么是网络本身有缺陷。

测试示例:

  • 启动服务端
    在这里插入图片描述
  • 启动客户端
  1. 单线程测试,TCP窗口大小1000字节。(非常小,所以性能不能达到网卡瓶颈1Gbit)
    在这里插入图片描述

  2. 单线程测试,TCP窗口大小16K。速度有所提升
    在这里插入图片描述

  3. 单线程测试,窗口调整为420K时,基本达到了1Gbit的极限。
    在这里插入图片描述

  4. 最后测试一下多线程,使用190k的窗口,同样可以把网卡极限跑满:
    在这里插入图片描述
    所以如果我们使用单线程传输,tcp窗口的大小很关键。

1. 2 最大传输单元 (MTU)调整

为了达到最佳效果,两台主机都应支持路径 MTU 发现。不支持路径 MTU 发现的主机通常使用 536 作为 MSS,这会浪费带宽和处理时间。使用 -m 选项可显示正在使用的 MSS,并查看是否与预期相符。以太网的 MSS 通常在 1460 字节左右。

2. 调整 UDP 连接

iPerf 创建了一个恒定比特率的 UDP 数据流。没有其他功能。
需要将数据报大小 (-l) 调整为您的应用程序所使用的大小。
服务器通过数据报中的 ID 号来检测 UDP 数据段是否丢失。通常,一个 UDP 数据段会变成多个 IP 数据包。丢失一个 IP 数据包就会丢失整个数据段。要测量数据包丢失而不是数据段丢失,可使用 -l 选项使数据段小到足以容纳进一个数据包。默认的 1470 字节大小适用于以太网。还能检测出乱序数据包。由于 TCP 不会向用户报告数据包丢失情况,UDP 测试有助于查看路径上的数据包丢失情况。

根据 RFC 1889 中 RTP 的规定,抖动计算由服务器持续计算。客户端在数据包中记录 64 位秒/微秒时间戳。服务器计算的相对传输时间为(服务器接收时间-客户端发送时间)。客户端和服务器的时钟无需同步;抖动计算中会减去任何差异。抖动是连续传输时间差的平滑平均值。

测试示例:

  • 服务端启动
    在这里插入图片描述
  • 启动客户端
    在这里插入图片描述
    请注意,在使用较大的 50 KB 数据报(每个数据报分成 23 个 1500 字节的数据包)时,数据报重组导致的抖动较高。这里看到的数据报丢包率较高,可能是由于流量的突发性,即 23 个背靠背的数据包,然后是长时间的停顿,而不是均匀分布的单个数据包。
    在这里插入图片描述

3. 测试TCP吞吐量

  • Server端开启iperf的服务器模式:
    在这里插入图片描述
  • Client端启动iperf的客户端模式
    在这里插入图片描述
  • Server端监听结果
    在这里插入图片描述
    ① Interval表示时间间隔。
    ② Transfer表示时间间隔里面转输的数据量。
    ③ Bandwidth是时间间隔里的传输速率 (千兆以太网 104Mb/s对的)。

4. 测试UDP吞吐量

带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用-b 100M进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。

  • Server端开启iperf的服务器模式
    在这里插入图片描述
  • Client端启动iperf的客户端模式,连接服务端
    在这里插入图片描述
  • Server端监听结果
    在这里插入图片描述
    ① Jitter为抖动,在连续传输中的平滑平均值差。
    ② Lost为丢包数量。
    ③ Total Datagrams为包数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/313993.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端框架技术革新历程:从原生DOM操作、数据双向绑定到虚拟DOM等框架原理深度解析,Web开发与用户体验的共赢

前端的发展与前端框架的发展相辅相成,形成了相互驱动、共同演进的关系。前端技术的进步不仅催生了前端框架的产生,也为其发展提供了源源不断的动力。 前端的发展 前端,即Web前端,是指在创建Web应用程序或网站过程中负责用户界面…

sprinboot+vue集成neo4j图数据库

一 、java后台 1.1 package com.admin.domain;/*** 功能描述:** author wangwei* date 2024-01-15 22:13*/ public class ConnectWeb {private String connectWebId;private String connectWebName;private String connectWebInfo;private String personWebIdAlph…

IntelliJ IDEA2020下使用Maven构建Scala 项目

1.创建maven文件 2.进入pom.xml导入依赖 <!--添加spark的依赖--><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.2.1</version></dependency><!--添加scala依…

Golang操作Redis

一. Redis介绍 1.1 简介 Redis是完全开源免费的&#xff0c;遵循BSD协议&#xff0c;是一个高性能的key-value数据库。 Redis与其它的key-value缓存产品有以下三个特点&#xff1a; Redis支持数据持久化&#xff0c;可以见内存中的数据报错在磁盘中&#xff0c;重启的时候可以…

什么是用户体验(UX)文案,为什么它很重要?

网上购物如今比以往任何时候都更加相关。所以我们将以此为例说明什么是用户体验&#xff08;UX&#xff09;文案&#xff0c;以及为什么它很重要。 假设你去了一个在线商店。你需要执行一系列操作&#xff1a; 找到合适的部分选择你感兴趣的产品弄清楚它们是什么&#xff0c;…

使用composer开发自己的扩展包

前言 日常的开发中我们经常用到composer去安装其他人封装好的扩展包&#xff0c;如果你有好的功能代码想分享给其他人使用&#xff0c;就可以使用composer打包成扩展包。其他人用composer安装后就可以使用你的扩展包了。这篇文章教你如何打包自己的composer扩展包。 1.新建仓…

Mediasoup-demo 本地启动步骤(超详细)

Mediasoup-demo 本地启动步骤&#xff08;超详细&#xff09; 一.本人环境 系统&#xff1a;macos13.6.3 node: v16.20.2 npm:8.19.4 python: 3.9.6 二.下载代码 git 下载代码&#xff1a; git clone gitgithub.com:versatica/mediasoup-demo.git 三.代码介绍 下载下来…

微信小程序使用 Vant Weapp 中 Collapse 折叠面板 的问题!

需求&#xff1a;结合Tab 标签页 和 Collapse 折叠面板 组合成显示课本和章节内容&#xff0c;并且用户体验要好点&#xff01; 如下图展示&#xff1a; 问题&#xff1a;如何使用Collapse 折叠面板 将内容循环展示出来&#xff1f; js中的数据是这样的 代码实现&#xff1…

面试宝典(1)——数据库篇(MySQL)

面试宝典&#xff08;1&#xff09;——数据库篇&#xff08;MySQL&#xff09; 1.什么是索引&#xff1f; 索引是一种用于加快数据库查询速度的数据结构。 索引可以帮助数据库快速定位到数据库表中特定列的记录&#xff0c;从而加快数据检索和查询的速度。 通过在表的列上…

webpack 打包优化 - splitChunks

打包时会遇到的问题&#xff1a; 打包文件过大&#xff0c;首屏加载时间过长&#xff0c;js阻塞页面渲染导致白屏改动业务代码后&#xff0c;对于第三方库也会一并重新打包到一个出口文件&#xff0c;浏览器无法利用缓存来减少请求和加载的时间 针对以上两个问题&#xff0c;…

paddlepaddle-gpu安装

背景 之前安装paddlepaddle-gpu遇到各种问题&#xff0c;安装不成功&#xff0c;之前使用了wsldocker的方式&#xff0c;可查看我之前博客&#xff1a;记录paddlepaddle-gpu安装&#xff0c;这要会导致我整个开发流程比较割裂 cuda版本 强烈推荐cuda11.8&#xff0c;paddlep…

【讯为Linux驱动笔记1】申请一个字符设备

Linux下每个设备都需要有一个专属设备号&#xff1a;主设备号 次设备号 【申请字符设备】 主设备号&#xff1a;一类驱动&#xff1a;如&#xff1a;USB驱动 次设备号&#xff1a;这类驱动下的某个设备 如&#xff1a;键盘鼠标 设备号是32位的dev_t类型的&#xff0c;高12位主…

【黑马头条】-day12项目部署和发布-jenkins

文章目录 1 持续集成2 软件开发模式2.1 瀑布模式2.2 敏捷开发2.2.1 迭代开发2.2.2 增量开发 3 Jenkins3.1 Jenkins安装3.1.1 导入镜像3.1.2 配置3.1.3 初始化设置 3.2 插件安装3.3 服务器环境准备3.3.1 Docker安装配置3.3.2 Git安装配置3.3.3 Maven安装配置 3.4 Jenkins工具配置…

亚信安全入选中国数据安全市场图谱

近日&#xff0c;全球领先的IT市场研究和咨询公司IDC发布了《IDC Market Glance&#xff1a;中国数据安全市场图谱&#xff0c;2024》报告&#xff08;以下简称“报告”&#xff09;&#xff0c;报告展示了中国数据安全市场的构成和格局&#xff0c;遴选出不同细分市场领域的主…

管理 Python 项目的艺术:在 PyCharm 中使用虚拟环境(以BPnP为例)

在 PyCharm 中使用虚拟环境对于 Python 项目开发具有多方面的重要作用&#xff0c;这些作用体现在提升项目管理的效率、保障代码的可运行性以及维护项目的长期稳定性等方面。以下是使用虚拟环境的几个关键好处&#xff1a; 1. 依赖管理和隔离 虚拟环境允许每个项目拥有…

工作记录:vue-grid-layout 修改 margin 导致 item 高度剧烈变化

问题 用 vue-gird-layout 时发现&#xff0c;当改变 margin 值时&#xff0c;item 的尺寸也会跟着变化。 如下图&#xff1a;row height 和每个 item 的 h 都保持不变。修改 margin-y&#xff0c;item 的实际高度也跟着变了&#xff1a; 原因 研究了一番&#xff0c;发现原…

flutter release 报错 Error: SocketException: Failed host lookup:

flutter 的 debug 模式没有任何问题 &#xff0c;打了release 包后一直报下面的错&#xff0c;查了一下是 因为没有网络权限 Error: SocketException: Failed host lookup: yomi-test-aws-sg.yomigame.games (OS Error: No address associated with hostname, errno 7) 按照下…

组合模式【结构型模式C++】

1.概述 组合模式又叫部分整体模式属于结构型模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次。 2.结构 组件&#xff08;Component&#xff09;:定义了组合中所有对象的通用接口&#xff0c…

OpenHarmony鸿蒙南向开发案例:【智能窗户通风设备】

样例简介 本文档介绍了安全厨房案例中的相关智能窗户通风设备&#xff0c;本安全厨房案例利用轻量级软总线能力&#xff0c;将两块欧智通V200Z-R/BES2600开发板模拟的智能窗户通风设备和燃气告警设备组合成。当燃气数值告警时&#xff0c;无需其它操作&#xff0c;直接通知软总…

程序员学CFA——数量分析方法(四)

数量分析方法&#xff08;四&#xff09; 常见概率分布基本概念离散型随机变量与连续型随机变量离散型随机变量连续型随机变量 分布函数概率密度函数&#xff08;PDF&#xff09;累积分布函数&#xff08;CDF&#xff09; 离散分布离散均匀分布伯努利分布二项分布定义股价二叉树…