41、可靠传输——停等ARQ

news2024/12/28 3:36:16

前面两节内容我们学习了传输层的基本概况的一些知识,包括传输层在TCP/IP协议栈中负责的任务、传输层的两大协议,以及端口号、套接字等一些基本的概念。从这一节开始,我们将开启两大协议中TCP协议的学习。

但是,经过之前的学习,我们知道TCP提供可靠传输的机制,也就是TCP具有可靠传输的特性。因此,在正式学习TCP协议之前,我们先要搞清楚一些可靠传输的工作原理,主要就是即将要介绍的ARQ协议。ARQ协议分为停止等待ARQ和连续ARQ,本节我们先学习停止等待ARQ,简称“停等ARQ”。

而我们要知道的一点是,ARQ并不是应用在传输层的(因为传输层保证可靠传输的机制要比ARQ复杂的多)ARQ是为了应对早期通信链路的质量不太可靠的问题,在数据链路层保证可靠传输的。但现在随着光纤等技术的发展,底层通信链路的质量大大提高,因此慢慢的在数据链路层也就不需要这种可靠机制了,不过这种机制的原理是我们需要清楚的,这可以为后面学习传输层TCP协议的可靠传输打下一个比较好的认知基础


停止等待

上面我们说,停止等待是是一种保证数据可靠传输的机制。可靠传输的意思就是,信息的发送方发出去的数据,能够收到对方的回应。也就是接收方收到信息之后,要给发送方回应一个确认收到。

停止等待就是基于可靠传输的这种思想而设计出来的一种机制,具体过程是:发送方每发送完一个报文,就停止发送,然后等待对方的确认,在收到对方发来的确认之后再继续发送下一个报文。如下面的例图所示。

可见,使用这样的确认机制确实能够在一定程度上保证数据的可靠传输。当然,接收方也不总是会发送确认报文。由于网络的不可靠性,在传输过程中,不免有时候会出现一些错误(例如由于噪声的影响),当接收方检测到报文有错误时,也可以发送一个否认报文给发送方,让发送方知道传输的数据出了错,发送方再把这些数据重发一次。但是由于这样做,会让协议的设计与实现变的复杂,所以现在实用的可靠传输协议都不使用这种否认报文了。


自动重传请求(ARQ)

在不使用否认报文这种方法之后,就产生了自动重传请求协议,即“ARQ”协议。自动重传请求的思想在于,接收方收到错误数据之后,只是把它简单地丢弃掉即可,不需要单独请求发送方再重发一次数据,而发送方是否需要重发数据这件事情由发送方自己来负责解决。

像上面第一个例图那样,发送方的每一个报文,接收方都正常收到了,也都依次向发送方回复了确认,发送方也都正常的收到了确认。

但是,数据在传输过程中由于通信线路或者网络设备的故障,仍然会导致数据的传输出现一些问题。比如,在数据传输过程中,因为噪声的影响导致数据某些地方出了错误,接收方收到以后通过校验计算,检测出了这是有错误的数据,因此接收方就会把它丢弃掉;还有就是由于网络设备故障,导致网络出现环路,那么数据包最终将会“TTL=0”,导致接收方根本收不到数据。再有就是,接收方正常收到了数据,但是回复给发送方的“确认”却在传输中丢失了。

这样的几种情况都会导致发送方不知道自己的数据有没有被接收方收到,因为发送方一直在等待着对方“确认”的到来,收不到“确认”就不会继续发送后面数据。所以必须想办法让发送方能够处理这个问题,这个办法就是使用超时重传。

超时重传是在数据的发送方设置一个超时定时器,在每发送完一个报文之后,超时定时器就开始倒计时,如果在时间到之前收到了对方发来的确认,那么定时器就被撤销,接着发送后面的报文,定时器重新开始倒计时;而如果在时间到之前没有收到对方发来的确认,那么发送方就可以认为“接收方没有正常收到我的报文”,所以我要把刚才的报文再重传一遍。利用这种办法就实现了报文的自动重传。

这种机制,我们描述起来简单,但是实现起来要有多方面的考虑。例如有这样的两个问题:

问题1:如果当前网络并没有什么故障,只是信息比较拥堵而已,发送方发出去的报文正在网络中排队,这时候发送方的定时器时间到,发送方就会再次重传一遍刚才的数据。等发送方刚把重传的数据发出去,第一次发出的报文正好到达了接收方,接收方会回应一个“确认”。等过不了一会儿,接收方又会收到发送方第二次发来的报文。那么问题来了,接收方怎么才能判断第二次收到的这个报文是一个新发送的呢,还是一个重传的报文呢?如果是重传的,那该怎么处理呢?

