TCP连接段中的最大窗口大小是多少?

TCP连接段中的最大窗口大小是多少?,tcp,network-protocols,Tcp,Network Protocols,考虑使用10 Mbps链路的单个TCP(Reno)连接。 假设此链路不缓冲数据,并且接收器的接收缓冲区比拥塞窗口大得多。 让每个TCP段的大小1500字节,发送方和接收方之间连接的双向传播延迟200毫秒。 另外,假设TCP连接始终处于拥塞避免阶段(忽略慢启动) 此TCP连接可以实现的最大窗口大小(以段为单位)是多少 所以我们知道连接的吞吐量和延迟, 我认为我们应该能够操纵下面的公式,以便我们能够找到窗口大小 吞吐量=窗口大小/RTT 吞吐量*RTT=窗口大小 10 Mbps*200毫秒=窗口大小

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

此TCP连接可以实现的最大窗口大小(以段为单位)是多少

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

吞吐量=窗口大小/RTT

吞吐量*RTT=窗口大小

10 Mbps*200毫秒=窗口大小


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

我想你要问的是如何在电线上获得端到端的数据。那样的话,你就接近了。吞吐量*RTT[单位:B/S*S]是导线的承载量。忽略PMTU、数据包开销、硬件编码等,然后吞吐量*RTT/PacketSize将为您提供估计值。但是等一下,我用的是RTT。我的接收窗口实际上是关于在一个方向上可以安装多少导线,所以将其分成两半


如果您的实现不支持窗口缩放,请使用2^16将其最小化。如果是,则以2^30为最小值。

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

如果最大发送速率超过链路容量,数据包将被丢弃 (最大窗口大小*1段大小)/RTT=链路容量
最大窗口大小*1500*8)/200*10^-3=10*10^-6
您可以为最大窗口大小解决此问题


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

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