《计算机网络——自顶向下方法》精炼——3.4.1-3.4.3

news2024/11/26 4:45:20

聪明出于勤奋,天才在于积累。——华罗庚

文章目录

  • 对协议的进一步改进
    • rdt2.1
    • rdt2.2
    • rdt3.0:含有比特差错和丢包的可靠数据传输协议
  • 流水线协议
    • 回退n步(GBN)

对协议的进一步改进

rdt2.1

在上一篇文章中,我们讲到对于产生比特差错的信道,我们引入了ACK和NAK报文进行对发送数据准确性的确认。但另一个问题随之产生:如果ACK和NAK报文也受损了怎么办呢?
我们通过将报文打上标识来解决这个问题。由于在实际过程中,我们只需要辨别当前要发送的分组和它的上一个分组(ACK或NAK报文出问题的分组),因此我们只需要将0和1两个标识反复使用就可以了。例如,当前分组标识是0,那么下一个分组标识为1。注意,此时ACK和NAK报文指示的就是发送方最近发送的分组,因此无需对他们附加标识,这一点如果不理解的话可以自己推一下这个过程。
打上标识后的协议称为rdt2.1,下面是rdt2.1的FSM:
请添加图片描述
请添加图片描述
在发送方中:

  • 当上层调用0时,将分组封装后进行运输,注意在封装时多了一个0作为标记。
  • 处于等待对分组0的NAK或ACK报文状态时,如果接收到了响应报文,但报文受损或报文内容为NAK,则一致视为NAK报文,进行重传处理;如果确定响应报文是ACK报文,那么确认分组0成功发送,开始等待发送分组1。
  • 发送分组1并处理响应报文的方式与分组0相同

在接收方中,这个过程就要相对复杂一些:

  • 处于等待报文0的状态时,接收到来自下层的报文后,如果接收到的报文损坏,发送NAK报文,继续等待报文0;如果接收到的是报文1,即上一个报文,那么发送ACK报文,告知发送方报文1已经收到,继续等待报文0;如果接收到了正确的报文0,那么接收报文0,发送ACK报文,转换到等待报文1的状态
  • 等待报文1的状态处理和报文0相同。 、

注意,在rdt2.1中,接收方给发送方发送的ACK报文,其所指的是发送方最后一次发送的报文内容没有问题已经收到,至于是不是接收方想要的报文,是不一定的。

rdt2.2

我们可以用一种巧妙的方式省略NAK。要做到这一点,我们在要使用NAK时再次向发送方发送上一个正确分组的ACK,即和上一次向发送方发送的完全一样的报文,连续收到两个一样的ACK报文时,发送方会知道新发送的报文发生了故障,没有被正确接收。为了区分上一个分组和新分组的ACK报文,我们将ACK报文也打上标识,称为ACK0和ACK1。
在实现方面,它和rdt2.1没有太大区别,只需要将ACK和NAK报文换成ACK0或ACK1,在发送方使用的isACK函数中添加ACK报文的01标识作为参数以指明是哪一个分组的ACK报文:
在这里插入图片描述
在这里插入图片描述

rdt3.0:含有比特差错和丢包的可靠数据传输协议

含有丢包意味着分组压根没有运输到接收方,这个时候接收方不会向发送方发送任何相应报文,由于到这里我们的rdt协议还是一个停等协议,在转换条件不满足前不会转换状态,因此我们需要新增转换条件来应对丢包的情况。
我们新增一个倒计数定时器,当发送方每发送一个报文时,它启动一个定时器,收到响应报文时,它停止定时器;如果定时器超时,判定这个报文丢包,重传该报文并为重传的报文重启计时器。加入了定时器的协议被称为rdt3.0,也被称为比特交替协议。其发送方FSM如下:
在这里插入图片描述
其中start_timer指重启计时器,stop_timer指停止计时器,timeout指超时。

流水线协议

在停等协议中,由于发送方和接收方在完成状态转换后都只能等着,在此期间不做任何事情,这大大制约了发送速率。为了解决这一问题,我们引入流水线协议,即发送方一次发送多个报文而无需等待来自接收方的响应:
在这里插入图片描述
我们采用回退n步选择重传两种机制来实现这个协议。

回退n步(GBN)

