SYN 段中计算的窗口大小值与 ACK 段中的计算值不同

网络工程 tcp 线鲨
2022-02-07 22:02:18

我对某些 TCP 段中的窗口大小值有点困惑。我想我了解窗口大小字段背后的理论,以及在连接建立期间提供窗口比例选项时如何修改它。但我正在检查以下 TCP 流

在此处输入图像描述

并意识到有些事情我不清楚。我将向您展示:

[SYN] Win=65535 WS=32

即实际窗口大小为 65535*32 = 2097120。但是,设备收到 SYN+ACK 段后,响应

[ACK] Win=131744

这实际上是计算值,通过将窗口大小字段 (4117) 的值乘以在 SYN 段内宣布的 WScale(即 2^5 = 32)获得。

而对方公布的窗口大小字段也有类似的情况:

[SYN,ACK] 赢=28960,WS=128

这导致计算出的窗口大小为 3706880。但是,流程的第 5 段宣布计算出的窗口大小仅为 30080。


由于在 SYN 段中宣布的窗口值比在后续段中的值大得多,我想相信 SYN 段以某种方式宣布了总缓冲区大小(即它可以宣布的最大窗口),而 ACK 段正在宣布它现在愿意接受多少。因此,从某种意义上说,该设备是在告诉它的对手,在未来的某个时候它可能会增加广告窗口。

谁能告诉我这个推理我是否正确?

提前致谢!

1个回答

您的推理或多或少是正确的。每边的窗口比例值只能在 TCP 会话开始时的 SYN 数据包中设置一次,因此设置了该接收方可以通告的窗口大小 (66536 x WS) 的上限。出于这个原因,为了最大化 TCP 会话期间的吞吐量,设置其缓冲区可以处理的最大可能 WS 值符合接收者的最大利益(如果吞吐量是会话的所需特性)。

但是,还有多种其他算法和因素会影响实际宣传的窗口大小值,尤其是在会话开始时。这些包括 TCP 慢启动、TCP 拥塞控制(例如加法增加乘法减少)、Nagle 算法等。由于 TCP 窗口化是平衡吞吐量、控制拥塞和端点资源利用率的主要方法之一,因此很多内容可以用于实际广告TCP 窗口大小。