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

article/2025/10/9 8:30:36

目录

一、如何实现可靠数据传输

二、rdt1.0:完全可靠信道上的可靠数据传输

1. 前提条件

2. 有限状态机 FSM

三、rdt2.0:仅具有 bit 错误的信道上的可靠数据传输

1. 前提条件

2. 有限状态机 FSM

3. 停等协议

4. rdt2.0 的致命缺陷

四、rdt2.1:发送方能够处理混淆的 ACK 和 NAK

1. 发送方的有限状态机 FSM

2. 接收方的有限状态机 FSM

五、rdt2.2:一个不需要 NAK 的协议

六、rdt3.0:具有出错和丢失的信道上的可靠数据传输

1. 前提条件

2. 发送方的有限状态机 FSM

3. 为什么要在超时后才进行重传?

4. rdt3.0 的性能


一、如何实现可靠数据传输

1. 需要解决的问题

分组交换已经限制了分组的大小

但是需要解决下述三大问题:

  • 发送顺序和接收顺序可能不同:编号
  • 数据可能出错:重传
  • 分组可能丢失:发送方定时 + 接收方确认

2. 使用的描述方法

  • 有限状态机

二、rdt1.0:完全可靠信道上的可靠数据传输

1. 前提条件

在完美可靠的信道上

  • 没有 bit 错误
  • 没有分组丢失

发送方和接收方的 FSMs:

  • 发送方发送数据到下层信道
  • 接收方从下层信道接收数据

2. 有限状态机 FSM

发送方的动作:

  • 从应用层得到数据
  • 在传输层封装数据和发送分组

接收方的动作:

  • 从网络层接收分组
  • 在传输层解封分组和传递数据

三、rdt2.0:仅具有 bit 错误的信道上的可靠数据传输

1. 前提条件

1)如何检测到错误

下层信道可能使传输分组中的 bit 受损

  • 接收方将通过校验和检测到 bit 错误

2)如何从错误中恢复

接收方反馈:

  • 确认(ACKs):接收方明确告诉发送方 “分组接收正确”
  • 否认(NAKs):接收方明确告诉发送方 “分组接收出错”

发送方收到 NAK 后将会重传该分组。

3)rdt2.0 中的新机制(在 rdt1.0 中没有的)

  • 差错检测
  • 接收方反馈

接收方反馈给发送方控制信息(ACK,NAK)

2. 有限状态机 FSM

checksum           //校验和rdt_rcv(rcvpkt)    //对于sender是确认信息//对于receiver是分组isACK(rcvpkt)      //确认信息为ACK
isNAK(rcvpkt)      //确认信息为NAKcorrupt(rcvpkt)    //根据校验和发现有差错
notcorrupt(rcvpkt) //根据校验和发现没有差错

1)没有错误时的操作

  1. 上层调用 sender,sender 发送完分组,转为等待反馈状态
  2. receiver 接收到正确的分组,处理分组递交上层,并反馈确认信息
  3. sender 收到确认信息,转为等待调用状态

2)错误场景中的操作

  1. 上层调用 sender,sender 发送完分组,转为等待反馈状态
  2. receiver 接收到错误的分组,直接反馈否认信息
  3. sender 收到否认信息,立即重传分组,且仍为等待反馈状态
  4. receiver 接收到正确的分组,处理分组递交上层,并反馈确认信息
  5. sender 收到确认信息,转为等待调用状态

3. 停等协议

停等协议:发送方发送一个报文,然后等待接受方的响应。

rdt2.0 的优点:因为必须保证上一个分组接收成功后才能发送下一个,所以不存在分组失序问题。

4. rdt2.0 的致命缺陷

1)ACK 和 NAK 可能出现混淆

混淆:接收方回复的 ACK 或 NAK 受损,发送方不知道到底有没有接收成功

  • 万能的做法是:重传但是重传可能导致分组重复
  • 并且接收方无法区分这是重传的分组还是下一个分组

例如,接收方回复的是 ACK,而 ACK 受损了,发送方重传当前分组。而接收方觉得自己刚刚回复的是 ACK,那么发送方发来的肯定是下一个分组。

2)如何解决分组重复

发送方给每个分组加一个序号

  • 在 ACK 和 NAK 混淆时,发送方重传当前分组
  • 接收方通过识别序号来丢弃重复的分组,并不向上传递

3)需要为停等协议设置多少个序号

答案:2 个,因此只需要一个 bit 。可以采用 0 号和 1 号来区分。

分析:由于采用停等协议,因此在 发送方发送当前分组 - 接收方接收分组并反馈 ACK - 发送方发送下一个分组 的过程中,只会涉及到两个相邻的分组:当前发送的分组和下一个发送的分组。如下图所示。

