gpt4 book ai didi

c++ - Iperf 2.x 客户端如何检测它发送的流量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:14 24 4
gpt4 key购买 nike

如果执行例如 iperf -c 178.62.60.141 -fm -b 100m -u -t 30 -i 10,那么在每 10 秒间隔之后,Iperf 客户端打印出数据量它以兆字节为单位传输:

root@vserver:~# iperf -c 178.62.60.141 -fm -b 100m -u -t 30 -i 10
WARNING: option -b implies udp testing
------------------------------------------------------------
Client connecting to 178.62.60.141, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 0.22 MByte (default)
------------------------------------------------------------
[ 3] local 146.185.187.148 port 37660 connected with 178.62.60.141 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 119 MBytes 100 Mbits/sec
[ 3] 10.0-20.0 sec 119 MBytes 100 Mbits/sec
[ 3] 20.0-30.0 sec 119 MBytes 100 Mbits/sec
[ 3] 0.0-30.0 sec 358 MBytes 100 Mbits/sec
[ 3] Sent 255661 datagrams

TCP 也是如此。事实上,传输的数据和带宽在每个间隔结束后打印出来,传输的数据有时比“-b”标志指定的带宽多一点或少一点,应该意味着 Iperf 客户端实际上以某种方式计算发送的数据,而不仅仅是打印“-b”(带宽)标志的参数。还是怎么样Iperf 客户端统计它发送的数据量?它肯定不会在低级别上执行此操作,因为如果我使用 tc 引入 10% 的数据包丢失,请执行 iperf -c 178.62.60.141 -fm -b 100m -u -t 30 -i 10 然后比较 Iperf 客户端认为它发送的数据包(来自 Iperf 客户端输出)与实际发送到线路的数据包数量(来自 ip -s link show dev eth0 输出),然后 Iperf 客户端认为它发送了 >250k 的数据报,而实际上它只发送了 230k 多一点。如果我使用 tc token 桶过滤器排队规则来监管流量,则完全相同,即根据 Iperf 客户端,它以 100Mbps 的速度发送流量,而实际流量速率由监管器监管。

如果我尝试分析 Iperf 的源代码(http://ftp.de.debian.org/debian/pool/main/i/iperf/iperf_2.0.5.orig.tar.gz),那么据我了解,客户端连接是使用常规 connect() 系统调用在 src 目录中的 Client.cpp 文件中编码的吗?我猜报告是在 Reporter.c 文件中编码的,但它对我来说太复杂了,无法理解。有人可以解释一下(带有代码示例)Iperf 2.x 客户端如何检测它发送的流量吗?

最佳答案

在查看源代码之前,这看起来相当简单。客户应该知道它发送了多少东西。毕竟是送的。因此,它必须查看系统时钟,获取发送给定数据量所需的时间,并计算出速率。

而且,现在查看了 Reporter.c——正如预期的那样,那里散布着各种 gettimeofday() 系统调用,它们获取系统时钟的值。

这个实用程序发送的流量不可能是个大谜。毕竟是自己送的,应该知道有多少吧。

关于c++ - Iperf 2.x 客户端如何检测它发送的流量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com