数据链路层:可靠传输

news2024/9/29 11:37:44

1.数据链路层:可靠传输

笔记来源:
湖科大教书匠:可靠传输的基本概念
湖科大教书匠:可靠传输的实现机制–停止等待协议SW

声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考

1.1 可靠传输的基本概念

接收方检测到帧中出现误码,之后可以选择重传全部帧或仅丢弃检测到误码的帧,具体选择哪种方式,需要看数据链路层向上层提供什么样的服务类型。
不可靠传输服务:仅丢弃含有误码的帧
可靠传输服务:实现发送端发送什么,接收端就收到什么(并不局限于数据链路层,其他各层均可选择实现可靠传输)


下面介绍可靠传输的实现机制(不局限于数据链路层,也可应用到其他层)

1.2 可靠传输的实现机制–停止等待协议SW

正常情况下发送方与接收方的行为

若发送方发出的数据在传输过程中丢失,接收方就无法收到数据也就不会对发送方回应,使用超时计时器解决这个问题

若接收方在收到发送方发出的信息后发出确认信息,该信息在传输过程中丢失,使得发送方执行超时重传,造成接收方重复收到分组,将数据分组编号,接收方遇到重复数据分组就将其丢弃

确认分组是否需要编号?若只在数据链路层实现停止等待协议,则无需给确认分组编号,因为在数据链路层一般不会出现确认迟到的问题。其他层可能需要对确认分组编号

停止-等待协议的信道利用率

当(往返时延) R T T ≫ T d RTT\gg T_d RTTTd(发送时延)如使用卫星链路,信道利用率非常低,为了解决此问题,引出另外两种协议

1.3 可靠传输的实现机制–回退N帧协议GBN(滑动窗口协议)

累积确认:接收方不一定对收到的数据分组逐个发送确认,而可以在收到几个数据分组后对按序到达的最后一个数据分组发送确认,表明包括当前分组及其前面发送的分组接收方已经收到。

发送方在收到ACK确认后发送窗口向右移动,发送方继续发送。若其中有ACK确认未收到也不影响,因为GBN协议采用累积确认的方式,例如:收到ACK2代表0-2号分组已确认收到,其中就包含了1号分组,故ACK1丢失也不影响。

将发送窗口内(数字代表分组编号)的分组依次发出

若在传送过程中5号分组出现误码,则需要丢弃5号分组

为什么要回退后序分组?因为在接收方的接收窗口中,当丢弃5号分组,接下来需要接收6号分组,但目前接收窗口是5号分组,无法与6号匹配,造成了发送与接收的错位,所以需要将5号分组及其后序分组丢弃,发送方全部重传这些分组。(即由发送方回退N帧)
以上也是GBN的缺点之一,这是由于GBN中接收窗口等于1造成的。

对之前按序接收的最后一个分组(即4号分组)进行确认,目的是让发送方知道4号分组之前的分组都已经收到了,现在可以发送4号分组的后序分组了。每丢弃一个分组都要发送一个ACK分组(丢弃了1076四个分组)


假设4个ACK分组没有触发立刻重传,而是重传计时器超时触发重传,则发送方重新发送这些分组(回退N帧)

发送窗口不能太大也不能太小,若 W T = 1 W_T=1 WT=1则回退N帧协议变为了逐个确认,而不是累积确认,若 W T = 2 n − 1 W_T=2^n-1 WT=2n1则接收方无法辨认新旧分组,产生分组重复


