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

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

一、可靠的数据传输(rdt)
1、什么是可靠数据传输:不出错、不冲突、不失序、不丢失
2、如何实现可靠数据传输?
需要借助于下层提供的协议,但是如果下层提供服务不可靠呢?本层的协议机制,协议实体要靠什么机制的安排实现可靠的服务?
采用渐增式的开发可靠数据传输协议(rdt)的发送方和接收方
3、rdt
1、只考虑单向数据传输
2、双向的数据传输问题实际是两个单向数据传输问题的综合
3、使用有限状态机(FSM)来描述发送方和接收方
4、rdt在应用层、传输层和数据链路层都很重要,是网络TOP10问题之一
5、信道的不可靠性特点决定了可靠数据传输(rdt)的复杂性

二、Rdt1.0
1、使用场景:下层的信道是完全可靠的:没有比特差错,没有分组丢失
2、发送方和接收方的FSM:发送方将数据发送到下层信道,接收方从下层信道接收数据
所以rdt1.0做的工作就是封装和解封装

三、Rdt2.0:具有比特差错的信道
1、使用场景:下层信道可能出现差错:将分组中的比特翻转,0变为1,1变为0(用校验和来检测差错)
2、确认ACK:接收方显式的告诉发送方分组已经被接收
否定确认NAK:接收方显式地告诉发送方分组出现了差错(发送方接收到NAK后,会重传分组)
3、过程:发送方发送packet到下层信道,接收方接收,通过校验和发现数据有差错,返回NAK,发送方再次发送原packet;无差错返回ACK,发送方发送新的pactet
4、所以Rdt2.0新机制就是采用了差错控制编码进行差错检测
5、发送方和接受方的FSM:
(1)发送方状态:等待来自上层的调用、等待ACK / NAK
(2)接收方:等待来自下层的调用

最后细想一个问题,发送的packet可能会出现错误,但是返回的ACK / NAK是不是就一定是正确的呢?答案肯定是否定的,但是发送方应该怎么做呢?重传?可能会重复,不重传?可能会造成死锁或出错
所以引出了 Rdt2.1

四、Rdt2.1
1、为了处理上面所描述的问题,也就是在不知道发送的 ACK / NAK是否出现差错的情况下,Rdt2.1采用再次传输的方法,并且在传输的每个packet中都会加上序号,若没有错误,则根据序号将这个packet跑调,这样子就解决可能存在ACK / NAK出现错误,又能避免没有错误时的重复
2、因为每次只会发送一个分组然后等待确认,所以只需要两个序列号就够了(0和1),检测ACK / NAK是否出错同样使用EDC;原本只需要等待数据的发送,现在有了序号,状态也就变成了两倍,成了等待0与等待1
2、这种发送方只发送一个分组,然后等待接收方的应答的方式称为停止等待协议

五、Rdt2.2(无NAK协议)
1、功能与Rdt2.1相同,但是只用ACK(ACK需要编号)
2、接收方对最后正确接收的分组ACK,以代替NAK(接收方必须显式地包含被正确接收的分组的序号)
3、当收到重复的ACK时,发送方则重传当前分组

总结:其实就是在发送方发送一个packet,接收方若没有错,则返回ACK+序号,再次发送若出错了,则再次发送上次这个ACK+序号,没出错序号便是新的序号了。
问题:当第一个传输的分组就出错了,应该如何返回?
答案:事实上如果第一个就出现错误,前面没有ACK可返回,那发送方在一定时间内没有收到返回信息,便会重传(超时重传),这个就是Rdt3.0

六、Rdt3.0
1、当下层信道可能会丢失分组(数据或ACK):会死锁,也就是上面提到的发送方一直没有收到接收方的返回信息,这时候就引入超时重传(需要一个倒计时定时器)

问题:每次都是只能发送一个,当信道非常大的时候,传输的packet在信道中损耗的时间是非常多的,如何解决?
答案:采用流水线方式,提高链路的利用率

七、流水线协议
1、流水线:允许发送方在未得到对方确认的情况下一次发送多个分组
2、必须增加序号的范围:用多个bit表示分组的序号
3、在发送方/接收方要有缓冲区
(1)发送方缓冲:未得到确认,可能需要重传,需要将发送的分组放在缓冲区
(2)接收方缓存:上层用户取用数据的速率 != 接收到的数据从速率,接收到的速率可能会乱序,需要排序交付
4、流水线协议:回退N步(GBN)和选择重传(SR)

