计网第三章(数据链路层)(二)

news2024/9/27 9:27:36

目录

一、可靠传输

二、可靠传输的三种实现机制

1.停止等待协议SW(自动重传协议ARQ)

(1)理想情况(即无差错情况):

 (2)有误码的情况:

(3) 超时重传:

(4)确认丢失:

(5)确认迟到:

2.回退N帧协议GBN

(1) 无差错的情况:

(2)累积确认:

(3)有差错的情况:

最简单的情况:

 更为复杂的情况:

(4)发送窗口的范围

3.选择重传协议SR

(1)有差错情况:

(2)窗口的范围

发送窗口:

接收窗口的范围:

二、总结:


一、可靠传输

计网第三章(一)最后提到可靠传输服务。简单来说就是采取一系列的措施,使得发送方发送什么,接收方就能接收到什么。

所谓的采取措施的目的就是防止出现传输错误,事实上传输错误并非只有前面提到的比特差错,还包括分组丢失、分组重复和分组失序,这几种错误一般不会出现在数据链路层,而在其上层。

所以可靠传输并不局限于数据链路层。

二、可靠传输的三种实现机制

为了讨论问题方便,只考虑单向传输。

1.停止等待协议SW(自动重传协议ARQ)

发送方每发送一个分组就会停止发送,等待接收方的确认。收到确认后再发送下一个分组。

(1)理想情况(即无差错情况):

 (2)有误码的情况:

这里有一个小细节:在可靠传输协议里面,接收方在检测出有错误后可以不发送否认分组,即什么也不做,这是因为后面的超时重传的特性,只需要等待发送方重新发送就可以。

发送否认分组的好处是可以发送方及早知道发送的分组出现了差错,但是这种处理方式也会使协议更加复杂化。   现在实用的可靠传输协议都不使用这种否认分组了。所以后续讨论默认不会发送否认分组。

(3) 超时重传:

所谓超时重传就是每次发送完一个分组就设置一个超时计时器,若计时器到时之前就收到接收方的确认,就撤销已设置的超时计时器。如果到时后仍没收到接收方的确认,那么发送方就会重传前面发送过的分组。

那么什么情况会导致超时重传呢?

首先就是前面所说的,传输时接收方发现有误码,直接将该分组丢弃的情况。如图:

看到这里,我想大家已经理解现在实用的可靠传输协议可以不使用否认分组了的原因了。

 发送的数据分组在传输过程中丢失的情况:

 有人可能会问,超时计时器的时间应该设置为多长? 

理论上讲是要比数组在分组传输的平均往返时间更长一些。这里可以不用做过多深究。

既然发送分组有丢失,那么确认分组是否在传输中也会出现问题呢?

答案是肯定的,所以就有了后面的两种情况。

(4)确认丢失

这其实也是引起超时重传的另外的情况:确认分组在传输的过程中丢失,但是发送方无法知道,他只要没有收到来自接收方的确认就会一直等待,直到进行重传。

注意图中的细节:在这张图中我给数据分组进行了编号,进行了编号接收方才知道数据分组是重复的,才会进行丢弃。也就是避免出现分组重复的情况。而我们只要保证每次发送的数据分组和上一次发送的数据分组不是同一个分组就可以,所以可以直接使用一个比特进行编号(即0和1)。

那么接收方的分组是否也需要进行编号?

答案是肯定的,这就要提到最后一个情况:确认迟到。

(5)确认迟到:

确认迟到也会引起发送方的超时重传,在给确认分组也编号后,发送方收到迟到的确认分组,判断它与之前的确认分组重复,便不会进行任何操作。

简单做一个总结:

SW协议利用超时计时器保证了发送方在发送数据分组后因各种因素(比如数据分组丢失,数据分组出现误码,确认丢失,确认迟到)而无法收到接收方的确认之后,该协议仍能继续运转,避免停滞的情况。

而给分组(不论是数据分组还是确认分组)进行编号,避免了分组重复的问题,让双方在收到重复的分组后都能进行正确的操作。

根据SW协议的特点,每次发送完一个数据分组就要至少等候收发双方间的往返时间后才可以发送下一个数据分组。如果往返时间较大,由于SW协议的信道利用率本身就很低,若是触发了超时重传就更是雪上加霜。显然,这种情况并不是我们愿意看到的。如果在发送方接收到接收方的确认分组之前,发送方可以连续发送多个数据分组,则可大大提高信道利用率,在这种流水线式传输的基础上,诞生了后面的两种协议。

