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

时间:2014-12-25 23:43:09

标签: c++ buffer bandwidth

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

在从互联网上查看了几个想法之后,我找不到适合我的情况。

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

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

但是,当实现了predefinedThreshold时,缓冲区已满,我的程序卡住而不返回任何错误。事实上,检查每条已发送消息的波特率会将带宽降至最低。所以,我更愿意检查每个10MB。

PS:我的代码中没有其他技术问题也没有内存泄漏。此外,如果我减少预定义阈值,我的程序将正常运行(发送和接收数据100%)。

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

1 个答案:

答案 0 :(得分:2)

是的,您可以检测环回和真实接口上的最大吞吐量。真实接口可能需要远程运行的TCP服务器,其带宽足以提供最大吞吐量的准确估计。

如果您正在严格寻找理论,您可以在真实接口上运行测试,就像在localhost上运行测试一样,服务器绑定到真实接口的IP并且客户端运行在同一台电脑。我不确定你的操作系统的网络堆栈会对这种流量做些什么,但它应该像对待它一样对待它。

许多因素都会影响TCP的最大理论吞吐量。 TCP MTU,OS发送缓冲区,OS接收缓冲区等.Wikipedia具有良好的高级概述,但听起来您可能已经阅读过它。 http://en.wikipedia.org/wiki/Measuring_network_throughput您可能还会发现此TCP调优概述很有用,http://en.wikipedia.org/wiki/TCP_tuning

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

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