计算机网络自定向下 -- 浅谈可靠性之rdt协议

news2024/9/30 13:22:52

可靠性数据传输原理

可靠指数据在传输过程中不错,不丢,不乱

运输层要为应用层提供一种服务:数据可以通过一条可靠的信道进行传输,在该信道中传输的数据不会受到损坏或者丢失, 实现这种服务的是可靠数据传输协议。

要实现这种服务并不简单,因为无法保证在运输层下的各层可以实现可靠传输,可靠数据传输协议的实现方式要在运输层下的各层都不可靠的前提下进行。

可靠数据传输协议:

  1. 可靠数据传输对应用层、传输层、链路层都很重要
  2. 信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性

RDT协议

  • rdt在应用层,传输层和数据链路层都很重要。
  • 信道的不可靠特点决定了可靠数据传输协议(rdt)的复杂性。
  • rdt的下层协议是不可靠的,可能是出错的,丢失的,乱序的,rdt应该如何凭借自己的努力来保证可靠性呢?在下层提供的服务不可靠的情况下,向上层提供可靠的服务。

在这里插入图片描述

状态机:用来描述某一件事物的状态。

Rdt1.0

我们做出一个假设:我们假设信道是可靠的

  • 下层的信道是完全可靠的
    • 没有比特出错
    • 没有分组丢失

那么此时就只有一种状态,发送方等待接收方的数据发送回来,发送方等待接收方的数据发送过去。因为数据是可靠的,这样就已经足够了。

在这里插入图片描述

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

我们开始假设了一些简单的不可靠的行为了:

例如下层的信道可能会出现比特翻转的情况。

这个情况其实很好解决,我们使用一个校验和,用校验和来检测就可以了。但是事情其实没有这么简单,我们引入了校验和之后,我的发送方如果知道是否发生了比特翻转呢?而且如果发生了比特翻转,我们如何从差错中恢复呢?

因此我们引入了确认应答机制。

ACK代表肯定确认(“OK”),NAK代表否定确认(“请重复一遍”)。

当收到ACK的时候就可以继续发送报文了,当收到NAK的时候代表数据损坏了,我们需要重新发送,基于这样重传机制的可靠数据传输协议称为自动重传请求协议(ARQ)。

因此Rdt2.0的状态机就会有些复杂了。

在这里插入图片描述

rdt2.0的致命缺陷 -> rdt2.1

我们的rdt2.0做出的假设是,只有发送过去的报文会损坏,但是没有考虑到一点,有没有可能,我ACK/NAK报文也损耗了,或者没有发送过去呢?

这当然有可能!!!

那我一个报文发送过去了,对方不给我任何回应,或者给了我一个我看不懂的回应,那么我现在应该怎么做呢?不重传可能会死锁或者出错。重传可能会出现数据的重复和冗余。

在这里插入图片描述

因此我们需要引入新的机制来解决这个问题了:

处理重复:

  • 发送方在每个分组中加入序号
  • 如果ACK/NAK出错,发送方重传当前分组
  • 接收方丢弃(不发给上层)重复发呢组

停等阶段,发送方发送一个分组,然后等待接收方的应答

发送方状态机:

在这里插入图片描述

接收方状态机:

在这里插入图片描述

当然,这个状态机看看就行了,没有必要在这个状态机上面过多的纠缠,我们需要的是理清里面的逻辑就可以了。

我们来看一下rdt2.1是如何运行的:
在这里插入图片描述

rdt2.2:无NAK的协议

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

我们把ACK用序号排好,当前一个回复报文的ACK表示的是上一次报文的序号,也就是序号不对应的话,那么我们就认为是失败了,NAK。

如图:

在这里插入图片描述

rdt3.0:具有比特差错和分组丢失的信道

新的假设:下层信道可能会丢失分组(数据或ACK)

  • 会死锁
  • 机制还不够处理这种状况:
    • 校验和
    • 序列号
    • ACK
    • 重传

