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(使用前将#替换为@)