请添加图片描述
发送方的分组序号分为4部分:已经发送且确认收到的分组序号,已经发送但还未被确认的分组序号,还未被上层使用的但处于可用状态(即窗口内)的分组序号,不可用的分组序号。
其中基序号是当前窗口的第一个序号,下一个序号是当下一个分组被传输时将使用的序号,窗口长度是发送方一次最多可以不被确认的分组数量,此时ACK报文标记范围是[0,n-1]。
GBN协议也被称为滑动窗口协议,因为它每次收到ACK报文时窗口都会向前滑动一段距离。另外,在这个协议中,我们将计时器用于未确认的第一个分组,因为这个分组相对其他等待确认的分组来说发送时间最长。
下面是这个协议的FSM:
请添加图片描述
在发送方中:

  • 起始时将基序号和下一个序号都设为1
  • 发送数据时,如果下一个序号在窗口内(窗口还没满),则封装并发送数据;如果基序号等于下一个序号(说明这是还没得到确认的第一个分组),则为这个分组启动计时器。最后在任何条件下都要将下一个序号向后挪一个。如果窗口已满,直接拒绝发送数据。
  • 超时时,重传未得到确认的所有报文并重启计时器。
  • 收到ACK报文时,将窗口向右滑动,使基序号位于ACK报文所确认分组的下一个位置;如果基序号等于下一个序号(没有未确认的分组),停止计时器,反之重启计时器。

在GBN协议中,有些功能是由接收方提供的,因此如果你有些地方不理解,不妨先看下面的接收方FSM:
请添加图片描述
在接收方中:

  • expectedseqnum指接收方期待得到的分组,hassequam()函数通过检验序号检验分组是否是期待的那个。在GBN协议中有一个类似于递推的机制,当分组收到了分组n-1并确认n-1是它期待的分组,那么它期待的分组将变为n,否则期待分组不变。这个机制可以判断分组是否按序发送。
  • 起始状态下,期待得到的分组序号为1并发送一个1之前的分组0已经确认的ACK报文。
  • 当收到准确且是所期待的分组时,接收方接收该分组,发送ACK报文,将所期待分组序号向后移一位。例如,拥有了n-1,并收到所期待的分组n时,新的期待分组会变为n+1.
  • 其他所有情况,重传上一次的ACK报文。

正如我们所说,当发送方收到一个ACK报文时,代表接收方确认在该报文所响应的分组之前都已按序发送,因此可以认为该分组之前的分组也已经被确认(可能他们的ACK报文发生丢包),因此直接将窗口滑动到确认分组的下一位是合理的。
如果一个失序分组到达了接收方,接收方会选择直接丢弃。这是因为如果不这样做,则需要缓存失序分组,得不偿失。
在实际编程GBN协议时,我们也会根据这些函数实现功能的过程进行编写,这种思想被称为基于事件的编程。
请添加图片描述
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!

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

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

相关文章

A2-RIDE Long-tailed recognition by routing diverse distribution-aware experts

文章目录 0. Abstract1. Introduction2. Related Works3. RIDE:ROUTING DIVERSE DISTRIBUTION-AWARE EXPERTS4. Experiments5. Summary论文总结长尾数据分布 (Long-tailed Data Distribution)RIDE方法及模型1. **Multi-expert framework**2. **Routing diversified …

RabbitMQ如何保证顺序消费

目录标题 生产者有序的情况下如何保证顺序生产单个消费者多个消费者 生产者无序的情况下消息返回队列消息不返回队列 生产者有序的情况下 如何保证顺序生产 单一生产者:消息生产的顺序性仅支持单一生产者。 串行发送:如果生产者采用多线程并行发送&…

借助国内ChatGPT平替+markmap/Xmind飞速生成思维导图

系列文章目录 借助国内ChatGPT平替MindShow,飞速制作PPT 文章目录 系列文章目录前言一、科大讯飞“星火”认知大模型二、使用步骤1.借助讯飞星火生成思维导图的文案2.选择markmap绘制思维导图3.选择Xmind绘制思维导图 总结 前言 随着人工智能技术的不断发展&#x…

自动操作魔法师4.9.0.0

产品下载 (won-soft.com) 如下图所示: 彻底远离枯燥乏味的工作 在日常办公中,开发票,更新客户资料,打印报表,录入数据等等工作是极为重要,但大部分时候这些工作是相当枯燥的。你不得得一遍又一遍的进行重复…

第二章: Mybatis-Plus 快速入门

目录 1. 准备工作 数据库准备: 创建Maven 父模块 2. Mybatis 整合 Mybatis-Plus 创建子模块: 准备 log4j.properties 日志文件 3. Mybatis 原生写法实现查询User 编写mybatis-config.xml文件: 编写User实体对象:(这里使用lombok进行了…

Hyper-V搭建免费桌面云

Hyper-V 是 Microsoft 的硬件虚拟化产品。 它用于创建并运行计算机的软件版本,称为“虚拟机”。 每个虚拟机都像一台完整的计算机一样运行操作系统和程序。 如果需要计算资源,虚拟机可提供更大的灵活性、帮助节省时间和金钱,并且与在物理硬件…

【AI面试】RoI Pooling 和 RoI Align 辨析

RoI Pooling和RoI Align是两种常用的目标检测中的RoI特征提取方法。它们的主要区别在于:如何将不同大小的RoI对齐到固定大小的特征图上,并在这个过程中保留更多的空间信息。 一、RoI Pooling RoI Pooling最早是在Fast R-CNN中提出的,它的基…

MySQL MHA

概述 什么是 MHA MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中…

JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)

