iperf 如何计算网络统计信息

2024-01-11

iperf 是测量网络统计数据(例如丢失、吞吐量、抖动)的出色工具。我已经用过很多次了。但是,我只是想知道它是如何计算这些统计数据的。对于吞吐量来说,可以简单地测量在一定时间内接收到的字节数;对于抖动,它只能测量数据包到达时间。但是,对于UDP丢失,它如何计算。我的猜测是它专门通过嵌入序列号来构建其有效负载。因此,服务器可以预测哪些数据包丢失。有谁知道iperf数据包有效负载的内容是什么?

另一件事是,在连接结束时,iperf客户端(发送者)将收到服务器报告(其中包含统计信息)。该报告发送到哪个端口号?该报告使用 TCP 还是 UDP?我无法使用 tcpdump 捕获它。

我尝试在网上搜索以找到上述问题的答案。但是,我只能找到如何使用 iperf。似乎没有文档/网站解释 iperf 的工作原理。有人可以提供一些见解或指出一些文件吗?


我查看了源代码,还获取了一些 iperf3 的 tcpdump。我对iperf3有如下理解。

在 iperf UDP 数据包中,发送方将时间戳和序列号(iperf 源代码称为 pcount)写入有效负载中。一旦接收器收到数据包,它就会提取抖动的时间戳和数据包丢失计数的序列号。

抖动是通过比较时间戳和当前时间来计算的,首先找到延迟 D_current。然后,找到 |D_current - D_previous| (这种差异消除了发送器和接收器之间的时钟不同步)从而导致抖动。

损失只是将当前 pcount 与之前收到的 pcount 加一的预期 pcount 之间的差值累加。

无论是iperf udp(客户端带有选项-u)还是tcp,当iperf启动时,都会建立一个控制TCP连接。该控制 TCP 连接用于在测试结束时交换客户端和服务器端统计数据,其中包括上面计算的 CPU 利用率、抖动和损耗。

