计算机网络-自顶向下笔记-可靠数据传输原理(三种rdt)

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

计算机网络自顶向下全部笔记🔗

可靠数据传输原理

🐳可靠性问题不仅仅出现在运输层,同样也是会出现在链路层以及应用层次中,可靠性问题同样也是会被列为🔝TOP10问题。

信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性

可 靠 数 据 传 输 : 服 务 模 型 与 服 务 实 现 : 可靠数据传输:服务模型与服务实现: :

请添加图片描述

🐳由于可靠数据传输协议的 下层协议也许是不可靠的,我们可以将较低层直接视为 不可靠的点对点信道

  • Rdt_send():被上层应用所调用,将数据交付给接收方的较高层
  • udt_send():在不可靠信道上向接收方传输数据,udp(不可靠🙅)
  • Rdt_rcv():在接收端,分组从信道的接收端到达的时候,调用rdt_rcv()
  • Deliver_data():rdt向较高层交付数据

构造可靠的数据传输协议

逐层渐进的完善我们的协议,一步步变复杂

1.经完全可靠信道的可靠数据传输:rdt1.0

考虑最简单的情况:底层信道是完全可靠的(不会bit error, 不会丢弃分组),称该协议为: rdt1.0。下图显示了发送方与接收方的 **有限状态机(FSM)**的定义。

FSM:基本术语的解释:

  • FSM中的虚线表示初始状态,实线箭头指示了协议从一个状态变迁到另一个状态

  • 引起状态变迁的事件:显示在横线上方

  • 事件发生时候所采取的状态:显示在横线的下方

  • 如果对于一个事件没有动作或者是没有就事件发生而采取了一个动作,在横线上方或者下方使用符号𝛬

请添加图片描述

🐳发送端:

  1. 通过rat_send(data)事件接收来自较高层次的数据
  2. 产生一个包含该数据的分组(通过make_pkt(data))
  3. 然后将分组发送到信道中。因为我们假定信道是完全可靠的(当然,只是假设而已),所以我们只需要发送就可以了(udt_send(packet))

🦭接收端

  1. rdt通过rat_rcv(packet)事件从底层信道接收一个分组
  2. 从分组中取出数据(extract(packet,data))
  3. 将数据上传给较高层次

经具有比特差错信道的可靠数据传输:rdt2.0

底层的信道更为实际的模型是:分组中的比特可能受损。在分组的传输、传播、缓存的过程中,这种比特差错通常是会出现在网络的物理部件中。

我们假定发送的分组(即使受损了)按照发送的顺序进行接收。

类比通话

假设让我们在通话中向对方传送消息报文,报文接收者在 听到、理解、记下报文之后会反馈:OK!

如果听到了一个含糊不清的话语的时候,可能就会要求发送方进行重述

口述报文协议采用了 肯定确认否定确认,基于这样的传统的机制的可靠数据传输协议成为 自动充传请求协议(ARQ)

基本实现

相对于rdt1.0版本我们为了处理 biterror的情况,为了处理这种情况,我们需要引入三种协议功能进行处理

  • 差错检验:一种实现就是使用上篇介绍的UDP中的校验和检测,当然不只是这样子的,现在只需要记住我们需要有额外的bit发送到接受方(汇集在数据分组的分组检验和字段)
  • 接收方反馈:那我们上面通过检验和进行检测了,对了还好,如果发生错误了应该怎么办呢?🧐接收方就需要告诉发送方你给我发送的不对,重新给我发送一份新的吧,这就是“肯定确认” & “否定确认”。理论上,这些分组(只是描述状态)只需要一个Bit
  • 重传:接收方接收到有差错的分组的时候,发送方将重传该分组报文

有限状态机(FSM)

请添加图片描述

发送端:

  • 当rdt_send(data)事件出现的时候,发送方将产生一个 包含待发送数据的分组,带有 检验和,然后经由udp_send()发送该分组
  • 发送方协议等待来自接收方的ACK或者是NAK分组,1. 如果收到ACK,则代表正确的接收了分组,那么就回到初始状态继续等待上层的数据。 2 .如果收到NAK,那就是没有收到正确的数据,需要进行重传并且继续处于等待ACK或者NAK的状态
  • 只有当发送方接收到ACK并且离开该状态了才能够继续发送新的报文,这种行为被称为 停等协议(stop-and-wait)

接收端:

接收方的FSM仅有一种状态,当分组到达的时候,接收方要么回答一个ACK,要么回答一个NAK,这取决于收到的分组是否受损。

Rdt2.0的缺陷

如果ACK/NAK发生错误/被破坏怎么办?🐳🧐

如果发送方收到的消息是含糊不清的就进行重传,为了避免接收方重复接收,发送方给每一个分组增加序列号,如果接收方收到了重复的分组即丢弃掉

请添加图片描述

rdt2.1

发送方:

请添加图片描述

接收方

请添加图片描述

对比2.0

请添加图片描述

因为我们采用的是 停等协议,因此使用两个序列号就是足够的

Rdt2.2:无NAK消息协议

同rdt2.1的功能相同,但是只使用ACK

  • ACK消息中 显式的加入被确认分组的序号

  • 接收方通过ACK告诉最后一个被正确接收的分组

