例如,在 Windows 操作系统中,TCP 窗口大小总是在 30000~60000 左右变化(当然最大 65535)。窗口大小的目的是通知 TCP 发送方和接收方,提高数据包传输效率。
我听说某些操作系统(例如 solaris)总是使用固定的窗口大小。那么为什么 Windows 操作系统不总是将窗口大小保持在最大 65535 或较大的值呢?是什么决定了窗口大小并总是改变它?
例如,在 Windows 操作系统中,TCP 窗口大小总是在 30000~60000 左右变化(当然最大 65535)。窗口大小的目的是通知 TCP 发送方和接收方,提高数据包传输效率。
我听说某些操作系统(例如 solaris)总是使用固定的窗口大小。那么为什么 Windows 操作系统不总是将窗口大小保持在最大 65535 或较大的值呢?是什么决定了窗口大小并总是改变它?
接收方使用窗口大小来让发送方知道该特定 TCP 连接有多少内存(缓冲区)。大小将继续下降,直到接收方向发送方发送一个 ACK 确认已收到发送方发送的流量。此时窗口大小会增加以适应已确认的流量大小。例如,如果发送了 8KB 的数据,则窗口大小将减少 8KB。如果随后 3KB 被确认,它将在那个时间点增加 3KB。
如果发送方不发送 ACK,窗口大小最终会下降到 0,发送方将停止向接收方发送新流量,直到收到 ACK(如果在合理的时间内没有收到 ACK,它将重新发送旧数据)时间量(这称为重传))。
关于最大窗口大小,可以使用窗口缩放选项来增加。此选项用于允许在发送方必须等待 ACK 之前发送更多数据。这是为了确保高延迟链接仍然可以充分利用它们的链接(有关详细信息,请参阅长胖网络和带宽延迟产品)。
此外,请参阅此链接以获取有关 TCP 窗口和缩放的更多信息。