2.回退N帧协议GBN

在流水线传输的基础上,

对于发送方:采用发送窗口(W_T{})来限制可连续发送数据分组的个数。

W_T{}是有取值范围的,为1<W _T{} \leq 2^{n}-1, 式中的n为用多少个比特数给分组编序号。

对于接收方:接收窗口(W_R{})的值固定为1。

比如现在采用3个比特给分组数编号,那么有1<W _T{} \leq 7。 只要W_T{} 在该范围内都可以取值,我们假设W_T{}为4。如图:

(1) 无差错的情况:

发送方将落在发送窗口内的数据分组连续发送出去。

数据分组正确到达(即没有出现乱序和误码)接收方后,接收方按序接收,每接收一个接收窗口就向前滑动一个位置,并给发送方发送接收分组的确认分组。

发送方每接收一个确认分组就将发送窗口向前滑动一个位置。

注意:在图中各自颜色的虚线框对应各自的初始状态,红色虚线框代表滑动的痕迹,各自颜色的实线框代表这段过程结束后各自窗口停留的位置。

 这段过程结束后,发送方就可以将收到确认分组的从缓存中删除。而接收方可以择机将已接收到的分组交付给上层处理。

(2)累积确认:

GBN协议的接收方不一定要对每个数据分组逐个发送确认。它可以对按序到达的最后一个分组发送确认。ACK_n{}就代表n之前的包括序号为n的数据分组都已正确接收。

优点:有时候确认分组丢失也不会出现超时重传。比如上述情况,如果GBN采用累积确认,假设针对1号分组发送了ACK_1{},最后又针对3号分组发送了ACK_3{}。即便ACK_1{}在传输过程中丢失,只要ACK_3{}被发送方接收到,就不会有1号分组的重传,并且下一次发送从4号分组开始。同时,使用累计确认也可以减小接收方的开销,减少网络资源的占用等。

缺点:无法向发送方及时反映接收方已经正确接收的数据分组的信息。

(3)有差错的情况:

我们按照上面的过程继续往下模拟

最简单的情况:

如果传输过程中出现误码,接收方检测到后就会丢弃该分组,而不论该分组之后的其余分组是什么情况,接收方都会因为与接收窗口的序号不匹配直接进行丢弃。发送窗口一直没有收到确认分组,所以就不会有任何动作。直到进行超时重传,发送窗口重新发送窗口内的数据分组,这就是回退N帧。(超时重传和前面的一样,在本图中没有画出)。

 更为复杂的情况:

这里与之前SW协议里面提到过的发送否认分组有点联系,通过前面的学习我们知道发送否认分组的好处就是让发送方及时知道自己发送的数据分组出现了问题。

以上图为例,在GBN协议里面,丢弃4号分组后,对于后面的分组接收方每丢弃一个就向发送方发送一个之前按序接收的最后一个数据分组的确认分组,在本例中即为ACK_3{}。发送方在收到一定数量(由具体实现决定)的ACK_3{}后就知道之前所发送的数据分组出现了差错,就不用等待超时计时器超时后再进行重传。当然,如果发送方没有收到足够的重复确认,仍然是等待超时重传。

(4)发送窗口W_T{}的范围

最后对W_T{}的范围进行一些细节说明:

为什么要大于1?

其实不难看出,GBN协议的接收窗口的取值和SW协议的取值是一样的,都是每次接收一个分组。  那么,如果W_T{}的值为1了,发送也是每次发送一个分组,那这不就是SW协议嘛! 所以当W_T{}的值为1时,就是SW协议。

为什么最大值只能取到2^{n}-1

假设n的取值仍为3,那么最大值只能是7。我们用反证法进行证明。

我非要取W_T{}的值为8,我们现在假设一种情况(默认数据分组全部正确按序到达):

发送方发送的数据分组全部被成功接收,但是接收方的确认分组在传输过程中丢失了,这必然会引起发送方超时重传。

而由于接收方已经成功接收第一次发来的数据分组,所以接收窗口落在了新的序号为0的位置上,但是发送方因为重传,新一次的发送仍然是上一次发送过的数据分组,接收方判断序号一致,将其接收,并向发送窗口发送确认分组。接收方无法分辨新旧分组,进而产生了分组重复的问题。很明显,这种情况已经出现了差错。   这种情况其实也可以说为GBN协议的确认丢失的情况。

