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

news/2024/5/2 10:06:07

可靠数据传输(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)也能够正常工作;但是效率较低,一半的分组和确认是重复的,所以设置一个合理的超时时间也是比较重要的;

 


http://www.mrgr.cn/p/62333005

相关文章

机器学习和深度学习--李宏毅(笔记与个人理解)Day11-12

Day11 when gradient is small…… 怎么知道是局部小 还是鞍点? using Math 这里巧妙的说明了hessan矩阵可以决定一个二次函数的凹凸性 也就是 θ \theta θ 是min 还是max,最后那个有些有些 哈 是一个saddle; 然后这里只要看hessan矩阵是不…

基于数据库现有表导出为设计文档

1.查询 SELECTCOLUMN_NAME 字段名,COLUMN_COMMENT 字段描述,COLUMN_TYPE 字段类型,false as 是否为主键 FROMINFORMATION_SCHEMA.COLUMNS wheretable_NAME region -- 表名2.查询结果 3.导出为excel

学习云计算HCIE选择誉天有什么优势?

誉天云计算课程优势实战性强 课程注重实践操作,通过实际案例和实验操作,让学员深入了解云计算的应用场景和实际操作技能。课程内容全面 涵盖所有云计算涉及的IT基础知识、服务器、存储、网络等方面的基础知识,开源操作系统Linux,开…

吴恩达机器学习笔记(1-1到2-1)

吴恩达机器学习笔记(1-1到2-1) https://www.bilibili.com/video/BV164411b7dx?p=1 https://www.bilibili.com/video/BV164411b7dx?p=2 https://www.bilibili.com/video/BV164411b7dx?p=3 https://www.bilibili.com/video/BV164411b7dx?p=4 机器学习-吴恩达 一、初学 1、什…

YAML教程-1-基础入门

领取资料,咨询答疑,请➕wei: June__Go YAML简介 YAML(YAML Aint Markup Language)是一种用于数据序列化的人类可读格式。它广泛用于配置文件、数据交换、持续集成/持续部署(CI/CD)等领域。YAML的设计目标…

注意,把Python库安装在一个环境里,可能会“非常危险”!

如果说谁写Python不用第三方库,我敬他是条汉子。如今到处是轮子的时代,Python第三方库管理成了开发者们头疼的问题。 可能在看这篇文章的很多人,都没用过Python虚拟环境,不知道安装Python库需要考虑版本兼容问题。 那么把所有要…

「不羁联盟/XDefiant」4月20号开启服务器测试,游戏预下载安装教程

XDefiant》开启Alpha测试,这是一款免费游玩的快节奏 FPS 竞技游戏,可选择特色阵营,搭配个性化的装备,体验 6v6 对抗或是线性游戏模式。高品质射击竞技端游XDefiant以6v6双边对抗为核心,对局模式分为区域与线性两大类&a…

安科瑞用于养老院医院学校社区等各类低压场所AISD电气火灾智能安全配电装置/电不起火电不漏电电不伤人/接地故障

安科瑞薛瑶瑶 18701709087 用电安全隐患,无处不在!!! 电力是清洁能源,给人们带来了便捷的电气化生活,但同时,由于使用不当,维护不及时等引发的漏电触电等电气火灾事故,…

web轮播图

思路: 例如:有5张轮播的图片,每张图片的宽度为1024px、高度为512px.那么轮播的窗口大小就应该为一张图片的尺寸,即为:1024512。之后将这5张图片0px水平相接组成一张宽度为:5120px,高度依然为:5…

2024华中杯A题完整1-3问py代码+完整思路16页+后续参考论文

A题太阳能路灯光伏板朝向问题 (完整版资料文末获取) 第1小问:计算每月15日的太阳直射强度和总能量 1. 理解太阳直射辐射和光伏板的关系**:光伏板接收太阳辐射并转化为电能,直射辐射对光伏板的效率影响最大。 2. 收集…

科技云报道:大模型加持后,数字人“更像人”了吗?

科技云报道原创。 北京冬奥运AI 虚拟人手语主播、杭州亚运会数字人点火、新华社数字记者、数字航天员小诤…当随着越来越多数字人出现在人们生活中,整个数字人行业也朝着多元化且广泛的应用方向发展,快速拓展到不同行业、不同场景。 面向C端&#xff0…

知识跟踪模型GraphKT

1 知识跟踪Knowledge Tracing的概念 知识跟踪可以用来解决自适应学习问题。如何通过与教学材料的在线互动来有效地跟踪学生的学习进展?知识跟踪可用于量化学生的知识状态,即对教材所涉及的技能掌握水平。用于评估和模拟学生随着时间推移对技能的认知掌握…

深入解析Nacos配置中心的动态配置更新技术

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在微服务架构中,配置管理变得尤为关键。Nacos,作为一个开源的、易于使用的、功能丰富的平台,为…

案例与脚本实践:DolphinDB 轻量级实时数仓的构建与应用

DolphinDB 高性能分布式时序数据库,具有分布式计算、事务支持、多模存储、以及流批一体等能力,非常适合作为一款理想的轻量级大数据平台,轻松搭建一站式的高性能实时数据仓库。 本教程将以案例与脚本的方式,介绍如何通过 Dolphin…

MySql 表中的id突然变很大,如何给id重新排序

目录 一、场景 二、解决方法 一、场景 我们在开发过程中,难免遇到id突然增大的情况。 由于id突然增大很多,我们重新增加数据时候id会默认加1 那么如何让id 重新从1按顺序排序呢 二、解决方法 点击编辑表,然后新建一个字段id2,将…

【设计模式】聊聊观察者设计模式原理及应用

原理 观察者模式属于行为模式,行为模式主要解决类和对象之间交互问题。 含义:在对象之间定义一个一对多的依赖,当一个对象状态改变时,所有依赖的对象会自动通知。 被依赖的对象被观察者(Observable) ,依赖的对象观察…

策略模式类图与代码

某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满300返100),等等。现采用策略(Strategy)模式实现该要求,得到如图7.13 所示的类图。 【Java 代码】 import java.util…

NPU硬件架构及张量技术开发

NPU硬件架构及张量技术开发 NPU 系统介绍 V853 芯片内置一颗 NPU,其处理性能为最大 1 TOPS 并有 128KB 内部高速缓存用于高速数据交换,支持 OpenCL、OpenVX、android NN 与 ONNX 的 API 调用,同时也支持导入大量常用的深度学习模型。 NPU 系统架构 NPU 的系统架构如下图所示…

阶段性学习汇报 4月19日

一、毕业设计和毕业论文 毕业设计后端功能基本实现,但是还有些具体的细节需要优化,例如这些图片的显示问题,前端只有个前端页面以及部分交互逻辑,还需进一步完善。我想在疾病预测这里加一个创新点,基于推荐算法。小程序…

(五)PostgreSQL的管理工具pgAdmin

PostgreSQL的管理工具pgAdmin pgAdmin 是一款流行的开源图形界面管理工具,用于 PostgreSQL 数据库的管理和开发。它提供了一个易于使用的界面,允许用户执行各种数据库任务,如创建和修改数据库对象(表、视图、索引等)、…