滑动窗口:停等问题到流水线
如果每发一个报文就停下来等 ACK,吞吐量会低得不可用(一个 RTT 才发一个)。TCP 的解法是滑动窗口:
- 发送方维持一个窗口(比如 4 个报文),窗口内的报文可以一口气全部发出,不必等确认;
- 每收到一个 ACK,窗口左缘向右滑动一格,窗口内空出的位置允许发送新报文;
- 窗口左缘(sendBase)= 已确认的最大连续序号 + 1;窗口右缘 = sendBase + 窗口大小。
窗口大小同时受两个因素约束:接收方通告的接收窗口(rwnd) 和 发送方的拥塞窗口(cwnd) —— 取小者。本教程聚焦可靠传输机制,窗口当作固定值 4。