news 2026/4/23 17:12:07

拒绝“停下来傻等”:大白话讲透滑动窗口协议 (Sliding Window)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
拒绝“停下来傻等”:大白话讲透滑动窗口协议 (Sliding Window)

拒绝“停下来傻等”:大白话讲透滑动窗口协议 (Sliding Window)

兄弟们,咱们学计算机网络的,最痛苦的莫过于背那些协议细节。特别是到了传输层,什么 TCP、UDP、三次握手、四次挥手,头都大了。

但在这堆协议里,有一个设计简直是**“天才般的发明”**,它凭借一己之力,把网络传输效率拉升了 N 个档次。

没错,就是滑动窗口协议(Sliding Window Protocol)

如果没有它,你的网速可能至今还停留在 56K 猫的时代,下载一部电影得等到下个世纪。今天咱们就用最通俗的话,把这个面试必考、工作必用的概念给盘明白。


1. 为什么我们需要“窗口”?(从傻瓜式传输说起)

在滑动窗口出现之前,最原始的传输方式叫**“停止-等待”协议(Stop-and-Wait)**。

它的逻辑是这样的:

你(发送方):给,这是第 1 包数据。
(停下来,盯着屏幕,等待…)
对方(接收方):收到第 1 包了,ACK!
:好,给,这是第 2 包数据。
(继续停下来等待…)

这像不像你那个强迫症晚期的同事?发一条微信,必须等你回了“收到”,他才肯发下一条。

缺点显而易见:
大部分时间都在。网络这根“管子”是空的,带宽被极度浪费。如果这是跨洋传输,一来一回(RTT)几百毫秒,这速度能慢到让你怀疑人生。

于是,工程师们想:我能不能不管你会没回,先一口气多发几条?

这就有了流水线(Pipelining),而控制这个流水线怎么流的机制,就是滑动窗口


2. 什么是滑动窗口?(核心机制)

想象一下,你有一长串带有编号的数据包要发:1, 2, 3, 4, 5, 6, 7, 8 ...

滑动窗口就是一个框,框住了一部分数据。

  • 窗口大小(Window Size):假设是 3。
  • 规则:只要是在框里的数据,你都有资格直接发出去,不用等对方回复

此时的状态:

窗口框住了[1, 2, 3]

  1. 你一口气把1, 2, 3全发了。
  2. 当你收到1的确认(ACK)后,说明1搞定了。
  3. 窗口向右滑一格!现在的框变成了[2, 3, 4]
  4. 哎?4进入了窗口,你立马把4发出去。

你看,这个过程是连续的、流动的。只要对方确认得快,你的窗口就滑得快,数据就像流水一样源源不断地发出去,根本不用停下来傻等。


3. 两种流派:GBN vs SR (面试必问)

虽然原理简单,但具体怎么实施,江湖上分成了两大门派。主要分歧在于:如果中间丢包了,怎么办?

比如你发了1, 2, 3, 4, 5,结果2号包在半路丢了,但3, 4, 5顺利到达了。

门派一:回退 N 步 (Go-Back-N, GBN) —— “连坐制”

GBN 的逻辑非常霸道,也叫累积确认

  • 接收方:我很死板。我收到了1,我想要2。你发来了3, 4, 5我不要!统统丢掉!我只要2
  • 发送方:我看迟迟收不到2的确认,超时了。行吧,既然2丢了,那从2开始,后面的3, 4, 5虽然我发过,但我也当它们废了。全部重发!

特点:

  • 接收方很简单,不需要缓存乱序的包。
  • 发送方心态容易崩:一旦丢一个包,后面发的一堆都白费了,网络利用率在丢包率高时会骤降。

门派二:选择性重传 (Selective Repeat, SR) —— “精准扶贫”

SR 的逻辑就理智多了。

  • 接收方:我收到了1。哎呀2丢了?没事,3, 4, 5我先缓存收着,那是好东西。我给你发个 ACK 告诉你要重传2
  • 发送方:收到通知,发现只有2没到。好,我**只重发2**。一旦2到了,接收方把缓存里的3, 4, 5拼起来,一起提交上去。

特点:

  • 效率极高,不浪费带宽。
  • 代码复杂,接收方和发送方都需要维护更复杂的逻辑和缓存。

4. 这里的“坑”:TCP 的滑动窗口

上面说的是理论模型,现实中的 TCP 协议比这更鸡贼。TCP 的滑动窗口主要干两件事:

1. 流量控制(Flow Control)

