假设我有一个 4MBits 网络并且我想计算数据吞吐量,这是考虑最大传输速率减去来自以太网/IP/TCP 标头的开销。在网上阅读我发现 TCP 段的 MSS(最大段大小)是 576 - 20 - 20,最后两个是 TCP 和 IP 标头开销,导致 93% 的数据,这意味着我将只使用我的 4MBits 链接中有 93% 用于传输数据。现在链接层开销在哪里?不应该也加吗?如果我没有错,以太网标头大约是 46 字节,所以最终总和将是 576 - 20 - 20 - 46 = 490,导致 85% 的数据吞吐量,但我做错了吗?
2 回答
只需自下而上地工作。常规以太网帧(无巨型帧,无 vlan 标记)1542 bytes
总共有1500 bytes
. 一个没有选项的 IPv4 标头是20 bytes
,一个没有选项的 TCP 标头也是20 bytes
。因此,您最终得到了链路层帧1460 bytes
的可能有效载荷。1542 byte
所以你的效率是1460/1542=0.9468223086900129
,导致最大吞吐量为3.7872892347600517Mbps
.
但是请注意,这通常会更低。这是在 TCP 会话建立之后并且您是该链路的唯一用户时,您可以在全双工链路上获得的连续流的理论最大速率。另请注意,一旦您以稍高的速率发送一段时间,您的链接就会拥塞,您会看到下降,并且由于启动缓慢,您的实际 TCP 吞吐量可能会显着下降。
如果链路是无线的 (802.11),由于 RTS/CTS 机制,计算会变得复杂得多,但它/2
仅适用于一个活动用户,并且没有包含损失,这是不现实的。
一般来说,协议会影响网络吞吐量,而不仅仅是数据包开销。您提到您想测量以太网/IP/TCP 网络上的吞吐量,但这些协议的数据包开销的影响并不是唯一要考虑的事情。TCP 是一个面向连接的协议,它使用 ACK 来表示是否已接收到数据包。user1777914 错过了关于 ACK 的标记,但正在做一些事情——它们不再占用任何空间,但它们可以延迟数据包的传输。随着延迟的增加,整体网络吞吐量可能会根据应用程序或托管操作系统期望响应的频率而降低。
W. Richard Stevens 写了一本关于 TCP/IP 的令人惊奇的书。 这是一个解释理论 TCP 性能、影响它的因素以及它是如何计算的例外。
Nagle 算法也有助于延迟,但如果禁用会降低吞吐量。