考虑使用 10 Mbps 链接的单个TCP(Reno)连接。 假设此链接不缓冲数据,并且接收器的接收缓冲区远大于拥塞窗口。 假设每个TCP段的大小 1500字节,并且发送器和接收器之间的连接的双向传播延迟 200毫秒。 此外,假设TCP连接始终处于拥塞避免阶段(忽略慢启动)。
此TCP连接可以实现的段中的最大窗口大小是多少?
所以我们知道连接的吞吐量和延迟, 我认为我们应该能够操作以下公式,以便我们能够找到窗口大小。
吞吐量=窗口大小/ RTT
吞吐量* RTT =窗口大小
10 Mbps * 200毫秒=窗口大小
我不确定这是否正确。我很难找到除了这个公式之外找到窗口大小的任何其他内容。
答案 0 :(得分:2)
我认为你所问的是我如何通过网络端到端获取数据。在那种情况下,你很接近。吞吐量* RTT [单位:B / S * S]是电线保持的数量。忽略PMTU,数据包开销,硬件编码等,然后吞吐量* RTT / PacketSize将为您提供估算。但是坚持下去,我使用了RTT。我的接收窗口实际上是关于在一个方向上可以在线上安装多少,所以将它分成两半。
如果您的实现不支持窗口缩放,那么使用2 ^ 16将其缩小。如果确实如此,则用2 ^ 30将其缩小。
答案 1 :(得分:2)
以段为单位的最大窗口大小最高可达2 ^ 30 / MSS,其中MSS是最大段大小。迈克尔在他的回答中提到了你,2 ^ 30 =(2 ^ 16 * 2 ^ 14)。如果您的网络带宽和延迟产品超过TCP接收器窗口大小,则为TCP连接启用窗口缩放选项,并且大多数操作系统支持此功能。缩放支持窗口大小最多14位乘法移位。您可以阅读以下内容以获得更好的解释:
答案 2 :(得分:1)
(最大窗口大小* 1段大小)/ RTT =链路容量
(最大窗口尺寸 * 1500 * 8)/ 200 * 10 ^ -3 = 10 * 10 ^ -6
你可以通过最大窗口大小来解决这个问题。
我们除以RTT,因为在此之后将收到ACK,因此发送方可以发送更多段而无需增加窗口大小。