我打算编写一个应用程序,我需要计算网络带宽以及延迟和丢包率。其中一个限制是被动地测量带宽(使用应用程序数据本身)。
我在网上阅读,并从现有的几个应用程序理解的是,几乎所有的人都使用主动探测技术(即,生成探测数据包的流量),并使用在第一和最后一个数据包到达之间的时间差计算带宽。
这种技术的主要问题在于它使用探测数据包充斥网络,探测数据包运行时间更长且不可扩展(因为我们需要在两端运行应用程序)。
其中一个建议是通过将数据包回送给发送方来计算数据包的RTT,并使用以下公式计算带宽:
Bandwidth <= (Receive Buffer size)/RTT.
我不确定这是多么准确,因为接收器可能不会总是按时回送数据包以获得正确的RTT。单独使用ICMP可能并不总是有效,因为许多服务器都禁用它。
我的主应用程序通过TCP连接运行,因此我有兴趣使用TCP连接来测量特定时间段内提供的实际带宽。如果有人能提出一种简单的技术(可靠的公式)来测量TCP连接的带宽,我真的很感激。
答案 0 :(得分:0)
只能通过探测网络来了解可用带宽。这是因为80%的利用链路仍然会毫无延迟地发送回送数据包,即看起来占用率为0%。
如果您只想测量应用程序使用的带宽,则更容易。例如。记录您在最后一秒内传输的数据量,间隔为10毫秒。
答案 1 :(得分:0)
主动探测技术及其变体是带宽估计算法。您不想使用这些算法来测量带宽。注意'measure'和'estimate'之间的区别。
如果您想使用tcp来测量带宽,您应该知道tcp带宽会受到延迟的影响。
使用tcp测量带宽的最简单方法是发送tcp数据包并测量传输的带宽。它将淹没网络。在高速网络中,非泛洪算法都不可靠。此外,非泛洪算法假设信道从流量中清除。如果通道内有其他流量,结果将会出现偏差。如果结果没有意义,我不会感到惊讶。