八、通用窗口协议(缓冲区协议):
1、发送缓冲区
(1)发送缓冲区
a.形式:内存中的一个区域,落入缓冲区的分组可以发送
b.功能:用于存放已发送,但是没有得到确认的分组
c.必要性:需要重发的时候可以用
(2)缓冲区大小:一次最多可以发送多少个未经确认的分组
a.停止等待协议=1
b.流水线协议>1,合理的值,不能很大,链路利用率不能超过100%
(3)发送缓冲区中的分组
a.未发送的:落入发送缓冲区的分组,可以连续发送出去
b.已经发送出去的,等待对方确认的分组;缓冲区中只有得到确认的分组才能删除
2、接收缓冲区
(1)接收窗口=接收缓冲区;传输的分组序号只有落在窗口范围内才允许内接收;若落在接收窗口范围外,则被丢弃
(2)接收窗口尺寸Wr=1,则只能顺序接收,成称为累计确认(GBK协议);Wr>1,则可以乱序接收,三号窗口确认了,但是前面2号窗口不一定就确认了,称为非累计确认(SR协议)。
3、窗口的滑动
(1)正常情况下窗口的滑动
a.发送窗口:有新的分组落入发送缓冲区范围,发送->前沿滑动;来了老的底序号分组的确认->后沿向前滑动->新的分组可以落入缓冲区的范围
b.接收窗口:收到分组,落入到接收窗口的范围内,接收;是底序号,发送确认给对方
(2)异常情况下GBK窗口的滑动
a.原因:传输过程中的分组可能丢失、出错;接收方给的确认没有达到发送方。
b.过程:接收方缓冲区大小为3情况下,在发送方发送分组的过程,2号分组丢失,1号分组确认收到后,接收方窗口不会向前滑动,因为2号分组的窗口是空的,而再接下来发送方在等待2号分组的确认信息是等不到的,所以最后触发超时重传
c.后果:超时重传时发送方会将已发送但是未确认的全部重传一遍。
(3)异常情况下SR窗口的滑动
a.因为SR协议下的接收方是可以乱序接收的,也就是发送方可以发送多个,接收方可以乱序接收,也就意味着在缓冲区的范围内,若某个分组丢失,缓冲区的其他分组是可以照常确认的,只不过缓冲区窗口前沿不会向前移动,在等待丢失的分组超时触发器触发时,会将分组重传。SR协议下发送方每发一个协议,就会设定一个超时触发器。
4、GBK协议和SR协议的异同
(1)相同之处:发送窗口>1,一次可以发送多个未经确认的分组
(2)不同之处:GBK接收窗口=1,所以只能顺序接收;SR接收窗口>1,可以乱序接收
5、总结
在这里插入图片描述


http://chatgpt.dhexx.cn/article/61oNoOYq.shtml

相关文章

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…

关于前端的学习

最近在网上想模拟一个ai的围棋,然后在gitee上找了一个算法,想要启动一下。 https://gitee.com/changjiuxiong/myGoChess?_fromgitee_search 使用说明是这样的: 使用说明 npm install npm run dev 打开index.html 可自定义棋盘大小: new Game…

前端开发学习常用网站网址及介绍(都是免费的)

在开发的时候,想记住所有的单词基本是不可能的,所以就需要进入文档,只要理清需求能做出来,就很不差了!! 扫码加博主微信 1.百度,俗称度娘,有不懂的就问百度,有问必答&am…

前端开发需要学习什么?掌握哪些技术?

前端开发需要学习什么?随着计算机行业的不断发展,无论是在企业还是个人中,web前端技术都得到广泛的使用。web前端开发师是一个非常新兴的职业,在计算机行业中,web前端得到很大的重视。那么在学习web前端开发需要学习什…

自学Web前端开发学习讲解 – 入门篇

很多人都对web前端感兴趣,这一期主要聊关于如何入门学习Web前端开发的过程分享,此篇适合想入门初学者,大佬就不用看了。主要内容是以本人这一路自学web前端的一些经验和建议,学习哪些知识,以及如何正确的去学&#xff…