计算机网络:流量控制与可靠传输机制
目录
基本概念
流量控制:别噎着啦!
可靠传输:快递必达服务
传输差错:现实中的意外
滑动窗口
基本概念
换句话说:批量发货+排队验收
停止-等待协议 SW(发1份等1份)
超时重传:
分组编号:
信道利用率
回退N帧协议 GBN(批量发货,错了就从错的重发!)
选择重传协议 SR(只补丢的那杯)
基本概念
流量控制:别噎着啦!
概念:流量控制涉及对链路上的帧的发送速率的控制,以使接收方有足够的缓冲空间来接收每个帧(数据链路层,点到点;传输层也有流量控制,端到端)巴拉巴拉~~
🍔 吃汉堡比喻:
你(发送方)喂朋友(接收方)吃汉堡
朋友嘴里塞满时说:"慢点!等我咽下去再喂!" → 这就是流量控制
如果不管不顾猛塞,朋友会吐(缓冲区溢出)
📱 手机内存例子:
旧手机接收大文件时跳提示:"存储空间不足"
发送方需要暂停发送 → 流量控制起作用
可靠传输:快递必达服务
概念:尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输 => 有确认机制和超时重传机制 巴拉巴拉~~
换句话说:丢了就重发!
📦 网购快递场景:
商家发货后要求:"收到请按1"(确认ACK)
三天没回复?自动补发(超时重传)
收到破损件?申请换货(差错重传)
🚚 特别服务对比:
普通快递(UDP):丢了不赔
顺丰保价(TCP):丢件必赔
传输差错:现实中的意外
1、比特错误:使用差错检测技术,接收方的数据链路层就可检测出帧在传输过程中是否产生了误码
2、分组丢失、分组失序和分组重复:一般不出现在数据链路层,而在上层
🔧 常见问题:
比特错误 → 就像快递单被雨水打糊
分组丢失 → 快递车半路抛锚
分组乱序 → 快递员不按楼层送货
分组重复 → 商家不小心发了两件

🌐 有线vs无线:
| 网络类型 | 好比... | 可靠性需求 |
|---|---|---|
| 有线网络 | 室内通话 | 小声说也能听清(一般不重传) |
| 无线网络 | 工地对讲机 | 必须重复确认(必须可靠传输) |
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
滑动窗口
基本概念
发送(接收)方维持一组连续的允许发送(接收)的帧的序号,称为发送(接收)窗口
发送方:发送窗口的大小代表在还未收到对方确认信息的情况下发送方最多还可以发送多少个数据帧。只有发送方接收到确认帧后发送窗口才可能向前滑动
接收方:只有收到数据帧的序号落在接收窗口内,才允许将帧收下,否则丢弃
换句话说:批量发货+排队验收
场景:奶茶店一次做5杯奶茶(窗口大小=5),顾客按顺序取。
-
发送方:连续做5杯(不用等每杯确认),但最多做5杯。
-
接收方:只按顺序喝,如果第3杯洒了,要求从第3杯重做(回退N帧)。
帧缓冲区:
1、目的:为了超时重发和判定重复帧的需要
2、实现方式:发送端在发送完数据帧时,必须在其发送缓存中保留此数据帧的副本,这样才能在出错时进行重传(只有收到确认帧ACK时,才删除副本)
停止-等待协议 SW(发1份等1份)

从滑动窗口机制的角度看,停止-等待协议相当于发送窗口和接收窗口大小均为1的滑动窗口协议
超时重传:
1、接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传
2、重传时间一般略大于平均往返时间(平均 RTT),因为代价大,需要多来点时间避免又错啦!
分组编号:
为了让接收方(发送方)能够判断收到的数据分组是否重复,需要给数据(ACK)分组编号。由于停-等协议特性,只需一个比特编号即可(0、1)
场景:你给同学传纸条,必须等他回复“收到”再传下一张。
-
优点:简单。
-
缺点:慢!(像玩“你拍一我拍一”)
信道利用率

1、发送方在一个发送周期内,有效发送数据的时间占整个发送周期的比例
2、信道利用率U = TD / (TD + RTT + TA)
回退N帧协议 GBN(批量发货,错了就从错的重发!)

