1.什么是流量控制?
- 流量控制是数据链路层的一种功能,流量控制对数据链路上的帧的发送速率进行控制,以使接收方有足够的缓冲空间来接受每个帧
- 流量控制的基本方法是由接收方控制发送方发送数据的速率
- 常见的流量控制方式有两种:
停止-等待协议、滑动窗口协议
2.什么是可靠传输机制?
-
可靠传输机制是为了使数据可以正确稳定的传输和接收而制定的规则。
-
数据链路层的可靠传输通常使用
确认
和超时重传
两种机制来完成。 -
确认
是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收。有些情况下为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认
。 -
超时重传
是指发送方在发送某一个数据帧以后就开始一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止。 -
自动重传请求
(Auto Repeat reQuest,ARQ),通过接收方请求发送方重传出错的数据帧来恢复出错的帧,是通信中用于处理信道所带来差错的方法之一。 -
传统自动重传请求分为三种,即
停等式
(Stop-and-Wait)ARQ、后退N帧
(Go-Back-N)ARQ以及选择性重传
(Selective Repeat)ARQ。后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大,帧在线路上可以连续地流动,因此又称为连续ARQ协议。
3.什么是滑动窗口机制?
- 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为
发送窗口
;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口
。 - 发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。
- 不同的滑动窗口协议窗口大小一般不同。
- 发送方窗口内的***代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。
-
在
发送端
,每收到一个确认帧,发送窗口就向前滑动一个帧的位置,当发送窗口内没有可以发送的帧(即窗口内的帧全部是已发送但未收到确认的帧),发送方就会停止发送,直到收到接受方发送的确认帧使窗口移动,窗口内有可以发送的帧,之后才开始继续发送。 -
在
接受端
,当收到数据帧后,将窗口向前移一个位置,并发回确认帧,若收到的数据帧落在接受窗口之外则一律丢弃。 -
滑动窗口有以下
重要特性
:
-
只有接受窗口向前滑动时(同时接受方发送确认帧),发送窗口才有可能(只有发送方收到确认帧才是一定)向前滑动。
-
从滑动窗口的概念看,停止-等待协议、后退N帧协议和选择重传协议只有在发送窗口大小和接收窗口大小有所差别。
-
停止-等待协议:发送窗口大小=1,接受窗口大小=1;
-
后退N帧协议:发送窗口大小>1,接受窗口大小=1;
-
选择重传协议:发送窗口大小>1,接受窗口大小>1;
-
当接受窗口的大小为1时,可保证帧的有序接受。
4.可靠传输、流量控制、滑动窗口之间的关系
5.停止-等待协议
停止-等待协议也称为单帧滑动窗口与停止-等待协议
- 当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。
- 该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。
- 由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。
- 由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。
- 虽然现在常用全双工通信方式,但是为了讨论方便,我们仅考虑一方发送数据(发送方),一方接收数据。
- 两种:
无差错和有差错
- 关于信道利用率可参考我之前的:https://blog.csdn.net/weixin_43914604/article/details/104541219
- 发送方从开始发送数据到收到第一个确认帧ACK为止,这段时间称为一个
发送周期
- 信道利用率=发送时间/发送周期
- 由于停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,因此又提出了
后退n帧协议(GBN)和选择重传协议(SR)
。
6.多帧滑动窗口与后退N帧协议(GBN)
- 后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍未收到确认帧,就要重发相应的数据帧。
- 如:当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。
- 从这里不难看出,后退n协议一方面因连续发送数据帧而提高了效率,但另一方面,在重传时又必须把原来已正确传送过的数据帧进行重传(仅因这些数据帧之前有一个数据帧出了错),这种做法又使传送效率降低。
- 由此可见,若传输信道的传输质量很差因而误码率较大时,连续测协议不一定优于停止等待协议。此协议中的发送窗口的大小为k,接收窗口仍是1。
- 上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送;如果窗口己满,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一 会再发送。 ( 实际实现中,发送方可以缓存这些数据,窗口不满时再发送帧)。
- 配合下图加深理解
- GBN协议中,对n号帧的确认采用
·累积确认·
的方式,标明接收方已经收到n号帧和它之前的全部帧。
- 协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。
- 就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。
- 如果出现超时,发送方重传所有已发送但未被确认的帧。
- 来道题目熟悉一下知识
- 因为接收端可以
累积确认
,所以只要看最大的确认帧就行,所以接下来发送方要重发的帧数为4
7.多帧滑动窗口与选择重传协议(SR)
- 在后退n协议中,接收*发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。由此诞生了SR(SELECTICE REPEAT)。
- SR工作原理:当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以将已存于缓冲区中的其余帧一并按正确的顺序递交上一层。
- 显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。
- 从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。
-
如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接收。
如果该帧序号是窗口的下界(最左边第-一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处
。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。 -
图解此过程
- 每个帧都有自己的定时器,一个超时事件发生后只重传一个帧。
-
SR接收方将确认-一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个该帧的确认帧[收谁确认谁],直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一-批帧按序交付给 上层,然后向前移动滑动窗口。
-
图解此过程
- 一道小例题加深理解
参考链接:https://blog.csdn.net/weixin_43914604/article/details/104722679