方法:发送方等待ACK一段合理的时间:

  • 发送端超时重传:如果到时候没有收到ACK -> 重传
  • 问题:如果分组(或ACK)只是被延迟了:
    • 重传将会导致数据重复,但是利用序列号已经可以处理这个问题了
    • 接收方必须指名被正确接收的序列号
  • 需要一个倒计时定时器

链路层的timeout时间确定的

传输层timeout时间是适应式的

在这里插入图片描述

我们来看一下rdt3.0是怎么运行的:

在这里插入图片描述

以上就是RDT协议的所有内容,关于RDT3.0的性能问题我们会作为滑动窗口协议的引子来讲解。

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

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

相关文章

python的opencv操作记录11——阈值分割

文章目录传统图像处理分割阈值分割一个应用场景opencv库中的阈值分割固定阈值THRESH_OTSU 大津法阈值自适应阈值传统图像处理分割 现在提到图像分割,很多人会直接想到当前火爆的深度学习的各种分割网络,比如实例分割,语义分割等。其实在传统…

Java爬虫Selenium+Java+ChromeDriver

一、爬虫工具 selenium 是一个模拟浏览器操作的工具,背后有google 维护源代码,支持全部主流浏览器,支持主流的编程语言,包括:java,Python,C#,PHP,Ruby,等,在本项目上使用的Java语言。 官网:https://www.sel…

【Vue】参数传递:如何同时传递 DTO 和 file 文件

日常开发时,如果遇到较为复杂的 DTO 对象的参数传递时,通常前端使用的请求头为:application/json(JSON 格式的数据);而后端可以使用 RequestBody 接收一个 DTO 对象。但当需要在一个界面上同时传递 DTO 和附…

Java集合中的Map

MapMap接口键 值 对存储键不能重复&#xff0c;值可以重复Map三个实现类的存储结构HashMap&#xff1a;Hash表链表红黑树结构 线程不安全TreeMap&#xff1a; 底层红黑树实现HashTable&#xff1a;hash表链表红黑树 线程安全HashMapHashMap常用方法HashMap<String,String>…

[测开篇]设计测试用例的方法如何正确描述Bug

​ 文章目录为什么测试人员要写测试用例&#xff1f;怎样设计测试用例&#xff1f;&#xff08;总的方面&#xff09;1.基于需求设计测试用例&#xff08;总的方面&#xff09; 2.页面&#xff08;总的方面&#xff09; 3.非功能性测试&#xff08;具体方面&#xff09; 4.1 等…

「Python|环境安装|Windows」如何在Windows上安装Python环境?

本文主要介绍如何在Windows上安装Python&#xff0c;帮助初学者或者非程序员伙伴快速搭建可以运行python代码的环境。 文章目录安装python做一点小配置验证python如何安装指定版本的python编程语言的环境搭建一直是学习编程的第一道门槛。 对于如何在Linux系统上安装指定版本的…

谷歌蜘蛛池怎么搭建?Google蜘蛛池可以帮助谷歌排名吗?

本文主要分享关于谷歌蜘蛛池的搭建疑问&#xff0c;以及Google对谷歌排名的影响到底有多大。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 谷歌蜘蛛池怎么搭建&#xff1f; 答案是&#xff1a;需要一个内链外链体系复杂的站群系统…

154、【动态规划】leetcode ——494. 目标和:回溯法+动态规划(C++版本)

题目描述 原题链接&#xff1a;494. 目标和 解题思路 &#xff08;1&#xff09;回溯法 本题的特点是nums中每个元素只能使用一次&#xff0c;分别试探加上nums[index]和减去nums[index]&#xff0c;然后递归的遍历下一个元素index 1。 class Solution { public:int res …

java中flatMap用法

java中map是把集合每个元素重新映射&#xff0c;元素个数不变&#xff0c;但是元素值发生了变化。而flatMap从字面上来说是压平这个映射&#xff0c;实际作用就是将每个元素进行一个一对多的拆分&#xff0c;细分成更小的单元&#xff0c;返回一个新的Stream流&#xff0c;新的…

1629_MIT_6.828_xv6_chapter1操作系统的组织

全部学习汇总&#xff1a;GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这一次整理一下操作系统组织相关的知识&#xff0c;主要还是xv6教学操作系统相关的知识。当然&#xff0c;很多知识在这类技术领域是通用的。 1. 操作系统的主要功能…