文章目录 一、什么是Comparator二、Java compare方法和compareTo方法三、java中Comparable和Comparator的区别 Comparator的例子三、demo:java8使用Lambda表达式比较器Comparator给List对象排序,按时间、数字、字典排序 一、什么是Comparator Comparato…

Unittest单元测试框架之unittest_执行用例的详细信息

unittest_执行用例的详细信息 用unittest.main()执行测试集 这里的verbosity是一个选项,表示测试结果的信息复杂度,有三个值:0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功801 (默认模式): 非常类似静默模式 只是在每…

MySQL数据库从入门到精通学习第3天(查看,选择,修改,删除数据库)

查看,选择,修改,删除数据库 查看数据库选择数据库修改数据库删除数据库 查看数据库 创建完数据库,可以通过SHOW命令来查看所有的数据库信息,语法: SHOW DATABASES [LIKE %模式% WHERE 条件]; >>>…

MySQL进阶-索引

本文介绍MySQL索引的结构、语法、使用规则等 文章目录 索引介绍索引结构二叉树B-TreeBTreeHash 索引分类思考题 语法SQL性能分析SQL的执行频率慢查询日志PROFILE详情EXPLAIN执行计划 索引使用规则最左前缀法则索引失效情况索引列运算字符串不加引号模糊查询or连接的条件数据分布…

(免费分享)基于微信小程序的旅游系统

目 录 1绪论 1 1.1概述 1 1.2课题意义 2 1.3主要内容 2 2 相关技术简介 3 2.1 HBuilder X技术介绍 4 2.2 JAVA简介 5 2.3 MYSQL数据库 6 2.4 SSM框架 7 3 系统分析 8 3.1 系统需求分析 9 3.1.1系统功能需求 10 3.1.2系统技术需求 11 3.1.3系统安全需求 12 3.2 可行性分析 13 3…

postgresql 词法/语法(scanner/parser)中flex/bison介绍

专栏内容:postgresql内核源码分析个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 词法分析与语法分析的关系 工具介绍 flex的介绍 bison的介绍 flex的…

【云原生进阶之PaaS中间件】第一章Redis-2.2Redis IO模型

1 IO模型 linux系统也是一种应用,它是基于计算机硬件的一种操作系统软件。当我们接收一次网络传输,计算机硬件的网卡会从网络中将读到的字节流写到linux的buffer缓冲区内存中,然后用户空间会调用linux对外暴露的接口,将linux中的b…

将虚拟机dmesg日志内容通过串口输出到windows下文件中

将虚拟机dmesg日志内容通过串口输出到windows下文件中 文章目录 将虚拟机dmesg日志内容通过串口输出到windows下文件中a. 设置vmware添加serial port, 使用文件作为串口b. 启动ubuntu,修改/etc/default/grubc. ubuntu使用root用户登录d. 修改printk优先级&#xff0…

数据科学中使用的17 种相似性和相异性度量之欧氏距离

目录 1简介 2距离函数 2.1 L2范数(欧氏距离) 1简介 在数据科学中,相似性度量是一种衡量数据样本如何相互关联或相互接近的方法。另一方面,相异性度量是告诉数据对象有多少是不同的。此外,当相似的数据样本被分组到一…

异常检测专栏(一)异常检测概述

前言 异常检测一直是机器学习中一个活跃的研究领域,由于风险管理、合规、安全、将抗和医疗风险以及人工智能安全等广泛领域的需求和应用不断增加,异常检测发挥和越来越重要的总用。近年来,随着深度学习和计算机视觉技术的不断发展&#xff0c…

零死角玩转stm32中级篇4-ADC和DAC

本篇博文目录: 一.ADC的基础概念1.什么是ADC2.在单片机中我们一般使用ADC技术来做什么?3.怎么查看单片机的某一个引脚是否具有ADC功能4.ADC采集和引脚数据的读取有什么区别5.单片机内部采用的是数字信号,为什么还要采用ADC进行转换6.ADC的分类7.ADC的工作原理8.ADC…

多目标应用:MOGWO求解环境经济负荷分配问题(IEEE-30bus)提供MATLAB代码

一、多目标灰狼优化算法 MOGWO MOGWO原理参考文献:S. Mirjalili, S. Saremi, S. M. Mirjalili, L. Coelho, Multi-objective grey wolf optimizer: A novel algorithm for multi-criterion optimization, Expert Systems with Applications, in press, DOI: http:/…