iperf如何计算网络统计数据

问题描述:

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

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

我试着在网上搜索找到我上面问题的答案。但是,我只能找到如何使用iperf。看起来没有文件/网站解释iperf如何工作。有人可以提供一些见解或指向一些文件吗?

我不是iperf的开发者,但查看源代码,这是很容易找到,其中包计数被复制到UDP报文的地方,寻找packet_count这里: https://github.com/esnet/iperf/blob/master/src/iperf_udp.c

我看着在源代码中,还为iperf3花了一些tcpdumps。我对iperf3有以下理解。

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

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

损失只是为了累积当前pcount与之前收到的pcount加上的预期pcount之间的差异。

不管是iperf udp(在客户端使用选项-u)还是tcp,当iperf启动时,将建立一个控制TCP连接。此控制TCP连接用于在测试结束时交换客户端和服务器端统计信息,其中包括上面计算的CPU使用率,抖动和损耗。

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