计算机网络自定向下 -- 浅谈可靠性之rdt协议
可靠性数据传输原理
可靠指数据在传输过程中不错,不丢,不乱
运输层要为应用层提供一种服务:数据可以通过一条可靠的信道进行传输,在该信道中传输的数据不会受到损坏或者丢失, 实现这种服务的是可靠数据传输协议。
要实现这种服务并不简单,因为无法保证在运输层下的各层可以实现可靠传输,可靠数据传输协议的实现方式要在运输层下的各层都不可靠的前提下进行。
可靠数据传输协议:
- 可靠数据传输对应用层、传输层、链路层都很重要
- 信道的不可靠特性决定了可靠数据传输协议(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的性能问题我们会作为滑动窗口协议的引子来讲解。
相关文章:

计算机网络自定向下 -- 浅谈可靠性之rdt协议
可靠性数据传输原理 可靠指数据在传输过程中不错,不丢,不乱 运输层要为应用层提供一种服务:数据可以通过一条可靠的信道进行传输,在该信道中传输的数据不会受到损坏或者丢失, 实现这种服务的是可靠数据传输协议。 要实现这种服…...

制造业升级转型:制造业上市公司-智能制造词频统计数据集
发展智能制造,关乎中国制造业转型升级的成效。基于中国制造业上市公司年报,通过文本数据挖掘,提取关键词反映企业对智能制造的关切焦点,进而运用词频及共词网络分析,洞察中国智能制造的发展态势。 研究发现࿰…...
HTML 开发工具整理
一、千乐微云团队推荐的HTML开发工具Visual Studio Code 简称VS Code (第一推荐)Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义快捷键、括号…...
介绍ACE C++网络通信框架
很久以前笔者也不太熟悉ACE C网络通信框架,偶然的机会逐渐接触后,发现它的优良! 总结来看它的有点如下 非常适合后台无界面网络通信的系统编程 适合小型化核心网使用;但值得注意,如果您需要的是web领域技术栈&…...

【Mac OS】JDK 多版本切换配置
前言 由于不同的项目可能需要使用的 JDK 版本不一样,所以在系统中配置多个 JDK 版本,并且能随时切换,是一个必要的配置。 查看已安装的 JDK 版本 /usr/libexec/java_home -V框框1是执行的命令 框框2是当前系统下所有的 JDK 版本 框框3是当…...

RabbitMQ-Exchanges交换机
一、介绍 RabbitMQ消息传递模型的核心思想是:生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至不知道这些消息传递到了哪些队列中。相反,生产者只能将消息发送到交换机,交换机工作的内容非常简单,一方…...

离散数学 课时二 命题逻辑等值演算
等值式(等值联结词) 1、设A、B是两个命题公式,若A、B构成的等价式 A等价于B 为重言式,那么称A与B是等值的 2、常用等值式: 注意: 1 双否定律 2 幂等律 3 交换律 4 结合律 5 吸收律 6 德摩根律 7 同一律 8 零律 9 矛盾律 10 排中律 11 蕴含表达式 12 …...
Debezium系列之:事件扁平化转换SMT,简化debezium数据格式,为数据添加head,为值添加键值对
Debezium系列之:事件扁平化转换SMT,简化debezium数据格式,为数据添加head,为值添加键值对 一、需求背景二、Debezium数据格式和扁平化数据格式对比三、事件扁平化SMT作用四、事件扁平化转换SMT设置五、事件扁平化参数详解六、完整SMT参数配置一、需求背景 Debezium 数据更改…...

内网渗透(十八)之Windows协议认证和密码抓取-本地认证(NTML哈希和LM哈希)
系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

Portraiture全新4.0最新版人像磨皮插件更新内容
Portraiture是一款智能磨皮插件,为Photoshop和Lightroom添加一键磨皮美化功能,快速对照片中皮肤、头发、眉毛等部位进行美化,无需手动调整,大大提高P图效率。全新4版本,升级AI算法,并独家支持多人及全身模式…...

前端也能悄悄对视频截图?js实现对视频按帧缓存
前言 虽然最后没有采用这种方案来实现滚动控制视频进度,但是仍然想自己试试这种方案的实现,毕竟应用范围也挺广的。 核心代码并不多,算是一篇小短文~。 掘金好像不允许放站外演示链接,所以这里就用动图大概展示下最终…...

TCP、UDP网络编程面试题
TCP、UDP、Socket、HTTP网络编程面试题 什么是网络编程 网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式…...

用网络调试助手测试PLC-Reocrder收听模式的过程
目录 一、测试环境 二、步骤及要点说明 1、PLC-Recorder的通道配置 2、PLC-Recorder启动采集 3、配置网络调试助手 4、启动调试助手的连接,并点击“启动批量发送” 5、停止发送,查看发送和接收的情况 三、小结 一、测试环境 Windows10操作系统&a…...

牛客小白月赛66
牛客小白月赛66_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)冒着期末挂科的风险打了打,缓解了一下网瘾,感觉还行最近为了期末鸽了很多期的div3,一学期末就手痒想训,感觉再不打人要没了,结果…...

加载sklearn新闻数据集出错 fetch_20newsgroups() HTTPError: HTTP Error 403: Forbidden解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

图解LeetCode——剑指 Offer 53 - I. 在排序数组中查找数字 I
一、题目 统计一个数字在排序数组中出现的次数。 二、示例 示例 1 【输入】nums [5,7,7,8,8,10], target 8 【输出】2 示例 2: 【输入】nums [5,7,7,8,8,10], target 6 【输出】0 提示: 0 < nums.length < 10^5-10^9 < nums[i] < 10^9nums 是一…...
python 实现热门音乐分析 附代码+数据 +论文
项目概述: 本选取了抖音当下最热门的 400 首音乐,通过一系列方法提取每首歌的波形特征,再经过降维以及机器学习等手段,进行无监督学习对音乐数据进行聚类的同时训练并使用监督学习分类器进行音乐流派分类,并通过可视化方法呈现分类聚类效果。 关键词:特征提取,PCA 主成分…...
【2335. 装满杯子需要的最短总时长】
来源:力扣(LeetCode) 描述: 现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount ,…...

再不跳槽,就晚了
从时间节点上来看,3月、4月是每年跳槽的黄金季! 以 BAT 为代表的互联网大厂,无论是薪资待遇、还是平台和福利,都一直是求职者眼中的香饽饽,“大厂经历” 在国内就业环境中无异于一块金子招牌。在这金三银四的时间里&a…...

Java 内存结构解密
程序计数器 物理上被称为寄存器,存取速度很快。 作用 记住下一条jvm指令的执行地址。 特点 线程私有,和线程一块出生。 不存在内存溢出。 虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈。 每个栈由多个栈帧组成,…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...