数据可靠传输协议


数据在传输中,会被分割成很多小块的分组传输。
为了保证数据传输的可靠性,诞生了两个协议。统称都是流水线方法,

一、回退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之前就收到了。

Guess you like

Origin blog.csdn.net/weixin_43859562/article/details/121673159