从iperf2日志中,我没有发现控制TCP连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iperf 如何计算网络统计信息 的相关文章

  • C++ UDP Socket端口复用

    如何在 C 中创建客户端 UDP 套接字 以便它可以侦听另一个应用程序正在侦听的端口 换句话说 如何在 C 中应用端口复用 我只想监听一个端口 您可以使用嗅探器来做到这一点 只需忽略来自不同端口的数据包即可 我可能需要阻止它发送一些特定的数
  • 对等网络应用程序的网络发现

    我希望有两个类 一个服务器类和一个客户端类 服务器类应该接收每个新客户端的 IP 地址和端口号并将它们存储在列表中 它应该为每个客户端提供已连接客户端及其 IP 地址的列表 然后 客户端可以使用 TCP 连接相互通信 问题是客户端不知道服务
  • Scapy 不需要的 RST TCP 数据包

    为了理解TCP是如何工作的 我尝试伪造自己的TCP SYN SYN ACK ACK 基于教程 http www thice nl creating ack get packets with scapy http www thice nl c
  • net.TCPConn 允许在 FIN 数据包后写入

    我正在尝试为一些服务器端代码编写单元测试 但我在确定关闭测试用例时遇到了困难 环回 TCP 连接似乎无法正确处理干净关闭 我在一个示例应用程序中重现了这一点 该应用程序按顺序执行以下操作 创建客户端和服务器连接 通过从客户端向服务器成功发送
  • Go TCP 读取是非阻塞的

    我正在尝试用 Go 创建服务器和客户端 我已经成功地与服务器和客户端进行通信 但我遇到的问题是golang中的TCP读取是非阻塞的 我想知道 golang 中的读取是否有可能像 C 中的读取一样阻塞 谢谢 EDIT 这是服务器的源代码 fu
  • 为什么通过UdpClient发送会导致后续接收失败?

    我正在尝试创建一个 UDP 服务器 它可以向所有向其发送消息的客户端发送消息 真实情况要复杂一些 但最简单的方法是将其想象为一个聊天服务器 之前发送过消息的每个人都会收到其他客户端发送的所有消息 所有这一切都是通过UdpClient 在单独
  • 构建多线程 TCP/IP 服务器

    我想构建一个可供最多 100 个并发客户端使用的 TCP IP 服务器 但仍不确定如何开始 至少我需要服务器 监听客户端 并将它们全部存储在数组或列表中 对于每个客户端 它需要根据其客户端状态接收和发送数据 当有人连接或断开连接时 服务器应
  • 使用 STUN 打孔

    我目前正在尝试通过 Internet 发送 UDP 消息 并且必须为端点 A 和 B 都位于 NAT 后面 设置防火墙 为此 我想使用 STUN 服务器进行打孔 当 A 创建对 STUN 服务器的请求 例如 私有 85 1 1 12 600
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • 使用 Boost.Asio 进行广播的问题

    如果问题之前已得到解答 我提前表示歉意 但我已经搜索并没有找到任何对我有帮助的东西 正如问题标题所示 我正在尝试将包从服务器广播到一组侦听任何消息的客户端 客户端将计算一秒钟内收到的消息数 服务器端的事情是这样的 class Server
  • AMQP如何克服直接使用TCP的困难?

    AMQP如何克服直接使用TCP发送消息时的困难 或者更具体地说 在发布 订阅场景中 在 AMQP 中 有一个代理 该代理接收消息 然后完成将消息路由到交换器和队列的困难部分 您还可以设置持久队列 即使客户端断开连接 也可以为客户端保存消息
  • recvfrom() 中的 addrlen 字段有何用途?

    我在程序中使用 recvfrom 从我在 src addr 中指定的服务器获取 DGRAM 数据 但是 我不确定为什么需要初始化并传入addrlen 我读了手册页 但不太明白它的意思 如果src addr不为NULL 并且底层协议提供了源地
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • 触发“对等方重置连接”

    我想测试当发生 对等方重置连接 错误时我们的应用程序 嵌入式 ftp 服务器 中发生的日志记录 这个帖子 https stackoverflow com questions 1434451 connection reset by peer很
  • 序列化是通过套接字发送数据的最佳选择吗?

    有人告诉我 序列化不是通过套接字发送数据的最佳方法 但他们说他们在一本书上读过一次 并且不确定更好的方法 因为他们以前没有真正做过网络 那么序列化是最好的方法还是有更好的方法 如果这有很大的不同的话 这也是一个游戏 通过搜索有关通过它发送对
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 谁在 Mac OS X 上监听给定的 TCP 端口?

    在Linux上 我可以使用netstat pntl grep PORT or fuser n tcp PORT找出哪个进程 PID 正在侦听指定的 TCP 端口 如何在 Mac OS X 上获得相同的信息 在 macOS 上Big Sur然
  • 为什么SOCKS5需要通过UDP中继UDP?

    The SOCKS5 https en wikipedia org wiki SOCKS SOCKS5协议 描述为RFC1928 https www rfc editor org rfc rfc1928提供对 UDP 的支持 总而言之 希望
  • 通过 TCP/.NET SSLStream 发送文件很慢/无法正常工作

    我正在编写一个与 SSL 配合使用的服务器 客户端应用程序 通过SSLStream 它必须做很多事情 不仅仅是文件接收 发送 目前 它的工作原理是 只有一个连接 我总是使用从客户端 服务器发送数据SSLStream WriteLine 并使

