iPerf3 -M参数详解,场景分析
本文目录
- iPerf3 -M参数说明
- 几个典型测试场景中应该如何设定合适的-M参数值
- 理想局域网模型(无丢包,无抖动)
- 高丢包,无抖动模型
- 高丢包,高抖动模型(网络质量比较差,IP转发路径变化频繁)
- 总结
从文章iperf参数(iperf3命令)详解中我们已经知道-M是用于设置TCP的MSS最大分片长度。本文假设读者应该已经理解什么是IP分片,为什么会产生IP分片,为什么要避免IP分片以及如何避免IP分片IP分片和TCP分段解析–之IP分片。那么设置适当的-M参数,有助于我们在使用iperf测试过程中得到最好的吞吐量测试结果,如果-M设置不当,就有可能引发IP分片,从而进一步引发大量重传,导致拥塞而导致吞吐量测试结果不理想。
iPerf3 -M参数说明
对-M参数的原始解释为:Attempt to set the TCP maximum segment size (MSS). The MSS is usually the MTU - 40 bytes for the TCP/IP header. For ethernet, the MSS is 1460 bytes (1500 byte MTU)。我们从参数解释中可以得知,如果设置了-M参数,那么iPerf3会尝试去设置TCP的MSS最大分片长度。MSS通常是MTU减去40字节的TCP/IP首部。对以达网来说MSS是1460(MTU是1500字节)。
通过IP分片和TCP分段解析–之IP分片这篇文章,我们已经知道了,IP分片产生的原因,了解IP分片带来的坏处,以及该如何设置合适的MSS来避免IP分片。
那么我们,只要根据测试链路中的路径MTP(PMTU),通过-M,让MSS<=PMTU-40,那么在整个网络中就不会发生分片,从而避免了IP分片给给测试结果带来的坏影响。
几个典型测试场景中应该如何设定合适的-M参数值
我们先来理解一下,通常我们用以下四个指标去衡量一个网络的质量(假设网络的转发路径是固定不变的):
- 带宽
- 延时
- 丢包率
- 抖动
这四个指标中,带宽和延时与IP分片,TCP分段没有什么相关性,所以与-M参数的选择无关。我们只需要从丢包率与抖动二个指标去考虑-M参数应该如何设置就可以了。
理想局域网模型(无丢包,无抖动)
-M参数修改的是在无丢包,无抖动的理想模型中,IP报文是不会丢失的,IP分片不会带来网络传输效率的降低,那么是不需要设置-M参数的。
高丢包,无抖动模型
这种网络模型或者说高丢包,低抖动的网络在现实网络中是很罕见的,但可以在测试环境中我们有时会构建这样的测试模型(比如5G基站的空口丢包测试场景)。在这样的模型中,意味着IP报文会丢失,但IP报文会按发送顺序到达接收端,不会或者极少产生乱序。在这种模型中,IP某个分片的丢失,会引发属于同一个TCP报文的多个IP分片全部需要重传。我们假设TCP每次发送的报文的大小都是一样大的,每次都会在IP层刚好被分成n个IP分片。如果我们用-M把要发送的报文大小限制成<=原来的1/n,那么就可以完全避免IP分片的产生。
- 在要发送的TCP报文的长度大于MTU的情况下
考虑以下二个情况
在分片的场景下:
需要重传n个IP分片。
在不分片的场景下:
需要重传1个IP分片
这里重传所占用的网络带宽减少到原来的1/n,那么网络利用率就得到的有效的提升。此时我们需要设置-M参数,并使得MSS<=PMTU-40,来避免分片的发生。
- 在要发送的TCP报文的长度小于等于MTU的情况下
本来就不会发生分片,那么不需要设置-M参数。
高丢包,高抖动模型(网络质量比较差,IP转发路径变化频繁)
这种网络模型是比较常见的,比较烂的经过多个路由路的广域网就属于这种网络。高丢包率如何影响-M的设置,我们已经在上一章中介绍了,这里主要考虑高抖动,意味着先发的IP报文可能会后到达接收端,在这种情况下其实也分二个情况:
第一个是抖动没有那么厉害,属于同一个TCP的后发的IP分片先到达,等待时间(接收方要等待属于同一个TCP的所有IP分片到达后才能完成TCP报文的重组)还没有超出TCP的超时重发定时器,没有引发TCP层重传时,延时到达的IP分片不产生坏的影响,那么不需要设置-M参数。
另外一个是抖动很厉害,属于同一个TCP的后发的IP分片先到达,等待时间(接收方要等待属于同一个TCP的所有IP分片到达后才能完成TCP报文的重组)已经超出TCP的超时重发定时器,引发TCP层重传时,那么这个情况就等同于引发了所有IP分片的重传,我们需要设置-M参数,并使得MSS<=PMTU-40,来避免分片的发生。
总结
网络抖动比较严重,或者丢包会导致TCP重传发生的网络条件下,且发送的TCP测试报文长度大于MTU时,需要通过设置-M参数来避免IP分片发生。
相关文章:
iPerf3 -M参数详解,场景分析
本文目录iPerf3 -M参数说明几个典型测试场景中应该如何设定合适的-M参数值理想局域网模型(无丢包,无抖动)高丢包,无抖动模型高丢包,高抖动模型(网络质量比较差,IP转发路径变化频繁)总…...
java的基本语法以及注意事项
Java 基础语法一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它…...
matlab搭建IAE,ISE,ITAE性能指标
目录前言准备IAEISEITAE前言 最近在使用matlab搭建控制系统性能评价指标模型,记录一下 准备 MATLAB R2020 IAE IAE函数表达式如下所示: IAE函数模型如下所示: ISE ISE函数表达式如下所示: ISE函数模型如下所示ÿ…...
docker安装mysql
在安装Mysql之前,我们可以先查看一下我们的镜像,输入命令: docker images 能发现,镜像里面只有一个Nginx,并没有Mysql 然后我们可以像上一篇安装Nginx一样,安装Mysql镜像。 输入以下命令,安装…...
Leetcode 回溯详解
回溯法 回溯法有“通用解题法”之称,用它可以系统地搜索问题的所有解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。 在包含问题的所有解的解空间树中,按照深度优先搜索(DFS))的策略,从根结点出发深度探索解空间树。当探索…...
AI_Papers:第一期
2023.02.06—2023.02.12 文摘词云 Top Papers Subjects: cs.CL 1.Multimodal Chain-of-Thought Reasoning in Language Models 标题:语言模型中的多模式思维链推理 作者:Zhuosheng Zhang, Aston Zhang, Mu Li, Hai Zhao, George Karypis, Alex Sm…...
C/C++内存管理
C/C内存管理C/C内存分布C语言中内存管理的方式:malloc/calloc/realloc/freeC内存管理方式内置类型自定义类型operator new 与operator deletenew和delete的实现原理内置类型自定义类型定位new表达式(placement-new)new/delete与malloc/free的区别C/C内存分布 我们先…...
【大数据hive】hive 函数使用详解
一、前言 在任何一种编程语言中,函数可以说是必不可少的,像mysql、oracle中,提供了很多内置函数,或者通过自定义函数的方式进行定制化使用,而hive作为一门数据分析软件,随着版本的不断更新迭代,…...
彻底搞懂分布式系统服务注册与发现原理
目录 引入服务注册与发现组件的原因 单体架构 应用与数据分离...
安卓Camera2用ImageReader获取NV21源码分析
以前如何得到Camera预览流回调 可以通过如下方法,得到一路预览回调流 Camera#setPreviewCallbackWithBuffer(Camera.PreviewCallback),可以通过如下方法,设置回调数据的格式,比如 ImageFormat.NV21 Camera.Parameters#setPreview…...
24. 两两交换链表中的节点
文章目录题目描述迭代法递归法参考文献题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入&a…...
linux006之帮助命令
linux帮助命令简介: linux的命令是非常多的,光靠人是记不住的,在工作中一般都会去网上查,这是有外网的情况下,如果项目中不允许访问外网,那么linux的帮助命令就可以派上用场了, linux帮助命令是…...
【C++初阶】十三、模板进阶(总)|非类型模板参数|模板的特化|模板分离编译|模板总结(优缺点)
目录 一、非类型模板参数 二、模板的特化 2.1 模板特化概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 三、模板分离编译 四、模板总结(优缺点) 前言:之前模板初阶并没有把 C模板讲完,因为当时没有接触…...
Linux之文本搜索命令
文本搜索命令学习目标能够知道文本搜索使用的命令1. grep命令的使用命令说明grep文本搜索grep命令效果图:2. grep命令选项的使用命令选项说明-i忽略大小写-n显示匹配行号-v显示不包含匹配文本的所有行-i命令选项效果图:-n命令选项效果图:-v命令选项效果图:3. grep命令结合正则表…...
微信小程序Springboot 校园拼车自助服务系统java
系统管理员: 管理员账户管理:在线对管理员的账户信息进行管理,包括对管理员信息的增加修改以及密码的修改等。 站内新闻管理:在后台对站内新闻信息进行发布,并能够对站内新闻信息进行删除修改等。 论坛版块管理&#x…...
【Unity3D 常用插件】Haste插件
一,Haste介绍 Haste插件是一款针对 Unity 3D 的 Everthing软件,可以实现基于名称快速定位对象的功能。Unity 3D 编辑器也自带了搜索功能,但是在 project视图 和 Hierarchy视图 中的对象需要分别查找,不支持模糊匹配。Haste插件就…...
【c++面试问答】全局变量和局部变量的区别
问题 C中的全局变量和局部变量有什么区别? 注:内容全部参考自文末的参考资料 全局变量和局部变量的区别 可以从以下4个角度来区分: 区别全局变量局部变量作用域全局作用域局部作用域内存分配全局变量在静态数据区静态局部变量在静态数据区…...
Java List集合
6 List集合 List系列集合:添加的元素是有序,可重复,有索引 ArrayList: 添加的元素是有序,可重复,有索引LinkedList: 添加的元素是有序,可重复,有索引Vector :是线程安全的ÿ…...
linux服务器挂载硬盘/磁盘
1. 查看机器所挂硬盘个数及分区情况:fdisk -l可以看出来目前/dev/vda 目前有300G可用.内部有两个分区(/dev/vda1,/dev/vda2)。2. 格式化磁盘格式化磁盘命令为【mkfs.磁盘类型格式 目录路径组成】查看磁盘文件格式:df -T格式化磁盘…...
Java 抽象类
文章目录1、抽象方法和抽象类2、抽象类的作用当编写一个类时,常常会为该类定义一些方法,用于描述该类的行为方式,这些方法都有具体的方法体。但在某些情况下,某个基类只是知道其子类应该包含那些方法,但不知道子类是如…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
