<计算机网络自顶向下> 可靠数据传输的原理(未完成)

可靠数据传输(rdt:Reliable Data Transfer)的原理

  • rdt在应用层,传输层和数据链路层都很重要
  • 是网络TOP10问题之一
  • 信道的不可靠特点决定了可靠数据传输rdt的复杂性
  • rdt_send: 被上层(如应用层)调用,以将数据交付给下方的发送实体
  • udt_send: 被rdt调用,用一将分组放到不可靠的信道上传输到接收方
  • rdt_rcv: 放分组通过信道到达接收方的时候调用(修改下层的错误,传递给上层正确的信息)

  • 下面将渐增的开发rdt的发送方和接收方(上层和下层的接口都定下来以后,如何安排本层协议实体需要做那些动作,安排那些时空资源来向上层提供可靠的服务)
    • 条件;只考虑单项数据传输(但是接收方有可能会返回给发送方控制信息一类的东西,所以控制信息是双向流动的)
    • 双向的数据传输问题实际上黑丝两个单项数据传输问题的综合
    • 使用FSM(有限状态机)来描述发送方和接收方(在某一状态的时候,下一个状态只由下一个事件唯一确定
      把可靠传输依靠下层信道比作一个团队领导依靠小弟,下面小弟越没用领导的工作就越复杂,所以需要先假设他们可靠程度高一点,渐增的设计领导的工作这样更加容易一点而不是毫无头绪的直接从头设计领导工作,rdt同理

Rdt1.0: 在可靠信道上的可靠数据传输

  • 下层信道是完全可靠的
    • 没有比特出错
    • 没有分组丢失
  • 发送方和接收方的FSM
    • 发送方将数据发送到下层信道
    • 接收方从下层信道接收数据
  • 总的来说rdt1.0要做的就是封装和解封装

Rdt2.0: 具有比特差错的信道

  • 下层信道可能会出错,将分组中的比特翻转
    • 用校验和来检测比特差错
  • 从差错中恢复的办法
    • 确认(ACK):接收方显式的告诉发送方分组已经被正确接受
    • 否定确认(NACK): 接收方显式的告诉发送方发生了差错:发送方收到NAK以后重传分组
  • rdt2.0中的新机制:使用差错控制编码来进行差错检测
    • 发送方差错控制编码、缓存
    • 接收方使用编码检错
    • 接收方的反馈,控制报文(ACK.NAK):接收方->发送方
    • 发送方收到反馈相应的动作

 

 

                         

  • rdt2.0致命的缺陷
    • ACK和NACK也有可能出错
    • rdt2.1引入序号可以解决这一点

Rdt2.1:有序号

  • 处理重复:发送方在每个分组中加入序号,如果ACK/NAK出错,发送方重传当前分组

  • 如果序号重复的话,接收方丢掉重复分组,再发一次ACK

  • 这是stop and wait (停等协议):发送方发送一个分组(一次只发送一个分组),然后等待接收方的应答 

  • 发送方

    • 在分组中加入序列号,0和1两个序号即可(因为一次只发送一个未经确认的分组)

    • 必须检查ACK/NAK是否出错(需要checksum)

    • 状态数变成了两倍:必须记住当前分组的序列号是0还是1

  • 接收方

    • 必须检测接收到的分组是否是重复的

      • 状态会指示希望收到的分组的序号为0还是1

      • 注意:接收方并不知道发送方是否正确收到了ACN/NAK——没有安排确认的确认

 rdt2.2:无NAK的协议

  • 功能同rdt2.1,单只使用ACK(ack要编号)
  • 接收方对最后正确接受的分组法ACK,以替代ACK
    • 接受方必须显示的包含被正确接收分组的序号
  • 当收到重复的ACK(如:再次收到ACK0)的时候,发送方与收到NAK采取相同的动作:重传当前分组
  • 为后面的一次发送多个数据单位做准备
    • 一次能够发送多个,每一个的应答都有:ACK, NACK太麻烦了
    • 使用对前一个数据单位的ACK代替本数据单位的NAK
    • 确认信息减少一半,协议处理简单
  • 2.2和2.1的唯一区别就是2.2没有NAK

Rdt3.0:具有比特差错和分组丢失的信道——超时重传机制

  • 下层信道可能会丢失分组(数据或者ACK)
    • 会死锁:发送的时候分组丢失(比如队列满了包丢失等等)比如发送p1包到接收方,p1中间没了,发送方等待AK,接收方等待p1
    • 机制还不够处理这种状况(下面列出来的只是帮助回忆之前的机制)
      • 检验和
      • 序列号
      • ACK
      • 重传
    • 方法:发送方等待ACK一段合理的时间
      • 发送端超时重传,如果导师没有收到ACK->重传
      • 问题:如果分组(或ACK)只被延迟了
        • 重传将会导致数据重复,但利用序列号一已经可以处理这个问题
        • 接收方必须指明被正确接收的序列号
      • 需要一个倒计数定时器(设置为比正常往返稍微多一点点的时间)
    • 链路层的timeout时间是确定的(往返延迟分布比较集中),传输层timeout时间是适应式的(往返延迟分布比较分散)

      链路层(数据链路层)定时器设置固定: 链路层通常负责在相邻节点之间进行数据传输,其定时器设置一般较为固定。这是因为在局域网或广域网等较小范围内的链路上,往返延迟相对较低且相对稳定,数据包的传输时间相对可预测。因此,链路层的定时器一般采用固定的超时时间,以适应这种相对稳定的网络环境。

      传输层定时器设置适应性强: 传输层负责在端到端的通信中提供可靠的数据传输服务,其定时器设置一般需要更加灵活和适应性强。在互联网等大范围网络中,往返延迟可能会受到多种因素的影响,如网络拥塞、路由器处理延迟、数据包丢失等,导致数据包的传输时间波动较大,难以准确预测。因此,传输层通常采用自适应的超时时间设置策略,如 TCP 中的拥塞控制算法(如慢启动、拥塞避免)和快速重传机制,以根据网络状况动态调整超时时间,从而提高数据传输的效率和可靠性。

    • 过早超时(延迟的ACK)也能够正常工作;但是效率较低,一半的分组和确认是重复的,所以设置一个合理的超时时间也是比较重要的;

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

41.缺失的第一个正数

1. 解题原理: (1)对于一个有序的、不缺失元素的正数数组nums,元素nums[i]应当位于nums[i]-1的位置处。 (2)nums数组的长度为N,缺失的第一个正数如果不位于[1,N],那么就肯定是N1 2. …

excel表格怎么设置密码?excel文件加密的两个方法

一、加密码的原理​ Excel加密码的原理主要基于加密算法和密钥管理。当用户为Excel文件或工作表设置密码时,Excel会采用一种加密算法对文件或工作表进行加密处理。这种加密算法通常是对称加密算法,如AES(高级加密标准)或DES(数据加密标准)。 二&#x…

海外住宅代理:推特账号为何容易被关小黑屋?

推特是全球最受欢迎的社交媒体之一,每天都有数以百万计的用户在这个平台上发布信息、分享观点和交流互动。然而,有些用户可能会发现他们的推特账号不幸陷入了所谓的“关小黑屋”状态,即账号被限制了可见度,导致发布的内容无法被其…

【数据分析面试】24.20个数据库问答题 (考察数据开发和实际应用能力)

作为数据从业者,日常工作除了对各类业务数据进行分析挖掘,也需要经常和数据库打交道、甚至也少不了要承担一些数据开发、数仓管理的工作。掌握数据库管理的基本概念和技术是至关重要的。无论是初学者还是从业者,理解数据库索引、范式、事务、…

四.音视频编辑-音频混合-概述

引言 当我们在前两篇博客中成功地构建了一个媒体组合,并且略过了音频部分时,我们意识到了我们需要对这个项目进行更详细的探讨。在本篇博客中,我们将会展示如何创建一个包含视频轨道、配音音频轨道以及背景音频轨道的完整媒体组合。更进一步…

游泳耳机哪个牌子好?体验与口碑兼顾的4大游泳耳机汇总!

最近的天气越来越炎热了,许多人选择游泳作为一种既能锻炼身体又能享受清凉的活动。而随着科技的发展,越来越多的运动爱好者希望在游泳时也能享受到音乐的乐趣。因此,游泳耳机应运而生,成为市场上的热门产品。然而,面对…

项目中的解耦小能手-观察者模式

目录 1.使用场景 2.什么是观察模式 3.观察者模式结构图 4.代码实现案例 4.1 subject代码实现 4.2 Observer类代码实现 5. 回顾总结 1.使用场景 当一个对象的改变需要同事改变其他对象的时候,如:订单中心-下单成功需要通知库存、物流和积分去做相应…

交流回馈老化测试负载优点和应用

交流回馈老化测试负载是用于模拟真实环境下设备运行状态的测试工具,通过对设备进行长时间的连续工作,以检测其性能的稳定性和可靠性。这种测试负载具有许多优点,并且在实际应用中有着广泛的用途。 在实际应用中,设备往往需要在各种…

Flask实战

from flask import Flask appFlask(__name__)点击Flask同时点击键盘ctrl即可查看Flask的默认初始化函数 def __init__(self,import_name: str,static_url_path: str | None None,static_folder: str | os.PathLike[str] | None "static",static_host: str | None …

产品心理学:为什么管钱的都是女生?

大家发现了吗?大部分公司女财务居多,而在家庭中,多数也是女生管钱。 为什么管钱的都是女生?答案文尾揭晓。 问题的答案,要从一个心理学名词“过度自信偏差”说起 用人话说,就是“迷之自信” 过度自信的例…

【剪映专业版】11音频的全流程剪辑操作

视频课程:B站有知公开课【剪映电脑版教程】 1.音乐素材 可能包含人声,音乐素材普遍比较长,几十秒到几分钟。要点击倒三角才会出现分类。 点击下载箭头下载素材;点击加号将素材增加到轨道;时间指示器在哪个地方&#…

Python | Leetcode Python题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left, right 0, len(nums) #采用左闭右开区间[left,right)while left < right: # 右开所以不能有,区间不存在mid left (right - left)//2 # 防止溢出…

UE5增强输入系统 Enhanced Input

关键字&#xff1a; Enhanced Input 、 输入、映射、事件、鼠标、键盘、键鼠、动作、Trigger、触发器、 疑问&#xff1a; 新输入系统怎么做一个基础的案例&#xff1f;Trigger修改器中每个项都是什么功能&#xff1f;InputAction和InputMappingContext中都有修改器&#xff…

Python基础02-掌握HTTP API的秘诀

在下面文案基础上扩展&#xff0c;写一篇技术博客&#xff0c;标题要有吸引力&#xff1f; 标题&#xff1a; 在Python中&#xff0c;使用HTTP API已成为一种常见的操作。本文将深入探讨如何使用Python的requests库与HTTP API进行交互。我们将学习如何发送GET和POST请求、处理…

消息队列选型(RabbitMq、RocketMq、Kafaka)

文章目录 前言RabbitMq优点缺点 RocketMq优点缺点 Kafaka优点缺点 总结 前言 当引入消息队列时&#xff0c;常见的选择包括ActiveMQ、Kafka、RabbitMQ和RocketMQ。然而&#xff0c;近年来&#xff0c;ActiveMQ的活跃度已经下降&#xff0c;很多公司已经不再使用这款消息队列中…

TSINGSEE青犀算法中台消防通道堵塞/占压AI检测算法的介绍及应用

消防通道是建筑物内用于紧急疏散的通道&#xff0c;其畅通无阻对于保障人员生命安全至关重要。然而&#xff0c;由于各种原因&#xff0c;消防通道经常会被杂物、车辆等堵塞&#xff0c;一旦发生火灾等紧急情况&#xff0c;后果不堪设想。为了有效解决这一问题&#xff0c;我们…

【氮化镓】GaN HEMT失效物理和可靠性

概述: 本文是一篇关于AlGaN/GaN基高电子迁移率晶体管(HEMTs)的失效物理和可靠性研究的综述文章,发表在2013年10月的《IEEE Transactions on Electron Devices》上。文章由Enrico Zanoni等人撰写,主要关注了影响栅极边缘和肖特基结的失效机制,并探讨了提高这些器件可靠性…

文档加密软件哪个好用?为什么迅软DSE加密软件更受用户青睐?

通过对文档内容进行加密处理&#xff0c;以确保其安全性和保密性。文档加密软件采用加密算法对文档进行加密处理&#xff0c;在加密过程中&#xff0c;文档加密软件会将文档的原始内容转换为一种不可读的形式&#xff0c;即加密后的文档。这个加密过程是通过应用特定的加密算法…

SQVI创建以及生成程序

SAP数据快速查询工具&#xff1a;Sqvi-QuickView 项目实施&运维阶段&#xff0c;为了快速获取一些透明表数据&#xff0c;一开始接触项目肯定会通过大量的数据表查找&#xff0c;然后线下通过EXCEL通过VLOOKUP进行数据关联&#xff0c;这种方式在关联数据较少的情况比较适应…

spring boot获取请求参数并响应

获取请求参数并响应&#xff1a; 响应&#xff1a; 在Controller类或方法上加上ResponseBody注解&#xff0c;可以将方法返回值直接响应&#xff0c;如果返回值是实体对象或者集合&#xff0c;将转换为json格式响应。如下例&#xff1a; RestControllerResponseBodyControll…