可靠传输的means
在数据链路层会给上层网络层提供可靠传输或者不可靠传输,不可靠传输是指检测到传输差错的时候只是丢弃该分组而不进行任何处理,而可靠传输会给发送者一个信号进行重发该分组。
以下给出的三种基本实现机制是提出一些问题,慢慢改进一些地方进行提出的,xdm可以根据这个进行理解和记忆。
First-停止-等待协议(SW)
第一个问题:接收方如何通知发送方该数据分组在传输过程中出现差错呢?我们可以让接收方给发送方一个确认分组ACK,当发送方收到来自接收方的确认分组的时候就知道分组传输完成,此时就可以进行下一个分组的传输,相应的如果在传输过程中发生一系列的差错,接收方检测到就会给发送方发送一个否认分组NAK,此时发送方收到这个否认分组的时候就会重新发送该分组。
第二个问题:如果在数据分组传输的过程中丢失了,那么接收方也就不会接收到该分组也就不会发出确认或者否认分组,这样该如何解决呢?
我们可以设置一个超时计时器,超时计时器的时间应该大于往返时间RTT。当若到了超时重传计时器的时间之后,发送方就可以重发该分组。
第三个问题:如果在接收方发送确认分组的过程中由于某种原因,导致确认分组滞留了一段时间,此时已经到达了超时重传计时器的时间,那么发送方就会重新发送此分组,那么此时接收方如何区分这是新的分组还是重复的分组呢?
我们可以将分组就行0/1编号,根据该序号就可以判别是否为重复分组。如果为重复分组就可以丢弃。
类似的我们也可以将确认分组就行编号,这样发送方也就可以分别出是否为重复的分组。
四个问题,四个解决方法就可以提出了我们的停止-等待 协议(SW)
Second-回退N帧协议(GBN)
由于停止等待每次只能等确认分组之后才能再次发送下一个分组,故效率较低,因此我们想可以利用流水线方式来发送分组,这就引出了回退N帧协议(GBN)。
流水线方式一下子也不可能直接把分组全发送了,故所以需要控制每次发送分组的数量,我们这里引出一个发送窗口的概念,在发送方的发送窗口中的分组才能进行发送,所以我们也就可以给分组编号,落在发送窗口中的序号分组可以进行发送。如下图:
发送窗口的大小和接收窗口的大小如何确定呢,在回退N帧协议当中接收窗口的大小指定为1,这与上面停止等待是一样的,而与下面的选择重传协议不同。
那么我们只需要确定发送窗口大小即可,一般的发送窗口的大小一般取1<=W<=(2的n次方)-1,n为给分组编号的比特数。
为什么要小于(2的n次方)-1?我们假设发送窗口的大小等于2的n次方,那么发送方发送这些分组给接收方,接收方给发送方发送这些分组的确认分组,但是如果在发送的过程中确认分组丢失了,那么发送方就会重传0-(2的n次方)-1个分组一共n个分组,由于这些分组的编号和下一批分组的编号相同,接收方无法分辨出新旧分组,故就限制发送窗口的大小为1<=W<=(2的n次方)-1,当W=1时即为停止等待协议。
回退N帧协议当中有个特殊的地方就在于累计确认,即接收方不一定要对收到的分组逐个进行确认,而是可以在收到好几个数据分组后,对按序到达的最后一个数据分组进行发送确认,ACKn表示序号为n及以前的所有数据分组都已经正确接收。接收方只能接收按序到达的分组
发送方每收到一个确认分组就会移动发送窗口,将发送过的分组缓存删除。
Third-选择重传协议(SR)
回退N帧协议有个效率低的问题就在于,那么没有按序到达的分组,虽然没有任何的误码但是还是被丢弃,所以我们可以根据这个问题来改进一下,我们选择有问题的分组重传,而那么虽然没有按序到达的分组仍然保留在接收窗口内,这样就要求接收窗口的大小不再是1,而是大于1。这就是选择重传协议(SR)
选择重传协议为了仅重传那么只有发生差错的分组,那么就不再需要回退N帧协议当中的累计确认机制了,而是对每一个分组都进行确认,等接收窗口中所有所缺的分组都到达后,再一并交给上层进行处理。
类似于回退N帧协议我们也限制了选择重传协议中接收窗口和发送窗口的大小,发送窗口的大小1<W<=2的n-1次方,n还是分组序号的比特数。一般来说接收窗口的大小和发送窗口的大小一致。1<W接收窗口<=W发送窗口
文章来源:https://www.toymoban.com/news/detail-432981.html
总结一下
我们考试的时候有几点注意的地方文章来源地址https://www.toymoban.com/news/detail-432981.html
- 接收窗口和发送窗口的大小,接收窗口大小和发送窗口的大小的和要<=帧序号
- 回退N帧的累计确认、停止等待和选择重传都是每个都需要确认。
- 接收窗口过大会导致的无法分辨新旧分组问题。
到了这里,关于计算机网络可靠传输的三种基本实现机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!