gpt4 book ai didi

c++ - 使用 C++ 检测我的网络的最大吞吐量

转载 作者:行者123 更新时间:2023-11-30 03:58:03 25 4
gpt4 key购买 nike

我的应用程序旨在检测网络吞吐量。尽管有 C++ 代码,但我正在寻找一种可靠的理论来限制我的网络,该理论返回最大可接受波特率的精确值。确实,我可以稍后再编写代码。

从网上查了几个想法后,我没有找到适合我的情况。

我尝试使用 TCP/IP 发送尽可能多的数据,然后在每次发送 10MB 时检查波特率。请在这里找到我的算法的伪代码:

while (send(...)){
if (tempSendBytes > 10Mb)
if (baudrate > predefinedThreshold)
usleep(calculateNeededTime());
tempSendBytes += sentBytes;
}

但是,当达到预定义的阈值时,缓冲区已满,我的程序卡住了,没有返回任何错误。事实上,检查每条已发送消息的波特率会将我的带宽降至最低。因此,我更愿意检查每 10MB。

PS:我的代码中没有其他技术问题,也没有内存泄漏。此外,如果我降低 predefinedThreshold,我的程序运行正常(发送和接收数据 100%)。

我的问题:有没有一种方法可以检测最大带宽(在环回和真实网络上)而不会出现缓冲区溢出,也不会卡住?

最佳答案

是的,您可以在环回和真实接口(interface)上检测到最大吞吐量。真实的接口(interface)可能需要一个远程运行的 TCP 服务器,它有足够的带宽来提供最大吞吐量的准确估计。

如果您严格地寻找理论,您可以像在本地主机上运行测试一样在真实接口(interface)上运行测试,服务器绑定(bind)到真实接口(interface)的 IP,客户端在同一台计算机上运行。我不确定您的操作系统的网络堆栈将如何处理此流量,但它应该像开箱即用一样对待它。

很多因素都会影响 TCP 的最大理论吞吐量。 TCP MTU、操作系统发送缓冲区、操作系统接收缓冲区等。维基百科有一个很好的高级概述,但听起来您可能已经阅读过它。 http://en.wikipedia.org/wiki/Measuring_network_throughput您可能还会发现此 TCP 调整概述很有帮助,http://en.wikipedia.org/wiki/TCP_tuning

IPerf 通常用于精确测量带宽,它使用的技术相当全面。它是用 C++ 编写的,它的代码库对您来说可能是一个很好的起点。 https://github.com/esnet/iperf

我知道这些都没有提供对理论的确切讨论,但希望有助于澄清一些事情。

关于c++ - 使用 C++ 检测我的网络的最大吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27651605/

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