计算机网络的设计基本方案是复杂化,多功能化应用层,运输层的协议设计,从而使得网络层,链路层,物理层变得相对简单,网络搭建的物质条件变得简单。由于网络层较为简单,采用了无连接的协议,在不可靠信道上传输,导致数据传输是不可靠的。为了保证数据传输的可靠性,我们选择在运输层采用复杂的rdt(可靠数据传输协议),以完成网络的可靠性。

原理图如下所示:

rdt协议经历了rdt1.0,rdt2.0,rdt2.1,rdt2.2,rdt3.0.一步步完善,使得网络得到很好的安全性稳定性。

rdt1.0是基于理想情况下的协议,假设所有信道都是可靠的,没有比特位的翻转,没有数据包的丢失与超时,所以rdt1.0的传输功能就是 发送方发送数据,接收方接受数据。

rdt2.0在rdt1.0的基础上解决了比特位翻转的问题,这里的比特位防撞发生在运输层下面的不可信信道中数据包中的1可能会变0,0可能会变成1。rdt2.0增加了3种新机制:1.错误检验 2.接收者反馈接受信息(ACK,NAK)3.重传机制。在运输层对应用层的数据进行打包处理时,新增checksum(校验和),从而接收端可以对其数据包进行检验,如果正确,返回ACK,发送者继续发送下一个数据包;如果不正确,返回NAK,发送者重传数据。

但是rdt2.0有着一个致命的缺点,只考虑了发送方到接收方的数据传输,如果反馈信息ACK,NAK传输时发生比特位翻转会出现什么情况?如果ACK发生翻转,那么发送方会再次重复的发送相同的数据包;如果NAK发生翻转,那么发送方会认为数据传输情况很好,但是接收方却已经收到了一个错误的数据包。

由此rdt2.1应运而生,在rdt2.0的基础之上,发送方在打包数据包时添加了0或者1编号,同样ACK,NAK字段上也添加了0,1字段,表示0.1号字段的确认或者否定。发送方就有了2种状态发送0号数据包,1号数据包,接收方也有了2种状态等待0号数据包和等待1号数据包。现在假设情景发送方向接收方发送0号数据包,如果接收方接收到0号数据包,返回ACK,但是ACK出现翻转,接收方处于等待1号数据状态,发送方重复发送0号数据,接收方会拒绝0号数据,避免重复。如果接收方接收到0号数据包出现错误,返回NAK,但是NAK出现翻转,接收方处于等待0号数据状态,发送方继续发送1号数据,接收方会拒绝1号数据,避免错序。

rdt2.2是在rdt2.1上的基础之上做了小小的改善,摒弃了NAK,只需采用ACK。我们在ACK的信息上加上了期望的顺序号,现在假设情景发送方向接收方发送0号数据包,如果接收方接收到0号数据包,返回(ACK,1),发送方接着发送1号数据包。如果接收方接收到0号数据包出现错误,返回(ACK,0),发送方重传0号数据包。

rdt2.2之前的版本都重在处理数据包的比特位翻转情况,却没有考虑到数据包在传输过程中出现的数据包丢失问题,这样数据包丢失会使得网络处于拥塞状态。

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

rdt3.0性能分析:

rdt3.0 可以工作, 但是性能很差

ex: 1 Gbps 链路, 15 ms 传播延迟, 8000 bit数据报:

U sender: utilization – 发送者忙于发送的时间占比

每30 msec发送 1KB pkt -> 33kB/sec (1 Gbps 链路)

这是一个网络协议严重影响链路资源利用的一个例子!

主要原因是在RTT时间段内,网络处于空闲状态,而RTT时间段比较长,使得利用率十分的低。

在此基础上采用流水线协议来改进rdt3.0

允许发送者发送多个, “在途(in-flight)”, 等待确认的数据报
顺序号的范围必须扩大
Sender /receiver必须使用缓冲区

主要有两类流水线协议: go-Back-N, selective repeat。

大致描述如下:

go-Back-N(回退N重传协议):

1.发送者在流水线中最多有 N 个未确认的数据报。

2.接收者仅发送累计的确认 ,如果中间有数据报缺失,就不予以确认。

3.发送者对最久未确认的数据报进行计时,如果计时器到点, 重传所有未确认的数据报。

4.发送窗口大于1,接受窗口等于1(也就意味着如果某一个报文段出现错误,那么接受窗口会停留再次,之后收到的数据将会被丢弃)

selective repeat(选择重传协议):

1.发送者在流水线中最多有 N 个未确认的数据报。
2.接收者对单个数据报进行确认。

3.发送者对每一个未确认的数据报进行计时,如果计时器到点, 仅重传该个未确认的数据报。

4.发送窗口大于1,接受窗口大于1(意味着可以缓存出错位置之后的报文段),最好是两者相同,

