当前位置: 首页 > news >正文

【流量控制】算不对 GBN 窗口?分不清 SR 重传?滑动窗口 + 3 大协议一篇吃透

        是否在学网络协议时,对着 “滑动窗口” 的定义反复琢磨、却仍不懂它 怎么既控流量又保可靠?或是算错 GBN 的最大窗口尺寸(明明 n=3,却分不清是 7 还是 4)?甚至搞不清 停止 - 等待GBN、SR 的区别 —— 为什么 GBN 要 “丢一帧重传一串”,而 SR 只重传出错的那帧?

        其实,流量控制与可靠传输的本质是 “快递配送的精细化管理”:发送方是快递站,接收方是收件人,数据帧是快递,滑动窗口是 “快递车的载重限制”(控流量),ACK 是 “收件回执”(保可靠)。这篇文章会用 “快递配送” 的比喻贯穿始终,把 3 大协议、滑动窗口计算、考点清单全拆明白 —— 既帮你搞定能理解 “为什么 TCP 用类似 SR 的机制”。


一、先搞懂基础:流量控制与可靠传输,到底解决什么问题?

        在讲复杂协议前,先明确两个核心概念的区别 —— 很多人混淆它们,其实对应快递配送的两个不同需求:“别送太快” 和 “别送丢 / 送错”。

1. 流量控制:别让 “收件人” 的快递柜满了

  • 定义由接收方主导,限制发送方的发送速率,防止接收方缓冲区(比如快递柜)溢出。比如收件人告诉快递站:“我家快递柜只剩 3 个空位,一次最多送 3 件”—— 这就是流量控制,核心是 “限速”。
  • 数据链路层 vs 传输层
    • 数据链路层:控制 “相邻节点”(比如路由器 A 到路由器 B)的流量,窗口大小通常固定,收不下就不发 ACK。
    • 传输层(如 TCP):控制 “端到端”(比如你的电脑到服务器)的流量,通过 ACK 里的 “窗口字段” 动态调整大小(比如快递柜空了就告诉快递站 “可以多送点”)。

2. 可靠传输:确保 “每个快递都被正确收到”

  • 定义让发送方发出的所有帧,都能被接收方 “正确、按序” 接收 —— 就算丢了、错了,也要通过机制补救。比如快递站送了 3 件快递,没收到回执就重送,还按顺序送,避免收件人拿到 “第 3 件却没第 2 件”—— 这就是可靠传输,核心是 “纠错、补漏、排序”。
  • 三大核心机制
    • 确认(ACK):接收方收到快递后,给快递站发 “已收到” 的回执(比如 ACK=2 表示 “已收到序号≤2 的帧”)。
    • 超时重传:快递站发完快递后,等一段时间(超时时间)没收到回执,就重送这件快递。
    • 编号(Sequencing):给每个快递贴序号,避免送重复(比如不会把 “重送的第 1 件” 当成 “新的第 4 件”),还能保证按序交付。

二、3 大协议对比:从 “低效快递” 到 “高效配送”

        流量控制和可靠传输的落地,靠的是 3 种滑动窗口协议 —— 它们的核心区别是 “快递车一次能送多少件(窗口大小)” 和 “丢件后怎么补(重传策略)”。

3 大协议核心对比表

协议类型发送窗口(Wₜ)接收窗口(Wᵣ)核心工作原理(快递比喻)优点缺点信道利用率
停止 - 等待协议11快递站送 1 件快递,等收件人发回执(ACK),收到后再送下 1 件 ——“送 1 等 1”。实现最简单效率极低(快递车空跑)
后退 N 帧(GBN)>1(≤2ⁿ-1)1快递车一次送多件(比如 3 件),收件人只按序收快递(没收第 2 件就拒收第 3 件);丢 1 件就重送 “从丢件开始的所有件”(比如丢第 2 件,重送第 2、3 件)。比停等效率高重传浪费(多送了没丢的件)
选择重传(SR)>1(≤2ⁿ⁻¹)>1(=Wₜ)快递车一次送多件,收件人会暂存 “没按序到的快递”(比如先收第 3 件,暂存等第 2 件);丢哪件就只重传哪件 ——“精准补件”。效率最高实现复杂(需暂存快递)
关键补充:信道利用率

用实例拆解:丢件后三种协议的不同操作

假设发送方发 3 帧(序号 1、2、3),其中序号 2 的帧丢失,三种协议的处理方式:

  1. 停止 - 等待:发完 1 等 ACK,没收到 2 的 ACK 就重传 2,重传成功再发 3—— 全程只能 “单线程”。
  2. GBN:发完 1、2、3 后,发现 2 丢了,重传 2、3(哪怕 3 没丢)——“一丢全补”。
  3. SR:发完 1、2、3 后,发现 2 丢了,只重传 2,3 会被接收方暂存,等 2 到了再一起按序交付 ——“丢啥补啥”。


