【学习】可靠数据传输协议 RDT

article/2025/10/9 8:33:03

转载自:https://blog.csdn.net/qq_38505990/article/details/80603007
计网刚开始学的时候完全没听懂 查了好多博文 这篇写得最清楚 仅供学习参考

在计算机网络中,可靠的数据传输,是一个较为重要的问题,最近在看书(Computer Networking A Top-Down Approach),发现 rdt(Reliable Data Transfer) 大概经历了这样的变化。

这里写图片描述这里写图片描述
上图是两个主机相应进程之间的通信过程,左边是发送端,右边是接收端


rdt 1.0

在 1.0 版本中,我们将数据的传输信道理想化,视为完全可靠,不丢包,不损失bit ,在这样的情况下,发送端发送数据,接收端直接接收,并不考虑丢包,超时这些问题,下图是对应FSM(状态图)
rdt1.0
该协议中,都是直接发送,直接接收。


rdt2.0

果然,大家应该都意识到了,怎么可能这么理想化呢,要是传输通道完全可靠,我们讨论的意义何在呢?
在 rdt2.0 中,我们将传输通道视为有可能发生比特错误

有可能发生比特错误,这就是说,数据在传输中不会发生丢包的现象,但是会存在一部分比特错误的情况,于是我们引入:

差错检测:使用检验和,换句话讲,就是检验发过来的包有没有错误
接收方的反馈:接收方返回 NAK 或者 ACK ,分别对应数据错误和数据正确,这个也可以理解,总要告诉发送端,你发过来的是对还是错

rdt2.0
上图中的corrupt ,在字典里面是 “腐烂,腐化” 的意思,在这里可以理解成包出错。

很容易理解,发送端发出数据,并等待接收端反馈,如果返回 NAK ,表示数据出错,重新发送数据,至于接收端怎么检验数据,不用说,当然是使用检验和啦。


rdt2.1

经过大家思考,终于发现了 rdt2.0 的致命缺陷,原来接收端返回的值也可能会出错啊,万一NAK出错变成ACK了呢

于是诞生了 rdt2.1 ,该协议在 2.0 基础上增加了一个序号值(在这里,该序号在当前协议中只使用 0 和1 ,交替排列),这样一来,发送端和接收端都有了两种序号状态, 0 和 1 。
rdt2.1_sender
rdt2.1_receiver
我们来用自己的语言,组织一下上面的逻辑:
发送端在 0 序号时发送数据包,接收端此时期待 0 序号的数据包,如果数据发送时发生 bit 受损,此时接收端直接通过检验和发现错误,并返回 NAK ,发送端接到 NAK 的返回值,然后重新发送 0 序号数据包。(但是注意,这完全和 rdt2.0 没有任何分别,这是一种理想的状态!!!)

更错误的状况是,接收端成功接收,但是返回 ACK的时候发生了比特翻转,变成了 NCK ,这才是我们讨论的重点!!接下来,我需要画一张图,来理清楚当返回错误的时候,怎么通过序号来判断并重传数据。
rdt2.1编号重传检测
这样就解决了 NAK , ACK 返回值有可能出错的问题。


rdt2.2

由于相关开发人员的吹毛求疵,他们觉得需要返回 NAK , ACK 两种状态可能太麻烦了,就将其全部改为ACK 只是返回的时候顺便返回序号。
这里写图片描述
这里写图片描述
可以看到,接收端收到包,不管正确与否,都返回 ACK ,同时附上序号,这个序号嘞,就是数据包发送过来时的序号。另外的参照上图,相信同学们都能有所收获。


rdt3.0

可以说,在处理数据出错方面,上面的协议都做得很好了,但是,我们忽略了一个很大的问题,万一数据不是出现错误,而是直接丢失了呢!!这就是我们俗称的丢包了,于是,我们的 rdt3.0 千呼万唤始出来了。

所以在这里,我们假设的是最贴近真实的情况,数据传输通道发送和返回的过程中不仅会出错,而且还会丢包!