rdt 可靠数据传输协议相关推荐

  1. 构造可靠数据传输协议

    在本篇文章中我们将逐步了解开发发送方和接收方的可靠数据传输协议的过程,它们逐渐复杂,最后会得到一个无错.可靠的数据传输协议.在这个过程中仅考虑单向数据传输但控制信息双向流动. 我们用有限状态机(FSM ...

  2. 流水线可靠数据传输协议

    在构造可靠传输协议那一篇我们知道rdt3.0的利用率是非常低的,为了解决利用率问题我们用流水线技术解决. 流水线:发送方允许发送多个"在路上的",还没有确认的报文. 流水线技术对可 ...

  3. 基于C语言的可靠数据传输协议的设计与实现

    资源下载地址:https://download.csdn.net/download/sheziqiong/86799219 资源下载地址:https://download.csdn.net/downl ...

  4. 可靠数据传输原理1(构造可靠数据传输协议)

    TCP向调用它的因特网应用所提供的服务模型(服务抽象) 数据可以通过一条可靠的信道进行传输.借助于可靠的信道,传输比特就不会受到损坏或丢失,而且所有数据都是按其发送顺序进行交付. 可靠传输协议 实现服 ...

  5. UDT协议-基于UDP的可靠数据传输协议

    1.   介绍 随着网络带宽时延产品(BDP)的增加,通常的TCP协议开始变的低效.这是因为它的AIMD(additive increase multiplicative decrease)算法彻底减 ...

  6. Rdt协议(可靠运输协议)

    提示:文章写完后 文章目录 前言 一.可靠数据传输原理 二.Rdt协议 1.Rdt 1.0(可靠信道) 2.Rdt 2.0(ARQ重传) 3.Rdt 2.1(序列号) 4.Rdt 2.2(无NAK) ...

  7. 我tcp可是铁齿金不换,诚实可靠小郎君——谈谈可靠数据传输服务

    附 rdt_send()函数:上层可以调用数据传输协议的发送方.其中 rdt 为 reliable data transmission. 它将要发送的数据交付给位于接收方的上层. rdt_rev() ...

  8. 可靠数据传输基本原理

    可靠数据传输是指:数据可以通过一条可靠信道来传输.传输的数据不会受到损失或者丢失,而且所有数据都是按照其发送顺序进行交付. 我们都知道IP层是不可靠传输的,而TCP是可靠传输的,但是TCP是传输层的协 ...

  9. 计算机网络(自顶向下方法)学习记录---3.4 可靠数据传输原理

    文章目录 前言 一.构造可靠传输协议 1.rdt1.0 2.rdt2.0 3.rdt2.1 4.rdt3.0 二.GBN 总结 前言 在学习3.5节TCP传输之前,我们需要先了解到可靠数据的传输原理, ...

  10. 计算机网络(九)——可靠传输协议

    文章目录 1. 可靠数据传输协议 1.1 经完全可靠信道的可靠数据传输:rdt1.0 1.2 经具有比特差错信道的可靠数据传输 1.3 经具有比特差错的丢包信道的可靠数据传输:rdt3.0 2. 流水 ...

最新文章

  1. Centos 7 让docker飞一会儿
  2. .团队组建及项目启动
  3. 国家特级数学教授李毓佩:我们欠孩子真正的数学阅读 !
  4. CF1516E. Baby Ehab Plays with Permutations(组合数学)
  5. 缓冲区溢出——初学者必须注意的问题
  6. SQL常用的几个窗口函数
  7. class action extends mysql{_java Action 请求封装(二)
  8. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family
  9. 工作流引擎厂商有哪些_国内主要工作流厂商分析
  10. 酷应用背后,低代码正在被重估
  11. mysql怎么卸载干净
  12. 【夏虫语冰】visio2013安装出错,无法打开注册表,错误码1402
  13. PHP 照片合并视频
  14. 第14章-cpp代码重用(其他继承模板)
  15. libmp4v2的编译及简单DEMO
  16. 1996年图灵奖--阿米尔·伯努利简介
  17. python-鸢尾花分类
  18. 迅软信息签约安龙基因医药技术构建医药行业防护体
  19. Linux网络技术学习(一)—— sk_buff数据结构解析
  20. 机器学习-吃瓜教程(西瓜书+南瓜书)-神经网络

热门文章

  1. java推送微信消息换行_微信公众号开发:回复文本消息换行的三种方式
  2. 【微信公众号】6、SpringBoot整合WxJava创建自定义菜单
  3. Node-RED中建立Websocket客户端连接
  4. FPGA,关于安装使用libero IDE V9.2 及其gold floating license配置
  5. 增量式编码器和绝对式编码器
  6. 对与、或、非、异或、或非、与非的理解和记忆
  7. (十九)通俗易懂理解——无人驾驶概述
  8. Win7 安装PECL
  9. 插件化框架集成-360插件框架DroidPlug
  10. Jmeter-添加PerfMon (Servers Performance Monitoring),报错解决办法