接收方教你做人。
接收方有个缓冲区(Buffer),如果应用层处理得慢,Buffer 满了怎么办?
接收方会在回复的 ACK 包里带上一个字段叫Window Size(通知窗口)。

  • “兄弟,我这也剩 100 字节空间了,你悠着点。” -> 发送方把窗口缩小。
  • “兄弟,我满了(Win=0)!” -> 发送方暂停发送,进入“零窗口探测”状态,时不时戳一下看看有地儿了没。

这就是为什么你下载东西有时候忽快忽慢,可能是你的电脑处理不过来了,叫对面慢点发。

2. 拥塞控制(Congestion Control)

网络教你做人。
如果网络堵车了(丢包了),发送方不仅受接收方控制,还得看网络的脸色。
TCP 维护了一个拥塞窗口(cwnd)

  • 刚开始,试探性地发一点(慢启动)。
  • 一切正常?指数级扩大窗口,发发发!
  • 丢包了?完蛋,堵车了。立马把窗口减半,或者直接降到 1,重新慢启动。

所以,发送方真正的发送窗口 =min(接收方通告窗口, 拥塞窗口)
既要照顾对方的消化能力,又要照顾网络的道路状况。


总结

滑动窗口协议的核心哲学就是:充分利用时间

它把“发数据”和“等确认”这两个动作并行化了。

  • Stop-and-Wait是走一步停一步的老大爷。
  • Go-Back-N是一个严格的教官,一个人掉队,全队重跑。
  • Selective Repeat是一个精明的物流经理,只补发丢的那件货。
  • TCP则是集大成者,它不仅用滑动窗口,还根据路况(拥塞)和仓库容量(流量控制)动态调整窗口大小。

下次面试官再问你“滑动窗口”,你就告诉他:这本质上就是一种用空间(缓存)换时间(带宽)的贪心策略。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:27:58

LLC谐振DC/DC变换器的MATLAB与PSIM仿真设计

MATLAB、PSIM半桥LLC谐振DC/DC变换器的设计与仿真,内含开环仿真、电压闭环仿真两个仿真文件,并含有电路参数仿真计算过程。最近在研究半桥LLC谐振变换器,这个拓扑结构以其高效的能量转换和较低的开关应力特性,成为高功率密度电源系…

作者头像 李华
网站建设 2026/4/23 11:29:50

基于FPGA的IIR滤波器设计与实现

基于FPGA的IIR滤波器数字滤波器无限脉冲响应verilog vhdl自适应滤波器实物FIR抽取内插上下变频CIC滤波器 如果需要上述滤波器或者其他滤波器都可以右下角加好友加好友定制。 本设计是基于FPGA的IIR滤波器,VERILOG HDL和VHDL的程序都有,下面图示的滤波器设…

作者头像 李华
网站建设 2026/4/23 11:34:54

埃斯顿ER系列机器人完整操作手册下载 - 官方最新技术指南

埃斯顿ER系列机器人完整操作手册下载 - 官方最新技术指南 【免费下载链接】埃斯顿机器人ER系列操作手册下载 埃斯顿机器人ER系列操作手册下载 项目地址: https://gitcode.com/Open-source-documentation-tutorial/e2027 埃斯顿ER系列机器人作为工业自动化领域的重要设备…

作者头像 李华
网站建设 2026/4/23 12:51:26

【全面实战】从搭建DVWA到全漏洞复现(2)

实验环境我们在上一篇文章已经搭建好了,参考【全面实战】从搭建DVWA到全漏洞复现(1) 这里还需要用到一个集成bp和蚁剑或者中国菜刀 “中国菜刀/蚁剑”连接木马,拿到webshell(管理服务器文件、执行命令)。 我之前发表过一篇文章&a…

作者头像 李华
网站建设 2026/4/23 12:51:22

POV-Ray 射线追踪引擎:打造专业级3D渲染的完整指南

POV-Ray 射线追踪引擎:打造专业级3D渲染的完整指南 【免费下载链接】povray The Persistence of Vision Raytracer: http://www.povray.org/ 项目地址: https://gitcode.com/gh_mirrors/po/povray POV-Ray(Persistence of Vision Ray Tracer&…

作者头像 李华
网站建设 2026/4/23 12:32:36

Animeko:跨平台动漫追番工具的全新体验指南

在数字娱乐时代,动漫爱好者需要一个能够整合资源、同步进度并提供沉浸式观看体验的工具。Animeko正是这样一款基于Kotlin Multiplatform技术构建的跨平台应用,通过智能化的功能设计重新定义了动漫追番的全过程。🎯 【免费下载链接】animation…

作者头像 李华