使用 C++ 检测网络的最大吞吐量
Detecting maximum throughput of my network using C++
我的应用程序旨在检测网络吞吐量。尽管代码C++,但我正在寻找一种可靠的网络限制理论,该理论返回最大接受波特率的确切值。事实上,我可以稍后编写代码。
在从互联网上检查了几个想法后,我没有找到适合我的情况。
我尝试使用 TCP/IP 尽可能多地发送数据,然后检查每次发送 10MB 时的波特率。请在这里找到我的算法的伪代码:
while (send(...)){
if (tempSendBytes > 10Mb)
if (baudrate > predefinedThreshold)
usleep(calculateNeededTime());
tempSendBytes += sentBytes;
}
但是,当达到预定义的阈值时,缓冲区已满,我的程序卡住而不返回任何错误。事实上,检查每条发送消息的波特率会将我的带宽降至最低。所以,我更喜欢检查每个10MB。
PS:我的代码中没有其他技术问题,也没有内存泄漏。此外,如果我降低预定义的阈值,我的程序将正常运行(发送和接收数据 100%)。
我的问题:有没有办法检测最大带宽(在环回和真实网络上),而不会使缓冲区溢出也不会卡住?
是的,您可以在环回和实际接口上检测最大吞吐量。实际接口可能需要远程运行的 TCP 服务器,并具有足够的带宽,以提供对最大吞吐量的准确估计。
如果您严格寻找理论,则可以在真实接口上运行测试,就像在本地主机上运行测试一样,服务器绑定到真实接口的 IP 和客户端在同一台计算机上运行。我不确定您的操作系统的网络堆栈是否会对此流量做什么,但它应该将其视为开箱即用。
许多因素都有助于 TCP 的最大理论吞吐量。TCP MTU、OS 发送缓冲区、OS 接收缓冲区等。维基百科有一个很好的高级概述,但听起来你可能已经读过了。http://en.wikipedia.org/wiki/Measuring_network_throughput 您可能还会发现此 TCP 调优概述很有帮助,http://en.wikipedia.org/wiki/TCP_tuning
IPerf 通常用于准确测量带宽,它使用的技术相当全面。它是用C++编写的,其代码库可能是一个很好的起点。https://github.com/esnet/iperf
我知道这些都没有提供对该理论的确切讨论,但希望有助于澄清一些事情。
- 我的神经网络不起作用 [XOR 问题]
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 通过网络、跨平台传递std::变体是否安全
- 如何在MNIST上提高网络运行的准确性
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- OpenCV 4.1.2 - 从网络摄像头获取帧并将其拆分
- 使用OpenCV和覆盆子上的多个网络摄像头拍摄延时摄影,出现多个V4L错误
- 神经网络不学习.卡在50%
- 如何绑定 C++ gRPC 客户端的网络接口
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- 在不知道套接字的情况下关闭网络连接
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 在没有管理员权限的情况下连接到同一网络中的命名管道
- 无法为 X.radio 创建中等可视化,因为找不到网络节点可视化 - Omnet++
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 像 POCO 这样的C++图书馆如何访问网络?
- 使用源读取器从网络摄像头源获取 H264 样本
- 吞吐量网络估计
- 使用 C++ 检测网络的最大吞吐量
- 在Windows上获得cpu使用率和网络吞吐量的最有效和最基本的方法