SAP ABAP Odata

GetEntity和GetEntitys GetEntitys 创建Odata Project 导入结构 选择需要的字段 设定Key 勾选字段的creatable、updatable、sortable、nullable、filterable属性值。 再依上述步骤创建ZPOITEM结构和实体集 3. 创建ZPOHEADER和ZPOITEM的Association 两个实体集的关联字段&…

RocketMQ-消息消费模式 顺序消费

RocketMQ-消息消费模式 顺序消费RocketMQ-消息消费模式集群模式集群模式的演示(本身就默认)Rocketmq存储队列广播模式顺序消费如何改实现顺序消费RocketMQ-消息消费模式 集群模式 在消费模式为集群的情况下,如果机器是集群的,消息只会给集群中的其中一台机器消费到 集群模…

【数据结构】双向链表的模拟实现(无头)

目录 前言&#xff1a; 1、认识双向链表中的结点 2、认识并创建无头双向链表 3、实现双向链表当中的一些方法 3.1、遍历输出方法&#xff08;display&#xff09; 3.2、得到链表的长度&#xff08;size&#xff09; 3.3、查找关键字key是否包含在双链表中(contains) 3.…

基于I2S通讯MAX98357模块的JetsonNano声音外放

前言有很多方法可以为 Jetson 设备添加音频功能。USB 扬声器和USB 麦克风是一种简单的解决方案&#xff0c;但它们确实占用了宝贵的 USB 插槽&#xff0c;这些插槽可能更适合用于键盘、蓝牙功能、Internet Keys 和其他配件。在 Jetson 设备上&#xff0c;NVIDIA 通过 40 针 GPI…

微软发布会精华回顾:“台式电脑”抢了风头

Lightbot北京时间2016年10月26日晚10点&#xff0c;微软在纽约发布了名为 Surface Studio 的一体机、名为 Surface Dial 的配件以及外观未变的顶配版 Surface Book。同时&#xff0c;微软宣布了 Windows 10 下一个重要版本——“Creators Update”的数项新功能&#xff0c;包括…

【Linux】冯诺依曼体系结构和操作系统概念

文章目录&#x1f3aa; 冯诺依曼体系结构&#x1f680;1.体系概述&#x1f680;2.CPU和内存的数据交换&#x1f680;3.体系结构中数据的流动&#x1f3aa; 操作系统概念理解&#x1f680;1.简述&#x1f680;2.设计目的&#x1f680;3.定位&#x1f680;4.理解&#x1f680;5.管…

AOP面向切面编程思想。

目录 一、AOP工作流程 1、基本概念 2、AOP工作流程 二、AOP核心配置 1、AOP切入点表达式 2、AOP通知类型 三、AOP通知获取数据 1、获取参数 2、获取返回值 3、获取异常 四、AOP事务管理 1、Spring事务简介 2、Spring事务角色 3、事务属性 一、AOP工作流程 1、…

Linux内核启动(理论,0.11版本)分段与分页

为什么要虚拟内存 我们知道&#xff0c;在之前上微机原理时&#xff0c;我们的程序是可以直接访问内存的&#xff0c;而且访问的是直接的物理内存&#xff0c;在实模式下&#xff0c;寄存器是16位的&#xff0c;数组总线&#xff08;data bus&#xff09;是16位的&#xff0c;…

设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解

一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括&#xff1a;布尔类型、浮点类型(float、double、decimal、byte)、字符类型(char)、整型&#xff08;int、long、short等&#xff09;、枚举(entum)、结构体(struct)。 引用类型&#xff1a;数组、字符串(string)、类、接口…

DamiCMS SQL注入分析

2023年将会持续于B站、CSDN等各大平台更新&#xff0c;可加入粉丝群与博主交流:838681355&#xff0c;为了老板大G共同努力。 一、入口文件(单入口文件模式) 看一下Index.php文件代码&#xff1a;引入了php_safe.php文件 查看一下php_safe.php防御文件&#xff1a; 对变量e…