是什么让 TCP 窗口大小不断变化(例如 Windows)?

网络工程 tcp
2022-02-13 21:17:50

例如,在 Windows 操作系统中,TCP 窗口大小总是在 30000~60000 左右变化(当然最大 65535)。窗口大小的目的是通知 TCP 发送方和接收方,提高数据包传输效率。

我听说某些操作系统(例如 solaris)总是使用固定的窗口大小。那么为什么 Windows 操作系统不总是将窗口大小保持在最大 65535 或较大的值呢?是什么决定了窗口大小并总是改变它?

1个回答

接收方使用窗口大小来让发送方知道该特定 TCP 连接有多少内存(缓冲区)。大小将继续下降,直到接收方向发送方发送一个 ACK​​ 确认已收到发送方发送的流量。此时窗口大小会增加以适应已确认的流量大小。例如,如果发送了 8KB 的数据,则窗口大小将减少 8KB。如果随后 3KB 被确认,它将在那个时间点增加 3KB。

如果发送方不发送 ACK,窗口大小最终会下降到 0,发送方将停止向接收方发送新流量,直到收到 ACK(如果在合理的时间内没有收到 ACK,它将重新发送旧数据)时间量(这称为重传))。

关于最大窗口大小,可以使用窗口缩放选项来增加。此选项用于允许在发送方必须等待 ACK 之前发送更多数据。这是为了确保高延迟链接仍然可以充分利用它们的链接(有关详细信息,请参阅长胖网络和带宽延迟产品)。

此外,请参阅此链接以获取有关 TCP 窗口和缩放的更多信息。