计算机网络:流量控制与可靠传输机制

目录

基本概念

流量控制:别噎着啦!

可靠传输:快递必达服务

传输差错:现实中的意外

滑动窗口

基本概念

换句话说:批量发货+排队验收

停止-等待协议 SW(发1份等1份)

超时重传:

分组编号:

信道利用率

回退N帧协议 GBN(批量发货,错了就从错的重发!)

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


基本概念

流量控制:别噎着啦!

概念:流量控制涉及对链路上的帧的发送速率的控制,以使接收方有足够的缓冲空间来接收每个帧(数据链路层,点到点;传输层也有流量控制,端到端)巴拉巴拉~~

🍔 吃汉堡比喻

  • 你(发送方)喂朋友(接收方)吃汉堡

  • 朋友嘴里塞满时说:"慢点!等我咽下去再喂!" → 这就是流量控制

  • 如果不管不顾猛塞,朋友会吐(缓冲区溢出)

📱 手机内存例子

  • 旧手机接收大文件时跳提示:"存储空间不足"

  • 发送方需要暂停发送 → 流量控制起作用

可靠传输:快递必达服务

概念:尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输 => 有确认机制和超时重传机制 巴拉巴拉~~

换句话说:丢了就重发!

📦 网购快递场景

  1. 商家发货后要求:"收到请按1"(确认ACK)

  2. 三天没回复?自动补发(超时重传)

  3. 收到破损件?申请换货(差错重传)

