news 2026/5/13 0:10:59

拒绝“停下来傻等”:大白话讲透滑动窗口协议 (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/5/9 23:43:35

无人直播资源合集(第二辑)

无人直播助眠项目 文件大小: -内容特色: 零人值守搭建助眠直播间,附脚本与工具包适用人群: 想副业创收或做无人直播的运营/自媒体人核心价值: 低成本挂机变现,24h持续流量与礼物收益下载链接: https://pan.quark.cn/s/0f7c3b56420e 【08052】抖音无人直…

作者头像 李华
网站建设 2026/5/3 6:58:01

终极方案:Expo蓝牙开发完整指南15分钟:从概念到生产部署

终极方案:Expo蓝牙开发完整指南15分钟:从概念到生产部署 【免费下载链接】expo An open-source platform for making universal native apps with React. Expo runs on Android, iOS, and the web. 项目地址: https://gitcode.com/GitHub_Trending/ex/…

作者头像 李华
网站建设 2026/5/1 10:24:01

3.10 Elasticsearch-结果可解释性:explain=true 与 Lucene explain 日志

3.10 Elasticsearch-结果可解释性:explaintrue 与 Lucene explain 日志 3.10.1 为什么需要“看得见”的打分 搜索排序一旦上线,业务方最常见的追问是:“为什么 A 排在 B 前面?” 如果没有量化依据,只能靠“BM25 公式…

作者头像 李华
网站建设 2026/5/4 8:09:33

15分钟精通神经网络可视化:PlotNeuralNet终极入门指南

15分钟精通神经网络可视化:PlotNeuralNet终极入门指南 【免费下载链接】PlotNeuralNet Latex code for making neural networks diagrams 项目地址: https://gitcode.com/gh_mirrors/pl/PlotNeuralNet 还在为论文中的神经网络结构图而烦恼吗?手动…

作者头像 李华
网站建设 2026/5/9 20:31:23

深度定制Electronic WeChat:打造专属macOS微信工作环境

深度定制Electronic WeChat:打造专属macOS微信工作环境 【免费下载链接】electronic-wechat :speech_balloon: A better WeChat on macOS and Linux. Built with Electron by Zhongyi Tong. 项目地址: https://gitcode.com/gh_mirrors/el/electronic-wechat …

作者头像 李华
网站建设 2026/5/3 20:43:01

二维comsol模型中基于Voronoi技术设置多种边界条件及辅助工具

二维comsol的Voronoi,可设置方形边界,圆形边界,椭圆边界等等。 可选择条带过渡界面厚度。 需要ABAQUS2020及以上版本,AUTOCAD2020及以上版本 以上两软件进行辅助生成。 另二维多边形骨料,纤维骨料等均可采用此方法。在…

作者头像 李华