仔细想想,n个比特产生的位数共2^{n}个,当我们发送窗口的值恰巧取2^{n}个值就会引发上面的问题,所以最大值只能取2^{n}-1个。

我们不难发现GBN协议的缺点,如果出现有差错的情况,只要有一个分组出现问题后面的分组都会被丢弃,这是因为接收窗口的值为1,接收方只能按序接收分组。那么是否可以将接收窗口也进行改变呢?

答案是肯定的,所以就有了第三种SR协议。

3.选择重传协议SR

为了不再出现像GBN协议那样的资源浪费,可以采取措施只重传出现误码的分组。为此,接收方窗口W_R{}的值需要大于1,这样只要是按序到达并且无误码的分组接收方都可以先收下。这就是SR协议的核心。注意:为了只重传出现误码的数据分组,SR协议不再使用累积确认。

对于发送方:采用发送窗口(W_T{})来限制可连续发送数据分组的个数。

W_T{}是有取值范围的,为1<W _T{} \leq 2^{n-1}, 式中的n为用多少个比特数给分组编序号。

对于接收方:接收窗口(W_R{})的值一般和发送窗口的值相等。

我们仍采用3个比特给分组数编号,那么有1<W _T{} \leq 4。 只要W_T{} 在该范围内都可以取值,我们假设W_T{}为4。那么W_R{}的值也为4。如图:

 无差错情况和GBN的无差错情况类似,只是接收窗口发生了变化,这里不再做过多说明。

(1)有差错情况:

如图:假设发送方发送的数据分组在传输过程中1号分组丢失了,其余分组正确按序到达。

接收方在接收到0号分组后,接收窗口会向前滑动一个位置,但是之后的接收中未收到1号数据分组,接收方就先将按序到达的2号和3号接收,并发送它们的确认分组,此时接收窗口不会进行滑动。

发送方收到0号分组的确认分组后,发送窗口向前滑动一个位置,但是之后的接收并未收到1号确认分组,发送方先将2号和3号分组记录,保证它们不会超时重传,此时发送窗口不会进行滑动。在此过程中,发送窗口还会将新落入窗口的4号分组发送出去。

我们可以假设后续过程:接收方接收到4号分组后,确认无误码接收并发送确认分组,但是因为仍为收到1号分组,所以接收窗口仍然不会滑动。

发送方收到4号分组的确认分组后,将其记录保证4号分组不会超时重传。但因为没有收到1号分组的确认分组,所以发送窗口仍然不会滑动。 等超时计时器到时,便会引发超时重传,因为2、3、4号分组都已记录确认分组,所以重传的只有1号分组。

这次接收方成功接收到了1号分组,向发送方发送4号分组的确认分组,随后接收窗口向前滑动4个位置。

发送方接收到了1号确认分组,发送窗口向前滑动4个位置,随后将新落入窗口的分组发送出去......

 我们可以看到,双方都是每按序接收一个分组,窗口就向前滑动一个位置。如果中间有未成功接收到的,就在窗口等这个分组的同时接收窗口内的其他分组,期间窗口即便接收了其他分组也不会进行滑动。如果接收到一个分组,相邻的分组都已经按序成功接收到。窗口就会滑动到第一个还未按序收到的分组的位置。

(2)窗口的范围

发送窗口:

1<W _T{} \leq 2^{n-1}