随机推荐

  • 如何发送ctrl+z

    How do I convert ctrl z to a string 我将此作为 AT 命令发送到该计算机的连接设备 Basically I just to put some chars in a string and ctrl z in
  • GridView 丢失了对非索引位置中的项目的跟踪,并且许多项目不再显示

    我正在使用 UWP 应用程序FileInformationFactory检索文件对象的虚拟化向量 该向量被转换为FileInformation并显示在GridView 我想查询插入笔记本电脑的 SD 卡上的文件夹并比较该文件夹的虚拟化情况G
  • 恢复到特定提交而不丢失历史记录

    我知道这类问题有很多重复项 但我想打开一个新问题 因为我没有在所有其他问题中找到按照我想要的方式执行此操作的最佳方法的解释 我知道我可以通过执行以下操作来恢复并保留历史记录 git reset soft c14809fa 我想恢复devel
  • Angular2:如何在一段时间后淡出显示在Click上的box-msg

    可能是一个愚蠢的问题 但我是新手angular并且仍在学习 单击按钮时显示一条成功消息 我需要在几秒钟后淡出该消息 div class alert alert success box msg strong Link Generated st
  • 标签文本更新期间 UIImageView 位置重置

    这里发生的问题真的很奇怪 在 iOS 8 中使用 XCode 我有一个简单的 UIImageView 当我单击时它会在屏幕上移动 没问题 效果很好 我只有一个简单的方法来更新特定标签 基于一个名为 StrikesLeft 的 int 这是我
  • 添加到 UIWindow 的 UIView 中的方向

    我有一个 UIView 它应该覆盖整个设备 UIWindow 以支持我正在使用核心动画执行的图像放大 缩小效果 其中用户点击 UITableViewCell 上的按钮 然后我缩放关联的图像 缩放执行完美 我无法弄清楚为什么即使设备处于横向状
  • Ionic Events 替换为 Angular Observables

    我了解 Ionic 事件将在下一个版本中被弃用 目前 我使用事件从子组件执行父页面中的函数 这是一个例子 在我的主页中 它订阅了要刷新的事件 constructor this eventFormRefresh obj gt this fet
  • windows中_chdir和SetCurrentDirectory有什么区别?

    我应该选择其中之一而不是其他有什么区别吗 它们实现相同的结果但属于不同的API 因此它们返回结果和报告错误的方式不同 如果您已经在使用任一 API 中的其他例程 请选择该 API 如果不是 SetCurrentDirectory 更 Win
  • 当游戏对象触发触发器时在 Unity 控制台中打印消息? Unity5/2D

    我正在为学校制作一个 游戏 我需要统计选票 我使用 Unity 让角色跳上按钮来计票并继续下一个问题 这是我到目前为止所拥有的 using UnityEngine using System Collections public class
  • facecolor = 'none'(空圆圈)无法使用seaborn和.map

    我有以下代码 我试图在同一个图上绘制两组数据 标记为空圆圈 我希望在下面的地图函数中包含 facecolor none 来完成此任务 但它似乎不起作用 我能得到的最接近的是在红色和蓝色黑点周围有红色圆圈 x1 np random randn
  • 在 R Shiny 中渲染时如何将表格单元格扩展到多列?

    我有一个值的数据框 我试图将其渲染为 R Shiny 中的表格 我想要扩展某些值以占用多列 就像使用 HTML rowspan 属性一样 但是 如果我要这样做 我必须从头开始创建整个表 并且我更喜欢使用 DT 库来轻松地从我的数据表进行转换
  • 访问另一个 .cpp 文件中的 .cpp 文件中定义的全局变量[重复]

    这个问题在这里已经有答案了 考虑以下场景 我的文件 cpp const int myVar 0 全局变量 另一个文件 cpp void myFun std cout lt lt myVar compiler error Undefined
  • EntityFramework 转换问题

    我正在使用 LinqKit 中的 PredicateBuilder 构建查询 它很棒并且正是我想要的 为了使我的代码更具可重用性 表和视图 我创建了一个通用谓词构建器类 public class LocalPredicateBuilder
  • 如何更改数据表列顺序

    如何在 C 中更改数据表列顺序 Example 我创建的sql表类型顺序是Qty Unit Id 但在程序中DataTable顺序是Id Qty Unit 在代码后面 我直接将DataTable传递给sql表类型 因此表顺序不同 DataT
  • Grails 域类自定义验证器

    我有限制 所以不能超过ConfigurationHolder config support reminder web person max存储的对象 我没有找到如何添加与特定属性无关的验证器 所以目前我是这样实现的 你们有什么想法如何让它变
  • Rhino Mocks:当我的参数之一是 Expression> 时,我可以使用 Stub() 吗?

    我的接口上有一个如下所示的方法 我想用 Rhino Mocks 对其进行存根 TValue GetPropertyOfExistingObject
  • Visual Studio Preview 2015 缺少“VS Emulator Android Phone”

    由于新版本的 VS 预览版退出 我下载并安装了它 I wanted to try out the new Android Emulator and created a new Cordova project I was expecting
  • Mysql - 选择与所有标签匹配的id

    我有一个交叉引用表 ID tag 1 4 1 5 1 6 2 4 2 5 2 8 3 2 我需要选择匹配的 IDall一组标签 例如 如果给我标签 4 5 我会得到身份证 1 2 如果给我标签 4 2 我不会得到任何 ID 因为没有匹配的
  • 反应本机获取 TextInput 值

    我遇到了一个非常简单的问题 我有包含用户名 密码和按钮的登录表单 在我的按钮处理程序中 我尝试获取文本输入值 但总是得到未定义的值 我错过了什么吗 render
  • iperf 如何计算网络统计信息

    iperf 是测量网络统计数据 例如丢失 吞吐量 抖动 的出色工具 我已经用过很多次了 但是 我只是想知道它是如何计算这些统计数据的 对于吞吐量来说 可以简单地测量在一定时间内接收到的字节数 对于抖动 它只能测量数据包到达时间 但是 对于U