主要思想是有限状态机。

RDT1.0

RDT1.0是模拟信道可靠的情况下。

RDT1.0存在的问题:

信道完全可靠是理论的模型

RDT2.0

RDT2.0是模拟信道不可靠的情况下(数据位翻转,但不丢失分组),解决信息发送接收的问题,加入checksum校验位。

发送方在发送完成后会进入一个等待确认的状态,当收到接收方返回的消息为ACK时才会让上层进入下一次调用,否则会重新发送消息。

接收方在接收到信息后会对消息进行校验,当信息校验成功后,会发送ACK,否则发送NAK。

RDT2.0存在的问题:

RDT2.0存在的问题是,ACK和NAK也会出现因为信道不可靠而出现数据丢失的问题,那么接受方就无法正确识别ACK和NAK。当发送方第一次发送的数据就已经被接收方接收,而接受方发送的ACK由于信道丢失了数据,发送方会重新发送一份数据,导致数据重叠。

RDT2.1

RDT2.1是对RDT2.0的改进,目的是为了解决RDT2.0存在的问题。

2.1加入的措施:

对发送者和接收者都加入一个序列号(0,1)。由于采用的是“停-等”协议,这个序列号只需要2个。

当发送者发送数据时会携带上当前的序列号,如0。那么在发送者发送后和2.0一样会进入确认状态。

发送者在接收到数据后,会对数据的序列号进行检查,是否与当前自己所期望的序列号一致。

RDT2.1的问题:

如果我们仔细看,NAK是多余的。可以由ACK+序列号来替代NAK。

RDT2.2

RDT2.2是对RDT2.1的简单改进,NAK被去除,而是接受者在发送ACK时携带上序列号,如果是正确接收则添加当前序列号,否则添加另一个序列号。

RDT2.2中存在的问题:

RDT2.0,2.1以及2.2都是建立在信道不可靠但不丢失分组的模拟环境下,但实际上在数据传输的过程中,有可能出现分组丢失的情况,这样,无论是发送方还是接收方都将永远处于等待的状态,这是RDT2.2所不能解决的情况。

RDT3.0

RDT3.0为了解决RDT2.2中存在的问题,引入了定时器。

定时器会在发送分组时启动,当在设定的时间内仍然没有接收到ACK信息,则会认为该分组在传输的过程中丢失了,(有可能是因为网络延迟,但不影响RDT3.0的正常工作)。

RDT3.0存在的问题:

RDT3.0确保了信道交互的可靠性,也就是说,如果不考虑性能的话,RDT3.0满足了不可靠信道下进行可靠传输数据的需求。

但我们来考虑RDT3.0的性能。假设数据链路传输的速率为1Gbps,分组大小为1KB,15ms端到端的传播延迟。数据实际传输的时间:

\[

T_(ransimit) = \frac LR

\]

t=0.008us,RRT=15ms

发送方发送时间百分比

\[

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

\]

U = 0.00027。在1Gbps链路上每30ms才发送一个分组---> 33KB/s。

我们可以看出:网络协议限制了物理资源的利用。

流水线和滑动窗口协议

经过分析我们可以看出,RDT3.0中导致性能低下的主要原因是停等协议,一次发送必须等待一次返回。那能不能先发个10次然后再等10次返回呢?100次?1000次呢?

答案是肯定的,我们允许发送方在收到ACK之前连续发送多个分组。但实现这个需要更大的序列号范围,发送方和/或接收方需要更大的存储空间以缓存分组,这就是流水线的主要思想。

滑动窗口协议是基于流水线思想的实现方法,具体协议实现有两种。

GBN---Global Back N

SR ---- Selective Repeat

GBN的实现,发送方有一个滑动窗口,而接收方只有当前预期收到序列号的一个缓存空间。

接收方只接收当前预期收到的序列号分组,才会返回ACK,其余的都将被丢弃。

所以发送方收到的ACK都是接收方所收到的最大序列号,发送方不得不重发大于该序列号的所有分组。这无疑造成的资源的浪费。

SR的实现,不仅发送方有一个滑动窗口,接收方也有一个滑动窗口,但两个窗口是不同步的,不能知道彼此窗口现在的状态。在接收方增加滑动窗口后就可以接收一定范围内的序列号分组,(虽然需要增加缓存空间,以空间换时间的做法)。发送方只需要重新发送那些超时或者是ACK状态有误的数据分组即可,SR相对于GBN有了极大的优化。

但SR实际上还存在一个问题,但只需在设计时需要满足一个条件:

\[

N_s + N_R <=2^k

\]

Ns和NR分别是发送方和接收方滑动窗口的大小,k是定义的可用序列号数。