三、滑动窗口机制:协议的 “灵魂”,怎么同时管流量 + 保可靠?

        所有协议的核心都是 “滑动窗口”—— 它就像 “快递站的配送规则”:既规定 :一次最多送多少件(控流量),又明确 哪些件要等回执、丢了要重送(保可靠)。

1. 发送窗口:快递站的待确认清单

  • 定义:发送方维护的 “已送但没收到回执” 的快递序号集合(比如送了 1、2、3,回执只到 1,发送窗口就是 {2,3})。
  • 作用
    • 控流量:窗口大小就是 “一次最多能有多少件待确认快递”(比如窗口 = 3,就不能送第 4 件,直到收到 2 的回执,窗口滑到 {3,4})。
    • 定重传:窗口里的快递,没收到回执就重传(比如窗口 {2,3} 里,2 没回执就重传 2)。
  • 移动规则:收到 “窗口内最老快递” 的回执(比如窗口 {2,3} 收到 2 的 ACK),窗口就向前滑 1 位,变成 {3,4}。

2. 接收窗口:收件人的 “可接收范围”

  • 定义:接收方维护的愿意接收的快递序号集合(比如当前能收 2、3,接收窗口就是 {2,3})。
  • 作用
    • 防溢出:只收窗口内的快递,窗口外的拒收(比如窗口 {2,3},收到 4 就拒收)。
    • 保顺序:按序交付给上层(比如先收 3,暂存,等收到 2 再一起交)。
  • 移动规则:按序收到窗口内最老的快递(比如窗口 {2,3} 收到 2),窗口向前滑 1 位,变成 {3,4},并给发送方发 2 的 ACK。

3. 绝对重要:窗口大小与编号位数的关系(必算)

        快递序号用 n 比特表示(比如 n=3,序号就是 0~7,共 8 个),为了避免 “把重送的旧快递当成新快递”,窗口大小必须满足一个核心公式:W_T + W_R \leq 2^n

推导两种协议的最大窗口(必背)
  1. 后退 N 帧(GBN)

    • 接收窗口 Wᵣ=1(只按序收,不暂存)。
    • 代入公式:(比如 n=3 时,Wₜ最大 = 7)。
    • 为什么?如果 Wₜ=8(2^3),Wᵣ=1,加起来 = 9>8,接收方会分不清 “收到的 8 是新快递,还是重送的 0(序号循环)。
  2. 选择重传(SR)

    • 接收窗口 Wᵣ=Wₜ(要暂存多件,窗口和发送方一样大)。
    • 代入公式:(比如 n=3 时,Wₜ最大 = 4)。
    • 为什么?如果 n=3 时 Wₜ=5,Wᵣ=5,加起来 = 10>8,同样会混淆新旧快递。

四、收尾:考点总结 + 行动指南

1、 一句话总结核心

        滑动窗口是 “流量控制 + 可靠传输” 的统一解决方案:通过窗口大小限制发送速率(控流量),通过序号、ACK、超时重传确保数据不丢不错(保可靠);3 大协议的差异本质是 “窗口大小” 和 “重传策略” 的选择 —— 从停止 - 等待的 “低效简单” 到 SR 的 “高效复杂”,对应不同的信道需求。

2、 高频考点清单(必背)

http://www.dtcms.com/a/511185.html

相关文章:

  • 临时插入的紧急任务如何影响整体进度
  • 国内net开发的网站建设网站建设费如何会计处理
  • Melos 使用指南:Flutter / Dart 多包管理工具!
  • React组件完全指南
  • TypeScript:npm的types、typings、@type的区别
  • 我的第一份开源贡献:小米工程师程赛的社区之旅
  • Python 基础 | 第八课:函数详解与应用
  • 火狐浏览器替换js脚本
  • 车载诊断架构 --- 由一个售后问题引发对P4时间的思考
  • 第3章 SQL数据定义语句
  • phpcms 网站m8 wordpress主题
  • Docker到Kubernetes的平滑迁移(服务网格实战)
  • 数据挖掘知识体系分析
  • 简述网站建设的五类成员做电商网站公司
  • 数据结构——邻接表
  • 预算系统 - 项目优化点
  • 【软考备考】论软件架构设计-范文示例
  • 探讨一下java将来未来两年内的就业以及发展
  • [特殊字符] 已发布目标检测数据集合集(持续更新)
  • mysql主从延迟
  • 乌当区城乡建设局网站wordpress小工具下载
  • 网站后台不能上传2345应用商店
  • HTTPS与HTPP的区别
  • 链式结构二叉树:结点定义、创建及全操作实现(遍历 / 计数 / 销毁 / 判断完全二叉树)
  • android在sd卡中可以mkdir, 但是不可以createNewFile
  • 高性能小型国产铷原子钟:精准计时领域的 “定海神针​,铷钟,国产铷钟,模块原子钟,
  • 【JVM】基础概念之为什么要使用JVM
  • 【图像处理】灰度图像与二值化
  • Java常用工具类处理方法100例
  • 自己做的网页怎么上传网站吗营销型网站公司排名