流水线可靠数据传输协议
在构造可靠传输协议那一篇我们知道rdt3.0的利用率是非常低的,为了解决利用率问题我们用流水线技术解决。
流水线:发送方允许发送多个“在路上的”,还没有确认的报文。
流水线技术对可靠数据传输协议可带来如下影响:
(1)序号数目的范围必须增加,因为每个输送中的分组必须有一个唯一的序号,而且也许有多个在输送中未确认的报文。
(2)协议的发送方和接收方两端会缓存多个分组。发送方最低限度应当缓存那些已发送但没有确认的分组,接收方需要缓存已正确接收的分组。
流水线技术与停等方式对比如下图:
流水线技术有两个通用形式:
(1)回退N步法。
(2)选择重传法。
如下图,流水线主要是为了增加利用率。
回退N帧和选择重传主要取决于传输协议如何处理丢失、损坏以及时延过大的分组。
一、回退N步
在回退N步协议中,允许发送方发送多个分组而不需要等待确认,但受限于在流水线中未确认的分组数不能超过某个做大允许数N。
上图为发送方看到的回退N步协议序号的范围,将即序号定义为最早的未确认分组的序号,对应图中的send_base;将下一个序号定义未最小未使用的序号即下一个待发分组的序号,对应图中的nextseqnum。可以将序号范围分为4段,绿色的是已经发送并被确认的分组,黄色的是已经发送但未被确认的分组,蓝色的是用于那些要被立即发送的分组,而白色的是未被发送的分组。
已经发送但未被确认和可用于立即发送的那一部分可以看成一个长度为N的窗口,随着协议的进行,窗口也会向前移动,所有回退N步也称为滑动窗口协议。
发送方在分组首部固定长度的字段中规定一个分组序号,若分组序号字段是k比特,那么序号范围是[0,2k^kk-1]。
发送方响应三种类型的事件:
(1)上层的调用:发送方首先检查发送窗口是否满,即是否有N个已经发送但未被确认的分组,如未满则发送一个分组再进行更新。如果窗口满了那么将数据返回给上层,表示窗口满了,让上层等会在调用。
(2)收到一个ACK:对序号未N的分组采取累计确认的方式,表明接收方已正确接收到序号为n的以前且包括n在内的所有分组。
(3)超时事件:出现超时会重传所有已发送但还未被确认的分组。这里发送方仅使用一个定时器,它可以被当作是最早的已发送但未被确认的分组。如果收到一个ACK,但仍有已发送但未被确认的分组,则定时器被重新启动。如果没有已发送但未被确认的分组,该定时器被终止。如图:
分组2超时,那么将会把分组2,以及后面的分组3、4、5全部重传。
在这个传输过程中接收方做两个动作:
(1)如果序号为n的分组被正确接收到,并且是按序的即上次交付给上层的数据是序号为n-1的分组,则回送发送方ACK。
(2)其它情况下接受方丢弃分组,即没有缓冲区接收。并为最近按序接收的分组重新发送ACK。
在整个回退N步的过程中我们可以看到丢弃一个正确接受的分组的一个缺点是随后对该分组的重传也许会丢失或者出错。需要更多的重传,接收方若将分组2丢弃,分组3、4、5被发现时已经丢失了。所以有一个分组丢失就需要重传更多的分组。
二、选择性重传
回退N步法改善了信道的效率,但仍然有不必要的重传问题。选择性重传解决了这个问题。
选择重传协议通过让发送方仅重传那些它怀疑在接收方出错即丢失或受损的分组而避免了不必要的重传。
接收方主要做两个动作:
(1)接收方接收所有正确报文时需要缓存分组,以便最后按序交到上层。
(2)发送者只重发没有收到确认的分组,对每个没有确认的报文发送者都要启动一个定时器。
上图中上半部分是发送方看到的序号,下半部分是接收方看到的序号。上半部分含义与回退N步一样,不再解释。接收方看到的序号中粉色代表失序(已缓存)但未被确认的分组。蓝色代表可接受(窗口内)的分组,灰色代表期待,还未收到的分组,白色代表不可用的分组。
发送方同样响应三种类型的事件:
(1)发送方从上层接受数据:当从上层接收到数据后,发送方检查下一个可用于该分组的序号。如果序号位于发送方的窗口内,则将数据打包并发送。
(2)超时:定时器再次被用来防止丢失分组,然而,现在每个分组必须拥有自己的逻辑定时器,因为超时发送后只能发送一个分组。
(3)收到ACK。如果收到ACK,倘若分组序号在窗内,则发送方将那个被确认的分组标记为已接受。如果该分组的序号等于send_base,则窗口基序号向前移动到具有最小序号的未确认分组处。如果窗口移动了并且有序号落在窗口内的未发送分组,则发送这些分组。
在这个过程中发送窗口是N个连续的序号,需要限制被发送的未确认的分组数量。
接收方动作:
(1)序号在[rcv_base,rcv_base+N-1]内也就是窗口内的分组被正确接收。在此情况下,收到的分组落在接收方的窗口内,一个选择ACK被回送给发送方。如果该分组以前没收到过。则缓存该分组。如果该分组的序号等于接收窗口的基序号即rcv_base,则该分组以及以前缓存的序号连续的分组交付给上层。然后,接收窗口按向前移动分组的编号向上交付这些分组。
(2)序号在[rcv_base-N,rcv_base-1]内分组被正确收到,在此情况下,必须产生一个ACK,即使该分组是接收方以前已确认过的分组。
(3)其它情况则忽略该分组。
下图未选择性重传的操作:
流水线可靠数据传输协议相关推荐
- 构造可靠数据传输协议
在本篇文章中我们将逐步了解开发发送方和接收方的可靠数据传输协议的过程,它们逐渐复杂,最后会得到一个无错.可靠的数据传输协议.在这个过程中仅考虑单向数据传输但控制信息双向流动. 我们用有限状态机(FSM ...
- 基于C语言的可靠数据传输协议的设计与实现
资源下载地址:https://download.csdn.net/download/sheziqiong/86799219 资源下载地址:https://download.csdn.net/downl ...
- 可靠数据传输原理1(构造可靠数据传输协议)
TCP向调用它的因特网应用所提供的服务模型(服务抽象) 数据可以通过一条可靠的信道进行传输.借助于可靠的信道,传输比特就不会受到损坏或丢失,而且所有数据都是按其发送顺序进行交付. 可靠传输协议 实现服 ...
- UDT协议-基于UDP的可靠数据传输协议
1. 介绍 随着网络带宽时延产品(BDP)的增加,通常的TCP协议开始变的低效.这是因为它的AIMD(additive increase multiplicative decrease)算法彻底减 ...
- 计算机网络自顶向下方法 第三章 运输层 3.4 可靠数据传输原理
计算机网络自顶向下方法总结3.4可靠数据传输原理 目录 3.4 可靠数据传输原理 3.4.1 构造可带数据传输协议 3.4.2 流水线可靠数据传输协议 3.4.3 回退N步 3.4.4 选择重传 3. ...
- 计算机网络(九)——可靠传输协议
文章目录 1. 可靠数据传输协议 1.1 经完全可靠信道的可靠数据传输:rdt1.0 1.2 经具有比特差错信道的可靠数据传输 1.3 经具有比特差错的丢包信道的可靠数据传输:rdt3.0 2. 流水 ...
- 可靠数据传输原理详细图解
可靠数据传输原理 概述 rdt1.0 rdt2 rdt2.0 rdt2.1 rdt2.2 rdt3.0 流水线可靠数据传输协议 为什么使用流水线 流水线对可靠数据传输协议带来的影响 流水线协议中恢复差 ...
- 我tcp可是铁齿金不换,诚实可靠小郎君——谈谈可靠数据传输服务
附 rdt_send()函数:上层可以调用数据传输协议的发送方.其中 rdt 为 reliable data transmission. 它将要发送的数据交付给位于接收方的上层. rdt_rev() ...
- 计算机网络(自顶向下方法)学习记录---3.4 可靠数据传输原理
文章目录 前言 一.构造可靠传输协议 1.rdt1.0 2.rdt2.0 3.rdt2.1 4.rdt3.0 二.GBN 总结 前言 在学习3.5节TCP传输之前,我们需要先了解到可靠数据的传输原理, ...
最新文章
- python多变量拟合_python-使用scipy拟合多个参数曲线
- 简陋,山寨,Everything,桌面搜索,原理,源码
- java后台面试题整理
- 总奖池31万!智能零售柜商品识别,“信也科技杯”算法大赛启动
- 严格对角占优矩阵特征值_二次型和特征值
- 汽车在怠速时有很轻微的间歇抖动,是不是节气门脏了?
- 美国语言教学5c标准,美国外语教学(一)——5C目标
- solidworks做运动学分析Motion(牛头刨床为例)机械原理课设(详细)
- 送给十二星座的名言警句
- 2000-2020年上市公司常用控制变量数据整理
- 二叉树:后序遍历非递归算法
- 快手短视频发布软件助手功能都有哪些?是什么软件?
- c语言 文件存在,c语言 判断文件是否存在
- 输入字符串,将字符串逆向输出
- C语言输出任意位数小数
- 减肥相当于整容,网友调整饮食和作息后,一个月消脂十二斤
- python语言三大基本控制结构_【笔记】《python语言程序设计》——程序的控制结构...
- 读书笔记——无人机编队飞行技术
- flume三种方式收集日志的案例
- 微软中国为员工推出全新的 10 天 Holistic Health Time Off 假期!
热门文章
- web-packwebpack .\src\main.js .\dist\bundle.js 报错
- 深圳内推 | 腾讯优图实验室招聘计算机视觉算法工程师(校招/实习)
- 今日arXiv精选 | 9篇ICCV 2021最新论文
- 开放域知识库问答研究回顾
- 岗位推荐 | 阿里巴巴达摩院招聘自然语言处理、机器翻译算法专家
- ECCV 2018最佳论文解读:基于解剖结构的面部表情生成
- java中文 x_java环境url中文参数乱码处理
- MySQL【环境搭建 02】Linux 非 root 用户部署 mysql-5.7.28 设置开机启动及问题汇总(含云盘资源)
- RocketMQ 错误:The broker does not support consumer to filter message by SQL92
- 《数据结构与算法》课程设计报告——赫夫曼编码/译码器