如何在不嗅探的情况下测量TCP/IP开销?

Ism*_*l C 7 performance networking tcp measurement

我想知道是否有一种编程方式来获取通过TCP流发送数据时使用的全部带宽的度量.因为我似乎无法知道网络堆栈如何将流分成数据包,或者当它发送TCP SYN或ACK或它在后台为你做的许多事情时,我只能对此进行粗略估计.

我能想到的唯一解决方案是实际嗅探界面,但我想认为堆栈已经可以为我收集这些统计数据了.

这是在Windows或Linux下在Java中运行的(当然,首选便携式解决方案),但我可以JNI-ize C/C++答案,以便(和OS API调用)也是一个很好的答案.谢谢!

Kit*_*son -1

TCP 是由 MTU 指定的固定数据报。如果您知道 MTU,则可以算出必须传输多少数据报,并且 TCP 遵循标准确认模型。

这是一篇很好的文章,有助于计算数据传输的开销,其中包括以太网和堆栈其他层的开销。

  • 是的......这将是“最小”可能的开销,而不是实际的开销,这取决于应用程序随着时间的推移如何使用网络。假设我需要每分钟单向传输 40 个字节。忽略连接握手和拆卸,我最终可能会得到 80 字节的数据包(20 个用于 IPv4 标头,20 个用于不带选项的 TCP 标头,40 个用于数据)。这已经是 100% 的开销,甚至没有计算返回的完全不携带应用程序数据的 ACK。 (2认同)