问题2:发送方的定时器倒计时要设置成多少比较合适呢?时间设置的太短了,会产生不必要的重传,要是设置的太长了,那么整个的传输效率就会很低。

首先第一个问题,比较合理的解决办法是:给每一个报文编号(无论是数据报文还是确认报文,都要有相应的编号),在停等ARQ协议中,使用一个比特位编号就可以了。这样就能区分开哪些是新发来的,哪些是重传的。如果识别出是重传的报文,那就把它丢弃掉就可以了,同时再向发送方回复刚才的“确认”。第二个问题,保证数据能够到达接收方,接收方回复确认,这是一个往返的时间,同时又考虑到网络可能会出现拥塞问题,所以定时器的时间应设置为“比平均往返时间更长一些”比较合理。

最后,还要考虑的一个方面就是,接收方回复给发送方的“确认”,如果在传输过程中出了问题怎么办。“确认”报文也是有可能会丢失的,也是有可能由于当时网络情况的拥堵,“确认”报文在发送方定时器时间到之前没有到达的。就像下面的例图展示的这样:

首先,如果“确认”报文丢失了怎么办?完全不用接收方担心,发送方的定时器会自动超时,所以发送方就会再重传一份,接收方收到这个报文之后,由于有编号的存在,所以接收方能够识别出这是一个重传的报文,然后就会把它丢弃掉,再次发送刚才的“确认”。然后,如果是因为当时网络拥堵,“确认”报文在定时器时间到之前没有到达发送方,所以发送方就会重传报文,接收方收到后把它丢弃掉,重新发送“确认”。等过了一会儿,发送方收到了第一次的“确认”,经过对比编号发现,这是一个“迟到”的确认,直接丢弃即可。


本节关于停止等待ARQ的过程就是这些,关键要理解的是:ARQ是一种可靠传输机制、停止等待的工作过程,以及自动重传是依靠超时定时器来进行的。但是ARQ协议除了有停等ARQ,还有连续ARQ,下一节我们继续学习。

参考教材:谢希仁《计算机网络》第八版

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

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

相关文章

企望制造ERP系统 RCE漏洞复现(HW0day)

0x01 产品简介 企望制造纸箱业erp系统由深知纸箱行业特点和业务流程的多位IT专家打造,具有国际先进的管理方式,将现代化的管理方式融入erp软件中,让企业分分钟就拥有科学的管理经验。 erp的功能包括成本核算、报价定价、订单下达、生产下单、…

上传excel文件

文件上传&#xff0c;其实就是用el-upload组件来实现上传&#xff0c;只是换了样式&#xff0c;和图片上传一样 <el-form-item label"选择文件"><el-input placeholder"请选择文件" v-model"form.file" disabled style"width: 45…

自定义批量修改图像位深度

什么是图像位深度&#xff1f;&#xff1f;&#xff1f; 图像位深度(Bit Depth)是指图像中每个像素所占的比特数,它决定了图像能够表示的颜色数量和亮度层级。 简单来说: 位深度越高,每个像素所能表示的颜色数和亮度等级越多。位深度越低,每个像素所能表示的颜色数和亮度等级…

【设备树笔记整理4】内核对设备树的处理

1 从源头分析_内核head.S对dtb的简单处理 1.1 bootloader向内核传递的参数 &#xff08;1&#xff09;bootloader启动内核时&#xff0c;会设置r0&#xff0c;r1&#xff0c;r2三个寄存器&#xff1a; r0一般设置为0;r1一般设置为machine_id (在使用设备树时该参数没有被使用…

809协议nodejs编写笔记(还在更新)

一、总体流程 数据首先通过receiver接受层接收&#xff0c;去掉标识头和标识尾&#xff1b;再进入depacker解包层进行解包&#xff0c;把标识头分解出来并解析&#xff1b;之后发给handler处理层根据不同的消息id选择使用不同的业务逻辑&#xff1b;如果有应答&#xff0c;则通…

Vue2(组件开发)

目录 前言一&#xff0c;组件的使用二&#xff0c;插槽slot三&#xff0c;refs和parent四&#xff0c;父子组件间的通信4.1&#xff0c;父传子 &#xff1a;父传子的时候&#xff0c;通过属性传递4.2&#xff0c;父组件监听自定义事件 五&#xff0c;非父子组件的通信六&#x…

JL701N编译后查看内存使用情况

编译之后&#xff0c;可以在 cpu/br28/tools/sdk.map 中查看实际的使用情况.