当发送方收到重复的ACK之后,采用与NAK相同的的处理动作:重传分组

为什么加入上一个正确接收的分组能代替NAK呢?

假设正在传输序号为1的,接收方传回来的消息是:我上一个正确收到的是序号为0的分组,那么这次发送的序号为1的就是没有被正确收到

请添加图片描述

Rdt3.0

如果信道既可能发生错误,也可能会丢失分组,肿么办?🧐

“检验和” + “序列号” + ACK + 重传够用吗?

🌰:假如说发送端发送了数据给接收方,在半路就丢失了,那么发送方就会无休止的等待。。。接收方没有收到数据,当然也是等待。。。。。

解决方法:

  • 如果没有收到ACK,进行重传(好像遇到事就重传哎。。。)
  • 如果分组或者ACK只是延迟而不是丢了:1.重复问题已经解决,通过上文的给发送数据添加 序列号
  • 需要定时器, 如果发送完一段时间还没有收到ACK,就进行重发

当重传了或者接收到了上一次的ACK就会重置计时器

请添加图片描述

示例1(丢包)

请添加图片描述

  • a)就是没有发生错误❌的情况,发送端发送,接收方收到后发送ACK状态,发送端收到后继续下一个包的发送。。
  • b)中发送端的pkt1出现了丢失,经过一段时间后(超出了发送端设置的事件),发送方进行重新发送,然后进行等待。。。直到收到接收端的ACK消息后才继续发送新的包

实例2(丢失ACK)

请添加图片描述

  • c)中显示了丢失ACK的情况,发送端发送了pkt1,接收端正确的接收到了pkt1,但是将ACK传送给发送端的时候丢失了。发送端一直没有收到ACK,那么就进行了重传,接收端就收到了 重复的分组PKT1。幸运的是我们有序列号进行判断是否是重复的接收,然后再向发送端发送ACK1(注意是ACK1),直到发送端接收到了ACK1之后才发送新的包
  • d)中显示了timeout之后进行重新发送包,但是收到了 迟来的ACK1,发送方既然是收到了ACK1,那么我就继续发送新的包pkt0。同样接收方接收到了 冗余的pkt1,检测到重复了,置之不理。发送方又收到了ACK1(之前都收到过了,因此),置之不理。

Rdt3.0性能分析

请添加图片描述

因为停等的协议,导致了发送方的利用率:发送方实际忙于将发送比特送进通道的那部分时间与发送时间之比 很低

请添加图片描述


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

相关文章

DJ3-2 可靠数据传输原理:rdt

目录 一、如何实现可靠数据传输 二、rdt1.0:完全可靠信道上的可靠数据传输 1. 前提条件 2. 有限状态机 FSM 三、rdt2.0:仅具有 bit 错误的信道上的可靠数据传输 1. 前提条件 2. 有限状态机 FSM 3. 停等协议 4. rdt2.0 的致命缺陷 四、rdt2.1&a…

粗浅的rdt协议介绍

1、rdt1.0:经完全可靠信道的可靠数据传输 rdt1.0是假设使用最可靠的通道情况。主要有传输端与接收端两个部分。发送端等待上层传数据传进来,将数据打包为分组并将其发送到信道中;接收端收到分组以后,将封包解开,将其发…

计算机网络 可靠数据传输原理——从rdt协议到GBN到SR

文章目录 可靠数据传输原理rdt协议rdt 1.0rdt 2.0rdt 2.1rdt 2.2rdt 3.0 流水线可靠数据传输协议GBNGBN发送方GBN接收方GBN协议具体处理过程的示例 SRSR发送方SR接收方SR协议具体处理过程的示例接收方情况简析发送方情况简析接收方处理的区间长度为什么刚好是2N 窗口长度与序号…

3运输层 - 可靠数据传输的原理rdt

可靠数据传输的原理 可靠数据传输——rdtRdt1.0(在可靠信道上的可靠数据传输)Rdt2.0(具有比特差错的信道)rdt2.1(发送方处理出错的ACK/NAK)rdt2.2(无NAK协议)rdt3.0(具有…

java rdt_使用 Eclipse 和 RDT 开发Ruby应用程序

使用用 Eclipse 和 RDT 开发Ruby应用程序 RDT(Ruby Development Tools),一组Eclipse插件,使得Eclipse能支持Ruby开发。 而Eclipse是一个功能强大的跨平台集成开发环境,支持对java,jsp,php等地开发。 使用用 Eclipse 和…

计算机实验三——Rdt协议对比

计算机实验三:Rdt协议对比 一、实验目的二、实验原理1.Rdt1.0:在可靠信道上进行数据传输2.Rdt2.0:有差错检测的传输信道3.Rdt2.1:解决Rdt2.0中ACK/NAK丢失的问题4.流水线协议——解决低效问题 三、实验步骤及分析(一)实验前准备(二…

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

这次为分享一下有关于rdt的发展历程以及rdt协议演变,从rdt1.0-rdt2.0-rdt2.1-rdt2.2-rdt3.0的经历,使rdt一步步进行完善。 我们知道,TCP发送的报文段是交给IP层传送的。TCP下面的网络所提供的是不可靠的传输。因此,TCP要采用措施才…

可靠数据传输(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前端开…