rdt滑动窗口协议Java实现_可靠传输数据概述之RDT到滑动窗口协议的发展相关推荐

  1. python用http协议传数据_《Python网络爬虫》1.3 HTTP协议基础知识

    什么是http协议呢? HTTP(HyperText Transfer Protocol)指的是超文本传输协议.超文本传输协议是一种基于请求与响应模式的无状态的应用层协议. 请与响应模式:简单说,就是 ...

  2. 合同和协议的区别_合同的内容包括哪些,合同和协议的区别

    一.合同的内容包括哪些 由于合同各种各样,性质.种类的不同,合同的具体条款是不一样的,但概括起来,一般包括以下条款: 第一.当事人的名称或者姓名和住所.这是每一个合同必须具备的条款,当事人是合同的主体 ...

  3. java窗口添加标签页_在新标签页中打开新窗口

    window 变量为 undefined 的原因是 you have declared a variable named window again in the local scope . 根据 ja ...

  4. python控件随窗口变化而适配_如何实现python tkinter控件随窗口变化?

    不管是对于Java还是对于Python,我们最开始学习的时候,都会碰到关于开发上的窗口设置,如果不设置这个内容,你所呈现的项目效果,是非常不美观的,而往往为了符合美化,大家都会花费很多心思在基础的窗口 ...

  5. java quickfix_QuickFix Java 讲解(一)概述、下载方法,和协议内容

    本系列力求手把手教你怎样利用 QuickFix Java 搭建自己的 FIX 协议收法平台,以及其中的注意事项. 所有源码的地址(免费): 1. 什么是FIX,QuickFix,Quick Java? ...

  6. amd cpu不能在cmd环境下运行java代码_如何在Windows10中配置java的JDK环境

    今天给大家分享一下如何配置java的JDK环境.操作步骤如下: 1.下载好 jdk 的安装文件,我下载的是 jdk-10.0.1_windows-x64_bin.exe 这个版本的安装文件: 2.使用 ...

  7. 蓝牙协议分析(2)_协议架构

    原文链接:蓝牙协议分析(2)_协议架构 (wowotech.net) 系列索引:蓝牙协议分析(1)_基本概念 目录 1.前言 2.协议层次 2.1 物理层 2.1.1 Physical Channel ...

  8. java tcp权限控制_「图解」TCP重传、滑动窗口、流量控制、拥塞控制

    前言 前一篇35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的. 来了,今天又来图解 TCP 了,小林可能会迟到,但不会缺席. 迟到的 ...

  9. native层 安卓_安卓逆向——拼xx协议java层分析

    制丨阿星 整理丨阿星 老铁们大家好,今天小编给大家带来很实用的技巧叫拼xx协议java层分析,有啥不足的地方望大家指点指点! 首先抓包  反编译 这个时间段我们方法剖析一下 找到onclick 看他的 ...

最新文章

  1. 截取前四位字符串_Python的字符串切片
  2. 学python可以做什么知乎-学完Python后能做什么?
  3. Eclipse 快捷键 非常详细
  4. 大学生java考试题库6_《JAVA程序设计》期末考试试题_(六)
  5. 第三次学JAVA再学不好就吃翔(part34)--多态的成员访问
  6. mendelay为什么安装不了_你为什么消防验收过不了?消防管道安装错误图集
  7. oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战
  8. 《2021中国数据资产化工具市场研究报告》隆重发布
  9. 网页优化系列三:使用压缩后置viewstate
  10. 鸿蒙系统可以安装teams吗,鸿蒙致命弱点被曝光!不能装这个软件,80%用户将望而却步!...
  11. IT江湖,哪个门派最挨踢?
  12. Input Output
  13. 未来能源互联网技术革命,能源产业大数据应用解析
  14. NSIS 封装软件工具封装的软件,安装后快捷方式没有图标显示问题
  15. _stdcall相关
  16. 基于Krpano的全景导游系统设计与实现(含word文档)
  17. 腾讯云TCA运维认证考试题库
  18. 【Android】TypedArray——三个方法获取dimen返回值的类型
  19. NLP-文本处理:依存句法分析(主谓、动宾、动补...)【基于“分词后得到的词语列表A”+“A进行词性标注后得到的词性列表B”来进行依存句法分析】【使用成熟的第三方工具包】
  20. rda分析怎么做_数量生态学笔记||冗余分析(RDA)

热门文章

  1. js复制字符串到粘贴板
  2. 如何提高笔试做题准确率和解题速度?
  3. python怎么用sin函数_Python sin() 函数
  4. TRAI:大力发展印度公共Wi-Fi网络
  5. 第五章、首次登陆与在线求助 man page
  6. 分治算法——汉诺塔(HanoiTower)
  7. 获取outlook 约会_如何仅获取重要电子邮件的Outlook通知
  8. Linux概述,用户和用户组
  9. Spack重新生成modulefile
  10. python中的rt_TensorRTSamplePython[introductory_parser_samples]