滑动窗口协议(GBN, SR)_gbn协议-程序员宅基地

技术标签: GBN  # 计算机网络  滑动窗口协议  SR  


前言


提示:以下是本篇文章正文内容

一、流水线协议

我们知道Rdt 3.0: 停等操作过程中浪费了大量的时间:
在这里插入图片描述

从而在Rdt 3.0上引入了流水线机制:为了提高资源利用率
在这里插入图片描述
流水线协议:
允许发送方在收到ACK之前连续发送多个分组,更大的序列号范围,同时发送方和/或接收方需要更大的存储空间以缓存分组

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

二、滑动窗口协议

滑动窗口协议:发送方和接收方各有一个缓存数组,发送方存放着:已发送且成功确认包序号、已发送未确认包序号 ,未发送包序号。接收方存放着:已接受包序号、正在接收包序号、未接收包序号。每个数组有个两个扫描指针,开头和结尾,一起向后扫描,两者形成一个窗口,所有被称为窗口协议

滑动窗口协议(Sliding-window protocol)主要有两类协议:GBN(go-Back-N,回退N重传协议), SR(selective repeat,选择重传协议)

在这里插入图片描述

窗口:允许使用的序列号范围,窗口尺寸为N:最多有N个等待确认的消息

滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动

1.GBN(回退N重传协议)

GBN内容:
(1)分组头部包含k-bit序列号

(2)窗口尺寸为N,最多允许N个分组未确认
在这里插入图片描述

(3)确认ACK(n): 确认到序列号n(包含n)的分组均已被正确接收,可能收到重复ACK
注:接收者仅发送累计的确认 ,如果中间有数据缺失,就不予以确认

(4)为传输的分组设置计时器(timer),若超时Timeout(n): 重传序列号大于等于n,还未收到ACK的所有分组

发送方扩展FSM:
在这里插入图片描述
发送数据时要判断窗口是否已经满了

接收方扩展FSM:
在这里插入图片描述
ACK机制: 发送拥有最高序列号的、已被正确接收的分组的ACK,可能产生重复ACK,只需要记住唯一的expectedseqnum, :接收方标记下一个按序接收的分组的序号

若乱序到达的分组:
1.直接丢弃,接收方没有缓存
2.重新确认序列号最大的、按序到达的分组

示例:
在这里插入图片描述

窗口大小为4,发送方发送数据包0,1,2,3,然后进入等待状态,其中数据包2丢失,接收方返回Ack0,1,窗口滑动继续发送包4,5,此时包2计时超时,默认数据包2没有收到,按照GBN,发送方重新发送数据包2,3,4,5。这里可以看出数据包重复了。

练习题:数据链路层采用后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只收到0、2、3号帧的确认,则发送方需要重发的帧数是多少?分别是那几个帧?

根据GBN协议工作原理,GBN协议的确认是累积确认,不会管中间所丢的数据包,所以,此时发送端需要重发的帧数是4个,依次分别是4、5、6、7号帧

2.SR(选择重传协议)

SR内容:
(1)接收方对每个分组单独进行确认, 设置缓存机制,为了缓存乱序到达的分组,发送方就不会再次发送,限制已发送且未确认的分组

发送/接收方窗口
在这里插入图片描述

(2)如果计时器到点, 仅重传该个未确认的数据报

(3)发送方窗口,N个连续的序列号, 发送者在流水线中最多有 N 个未确认的数据报

示例
在这里插入图片描述
滑动窗口的大小为4,发送数据包0,1,2,3,窗口满了,停止发送,等待确认,其中数据包2丢失,依次确认数据包0,1,同时窗口向后移,依次发送数据包4,5,当数据包2超时,发送方会再次发送数据包2,同时缓存乱序到达的3,4,5,当接收完数据包2后,滑动窗口后移,发送方继续发送数据包

序列号空间大小与窗口尺寸需满足
在这里插入图片描述
若序号位数k位(SR协议),发送窗口和接收窗口尺寸最大是2**-1,即序号空间一半。

避免发生接收序号重叠,出现重复分组


总结

提示:这里对文章进行总结:

停等(stop-and-wait )协议:发送方发送数据,然后等待接收方通过ACK或者NAK反馈

流水线协议(Pipelined protocols):允许发送方发送多个分组而无需等待确认

解决流水线的差错恢复有两种基本方法(滑动窗口协议):
1.回退N步(Go-Back-N,GBN):回退N步,接收方则是只接受最小的未接受帧,对错序到达帧,都丢弃

2.选择重传(selective repeat,SR):只重传丢失的帧,乱序到达的帧缓存起来

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_53144843/article/details/120907815

智能推荐

OpenCV的GrabCut函数使用和源码解读_有了算法模型源码怎么用函数表示-程序员宅基地

文章浏览阅读1.2w次。上一文对GrabCut做了一个了解。OpenCV中的GrabCut算法是依据《"GrabCut" - Interactive Foreground Extraction using Iterated Graph Cuts》这篇文章来实现的。现在我对源码做了些注释,以便我们更深入的了解该算法。一直觉得论文和代码是有比较大的差别的,个人觉得脱离代码看论文,最多能看懂70%,剩下20%或者更多就需要_有了算法模型源码怎么用函数表示

ORA-39002/ORA-29070/ORA-29283/ORA-06512/ORA-29283错误-程序员宅基地