1、发送方连续发送帧,当接收方检测出失序的信息帧后,要求发送方重发最后一个正确接收的信息帧后的所有未被确认帧
场景:你开了一家奶茶店,顾客一次性点了5杯奶茶(编号1~5)。
正常情况:你按顺序做好5杯,顾客按顺序喝(1→2→3→4→5)。
出错情况:如果第3杯做错了(帧错误),顾客会说:“从第3杯开始,全部重做!”
于是你把第3、4、5杯都重新做一遍(回退N帧)。
2、n比特编号,发送窗口大小:1 <= WT <= 2^n - 1 接收窗口大小:1
发送窗口(WT):你最多能同时做多少杯奶茶(比如最多5杯)。
如果编号用
n个比特,最多能发2^n - 1杯(比如n=3,最多发7杯)。接收窗口(WR)=1:顾客一次只喝1杯,必须按顺序,乱了就扔掉。
3、累计确认
-
顾客喝了第1、2、3杯后,只回复“3号收到”(代表1~3都OK)。
-
如果你没收到确认,就全部重发(比如3号丢了,就重发3~5)。
稍待确认:或者在自己有数据分组要发送时才按累计确认规则进行捎带确认
4、缺点
若信道的传输质量很差导致误码率较大时,不一定优于停止-等待协议

选择重传协议 SR(只补丢的那杯)

1、概述:设法只重传出现差错的数据帧和计时器超时的数据帧
- 每个发送缓冲区对应一个计时器,当计时器超时时,缓冲区的帧就会重传
- 一旦接收方怀疑帧出错,就会发一个否定帧NAK给发送方,要求发送方对NAK中指定的帧进行重传
- 接收端要设置具有相当容量的缓冲区来暂存那些未按序正确收到的帧
场景:奶茶店发现第3杯做错了,只重做第3杯,其他照常给。
优点:高效。
缺点:需要记录哪杯错了(复杂)。
2、缺点:需要开辟缓存空间用来存储数据
3、n比特编号,窗口大小:WR <= 2^(n-1)