因此,我们引入一个新的机制——超时重传。先不考虑数据出错与否,数据发送出去,会有两种丢包可能:1.发送出去的时候丢失,接收端并未收到 。2.接收端收到了,但是在反馈 ACK 的时候,数据包丢失。在这两种情况下,发送端都是什么反馈都没有收到!!,那问题就简单了,我们设置一个时间间隔,超过时间没有收到,重新发送数据即可。(事实上还有很多问题,比如时间间隔多少合适,这里暂且不管)
这里写图片描述
上图是 rdt3.0 发送方的 FSM 图,就拿右上角的状态举例,此时发送端等待接收方返回的带有“0”序号的 ACK ,它有三种行为:

  • 第一种,过程中未丢包,但是数据比特出错或者不符合序号,和我们讨论过的 rdt2.2 差不多,那么此时就没有任何动作,毫无作为就好了,等到时间间隔一到,当做超时处理,重发数据。
  • 第二种,是真正的丢包了,所以时间一到,重新发送。
  • 第三种最理想,啥事没有,一切正常,跳到下一个状态,等待发送下一个包。

上面我加粗了一个不符合序号,细心的读者可能发现了,的确,在这里又是大有文章。

这里的不符合序号,与期待的序号不符,有两种情况:

  1. 接收端反馈过程中,代表序号的那个 bit 错误,进行了翻转——这就和 rdt2.2 中一样
  2. 我们上面引入了超时机制,但是有一种情形,万一我发出去的数据包并没有丢失,只是它跑的太慢而已呢??那么时间一到,发送端误以为丢包,重新发了一遍咋办??这就造成,接收端才收到你晚来的数据 0 号,还给你个 0 ,这时候你重传的 0 号包接着又到了,接收端又给你一个0 ,作为发送端,我会先后收到两个 0 ,就注定后面一个 0 会被期待 1 号的状态捕捉,这时发送端启动第一种处理方式——不作为,啥都不做。

这里写图片描述
上面便是示意图。


到此为止, rdt 3.0 已经被认为是一个较为完美的可靠传输协议了,但是还有着种种的不足,比如:

  • 效率太慢,由于停等方式的存在,一个包没处理好,发送端会一直等着。
  • 超时机制的时间间隔怎么确定?长了不行,太慢,短了么,又会经常有重复发包的情况。
  • …….
  • …….

这些我将会在后续的博客上阐述,敬请期待吧~~


http://chatgpt.dhexx.cn/article/m2lBtes9.shtml

相关文章

rdt(可靠运输协议)理解

逐步解决可靠运输 在这里我们介绍rdt(Reliable Data Transfer)协议,即可靠数据传输协议的逐步完善。 假如底层通道完全可靠(rdt1.0) 我们首先考虑最简单的情况,即底层通道完全可靠,不会发生错误,此时将协议定为rdt1.0。此时发送方和接受方的状态如下。rdt1.0发送方 发…

Rdt2.1 和 Rdt2.2的详细解释

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

rdt(可靠数据传输)

构造可靠数据传输 rdt(reliable data transfer protocol,可靠数据传输协议) 什么是可靠? 不错、不丢、不乱 1.rdt1.0:可靠信道上的可靠数据传输 最简单的情况即为底层信道是完全可靠的,则该协议非常简…

16、可靠数据传输(rdt)的原理

一、可靠的数据传输(rdt) 1、什么是可靠数据传输:不出错、不冲突、不失序、不丢失 2、如何实现可靠数据传输? 需要借助于下层提供的协议,但是如果下层提供服务不可靠呢?本层的协议机制,协议实体…

Rdt协议(可靠运输协议)

提示:文章写完后 文章目录 前言一、可靠数据传输原理二、Rdt协议1.Rdt 1.0(可靠信道)2.Rdt 2.0(ARQ重传)3.Rdt 2.1(序列号)4.Rdt 2.2(无NAK)5.Rdt 3.0(定时器) 总结 前言 提示:以下是本篇文章正文内容 一、可靠数据传输原理 可靠指数据在传输过程中不错…

RDT 协议 (可靠数据传输协议)

RDT (reliable data transfer)协议详解 零、文档目录 .名词解释 背景介绍 rdt协议的实现 总结 疑问解析 参考文献 一、名词解释 rdt协议(reliable data transfer)可靠数据传输协议 二、背景介绍 计算机网络通过对网络进行…

rdt 可靠数据传输协议

计算机网络的设计基本方案是复杂化,多功能化应用层,运输层的协议设计,从而使得网络层,链路层,物理层变得相对简单,网络搭建的物质条件变得简单。由于网络层较为简单,采用了无连接的协议&#xf…

前端开发学习之一------前端开发是什么以及我们要学什么

