TCP连接的最大窗口大小是多少个数据段?

6
考虑一个使用10 Mbps链路的TCP(Reno)连接。 假设此链接不缓冲数据,并且接收方的接收缓冲区比拥塞窗口大得多。 让每个TCP段的大小为1500字节,发送方和接收方之间的双向传播延迟为200毫秒。 另外,假设TCP连接始终处于拥塞避免阶段(忽略慢启动)。
这个TCP连接能够达到的最大窗口大小是多少?
因此,我们知道连接的吞吐量和延迟, 我认为我们应该能够操作以下公式,以便能够找到窗口大小。
吞吐量= 窗口大小/ RTT
吞吐量* RTT = 窗口大小
10 Mbps * 200 msec = 窗口大小
我不确定这是否正确。我很难找到其他与查找窗口大小相关的内容,除了这个公式。

我认为你走在了正确的道路上。不过有两个小细节需要注意。首先,你应该将带宽乘以单向传播延迟而不是往返时延(RTT)。这将给出带宽*延迟乘积,表示可以“飞行”多少位数据。其次,你应该将结果除以1500 * 8位,以获得分段数。因为你想要以分段为单位来表示大小。 - Asterisk
接收方套接字接收缓冲区确定了最大窗口大小,而您尚未指定。以目前的形式无法回答您的问题。 - user207421
3个回答

3
最大窗口大小可以达到2^30/MSS,其中MSS是最大段大小。2^30 = (2^16*2^14)是由Michael在他的回答中提到的。如果您的网络带宽和延迟乘积超过了TCP接收器窗口大小,则会为TCP连接启用窗口缩放选项,大多数操作系统都支持此功能。缩放支持窗口大小的14位乘法移位。您可以阅读以下内容以获得更好的解释:http://en.wikipedia.org/wiki/TCP_window_scale_optionhttp://www.ietf.org/rfc/rfc1323.txt

1

我认为你所问的是如何在传输过程中获取数据。在这种情况下,你已经接近答案了。吞吐量*RTT [单位:B/S * S] 是电线所能容纳的数据量。忽略PMTU、数据包开销、硬件编码等因素,那么吞吐量*RTT/数据包大小就可以给出一个估计值。但是请注意,我使用了RTT。我的接收窗口实际上是关于单向电线上可容纳多少数据,因此需要将其除以2。

如果你的实现不支持窗口缩放,则将其与2^16取最小值。如果支持,则将其与2^30取最小值。


1

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

(最大窗口大小 * 1个段的大小) / 往返时间 = 链路容量
(最大窗口大小 * 1500*8) / 200*10^-3 = 10 * 10^-6
您可以解决 最大窗口大小 的值。

我们除以往返时间是因为在这段时间后,将会接收到 ACK,所以发送方可以发送更多的段而无需增加窗口大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接