3

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

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

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

4

2 回答 2

3

我查看了源代码,还为 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 连接。

于 2016-05-10T01:46:44.967 回答
2

我不是iperf开发者,但是看源码,很容易找到包计数复制到udp消息的地方,在这里找packet_count: https ://github.com/esnet/iperf/ blob/master/src/iperf_udp.c

于 2016-05-06T10:36:26.273 回答