tcp - iperf 如何计算网络统计信息

标签 tcp udp iperf

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

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

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

最佳答案

我看了源码,也拿了一些iperf3的tcpdumps。我对iperf3有如下理解。

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

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

loss只是累加当前pcount与之前收到的期望pcount加一的pcount之差。

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

从 iperf2 日志中,我没有找到控制 TCP 连接。

关于tcp - iperf 如何计算网络统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37063074/

相关文章:

linux - iperf - 带宽的含义是什么?

c++ - 我如何知道 Windows 7 中是否启用了原始套接字?

java - Java UDP Server 增加内存

javascript - 浏览器作为 UDP (dgram) 客户端

linux - iperf3:无法识别的选项'--sctp'

python - 用于 haproxy 的 Iperf udp 流量

networking - 大多数防火墙默认配置是否允许与 HTTPS 一样的安全 TCP?

postgresql - 在docker环境下为tcp md5配置Postgres

c - 在 TCP header 中操作 ISN 号的最有效方法

networking - 使用 nc (netcat) 广播消息