热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

reliabledatatransferprotocol在传输层和网络层都有很重要的应用,用来保证信息传输的准确性在本文中只考虑单向数据传输(sende

reliable data transfer protocol 在传输层和网络层都有很重要的应用,用来保证信息传输的准确性

reliable data transfer示意图

在本文中只考虑单向数据传输(sender发送数据到receiver),但控制信息将在两个方向上流动(互相传递信息例如ACK等)
使用有限状态机(FSM)指定发送方、接收方

Q:什么是finite state machines (FSM)?
A:FSM(Finite State Machine),有限状态机,其在任意时刻都处于有限状态集合中的某一状态。下面的针对sender以及receiver的状态分析图就是FSM


RDT 1.0:

RDT 1.0协议是在理想情况下
- no bit errors
- no loss of packets
RDT 1.0
sender发送数据包给receiver接收


RDT 2.0:

毕竟不能只考虑理想情况,RDT2.0考虑了bits error的情况

RDT 2.0相比于RDT 1.0 增加了checksum(ACK确认字符和NAK否认字符)


Acknowledgements (ACKs): receiver explicitly tells sender that pkt received OK
Negative acknowledgements (NAKs): receiver explicitly
tells sender that pkt had errors


在这里插入图片描述
在这里插入图片描述
这里面提到了Stop and wait protocols 就是说等sender给receiver发送了一个数据包以后,需要等待reciever反过来发送给ACK或者NAK。只有收到的receiver的信息以后sender才会继续发送给第二个数据包或者重新发送上一个数据包。

没有错误的情况:
在这里插入图片描述


  1. sender发送数据给receiver
  2. receiver接收数据并且返回ACK,证明数据无误
  3. sender经过等待,接收到reciever返回的ACK,继续发送下一个数据包

有错误的情况:
在这里插入图片描述


  1. sender发送数据给receiver
  2. receiver接收数据并且返回NAK,证明数据有误
  3. sender经过等待,接收到reciever返回的NAK,将当前数据包重新发送

RDT 2.1:

因为对于RDT 2.0来说,receiver就算接收到了ACK或者NAK,也不知道是哪个数据包(retransmission的数据包 or 当前的数据包)
因此RDT2.1引入了一个 sequence number(0 or 1)
发送方添加序列号到每个pkt,接收方检查这个序列号,以确定是否收到的包是一个重传,接收方丢弃(不交付)重复的pkt

过程如下:
sender:

在这里插入图片描述
receiver:
在这里插入图片描述
假设接收端收到了正确的分组并向发送端发出了确认信息,但是当发送端接收到错误的接收端的确认信息(即不是ACK也不是NAK)时候,发送端不知道接收端是否得到正确的分组,发送端会在当前状态(1或0)下重新发送分组,而此时接收端已经进入下一个状态(0或1),发送端与接收端当前处于不同的状态,当前接受端的状态是期望得到下一个分组,而发送端发送的是上一个分组,这时候接收端就会通过两端不同的状态明白发送端发送的是上一个分组,跟着会丢弃这个分组,并且发送ACK给发送端, 让发送端进入下一个状态。

Q:只是引入2个sequence number(0 & 1)够不够?
A:RDT 2.1属于等停协议,就是说要按顺序传送分组,上一个分组确认传达后才会开始下一个分组。


RDT 2.2:

RDT 2.2跟RDT 2.1不同的地方在于RDT 2.2只是使用一个ACK而不使用NAK
E.g. 如果接收方接收到0号数据包,返回(ACK,1),发送方接着发送1号数据包。如果接收方接收到0号数据包出现错误,返回(ACK,0),发送方重传0号数据包。

在这里插入图片描述


RDT 3.0:

rdt3.0在rdt2.2的基础之上在处理了数据包丢失的情况中增加了 Countdown Timer的机制,如果在(RTT+Processing time at receiver)时间段内,发送方没有接收到反馈信息,那么发送方默认数据包已经丢失了,会自动重传。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


Reference:

[1]JamesF.Kurose, and KeithW.Ross. 计算机网络:自顶向下方法. 机械工业出版社, 2009.
[2]https://www.zhihu.com/question/366259154/answer/983403348


推荐阅读
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 本题要求计算一组正整数的最小公倍数(LCM)。输入包括多组测试数据,每组数据首先给出一个正整数n,随后是n个正整数。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • 线段树详解与实现
    本文详细介绍了线段树的基本概念及其在编程竞赛中的应用,并提供了一个具体的线段树实现代码示例。 ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
author-avatar
无敌BUG
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有