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/