文章浏览阅读6.1k次。C:\Documents and Settings\Administrator>expdp bizdata/bizdata@bzdata schemas=bizdata directory=dd dumpfile=test.dmpExport: Release 10.2.0.1.0 - Production on 星期四, 30 7月, 2009 16:37:12Copyrig_ora-29070

iOS-基于AVPlayer的视频播放器代码封装-0-需求分析与框架设计阶段_ios 播放器架构设计-程序员宅基地

文章浏览阅读513次。视频播放器的需求1>基本功能: 1.对转屏的支持 2.手势调节 3.预览功能 4.缓冲进度、播放进度 2>拓展功能: 1.截屏功能 2.录屏功能 3.Picture in Picture的支持 4.AirPlay的支持1.1 转屏的支持 iPhone下,进入视频页面默认是横屏,如果系统设置支持自动旋_ios 播放器架构设计

CentOS 6的yum源配置(最新地址)_centos6 yum源-程序员宅基地

文章浏览阅读4.8k次,点赞2次,收藏6次。centos6最新源_centos6 yum源

Thread类创建线程_第1关:创建线程-程序员宅基地

文章浏览阅读3.3k次。1.在java中执行多线程编辑在java标准库中,给我们提供了一个标准的Thread类,来操作线程。Thread 类也可以视为是 Java 标准库提供的 API(API:Thread 类提供的方法 和 类)。当我们创建好Thread对象,其实和操作系统中的线程是相对应的。即如果我们想要先创建一个线程,就要先创建一个Thread类的对象。1.1通过Thread类创建线程首先我们先创建子类,让其继承Thread,并且重写run方法我们这里的创建线程都是在同一个进程内部实现的。另外.._第1关:创建线程

超小体积5G模块SIM8202G-M2_5g模组接口以m2为主?-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏6次。7月29日,第十四届国际物联网博览会如期在深圳拉开帷幕。作为疫情期间物联网行业首个大型线下展览,博览会迎来了业内众多的生态合作伙伴。芯讯通携多款产品参加了博览会,并在会上进行了超小尺寸5G模组SIM8202G-M2的全球首发。SIM8202G-M2是一款多频段小尺寸的5G 模组,具有全新的四天线设计。30*42mm的封装尺寸,可以较好满足对尺寸要求较高的终端产品的需求。至此,芯讯通已经推出SIM8200EA-M2,SIM8200CE-M2,采用LGA封装的SIM8200G以及支持毫米波的SIM8300G-_5g模组接口以m2为主?

随便推点

c语言遍历文件夹中的文件_c语言 遍历文件-程序员宅基地

文章浏览阅读442次。文件目录如下,文件夹里还有一些txt文件未展示出来。使用递归实现,深度优先遍历文件夹中的文件。代码如下,用了一点C++的语法。_c语言 遍历文件

设置esxi 虚拟机随宿主机启动而自动启动_配置虚拟机跟随esxi主机自动启动-程序员宅基地

文章浏览阅读5.7k次。目的:让esxi的客户虚拟机随宿主机启动而启动1、选择host主机——>右侧选择“配置”页签——>选择“虚拟机启动/关机”2、点击右侧“属性”——>勾选“允许虚拟机与系统一起启动和停止”3、选择一个虚拟机,然后“上移”到"自动启动"队列中..._配置虚拟机跟随esxi主机自动启动

用于医疗设备的微型线圈绕组 :“超细心微型线圈上面的应用”-程序员宅基地

文章浏览阅读376次。医疗设备的机械设计人员面临的主要挑战之一是对小型化的需求。小型化有多种用途;到达身体原本无法进入的区域,最大限度地减少对正常身体功能的干扰,最大限度地减少能量消耗,并延长植入组件的使用寿命。这些尺寸限制给制造和这些组件之间的连接及其支持系统带来了多重挑战。这些设备的许多设计都依赖于微型线圈,而微型线圈又需要先进的绕组和连接技术。

S32DS Components组件配置-程序员宅基地

文章浏览阅读3.5k次,点赞3次,收藏21次。S32DS Components组件配置_s32ds components

Golang 调用http 文件上传接口 进行上传文件_golang http send file-程序员宅基地

文章浏览阅读6.9k次,点赞2次,收藏5次。远程服务器有一个文件上传接口,文件用于保存到服务器本地,用go如何调用此接口将文件上传至服务器?首先,文件上传请求方 与 接收方 要协调工作(解析等工作)接收方:func UploadFileToLocal(c echo.Context) error { r := c.Request() //无论用的什么路由,原理是要从request获取数据 t := echotools...._golang http send file

C# WPF上位机开发(内嵌虚拟机的软件开发)_c#wpf开发上位机设计器软件-程序员宅基地

文章浏览阅读1.2k次,点赞16次,收藏7次。【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 学习过halcon的同学都知道,它不仅有很多的图像算子可以使用,而且调试很方便。每一步骤的调试结果,都可以看到对应的显示效果。这中间,开发者可以自己调参数、写脚本,十分方便。在所有的配置都ok之后,直接导出为c、c# code,变成最终的软件输出,部署到客户的电脑上面。 其实要做到这一点,也不是很复杂。一种比较简单的办法,就是内嵌一个lua虚拟机,把对应的函数转成l_c#wpf开发上位机设计器软件