【问题标题】:Calculating network throughput计算网络吞吐量
【发布时间】:2012-11-22 13:55:17
【问题描述】:

假设我有一个 4MBits 的网络并且我想计算数据吞吐量,这是考虑最大传输速率减去以太网/IP/TCP 标头的开销。 在网上阅读我发现 TCP 段的 MSS(最大段大小)是 576 - 20 - 20,最后两个是 TCP 和 IP 标头开销,导致 93% 的数据,这意味着我将只使用我的 4MBits 链接中有 93% 用于传输数据。现在链接层开销在哪里?不应该也加吗?如果我没有错,以太网标头大约是 46 字节,所以最终的总和将是 576 - 20 - 20 - 46 = 490,导致 85% 的数据吞吐量,但我做错了吗?

【问题讨论】:

  • 这是最低 MSS。通常它会是 1460 之类的东西。
  • 还是没有回答问题,如果使用TCP,是否应该计算链路层头来计算链路的最大数据吞吐量?
  • 我并没有试图回答你的问题本身。我只回答了但我做错了什么

标签: tcp ip ethernet throughput


【解决方案1】:

只需自下而上。常规以太网帧(无巨型帧,无 vlan 标记)总共为1542 bytes,并且可以具有1500 bytes 的有效负载。没有选项的 Ipv4 标头是 20 bytes,没有选项的 TCP 标头也是 20 bytes。所以你最终得到1460 bytes1542 byte链路层帧的可能有效载荷。所以你的效率是1460/1542=0.9468223086900129,导致最大吞吐量为3.7872892347600517Mbps

但请注意,这通常会更低。这是在 TCP 会话建立之后并且您是该链路的唯一用户时,您可以在全双工链路上获得的连续流的理论最大速率。另请注意,一旦您以稍高的速率发送一段时间,您的链接就会拥塞,您会看到下降,并且由于启动缓慢,您的实际 TCP 吞吐量可能会显着下降。

如果链路是无线的 (802.11),由于 RTS/CTS 机制,计算会变得更加复杂,但它仅适用于一个活动用户,大约是 /2,并且没有包含损失,这是不现实的。

【讨论】:

  • 我们是否也应该考虑来自 tcp 的 ack 数据包消耗链路的一部分?即使它们没有有效负载,它们仍然具有标头,从而进一步降低了吞吐量,对吗?
  • 不,如果您连续流式传输并延迟 ACK(应该是默认值),则 ACK 将包含在常规数据包的标头中。
【解决方案2】:

一般来说,协议会影响网络吞吐量,而不仅仅是数据包开销。您提到您想要测量以太网/IP/TCP 网络上的吞吐量,但这些协议的数据包开销的影响并不是唯一要考虑的事情。 TCP 是一个面向连接的协议,它使用 ACK 来表示是否已接收到数据包。 user1777914 错过了关于 ACK 的标记,但正在做一些事情——它们不再占用任何空间,但它们可以延迟数据包的传输。随着延迟的增加,整体网络吞吐量可能会根据应用程序或托管操作系统期望响应的频率而降低。

W。 Richard Stevens 写了一本关于 TCP/IP 的令人惊奇的书。 Here 是一个例外,它解释了理论 TCP 性能、影响它的因素以及它是如何计算的。

Nagle 算法也有助于降低延迟,但如果禁用会降低吞吐量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2015-10-25
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多