【问题标题】:What is the maximum window size in segments of a TCP connection?TCP 连接段的最大窗口大小是多少?
【发布时间】:2011-07-09 15:45:04
【问题描述】:

考虑使用 10 Mbps 链接的单个 TCP (Reno) 连接。 假设此链路不缓冲数据并且接收方的接收缓冲区比拥塞窗口大得多。 设每个 TCP 段的大小为 1500 字节,发送方和接收方之间连接的双向传播延迟为 200 毫秒。 另外,假设 TCP 连接始终处于拥塞避免阶段(忽略慢启动)。

此 TCP 连接可以达到的最大分段窗口大小是多少?

所以我们知道了连接的吞吐量和延迟, 我认为我们应该能够操纵以下公式,以便我们能够找到窗口大小。

吞吐量 = 窗口大小 / RTT

吞吐量 * RTT = 窗口大小

10 Mbps * 200 毫秒 = 窗口大小

我不确定这是否正确。除了这个公式之外,我很难找到与查找窗口大小相关的任何其他内容。

【问题讨论】:

  • 我认为你是在正确的轨道上。不过有两个小细节。首先,您应该将带宽乘以单向传播延迟,而不是乘以 RTT。这将为您提供带宽*延迟产品,这表示可以“运行”多少位数据。其次,您应该将结果除以 1500 * 8 位以获得段数。因为您希望根据段来确定大小。
  • 最大窗口大小由接收方的套接字接收缓冲区给出,您没有指定。您的问题无法以目前的形式回答。

标签: tcp network-protocols


【解决方案1】:

以段为单位的最大窗口大小可以达到 2^30/MSS,其中 MSS 是最大段大小。正如迈克尔在他的回答中提到的那样,2^30 = (2^16*2^14) 就是通过这个来实现的。如果您的网络带宽和延迟乘积超过 TCP 接收器窗口大小,则为 TCP 连接启用窗口缩放选项,并且大多数操作系统都支持此功能。缩放支持高达 14 位的窗口大小乘法移位。您可以阅读以下内容以获得更好的解释:

http://en.wikipedia.org/wiki/TCP_window_scale_option

http://www.ietf.org/rfc/rfc1323.txt

【讨论】:

    【解决方案2】:

    我认为您要问的是我如何才能在网络上端到端地获取数据。在这种情况下,你很接近。吞吐量*RTT [单位:B/S * S] 是电线的容纳量。忽略 PMTU、数据包开销、硬件编码等,然后吞吐量*RTT/PacketSize 会给你估计。但是等一下,我用的是 RTT。我的接收窗口实际上是关于一个方向的电线可以容纳多少,所以把它分成两半。

    如果您的实现不支持窗口缩放,则将其最小化为 2^16。如果是这样,那么你用 2^30 来最小化它。

    【讨论】:

      【解决方案3】:

      如果最大发送速率超过链路容量,将丢弃一个数据包

      (最大窗口大小* 1 段的大小)/ RTT = 链接容量
      (最大窗口尺寸 * 1500*8) / 200*10^-3 = 10 * 10^-6
      您可以通过最大窗口大小来解决这个问题。

      我们除以 RTT 是因为在此时间之后将收到一个 ACK​​,因此发送方可以发送更多段而无需增加窗口大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-05
        • 1970-01-01
        相关资源
        最近更新 更多