四、rdt2.1:发送方能够处理混淆的 ACK 和 NAK

1. 发送方的有限状态机 FSM

make_pkt(0, data, checksum) //封装有序号/数据/校验和corrupt(rcvpkt)    //对于sender是确认信息出错//对于receiver是报文出错

2. 接收方的有限状态机 FSM

has_seq0(rcvpkt)      //根据序号知道接收的是0号make_pkt(ACK, chksum) //封装校验和以便sender检测确认信息是否出错

分析右侧语句:

rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && has_seq0(rcvpkt)
-------------
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

此时 receiver 等待的是 1 号报文,但是 has_seq0(rcvpkt) 表示 sender 给 receiver 发的是 0 号报文,这种情况说明:receiver 的反馈信息 ack 1 出错导致 sender 不知道 receiver 是否正确接收了 1 号报文。因此,receiver 需要做的是:重传 ack 1 。

五、rdt2.2:一个不需要 NAK 的协议

同 rdt2.1一样的功能,但是只用 ACK 不用 NAK。如果当前分组接收正确,则接收方发送 ACK,并且 ACK 必须明确包含被确认的分组的序号。

如果发送方收到重复 ACK,则执行和 NAK一样的处理:重发当前分组。

六、rdt3.0:具有出错和丢失的信道上的可靠数据传输

1. 前提条件

1)存在的问题

下层信道除了 bit 出错还要丢失报文:包括数据和 ACK 。

校验和、序号、确认、重传将会有帮助,但是不够。

2)解决方法

方法:发送者等待 “合理的” 确认时间,如果在这个时间内没有收到确认就重传。

  • 要求倒计时定时器
  • 只有在定时器超时时才触发重传

如果报文只是延迟而没有丢失:

  • 重发将导致重复,但是使用序号已经解决了这个问题
  • 接受方必须指定被确认的报文序号

2. 发送方的有限状态机 FSM

分析右侧语句:

1)即使 sender 接收到的确认信息出错了或 receiver 说这个报文出错了,sender 也只在超时时重传当前报文。

rdt_rcv(rcvpkt) &&  
(corrupt(rcvpkt) || isACK(rcvpkt, 1))
-------------
//do no-optimeout
-------------
udt_send(sndpkt)
start_timer

2)sender 可能接收到上一个报文超时了很长时间的确认信息(甚至在重传报文的确认信息之后才到达),此时 sender 不做任何操作。

rdt_rcv(rcvpkt)
-------------
//do no-op

3. 为什么要在超时后才进行重传?

图一为 rdt3.0 中可能出现的问题,图二和图三为相应的解决方案。

图一中的问题:

  1. 第一个 pkt 0 的确认信息 ack 0 在确认时间内没有到达 sender
  2. 按照超时才重传原则,sender 在确认时间截止时重传第二个 pkt 0
  3. 第一个 pkt 0 的确认信息 ack 0 终于到达
  4. sender 认为 pkt 0 已接收完毕,开始传输 pkt 1
  5. 在 pkt 1 的确认信息 ack 1 到达之前,第二个 pkt 0 的确认信息 ack 0 到达了
  6. 由于重复的 ack 等价于 nak,因此 sender 需要重传 pkt 1

在这里有两种重传方案:

  • (a) 直接重传:此时此刻立即重传 pkt 1
  • (b) 超时才重传:当 pkt 1 的确认时间截止时才重传

方案 (a) 直接重传:

  1. sender 需要立即重传第二个 pkt 1
  2. 在第二个 pkt 1 的确认信息 ack 1 到达之前,第一个 pkt 1 的确认信息 ack 1 到达了
  3. sender 认为 pkt 1 已接收完毕,开始传输 pkt 0
  4. 在 pkt 0 的确认信息 ack 0 到达之前,第二个 pkt 1 的确认信息 ack 1 到达了
  5. 由于重复的 ack 等价于 nak,因此 sender 需要重传 pkt 0
  6. ...

可见,使用该方案会不断地出现需要重传的情况。我们需要做的是:让子弹多飞一会儿!

方案 (b) 超时才重传:

  1. sender 选择在第一个 pkt 1 的确认时间截止时才重传第二个 pkt 1
  2. 然而,在截止之前第一个 pkt 1 的确认信息 ack 1 到达了,sender 不需要重传了
  3. sender 认为 pkt 1 已接收完毕,开始传输 pkt 0
  4. ...

后续一切正常。

4. rdt3.0 的性能

网络利用率 = 发送时间/得到响应的时间。公式如下。

U_{sender}=\frac{L/R}{RTT+L/R}


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

相关文章

粗浅的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前端开…

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

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