可靠传输协议——Rdt演变历程

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

        这次为分享一下有关于rdt的发展历程以及rdt协议演变,从rdt1.0-rdt2.0-rdt2.1-rdt2.2-rdt3.0的经历,使rdt一步步进行完善。

         我们知道,TCP发送的报文段是交给IP层传送的。TCP下面的网络所提供的是不可靠的传输。因此,TCP要采用措施才能使得两个运输层之间的通信变可靠。

        理想的传输条件有以下两个特点:

      (1)传输信道不产生差错

      (2)不管发送方以多块的速度发送数据,接收方总是来得及处理收到的数据

实际的网络不具备以上两个理想条件,但我们可以使用一些可靠传输协议,当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告诉方适当降低发送数据的速率。

rdt对应用层、传输层、链路层都重要

传输的不可靠特性决定了rdt的复杂性

只考虑单向数据传输,但控制信息双向流动 

原理图如下: 

利用状态机刻画传输协议(有线状态自动机)Rdt1.0

        基于理想的可靠信道上可靠数据传输,底部信道可靠:1、不出端 2、不丢组

发送与接收 FSM独立

流程:发送方接收上层调用命令, 然后进行make_pkt然后发送给接收方,因为信道是完全理想的,所以接收方直接提取信息,然后传送给上层

Rdt2.0

基于产生错误的信道,其他因素不考虑,认为在理想的状态下。

底层可能翻转分组中的位

        利用校验和检测位错误

从错误中恢复方法步骤

        确定机制:接收方显式告知分组正确接收

        NAK:接收方显式告知发送方有错

        发送方收到NAK,重传

基于重传机制的rdt协议成为ARQ

相对于Rdt1.0来讲Rdt2.0引入新机制

        差错检测

        显示反馈信息 ACK/NAK

        重传

Rdt2.0的FSM规约

 在没有出错的情况下的操作

 流程:发送方先等待上层应用调用,然后将数据封装成包,与rdt1.0不一样增加了checksun(校验和)然后发送给接收方,接收方在检验之后,接收、想上层发送、向发送方发送ACK。接收方接收到ACK不做重传,没有任何行动

在出错情况下的操作

流程:发送方进行发送,接收方接收后,出现校验和不正确,发送NAK,接收方接收到NAK,再次调用udt_send发送,进行重传,然后继续等待,这次没有出现错误,然后接收方检验无错,发送ACK,接收方接收到,不再重传

Rdt 2.1和Rdt 2.2

Rdt2.0的缺陷

如果NAK/ACK发生错误会怎么样?因为Rdt2.0只增加校验和和发送NAK/ACK,而再传送NAK/ACK的时候,可能发生错误,发生错误却检测不出来了。

方法:

为NAK/ACK增加校验和,检错并纠错;收到破坏ACK/NAK不知发送了什么,添加额外的控制信息;如果NAK/ACK坏掉,发送重传,不能简单的重传;不然会产生重复分组。

解决重复分组的问题?

序列号:发送方给每个分组增加序列号,接收方丢弃重复分组。

Rdt2.1

Rdt2.1:应对ACK/NAK的破坏

下图;发送方的流程图

 

 接收方的流程图

 流程:在rdt2.0的基础上,在打包数据包添加序列号同时也为NAK/ACK添加序列号 0/1,

假如现在接收方发送0号的数据包,如果接收方收到0号数据包,返回ACK,此时ACK发生翻转,接收方处于接收等待1号的状态,发送方继续发送0号数据,此时接收方会拒绝0号数据

如果当接收方收到0号数据包出错,返回NAK,NAK发送翻转,接收方处于接收0号数据状态,发送方发送1号数据,接收方不会接收

Rdt2.1与Rdt2.0对比

发送方:                                                                        接收方:

为每个分组加序列号                                                 需要判断分组是否重复

需要校验ACK/NAK消息是否发送错误                  当前所处状态提供了期望收到的分组序列号

四状态:必须“记住”“当前”的分组序列号                

注意:接收方无法知道ACK/NAK是否被发送方正确收到 

问题:我们真的需要两种确定信息吗?——不需要

Rdt2.2

Rdt 2.2:无NAK消息协议。只使用ACK

如何实现?

接收方通过ACK告知最后一个被正确接收的分组,在ACK消息中显式地加入被确认分组的序列号

发送方收到重复ACK之后,采取与收到NAK消息相同的动作,重传当前组

流程图,如下

Rdt 3.0 

以上我们只是考虑到了位的翻转,如果信道发送错误、也可能丢失分组?那么“校验和+序列号+ACK+重传”够用吗?

Rdt 3.0 :增加时间序列

方法:发送方等待“合理”时间

           如果没有收到ACK,重传

           如果分组或ACK,只是延迟而不是丢失重传会产生重复

流程图:

 下图中,左边是争取接收与发送,右边是发送方发送pkt时丢失,这连这种情况都能解决

下图左边是接收方在发送ACK的时候,丢失,发送方超过时间之后会 再次发送数据包,右图为接收方发送ACK还没有让接收方接收,接收方延迟时间设置较短。

 Rdt 3.0 性能分析

rdt3.0能正确的发送,但是性能方面很差

发送方利用率:发送方时间占比

性能差的原因是由于停等操作引起


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

相关文章

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

可靠数据传输(rdt)的原理 rdt在应用层、传输层和数据链路层都很重要【不出错、不重复、不丢失】是网络TOP 10问题之一 【sending process:发送方进程;receiver process:接收方进程。要实现可靠数据传输,发…

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

转载自:https://blog.csdn.net/qq_38505990/article/details/80603007 计网刚开始学的时候完全没听懂 查了好多博文 这篇写得最清楚 仅供学习参考 在计算机网络中,可靠的数据传输,是一个较为重要的问题,最近在看书(Com…

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…