数据可靠传输协议

数据在传输中,会被分割成很多小块的分组传输。

为了保证数据传输的可靠性,诞生了两个协议。统称都是流水线方法,

一、回退N步协议(GBN)

首先会给分组加一个有序序号。
同时会将序号分成四段。
[0,start-1]:
这段序号对应的是已经发送给目标计算机,且返回ACK确认信息的分组序号
[start,next-1]
这段序号对应的是已经发送给目标计算机,但是未收到确认ACK的分组序号
[next,N-1]
这段序号对应的是可以用,但是还没有发送给目标计算机的分组序号
[N,-xx]
这段序号 代表目前不能使用该序号,直到当前流水线中的未收到确认ACK的分组序号收到确认ACK后,整体往前移动的时候,才能被使用。

[start,N]这段序号称为窗口长度。窗口在序号中移动,所以GBN也是滑动窗口协议。

在GBN协议中,发送计算机A和目标计算机B需要进行的响应应该有:
A:
1.收到ACK确认信息:当A收到序号为n的ACK确认信息后,就代表着n序号和n之前的序号分组已经被B接收了。
2.超时响应:当序号star发送的一瞬间,A会启动一个定时器。当定时器过后还没收到确认ACK后,A就认为该分组已丢失,这个时候A就会重传已经发送但是未确认的分组,即[start,next-1]

B:
当收到序号n的分组,如果确认收到了,且n-1和之前的分组也已经收到了,那么B会为分组n发送ACK确认信息,否则丢弃该分组且为最近按序接收的分组重新发送ACK信息。

二、选择重传协议(SR)

在GBN中,如果n-1分组失序或者丢失了,那么n-1和n都要重新发送。如果是发送0-1000的分组,序号1的失序了或者出了差错,那么1-1000的分组就要重传, 这是非常恐怖的。
所以出现了SR选择重传。

SR跟GBN前面步骤是一样的,但是在B收到了失序的n分组后(n-1还没确认收到),并不会马上重传,而是会缓存起来。直到n-1分组确认后,才会把n拼起来。
发送方A只需要根据定时器重传那些没用被正确收到的分组就行。

例如发送方A发送1-5的分组

B收到序号3的分组,但是1,2分组还没收到,此时B先将3缓存,同时发送3的ACK信息给A。
A收到3的ACK确认,但是这时候窗口不会移动,因为1和2的ACK还没收到。
A收到1和2的ACK,这个时候流水线的窗口才会向右移动三个,因为3之前就收到了。

版权声明:本文为CSDN博主「吃再多糖也不长胖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43859562/article/details/121673159

生成海报
点赞 0

吃再多糖也不长胖

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

计算机组成原理——系统总线

##总线的基本概念 1.各个部件的信息传输线,各个部件共享介质 2.信息传送 串行(传输距离长)/并行(传输距离短) ##总线分类 1.片内总线 芯片内部的总线 2.系统总

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

ESP8266 无限重启踩坑

最近做了一个电子墨水屏万年历,在移植屏幕代码时遇到了esp8266无限软复位的问题,如果你的串口打印是以下图片所示,那么恭喜你问题解决了。 造成软复位的原因是因为,程序里有死循环&#xf

Renode应用:在RISC-V核上运行FreeRTOS

本篇记录通过Renode在RISC-V核上运行FreeRTOS demo的情况。本来不准备写这一篇,但是发现近期工作学习密度实在太大,上周工作的中间结果这周竟然完全想不起来了,不得不又花了一些时间从头摸