第47篇:滑动窗口,TCP 的效率引擎
📅 2026/7/7 16:43:00
👁️ 阅读次数
📝 编程学习
协议深入系列第 2 篇
1. 停等协议为什么不行
先看一个最直接的对比。
如果 TCP 每发一个段,必须等对应的 ACK 回来才能发下一个,这种模式叫停等(Stop-and-Wait):
发1 → 等ACK1 → 发2 → 等ACK2 → 发3 → 等ACK3 → ...这个模型正确,但效率极低。
设 RTT = 100 ms,每段承载 1 KB 有效数据,则最大吞吐量:
1 KB / 100 ms = 10 KB/s这是不可接受的。
根本原因在于:链路的双向传播延迟内,信道上只有一段数据在飞行。RTT 越长,链路利用率越低。
滑动窗口要解决的就是这个问题:允许发送方在收到 ACK 之前,连续发送多个段。
2. 窗口的定义与两个核心约束
窗口的本质是一个允许发送的字节区间。它的左边界由已确认的最大序列号决定,右边界由左边界加上窗口大小决定。
发送方能发送的数据范围 = [SND.UNA, SND.UNA + window)
其中 SND.UNA 是最早未确认的序列号。
但"能发多少"由两个独立变量共同决定:
编程学习
技术分享
实战经验