相关文章:
计算机网络:流量控制与可靠传输机制
目录 基本概念 流量控制:别噎着啦! 可靠传输:快递必达服务 传输差错:现实中的意外 滑动窗口 基本概念 换句话说:批量发货排队验收 停止-等待协议 SW(发1份等1份) 超时重传:…...
SaaS、Paas、IaaS、MaaS、BaaS五大云计算服务模式
科普版:通俗理解五大云计算服务模式 1. SaaS(软件即服务) 一句话解释:像“租用公寓”,直接使用现成的软件,无需操心维护。 案例:使用钉钉办公、在网页版WPS编辑文档。服务提供商负责软件更新和…...
计算机网络 - 三次握手相关问题
通过一些问题来讨论 TCP 协议中的三次握手机制 说一下三次握手的大致过程?为什么需要三次握手?2 次不可以吗?第三次握手,可以携带数据吗?第二次呢?三次握手连接阶段,最后一次ACK包丢失…...
通过使用 include 语句加载并执行一个CMake脚本来引入第三方库
通过使用 include 语句加载并执行一个CMake脚本来引入第三方库 当项目中使用到第三方库时,可以通过使用 include 语句来加载并执行一个CMake脚本,在引入的CMake脚本中进行第三方库的下载、构建和库查找路径的设置等操作,以这种方式简化项目中…...
架构生命周期(高软57)
系列文章目录 架构生命周期 文章目录 系列文章目录前言一、软件架构是什么?二、软件架构的内容三、软件设计阶段四、构件总结 前言 本节讲明架构设计的架构生命周期概念。 一、软件架构是什么? 二、软件架构的内容 三、软件设计阶段 四、构件 总结 就…...
JMeter使用
1.简介 1.1 打开方式 ①点击bat,打开 ②添加JMeter系统环境变量,输⼊命令jmeter即可启动JMeter⼯具 1.2 配置 简体中文 放大字体 1.3 使用 ①添加线程组 ②创建http请求 2. 组件 2.1 线程组 控制JMeter将⽤于执⾏测试的线程数,也可以把⼀个线程理解为⼀个测…...
Ant Design Vue 表格复杂数据合并单元格
Ant Design Vue 表格复杂数据合并单元格 官方合并效果 官方示例 表头只支持列合并,使用 column 里的 colSpan 进行设置。 表格支持行/列合并,使用 render 里的单元格属性 colSpan 或者 rowSpan 设值为 0 时,设置的表格不会渲染。 <temp…...
Fiddler为什么可以看到一次HTTP请求数据?
1、作为代理服务器 Fiddler作为代理服务器,拦截了设备与互联网服务器之间的所有HTTP和HTTPS流量。当客户端(如浏览器)发送请求时,请求先到达Fiddler,然后由Fiddler转发到目标服务器;服务器的响应也会返回给…...
第十九讲 | XGBoost 与集成学习:精准高效的地学建模新范式
🟨 一、为什么要学习集成学习? 集成学习(Ensemble Learning) 是一种将多个弱学习器(如决策树)组合成一个强学习器的策略。它在地理学、生态学、遥感分类等领域表现尤为突出。 📌 应用优势&#…...
基于 GoFrame 框架的电子邮件发送实践:优势、特色与经验分享
1. 引言 如果你是一位有1-2年Go开发经验的后端开发者,可能已经熟悉了Go语言在性能和并发上的天然优势,也曾在项目中遇到过邮件发送的需求——无论是用户注册时的激活邮件、系统异常时的通知,还是营销活动中的批量促销邮件,邮件功…...
ECharts 如何实现柱状图悬停时,整个背景区域均可触发点击事件
1. 前言 ECharts 柱状图的点击事件默认仅响应柱子本身的点击,本文旨在实现整个背景区域均可触发点击事件 2. 实现思路 核心:全局监听 坐标判断 数据转换 通过 getZr() 监听整个画布点击,结合像素坐标判断是否在图表区域内通过 containPi…...
金融简单介绍及金融诈骗防范
在当今社会,金融学如同一股无形却强大的力量,深刻影响着我们生活的方方面面。无论是个人的日常收支、投资理财,还是国家的宏观经济调控,都与金融学紧密相连。 一、金融学的概念 金融学,简单来说,是研…...
cursor+高德MCP:制作一份旅游攻略
高德开放平台 | 高德地图API (amap.com) 1.注册成为开发者 2.进入控制台选择应用管理----->我的应用 3.新建应用 4.点击添加Key 5.在高德开发平台找到MCP的文档 6.按照快速接入的步骤,进行操作 一定要按照最新版的cursor, 如果之前已经安装旧的版本卸载掉重新安…...
软件版本命名规范Semantic Versioning
语义化版本控制(Semantic Versioning,简称 SemVer)是一种广泛采用的版本号管理规范,旨在通过版本号传达软件更新的性质和影响,帮助开发者和用户理解每次发布的变更内容 🔢 版本号结构 语义化版本号通常采…...
Uniapp: 大纲
目录 一、基础巩固1.1、Uniapp:下拉选择框ba-tree-picker1.2、Uniapp:确认框1.3、Uniapp:消息提示1.4、Uniapp:获取当前定位坐标 二、项目配置2.1、Uniapp:修改端口号2.2、Uniapp:本地存储 一、基础巩固 1.1、Uniapp:…...
Kubernetes控制平面组件:API Server Webhook 授权机制 详解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
【KWDB 创作者计划】_产品技术解读_1
【KWDB 创作者计划】_产品技术解读_1 一、存储引擎:高性能混合存储架构1. 存储模型设计2. 存储压缩与编码3. 持久化策略二、KWDB 组件源码解析1. 核心模块分层架构2. 关键组件源码剖析三、KWDB 特性代码通读1. 实时分析能力(Real-Time OLAP)2. 混合负载隔离(HTAP)3. 智能索…...
Python Cookbook-6.2 定义常量
任务 你需要定义一些模块级别的变量(比如命名的常量),而且客户代码无法将其重新绑定。 解决方案 你可以把任何对象当做模块一样安装。将下列代码存为一个模块const.py,并放入你的Python的sys.path 指定的目录中: class _const(object):class ConstEr…...
【Python爬虫】简单案例介绍2
本文继续接着我的上一篇博客【Python爬虫】简单案例介绍1-CSDN博客 目录 跨页 3.2 环境准备 跨页 当对单个页面的结构有了清晰的认识并成功提取数据后,接下来就需要考虑页面之间的跨页问题。此时我们便迎来了下一个关键任务:如何实现跨页爬取…...
【神经网络】python实现神经网络(四)——误差反向传播的基础理论
一.反向传播 本章将介绍能够高效计算权重参数的梯度的方法——误差反向传播法,这里简单介绍一下什么是反向传播,加入有个函数y = f(x),那么它的反向传播为图下这个样子: 反向传播的计算顺序是,将输入信号E乘以节点的局部导数,然后将结果传递给下一个节点。这里所…...
【SQL】COUNT... FILTER 的适用场景
【SQL】COUNT... FILTER 的适用场景 一、引言二、FILTER 基础学习2.1 语法解析2.2 适用范围2.2.1 主流数据库支持情况 2.3 技术优势2.3.1 性能优化2.3.2 等阶写法对比 2.4 适用场景2.4.1 多维统计报表2.4.2 动态数据过滤2.4.3 复杂条件处理 三、总结 一、引言 今天参加业务评审…...
I/O进程(全)
I/O 一、标准IO 1.概念 在C库中定义的一组用于输入输出的函数 2.特点 (1).通过缓冲机制减少系统调用,提高效率 (2.)围绕流进行操作,流用FILE *来描述(3).标准IO默认打开了三个流,stdin(标准输入)、stdout(标…...
vue2使用ezuikit-js播放萤石视频
需求:需要在大屏上播放萤石视频,用到官方的ezuikit-js插件实现,并实现视频播放切换功能。有个问题至今没有解决,就是萤石视频的宽高是固定的,不会根据大屏缩放进行自适应。我这边做了简单的刷新自适应。 1.下载ezuikit…...
什么是Lodash
一、什么是lodash 在 JavaScript 开发中,Lodash 是一个非常受欢迎的实用工具库,旨在提供高效、模块化的实用函数,帮助开发者更轻松地处理数组、对象、字符串等常见数据结构。它是对 JavaScript 原生方法的增强和优化,它在开发中提…...
【笔试强训day19】
目录 第一题:小易的升级之路 描述 输入描述: 输出描述: 输入: 输出: 第二题:礼物的最大价值 描述 输入: 返回值: 备注: 第三题:对称之美 题目描述…...
STM32电机库 电机控制特性
ST MC FW库提供FOC和六步法两种电机控制方式。这使得它能够驱动永磁同步电机 (PMSM) 和无刷直流电机 (BLDC)。FOC 更适合 PMSM,而六步法更适合 BLDC 电机。该固件可以驱动内嵌式PMSM 和标贴式PMSM。 ST Motor Control 固件库提供以下功能: FOC SVPWM 生成: 可配置的 PW…...
【Linux】42.网络基础(2.4)
文章目录 2.3 TCP协议2.3.10 拥塞控制2.3.11 延迟应答2.3.12 捎带应答2.3.13 面向字节流2.3.14 粘包问题2.3.15 TCP异常情况2.3.16 TCP小结2.3.17 基于TCP应用层协议 2.3 TCP协议 2.3.10 拥塞控制 虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚…...
SPI接口DAC设备驱动与应用程序开发
本文章相关专栏往期内容,SPI子系统专栏: SPI通信协议与Linux设备驱动框架解析SPI传输与驱动框架的实现spidev.c:SPI设备驱动的核心实现逻辑 PCI/PCIe子系统专栏: 专栏地址:PCI/PCIe子系统PCIe设备MSI/MSI-X中断源码分析…...
第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 满分题解
题面链接Htlang/2025lqb_python_b 个人觉得今年这套题整体比往年要简单许多,但是G题想简单了出大问题,预估50101015120860,道阻且长,再接再厉 代码仅供学习参考,满分为赛后洛谷中的测评,蓝桥杯官方测评待…...
数据库的种类及常见类型
一,数据库的种类 最常见的数据库类型分为两种,关系型数据库和非关系型数据库。 二,关系型数据库介绍 生产环境主流的关系型数据库有 Oracle、SQL Server、MySQL/MariaDB等。 关系型数据库在存储数据时实际就是采用的一张二维表࿰…...