1.web前端开发工程师是做什么的 简单地说,就是要与网站打交道 2.成为一名web前端工程师需要具备的条件 ①兴趣 ②敲代码(实践、需要去练习) 3.Web前端开发工程师需要学习什么(重点:HTML,CSS,JavaScript硬性指标) ①软件(代码的辅助工具) 浏览器:浏览器有非常多,(…

前端学习.

前端学习 基础学习路线网页简介1.html2.网页 常用的浏览器Web标准HTML标签(上)HTML语法规范HTML基本结构标签网页开发工具HTML常用标签HTML中的注释和特殊字符 HTML标签(下)表格标签表格总结 列表标签列表总结 表单标签综合案例直…

我的前端学习经历

我最近在开发一个NFT相关的Saas,部分截图如下: 这是我一段时间前,朋友圈发的图,现在Saas在页面上有点变化,但懒得再截图了。客观而言,布局还可以,这一套的技术栈是:React TailwindC…

前端学习路线

这里写目录标题 1、产品经理。2、UI设计师。3、项目经理。4、最终用户。 一、基础二、JS1.JS变量2.JS运算符3.JS数组4.JS流程语句5.JS字符串函数6.JS函数基础7.JS基础DOM操作8.JS正则表达式9.JS数据类型 三、后端语言四、学习方法建议 前端开发工程师 不仅要掌握基本的Web前端开…

WEB前端开发学习5大网站,你用过几个?

“工欲善其事,必先利其器”,学习WEB前端开发也是一样。 一、前端视频教程-51自学网 我要自学网是由佛山市丰智胜教育咨询服务有限公司倾力打造的在线实用技能学习平台。该平台成立于2007年6月7日,是一家专业从事软件视频教程开发的教育服务机构。开发团队由奋战在教学第一线…

前端开发工程师学习路线图(收藏版)

在网上看到很多类似“前端现在是不是饱和了,是不是不好找工作了呀?”这类问题,就这类问题也和小伙伴进行了探讨,大家一致认为——不是前端饱和了,而是现在前端的工作在不断独立,门槛越来越高,再…

什么是前端开发及学习路线

一、什么是前端开发 前端开发是创建Web页面或app等前端界面呈现给用户的过程,在这个过程中需要学习并使用,HTML、CSS、JavaScript以及衍生出的各种技术、框架;其中最基础也最核心的就是:HTML、CSS、JavaScript,俗称“…

前端开发学习及工具网站(持续更新)

前端开发学习及工具网站 该文章主要是记录前端开发中好的学习网站或者工具网站 大部分实用网站来源抖音鱼皮大佬分享,这里分享给大家 1、w3cschool(编程狮) 这个网站适合0基础学前端的同学,内容简单易懂,在闯关中进行学习,能够刺…

前端开发免费学习资源分享

知乎上很多同学在问什么前端培训,怎么入行啥的 我这里给大家先总结一下,老师会给大家分享一些基础的学习资料如果你入不了门,就不要去搞啥前端了, 没有用的,一点基础没有去培训你也听不懂 黑马程序员pink老师前端入…

送给大家一套完整的web前端开发学习路线

本文来源:千锋web前端开发 近几年IT业可谓是发展火热,而且新生了很多的职业。在这众多的新生职业中备受瞩目的当属web前端工程师了,web前端在IT行业真正受到重视的时间不超过五年,但是web前端的发展前景却是非常的可观&#xff0…

Web前端开发学习(一)

目录 一、HTML的基础Tag用法 以下内容使用VSCode编写,LiveServe插件和Chrome浏览器生成网页。 Web前端学习,只要学会HTML和CSS(层叠样式表)就可以搭建出自己的页面啦!其中HTML的功能是为页面添加内容,CSS…

Web前端学习

第一步:拨云见日 1.基础部分:HTML 、CSS 2. 切图流程:传统切图、智能切图、公司流行切图 3.实战阶段:PC企业站布局 PC游戏站布局 第二步:溯本求源 1.扩展: HTML 、CSS 2 .新语法: HTML5 、 C…

Web前端入门学习

目录 导言1.拨云见日2.溯本求源3.风生水起4.巧夺天工 Web的入门知识1.什么是HTML、CSS?2.VS code 编辑器?3.学习编辑器的基本使用4.chrome浏览器?5.了解网站开发?6.HTML基础知识与属性7.HTML的初始代码8.HTML注释?9.HT…