🚚 特别服务对比

  • 普通快递(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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android组件刷新

Android中刷新View的方法有以下几种&#xff1a; 调用invalidate()方法&#xff0c;该方法会使View树中的所有视图无效或脏&#xff0c;等待下一次绘制时重新绘制。例如&#xff1a; mCustomView.invalidate(); 调用postInvalidate()方法&#xff0c;该方法类似于invalidate()…

Pycharm(十四)函数

一、函数概述 函数也叫方法,可以用function(函数,功能),method(方法)来表示。函数是把具有独立功能的代码封装到一起,使其成为具有独立功能的代码集。 它的好处:1.提高代码的复用性;2.模块化编程。 1.1 定义格式 def 函数名(形式参数1,形式参数2...): 函数体,就是逻…

Oracle测试题目及笔记(多选)

所有题目来自于互联网搜索 在以下概要文件的陈述中&#xff0c;哪两个是正确的&#xff1f; &#xff08;D 和 E&#xff09; A&#xff0e; 概要文件不能被用来为账户加锁 B&#xff0e; 概要文件不能被用来控制资源使用 C&#xff0e; 数据库管理员可以使用概要文件更改用户密…

DDoS攻防实战指南——解析企业级防护五大解决方案

一、流量清洗中心的智能化演进 云清洗服务已从被动响应转向主动防御。基于全球Anycast网络的分布式清洗节点&#xff0c;可在攻击发生时将流量牵引至专用清洗集群。阿里云2023年实测数据显示&#xff0c;其新一代清洗设备对SYN Flood的识别准确率达99.97%&#xff0c;误杀率控…

Ubuntu多用户VNC远程桌面环境搭建:从零开始的完整指南

引言: 在当今远程工作盛行的时代,搭建一个安全、高效的多用户远程桌面环境变得越来越重要。本文将为您提供一个从零开始的完整指南,教您如何在Ubuntu系统上搭建多用户VNC远程桌面环境。无论您是系统管理员、开发团队负责人,还是想要为家庭成员提供远程访问的技术爱好者,这…

数据结构专题 - 线性表

线性表是数据结构中最基础、最常用的数据结构之一&#xff0c;它在实际应用中非常广泛。无论是操作系统中的内存管理&#xff0c;还是数据库中的索引结构&#xff0c;线性表都扮演着重要角色。 一、线性表的概念与抽象数据类型 1.1 线性表的逻辑结构 线性表是由n&#xff08…

使用wpa_cli和wpa_supplicant配置Liunx开发板的wlan0无线网

目录 1 简单介绍下wpa_cli和wpa_supplicant 1.1 wpa_supplicant 简介 1.2 wpa_cli 简介 1.3 它们之间的关系 2 启动wpa_supplicant 3 使用rz工具把wpa_cli命令上传到开发板 4 用wpa_cli配置网络 参考文献&#xff1a; 1 简单介绍下wpa_cli和wpa_supplicant 1.1 wpa_su…

筛选条件在on和where中的区别(基于hivesql)

理解筛选条件在on和where中的区别&#xff0c;最好先理解sql的执行顺序&#xff0c;尽管实际执行时不同的物理执行引擎可能会有特定的优化&#xff0c;但是逻辑执行顺序必须遵循&#xff1a; 1&#xff09;from&#xff1a;确定数据源是什么&#xff0c;from后可以是单表&#…

springboot 项目 jmeter简单测试流程

测试内容为 主机地址随机数 package com.hainiu.example;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotat…

爱普生FA2016AS晶振在智能家居中的应用

在智能家居设备高速发展的今天&#xff0c;稳定可靠的时钟信号是确保设备互联互通、精准执行指令的核心。爱普生&#xff08;EPSON&#xff09;推出的FA2016AS内置热敏电阻晶振&#xff0c;凭借其高精度、小体积和卓越的温度稳定性&#xff0c;成为智能家居领域的关键元件&…

分享一个python启动文件脚本(django示例)

今天给大家分享一个python启动文件脚本 在日常开发中&#xff0c;我们常常需要运行多条命令来完成“静态收集”“数据库迁移”“启动服务”……如果把这些命令整合到一个脚本里就好了 一、整体流程概览 #mermaid-svg-wA6UnfATaUOfJoPn {font-family:"trebuchet ms"…

Kubernetes》》K8S》》Pod的健康检查

K8s概念总结 》》》Pod的生命周期阶段 Pod的生命周期可以简单描述&#xff1a;首先Pod被创建&#xff0c;紧接着Pod被调度到Node节点进行部署。 Pod是非常忠诚的&#xff0c;一旦被分配到Node节点后&#xff0c;就不会离开这个Node节点&#xff0c;直到它被删除&#xff0c;删除…

bininote: 使用AI将视频转换了Markdown笔记

GitHub&#xff1a;https://github.com/JefferyHcool/BiliNote 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI BiliNote 是一个开源的 AI 视频笔记助手&#xff0c;支持通过哔哩哔哩、YouTube 等视频链接&#xff0c;自动提取内容并生…

鸿蒙NEXT开发文件预览工具类(ArkTs)

import { uniformTypeDescriptor } from kit.ArkData; import { filePreview } from kit.PreviewKit; import { FileUtil } from ./FileUtil; import { AppUtil } from ./AppUtil; import { WantUtil } from ./WantUtil;/*** 文件预览工具类* 提供文件预览、加载、判断等功能。…

MySQL常用SQL语句的示例

概述 MySQL 常用 SQL 语句的示例&#xff0c;涵盖数据定义、操作、查询等常见场景 一、数据库操作 创建数据库 CREATE DATABASE mydb;选择数据库 USE mydb;删除数据库 DROP DATABASE mydb;二、表操作 创建表 CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VAR…

智算启新篇 安全筑新基 ——中国移动举办智算基础设施及安全分论坛

4月10日&#xff0c;2025中国移动云智算大会智算基础设施及安全分论坛在苏州金鸡湖国际会议中心揭幕。 在数字经济浪潮奔涌向前的时代坐标下&#xff0c;中国移动锚定“创世界一流信息服务科技创新公司”定位&#xff0c;持续推进智算基础设施建设&#xff0c;持续提升网信安全…

MySQL——游标(cursor)

一、什么是游标&#xff1f; 游标&#xff08;Cursor&#xff09; 是MySQL中用于逐行处理查询结果集的数据库对象。它类似于指针&#xff0c;允许开发者在结果集中逐行移动&#xff0c;并对每一行数据进行特定操作。游标将传统的集合操作转换为面向过程的记录处理方式&#xf…

异步编程——微信小程序

1. 前言 引用来自&#xff1a;微信小程序开发中的多线程处理与异步编程_微信小程序 多线程-CSDN博客 微信小程序是基于JavaScript开发的&#xff0c;与浏览器JavaScript不同&#xff0c;小程序运行在WebView内部&#xff0c;没有多线程的概念。小程序的 JavaScript 是单线程的…

HarmonyOS-ArkUI V2状态-PersistenceV2:持久化存储UI状态

PersistenceV2类是一个与AppStorageV2类用法非常相似的类。因为它俩是子类和父类的关系。如果不了解AppStorageV2,可以先跳转至了解一下这个类。 HarmonyOS-ArkUI V2工具类:AppStorageV2:应用全局UI状态存储-CSDN博客 PersistenceV2相比于其父类AppStorageV2而言,它存储的…

《Mycat核心技术》第22章:搭建Mycat+Zookeeper+HAProxy+Keepalived+MySQL高可用架构

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…