假设发送窗口为8(超过 2 3 − 1 2^3-1 231



接收方正确接收0-7号分组

接收方发出累积确认ACK7,表明包括7号分组在内的之前的分组已经接收,发送方可以发送7号分组之后的分组了

若ACK7在传输过程中丢失,则导致发送方超时重传这些分组,接收方在接收这些新分组时发现和旧分组的分组序号一致,导致重复接收分组

个人理解:我们看到分组编号每0-7一个循环,但第一次用编号0-7传送的数据和用后面编号0-7传送的数据可能是不一样的数据,但由于编号是相同的,所以接收方无法分清楚是新发送来的数据(称作新分组)还是重新发送来的数据(称作旧分组)

1.4 可靠传输的实现机制–选择重传协议SR

GBN接收窗口等于1时,一个数据分组的误码导致后序多个分组不能被接收方按序接收而丢弃,造成发送方对这些数据分组的超时重传,这是对通信资源的极大浪费。可设法只重传出现误码的数据分组,将接收窗口设置为大于1,以便接收方先收下失序到达但没有误码且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层
SR不支持累积确认



若分组2丢失

接收方接收分组0和1,并发送ACK0和ACK1,接收窗口向右滑动2个位置,接收分组3并发送ACK3,等待发送方重新发送分组2



接收ACK0和ACK1,发送窗口向右滑动2个位置

分组4号和5号落到发送窗口中,现发送分组4和5

发送方将分组0和1缓存删除,接收方接收到的分组0和1移交上层

接收ACK3并标记分组3。接收方收到分组4和5,并发送ACK4和ACK5,发送方接收ACK4和5并标记分组4和5。标记的目的是防止重复发送


分组2触发超时重传,发送方重新发送分组2


接收方接收分组2并发送ACK2,至此接收窗口内包含的分组全部收到

接收窗口向右滑动4个位置

发送方接收到ACK2并进行标记,发送窗口向右滑动4个位置

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

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

相关文章

Rust 笔记:WebAssembly 的 JavaScript API

WebAssembly WebAssembly 的 JavaScript API 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/ar…

2023/5/29总结

abstract修饰符 抽象类就是当类和类之间有相同特征时,将这些共同的特征提取出来,形成的就是抽象类。 抽象类的特点: 抽象类和抽象方法必须使用abstract 关键字修饰:publicabstract class 类名 / public abstract void eat();抽象…

基于pytorch搭建多特征LSTM时间序列预测代码详细解读(附完整代码)

文章目录 LSTM时间序列预测数据获取与预处理模型构建训练与测试 LSTM时间序列预测 对于LSTM神经网络的概念想必大家也是熟练掌握了,所以本文章不涉及对LSTM概念的解读,仅解释如何使用pytorch使用LSTM进行时间序列预测,复原使用代码实现的全流…

【Python实战】Python采集小说文本内容

前言 今天,我们将采集某小说数据,通过这个案例,加深我们对正则表达式的理解。我们今天来通过使用正则表达式来获取我们想要的文本。 环境使用 python 3.9pycharm模块使用 requests模块介绍 requests requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应…

MaxScript的Shape相关操作例子

MaxScript学习笔记目录 大家好,我是阿赵。之前有网友私信问了我一个相关的问题,我发现之前漏了MaxScript里面的Shape的内容,所以补一个例子,当做一个记录吧。 一、例子说明 这里做一个关于MaxScript读取二维形状(Shape)数据的例…

加盐加密——保障你的数据安全

目录 今日良言:理性和激情是生活不可或缺的调味品 一、加盐加密 1.普通密码的缺点 2.什么是加盐加密 3.加盐加密的过程 4.加盐加密的实现 今日良言:理性和激情是生活不可或缺的调味品 一、加盐加密 1.普通密码的缺点 在介绍加盐加密之前,先想想为什么普通密…

STM32F4_指针(单片机)

目录 前言 1. 计算机存储机制 2. 定义指针 2.1 指针操作 2.2 数组与指针 前言 指针(Pointer)是C语言的一个重要知识点,其使用灵活、功能强大,是C语言的灵魂。指针与底层硬件联系密切,使用指针可操作数据的地址,实现数据的间…

PreSumm模型

Text Summarization with Pretrained Encoders(PreSumm模型) 论文地址 摘要 在本文中,我们展示了如何在文本摘要中有效地应用BERT,并为提取性模型和抽象模型提出了一个通用框架。我们介绍了基于BERT的新颖文档级编码器&#xf…

安装VMware Workstation和虚拟机教程

一、VM简介   VMware Workstation中文版是一个“虚拟 PC”软件。它使你可以在一台机器上同时运行二个或更多 Windows、DOS、LINUX 系统。与“多启动”系统相比,VMWare 采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重…

iPad Pro “买后生产力” - 在iPad上远程连接服务器编程写代码【公网远程】

文章目录 前言视频教程1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7…

sprintboot logback高级特性使用

一、业务需求 日志级别的分类 日志的级别分为: trace:微量,少许的意思,级别最低info:普通的打印信息debug:需要调试时候的关键信息打印warn:警告,不影响使⽤,但需要注…

Socket(四)

文章目录 1. 服务器Socket简介2. 使用ServerSocket3. 用Socket写入服务器4. 关闭服务器Socket 1. 服务器Socket简介 博客Socket(一)~Socket(二)从客户端的角度讨论了Socket,客户端就是向监听连接的服务器打…

Git基本概念

Git基础 git 介绍git工作流程 git 介绍 1、git是什么:是目前世界上最先进的分布式版本控制系统 2、git的优势 ● 适合分布式开发、强调个体。 ● 公共服务器压力和数量都不会太大 ● 速度快、灵活 ● 任意两个开发者之间可以很容易的解决冲突 ● 离线工作 3、git能…

华为OD机试真题B卷 Java 实现【乱序整数序列两数之和绝对值最小】,附详细解题思路

一、题目描述 给定一个随机的整数(可能存在正整数和负整数)数组 nums,请你在该数组中找出两个数,其和的绝对值(|nums[x]nums[y]|)为最小值,并返回这个两个数(按从小到大返回)以及绝对值。 每种…

全志V3S嵌入式驱动开发(网卡驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 一开始上来就说网卡,好像有点不太对劲。这主要是因为如果开发板可以连接网络的话,可以帮我们节约很多的时间,开…

逍遥自在学C语言 | 揭开while循环的神秘面纱

前言 循环是一种重要的控制结构,可以使程序重复执行一段代码,直到满足特定条件为止。 在C语言中,while和do-while是两种常用的循环结构,本文将详细介绍这两种循环的用法。 一、人物简介 第一位闪亮登场,有请今后会一…

eclipse安装lombok插件

项目中遇到了一些实体类声明了属性,缺少get/set方法,但是类上使用了Getter 和 Setter注解,查了下是lombok插件的强大功能。 这里先不看lombok的功能,先看下eclipse安装lombok插件的过程。 1、 https://projectlombok.org/downlo…

三十五、数学知识——快速幂(反复平方法 + 快速幂求逆元)

快速幂算法主要内容 一、基本原理1、概念 暴力求解2、核心原理——反复平方法3、快速幂求逆元 二、Java、C语言模板实现三、例题题解 一、基本原理 1、概念 暴力求解 问题目标: 快速求出 a^k mod p 的结果,时间复杂度为 O(logk),其中 a,p…

华为OD机试真题B卷 Java 实现【字符串变换最小字符串】,附详细解题思路

一、题目描述 给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则:交换字符串中任意两个不同位置的字符。 二、输入描述 一串小写字母组成的字符串s。 三、输出…

人工智能-不确定性的量化

这一部分的重点内容有: 贝叶斯规则贝叶斯网络基于隐马尔可夫模型的概率推理 大概会有以下几种考察形式,有答案的历年期末考试题只解释一些注意的地方 贝叶斯网络-独立性 第二问答案很详细,第一问看↓ D-separation: 判断贝叶…