MySQL 账号权限

mysql 在安装好后&#xff0c;默认是没有远端管理账号。 一、账号管理 1. 查看账号列表 MySQL用户账号和信息存储在名为 mysql 的数据库中。一般不需要直接访问 mysql 数据库和表&#xff0c;但有时需要直接访问。例如&#xff0c;查看数据库所有用户账号列表时。 USE mysql; …

第G2周:人脸图像生成(DCGAN)

&#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同学啊] 1. DCGAN原理 深度卷积对抗网络&#xff08;Deep Convolutional Generative Adversarial Networks, DCGAN&#…

Python的十二道编程题,码住战胜一切

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 一、计算文件大小 import os def get_size(path):size 0l [path]while l:path l.pop()lst os.listdir(path)for name in lst:son_path os.path.join(path,name)if os.path.isfile(son_path):size os.path.getsize(son_…

个人博客系统测试报告

文章目录 一、功能测试1.编写测试用例2.总结测试后发现的BUG 二、UI自动化测试0.搭建测试环境1. 创建公共类2.注册页面UI自动化测试用例编写3.登录页面UI自动化测试用例编写4.用户博客列表页面自动化测试5. 修改个信息页面6. 文章编辑页面7. 设置密保问题发现bug 8. 所有用户文…

QTreeView显示多级多列目录

效果图&#xff1a; 头文件&#xff1a; QStandardItemModel *m_treeMode;源文件 m_treeMode new QStandardItemModel(0,1,this);ui->treeView->setModel(m_treeMode);//控制第一列节点个数int mainLevel 3;for (int i 0; i < mainLevel; i) {QList<QStandar…

【设计模式】非GOF的常见设计模型

结构型模式 系列综述&#xff1a; 来源&#xff1a;该系列是主要参考《大话设计模式》和《设计模式(可复用面向对象软件的基础)》&#xff0c;其他详细知识点拷验来自于各大平台大佬的博客。 总结&#xff1a;设计模式汇总篇 如果对你有用&#xff0c;希望关注点赞收藏一波。 文…

无需停服!PostgreSQL数据迁移工具-NineData

PostgreSQL 是一种备受开发者和企业青睐的关系型数据库&#xff0c;其丰富的数据类型、地理空间负载和强大的扩展能力等特性使其备受欢迎。然而&#xff0c;在企业使用 PostgreSQL 承载应用的过程中&#xff0c;由于业务需要上云、跨云、下云、跨机房迁移、跨地域迁移、数据库版…

C语言学习笔记---操作符详解

C语言程序设计笔记---012 C语言操作符1、算数操作符1.1、算术操作符例程 2、移位操作符2.1、移位操作符例程12.2、移位操作符例程22.3、移位操作符例程3 3、位操作符3.1、位操作符例程13.2、位操作符例程23.3、位操作符例程3 --按位与&1扩展3.4、位操作符例程4 --按位异或^…

使用SpringAop切面编程通过Spel表达式实现Controller权限控制

目录 参考一、概念SpEL表达式 二、开发引入包定义注解定义切面定义用户上下文 三、测试新建Service在方法上注解新建Service在类上注解运行 参考 SpringBoot&#xff1a;SpEL让复杂权限控制变得很简单 一、概念 对于在Springboot中&#xff0c;利用自定义注解切面来实现接口…

LVGL学习笔记 30 - List(列表)

目录 1. 添加文本 2. 添加按钮 3. 事件 4. 修改样式 4.1 背景色 4.2 改变项的颜色 列表是一个垂直布局的矩形&#xff0c;可以向其中添加按钮和文本。 lv_obj_t* list1 lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1); 部件包含&…

Linux命令200例:adduser用于创建新用户

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

求Win11系统virtualbox+vagrant安装MacOS虚拟机

文章目录 一、背景二、素材2.1、virtualboxvagrant 三、问题3.1、安装失败3.2、第二个失败3.3、网络说 四、求助 一、背景 题主&#xff0c;主要是穷&#xff0c;没钱买mac笔记本或相关系统的苹果产品&#xff0c;哈哈&#xff0c;偶尔也有用过MacOS系统&#xff0c;只是还没有…

app专项测试:app弱网测试

目录 弱网测试背景 网络测试要点 弱网测试关注指标 弱网测试工具 fiddler模拟网络延时场景 网络设置参考 Network Emulator Toolkit模拟网络丢包场景&#xff08;windows网络&#xff09; APP弱网测试 弱网使用工具&#xff1a; app弱网测试要点 APP网络测试要点 网络…