如果W _T=1,就和停止等待协议相同。(此时的W _R只能是1

W _T> 2^{n-1}时,接收方无法分辨新旧分组,会出现分组重复的情况。

同样地,我们非要超过其最大值,取W _T=5,W _R=5,

发送方先将发送窗口内的数据分组连续发送出去。

接收方全部成功接收,并向发送方发送每个数据分组的确认分组,接收窗口向前滑动5个位置。但是1号确认分组在传输过程中丢失。

发送方因为没有收到1号分组的确认分组,只会向前滑动一个位置,并记录其他按序到达的分组。并将5号分组发送出去。计时器到时后就会引起重传, 很明显只会重传1号数据分组。

如果是图中的状态(假设5号分组已经发送并成功接收),重传的1号分组会去哪?

很明显就被接收窗口接收到对应的序号位置了,但实际这个分组之前已经被接收了,也就是出现分组重复的差错了。

接收窗口的范围:

1<W _R{} \leq W_T{}

W _R=1时,如果W _T> 1,那就是回退GBN协议。

W _R> W_T{}时,没有意义。

一般接收窗口取和发送窗口一样大的值。

二、总结:

本篇博客主要讨论了可靠传输的三个机制。简单来讲,GBN协议就是在SW协议的基础上对发送窗口进行了改变。因为发一个分组就需要等待,信道利用率太低。SR协议是在GBN协议的基础上对接收窗口进行了改变,因为对于一次只能接收一个分组的接收窗口来讲,如果对应的分组出现差错,其余按序到达的都会被丢弃,这样太浪费资源了。

对窗口限制范围就是为了防止一些分组丢失的情况导致分组重复。

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

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

相关文章

Python中5种下划线的含义,你都知道吗

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 话不多说&#xff0c;直接开搞&#xff0c;如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 1.单前导下划线&#xff1a;_var 当涉及到变量和方法名称时&#xff0c;单个下划线前缀有一个约定俗成的含义。 它是对程…

【04 英语语法:非谓语动词(不定式、分词、动名词)详解】

非谓语动词 非谓语动词&#xff1a;不定式&#xff0c;分词&#xff0c;动名词1. 不定式&#xff1a;动词原形&#xff08;do/原形不定式&#xff09;&#xff0c;带 to 不定式 &#xff08;to do&#xff09;1.1 带 to 不定式&#xff08;to do&#xff09;的功能&#xff1a;…

Apipost预执行脚本如何调用外部jar包

近期版本更新中Apipost推出插件管理&#xff0c;可以直接在预、后执行脚本中调用本地的脚本文件 导入脚本 在「系统设置」—「插件管理」中打开目录将要执行的脚本文件拖入到文件夹下 执行脚本 需要获取请求参数&#xff1a; const requestData request.request_bodys; 在…

版本控制工具Git集成IDEA的学习笔记(第二篇GitHub)

目录 一、团队内协作和跨团队协作讲述 1、团队内协作 2、跨团队协作 二、团队内合作交互方式 1、初始化本地库 2、创建远程库 3、在本地创建远程库地址的别名 4、推送操作 5、克隆操作 6、邀请加入团队&#xff0c;push操作 7、远程库修改的拉取操作 8、远程库修改…

【Vue】yarn 安装包时权限不足或者文件夹被占用导致安装失败

在一个 Vue3 项目中&#xff0c;用 yarn 安装 Vue 插件或者 Vue-Router 时&#xff0c;出现同样的 error &#xff0c;如下&#xff1a; An unexpected error occurred: “EPERM: operation not permitted, unlink ‘C:\Codefield\项目\yupao-frontend\node_modules\esbuild\w…

zabbix配置微信报警

如有错误&#xff0c;敬请谅解&#xff01; 此文章仅为本人学习笔记&#xff0c;仅供参考&#xff0c;如有冒犯&#xff0c;请联系作者删除&#xff01;&#xff01; 6.1 注册企业微信 企业微信注册地址&#xff1a;https://work.weixin.qq.com 设置总部门名称添加成员 也可以…

小程序项目组件的基本应用

宿主环境&#xff1a;程序运行必须依赖的环境 小程序的宿主环境 ---->手机微信(定位、扫码、支付等) 小程序的通信模型&#xff1a; 渲染层和逻辑层之间的通信(微信客户端转发)逻辑层和第三方服务器之间的通信(微信客户端转发) 小程序的运行机制&#xff1a; 启动&#xff1…

chrome屏幕共享插件的获取和配置

文章目录 1. 下载插件2. 加载插件3. 打开这个文件4. 关掉开发者模式 1. 下载插件 https://github.com/webrtc/samples/blob/gh-pages/release/desktopCaptureExtension.zip 不过我下载不了&#xff0c;找别人要了这个文件 解压 2. 加载插件 选择 扩展程序—》管理扩展程序 加…

拥抱变革 展现PMO力量 | 易趋受邀出席2023第十二届中国PMO大会

2023年8月12-13日&#xff0c;由PMO评论主办的第十二届中国PMO大会&#xff08;以下简称PMO大会&#xff09;在北京成功落幕。 &#xff08;主论坛一现场&#xff09; 本届大会以“拥抱变革 展现PMO力量”为主题&#xff0c;设置了“PMO与组织变革”、“PMO与组织战略”2个主论…

vueuse常用方法

useDateFormat 时间格式化 <script setup lang"ts">import { useNow, useDateFormat } from vueuse/coreconst formatted useDateFormat(useNow(), YYYY-MM-DD HH:mm:ss)</script><template><div>{{ formatted }}</div> </templa…

【爱书不爱输的程序猿】公网访问本地搭建的WEB服务器之详细教程

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本地电脑搭建Web服务器并用cpolar发布至公网访问 前言1. 首先将PHPStudy、WordPress、cpolar下载到电脑2. 安装PHPStudy3. 安装cpolar&#xff0c;进入Web-UI界面4.安装wordpress5.…

赋能智慧零售,美格智能助力升级科技感购物体验

近期&#xff0c;一段消费者在商场使用智能购物车的视频冲上社交平台热搜榜&#xff0c;获得百万点赞&#xff0c;网友纷纷感慨科技进步的速度。许多人会好奇智能购物车和普通购物车有什么区别呢&#xff1f;智能购物车具有用户识别、室内定位、数据采集、精准营销、自助结算、…

低代码PaaS平台源码:基于Kubernetes云原生技术,快速构建企业级应用程序

低代码PaaS平台 低代码PaaS平台可以在云端开发、部署、运行低代码应用程序。使用独立数据库模型&#xff0c;基于Kubernetes云原生技术&#xff0c;每个租户均可拥有一套独立的存储、数据库、代码和命名空间&#xff0c;实现了100%的租户数据隔离&#xff0c;并可以随时迁移到…

【RP2040】香瓜树莓派RP2040之LED

本文最后修改时间&#xff1a;2022年09月05日 11:02 一、本节简介 本节介绍如何编写一个LED驱动。 二、实验平台 1、硬件平台 1&#xff09;树莓派pico开发板 ①树莓派pico开发板*2 ②micro usb数据线*2 2&#xff09;电脑 2、软件平台 1&#xff09;VS CODE 三、版权声…

ppt转pdf免费的工具哪个好用?免费PPT转换为PDF的方法分享

在我们的工作和学习中&#xff0c;将PPT文件转换为PDF格式对于分享和储存具有重要意义。PPT文件是一种常用的演示工具&#xff0c;用于展示和传达信息。然而&#xff0c;PPT文件在不同的平台和设备上可能存在格式兼容性的问题&#xff0c;而且文件大小较大&#xff0c;不方便共…

C#__使用Type类反射数据的基本用法

// 简单介绍 // 元数据&#xff08;metadata&#xff09;&#xff1a;与程序及其类型有关的数据。 // 反射&#xff1a;一个运行的程序查看本身元数据或其他程序集中的元数据的行为 // Assembly类&#xff1a;允许访问给定程序集的元数据&#xff0c;包含了可以加载和执行程序…

爬虫IP时效问题:优化爬虫IP使用效果实用技巧

目录 1. 使用稳定的代理IP服务提供商&#xff1a; 2. 定期检测代理IP的可用性&#xff1a; 3. 配置合理的代理IP切换策略&#xff1a; 4. 使用代理IP池&#xff1a; 5. 考虑代理IP的地理位置和速度&#xff1a; 6. 设置合理的请求间隔和并发量&#xff1a; 总结 在爬虫过…

Max Compute 操作记录

编译 max compute-spark git clone https://github.com/aliyun/MaxCompute-Spark cd spark-3.x mvn clean package -DskipTests在 target 目录下生成 以下两个文件。 spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar spark-examples_2.12-1.0.0-SNAPSHOT.jar2. DataWorks 上传…

计组 | 中断是什么?中断流程有哪些?什么情况下响应中断?

前言 记录一些计组相关联的题集与知识点&#xff0c;方便记忆与理解。 中断 总结 IBM370系统&#xff1a; IBM370计算机将中断类分为机器校验、访管、程序性、外部、输入/输出、重新启动6类。 中断响应优先级级别最低的是 重新启动中断 中断响应优先级级别最高的中断类型是…

ARouter基本使用及原理分析

作者&#xff1a;愿天深海 ARouter简介 ARouter是阿里开源的一款帮助Android App进行组件化改造的路由框架&#xff0c;是Android平台中对页面和服务提供路由功能的中间件&#xff0c;可以实现在不同模块的Activity之间跳转。 ARouter的特点是灵活性强还能帮助项目解耦。 除…