【动图讲解】计算机网络之回退N步与选择重传

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

rdt3.0(reliable data transfer)实现了正确的功能,但是他的性能并不出色,这是因为他是一个停等协议。发送方在接收到接收方传回来的ACK前已经一直没有事做了。
等待时间过长,这会造成资源的极大浪费。
而解决这个问题的简单方法就是不以停等方式运行,运行发送方发送多个分组而无需等待确认。因为许多从发送方向接收方输送的分组可以被看成是填充到一条流水线,所以这种技术被称为流水线(pipelining)
【动图讲解】计算机网络之回退N步与选择重传_第1张图片

因为流水线容易出差错比如缺包,所以引入两种解决流水线差错的基本方法:回退N步(Go-Back-N,GBN)选择重传(Selective Repeat,SR)

2.回退N步(GBN)

回退N步是累积确认。
在回退N步协议中,允许发送方发送多个分组而不用等待确认。
【动图讲解】计算机网络之回退N步与选择重传_第2张图片
在此图中,上面一行是发送方,下面一行是接收方,我们可以看到一个灰色的矩形框在发送方的0-4包上,这个矩形框是GBN的窗口,GBN也常被称为滑动窗口协议,我们等一下可以看到它是如何运作的。

让我们先看一下正常情况下GBN如何运作:
【动图讲解】计算机网络之回退N步与选择重传_第3张图片

当发送过程中发生丢包

【动图讲解】计算机网络之回退N步与选择重传_第4张图片
当发送过程中的2号包发生丢失时,发送方没有收到接收方的ACK2,于是后面发送的ACK3,ACK4全部变成了ACK1,代表接收方因为丢失了分组2,所以分组3和分组4都被丢弃。所以全部返回ACK1,经过一段时间后,定时器确认超时没有收到ACK3,ACK4,所以发送方将重新发送。也代表接收方首先只收到了分组1及之前的包。

当接收过程中发生丢包

【动图讲解】计算机网络之回退N步与选择重传_第5张图片
在此例中,我们可以看到,当接收方接收完消息以后,返回给发送方ACK0,ACK1,ACK2,ACK3,ACK4,我们假设ACK2发生了丢失。根据上一例我们可以知道,如果接收方没有收到分组2,则后面返回的都是ACK1,因为本次返回的为ACK3,ACK4,所以发送方可以判断接收方已经接收到消息,不再进行重复发送。

3.选择重传(SR)

在上面我们对GBN已经有了一定的了解,我们现在来想一想GBN的缺点。
单个分组的差错就能够引起GBN重传大量分组,许多分组根本没必要重传。
随着差错率的增加,流水线可能会被这些不必要重传的分组占满,造成效率的低下。

所以,选择重传(Selective Repeat)就是选择性的重新传输的意思。
SR是对单个分组的确认。

我们与上面一样,先看一下在SR下正常传输的样子。
【动图讲解】计算机网络之回退N步与选择重传_第6张图片

当发送过程中发生丢包

【动图讲解】计算机网络之回退N步与选择重传_第7张图片
我们同样将分组2丢失,但可以看到与GNB不同的是,接收方在没有收到分组2的情况下,依然返回了ACK3,ACK4。此时窗口已经由之前的0-4变成了2-6。当所以ACK1返回以后,分组5,分组6就已经可以发送。然后在接收方,分组3456都已经被缓存,等待分组2的计时器超时后,分组2将重新发送,然后在接收方的分组23456全部变为接收received状态。

当接收过程中发生丢包

【动图讲解】计算机网络之回退N步与选择重传_第8张图片
我们同样将ACK2丢弃,此时发送方的分组已经由0-4到了2-6,在最后2-6的窗口中,分组2会因为ACK2被丢失然后在计时器计时后重新发送一次。可以看到如果在接收过程中有丢失发生,选择重传SR的效率是不如回退N步GBN的。

你可能感兴趣的:(计算机网络,计算机网络,图解,回退N步,选择重传,GBN)