42、可靠传输——连续ARQ

上回内容我们学习到,一种保证可靠传输的机制——ARQ协议,ARQ协议通过设置超时定时器,当在规定时间内没有收到来自对方发来的“确认”报文,就自动报文重传。这其中,ARQ协议和停止等待机制的结合,我们把它称作“停等ARQ”,发送完一个报文之后必须等待对方的确认才能继续发送下一个报文。

由此可见,停等ARQ虽然可以一定程度上保证可靠传输,而且实现起来比较简单,但是由于其“停止等待”的特点,导致使用这种机制的通信,信道利用率太低

因为一个报文发送出去之后,距离下一个报文的发送,至少要经过一个端到端的往返时间(也就是一个RTT,因为发送报文到达接收端以后,还要再等对方“确认”报文再回来),此外再加上一些接收端处理报文的时间,发送端处理“确认报文”的时间、出现问题再重传的时间等等这些,导致在整个通信过程中,“真正报文”发送的时间只占一小部分,整个信道的利用率就变得非常低。

因此为了解决这个利用率的问题,后来就借鉴了“流水线思想”,让发送方可以连续发送多个报文,而不必每发送完一个报文就停下来等待对方确认,这样可以做到信道上一直有数据在传输,提高其利用率。(如要具体了解流水线,可查阅计算机组成原理课程中“CPU流水线技术”)

将“流水线”思想结合到ARQ协议,同时还要结合滑动窗口技术来实现,就是本节内容要学习的连续ARQ方式


滑动窗口

滑动窗口,是一种流量控制技术,同时也是TCP协议的精髓所在,后面还会学习到TCP的流量控制,也是用滑动窗口来实现的。

依照惯例,我们在学习一个新概念的时候,首先知道它是什么,然后需要知道它为什么。也就是知道了滑动窗口是一种流量控制技术之后,下一步我们要做的就是它为什么会叫这个名字。关于这个问题,这就要说到它的本质了,滑动窗口的本质其实就是数组的双指针,数组就是窗口,指针可以用来滑动(若详细了解数组和指针,可学习数据结构的知识),在这里我们可以简单的把存放报文的缓冲区当作窗口,把发送方主机的缓冲区叫做“发送窗口”,把接收方主机的缓冲区叫做“接收窗口”

刚才我们说过,连续ARQ方式是要结合滑动窗口技术来实现的,就是要做到可以连续发送多个报文,而不必发送完一个就要停下来等待。这也就意味着,在发送窗口中能够容纳多个报文,然后可以连续的把报文发送出去,同时收到对一个报文的“确认”后,窗口还要向前滑动。

谢希仁老师教材上给出的例图,可以很好地解释这个过程:

该图中展示了一个可以容纳五个报文的发送窗口(图中的数字序号就是报文的编号),所以这个发送窗口的大小就是 5 。这五个报文可以连续的发送出去。在收到接收方对报文 1 的确认后,发送窗口自动向前滑动,把报文 6 “扩进来”。后面的报文以此类推。

在这里还需要注意一点的是,仍然要为每一个报文设置一个超时定时器,在时间到之前没有收到对方发来的确认,就要重传该报文。不过,连续ARQ和停等ARQ,关于接收端对报文的确认方式,是有不同的

停等ARQ中,发送方必须要等着接收端对一个报文的确认才能继续发送后面的;

而在连续ARQ中由于发送方可以连续发送,所以也不要求接收方对收到的每一个报文都进行确认,接收方一般可以“累积确认”,也就是在收到几个报文后,对按序到达的最后一个报文发送确认即可,这就表示告诉发送方:到这个报文为止的所有报文都正确收到了。就比如,发送方正在发送第四个报文的时候,收到了来自接收方对报文 3 的确认,那么发送方也就知道前面的1、2、3号报文都已被正确接收。

可见,接收方使用这种“累积确认”,也可以一定程度上提升通信效率。但同时也应注意的是,使用累积确认方式,最关键的一点是:报文是必须按序到达的如果不是按序到达,那么接收方将会在“断点处”发送确认,而不是对最后一个报文发送确认。举个例子就是:如果发送方把五个报文都已经发送出去了,但其中的 3 号报文在传输中丢失了,接收方只收到了1、2、4、5号报文,这时候由于没有收到 3 号,那么接收方将会发出对 2 号报文的确认,告诉接收方 1 号和 2 号报文正确收到了。这时候,发送方对 3 号报文重传,可以有两种重传的方式,这两种方式有些区别,下面我们依次学习:


选择重传(SR)

“选择重传”的特点是:接收方收到一个确认一个,发送方只需要重传出错的报文。

拿上面的例子来说,只有 3 号报文丢失了(或者是出了差错),那么接收方将会把1、2、4、5号报文暂时都缓存起来,然后向发送方挨个发出确认。这样的话,发送方就能很清楚的知道 3 号报文出了错,所以重传 3 号报文。

由此可见,如果发送方重传报文的方式,使用“选择重传”的话,那么需要接收方要有一定的缓存能力,并且要求接收方能够对“失序”的报文进行缓存。


回退N(GBN)

还有一种重传的方式,叫做回退N方式,全称“ go back  N ”,也可简称“GBN”。这种方式的特点是:接收方只对“顺序到达”的报文进行确认,发送方要把出错报文的后续全部报文都进行重传

还是上面的例子,使用GBN的话,接收方收到了1、2、4、5号报文,但是由于不是按序到达,所以接收方将会丢弃4、5号报文,只会发出对 2 号报文的确认,以告诉发送方到2号为止的所有报文都收到了。这时候的发送方将会对3、4、5号报文都进行重传。


到这里为止,我们学习就完了关于ARQ协议保证可靠传输的一个工作原理,这将对后面学习TCP协议的可靠传输机制打下基础。同时在这过程中,也学习到了一些其它的知识点,比如滑动窗口,这都是TCP后续学习中非常重要的知识基础。从下一节开始,我们将正式学习TCP协议具体的内容。

参考教材:谢希仁《计算机网络》第八版

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值