07-流量控制 网络设计第七问流量控制——滑动窗口的本质发送方比接收方快——接收方的缓冲区满了——新的包被丢弃——发送方还在继续发——现在全网都被重传包塞满了。这就是没有流量控制的后果。滑动窗口是你能接多少我先知道我只发那个量。文章目录网络设计第七问流量控制——滑动窗口的本质一、问题为什么需要流量控制二、滑动窗口的原理三、滑动窗口不只是流量控制四、TCP 的窗口缩放五、总结一、问题为什么需要流量控制接收方的网卡有接收队列——几百个包——如果 CPU 来不及处理——满了——之后的包被丢弃。发送方并不知道——它在自己这一端——继续发——全丢弃——然后 ACK 不到——重传——再丢弃——无限循环——带宽全被无用的重传占据。流量控制做的是——接收方告诉发送方——我的缓冲区还能装多少——你只发那个量——等我处理完一部分再收下一批。二、滑动窗口的原理接收方在 ACK 包中带一个窗口值——“我现在还能收 N 字节”。发送方记录这个值——在一个窗口中不发送超过这个值的未确认数据。窗口的大小不是固定的——它是动态的——接收方处理完数据→窗口开大——缓冲区快满了→窗口缩小。示意图发送方窗口: [已发送已确认][已发送未确认][可发送][不能发] ←发送窗口大小→ 接收方窗口: [已收到已确认][已收到未确认][可接收] ←接收窗口大小→三、滑动窗口不只是流量控制流量控制的窗口只反映接收方现在能接收多少。和拥塞控制不同——拥塞控制是网络中间链路现在能承受多少。流量控制由接收方告诉——带有窗口字段。拥塞控制由发送方自己计算——根据丢包和 RTT 估算——不通过包中字段——是自适应的。两者的交互——发送窗口 min(接收窗口, 拥塞窗口)。哪个更小就以哪个为准。四、TCP 的窗口缩放早期 TCP——窗口字段 16 位——最大 65535 字节64KB。在局域网够用——但在广域网 RTT × 带宽很大时——64KB 的窗口限制了吞吐。TCP 窗口缩放选项——把这个字段乘上一个因子——例如 256——则窗口可达 16MB——能填满 100Mbps 的延迟链路。这个选项在 TCP 握手时协商——不是硬编码——是两个端点自己商定的。五、总结流量控制 接收方说我现在只能接这么多。拥塞控制 发送方自己估计网络链路现在只能承受这么多。两者的交集决定实际发送窗口。你的社保系统在跨省专线上——RTT15ms——带宽 100Mbps——BDP带宽×延迟≈ 187KB。如果再设一个小的拥塞控制初始窗口——你的最大吞吐就会从 100Mbps 掉到几 M。不是网络慢——是窗口设置没配好。✅ 亮点流量控制和拥塞控制是两个独立变量——一个来自接收方一个由发送方自身计算实际发送窗口取两者的最小值。用社保跨省专线的 BDP 值示例说明配置错误导致吞吐严重退化。扩展方向QUIC 的流控模型——不用一个窗口管全连接、BBR 拥塞控制的非丢包信号。