目录
4.1流量控制和可靠传输机制
流量控制涉及对链路上的帧的发送速率的控制,以使接收方有足够的缓冲空间来接收每个帧。
流量控制的基本方法是由接收方控制发送方发送数据的速率。
滑动窗口流量控制的基本原理
在任意时刻,发送方都维持一组连续的允许发送的帧的序号,称为发送窗口。
同时接收方也维持一组连续的允许接收帧的序号,称为接收窗口。
特点
- 在接收方,只有收到的数据帧的序号落入接收窗口内才收下,否则丢弃。当接收窗口收到了一个序号正确的帧后会向前滑动一个位置同时向接收方发送确认信息,发送窗口收到确认信息后才能向前滑动一个帧的位置。
- 接收窗口的大小为1时,可保证帧的有序接收。
-
数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的(注意与第5章传输层的滑动窗口协议的区别)
从滑动窗口的概念上看:
停止-等待协议(Stop-and-Wait):发送窗口大小=1,接收窗口大小=1。
后退N帧协议(Go-Back-N, GBN):发送窗口大小>1,接收窗口大小=1。
选择重传协议(Selective Repeat, SR):发送窗口大小>1,接收窗口大小>1。
在数据链路层中流量控制机制和可靠传输机制是交织在一起的。
可靠传输机制
数据链路层的可靠传输通常使用确认和超时重传两种机制来完成。
确认是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收。有些情况下为了提高传输效率,将确认捎带在一个回复数据帧中(不能忽略发送时延),称为捎带确认。
超时重传是指发送方在发送某个数据帧后就开启一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止。给超时计时器设置的超时重传时间RTO应当仔细选择,一般将RTO设置为略大于收发双方的平均往返时间RTT。
自动重传请求(Auto Repeat reQuest, ARQ)通过接收方请求发送方重传出错的数据帧来恢复出错的帧,是通信中用于处理信道所带来的差错的方法之一。传统自动重传请求分为三种,即停止-等待ARQ、后退N帧ARQ、选择重传ARQ。
后两种协议当窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称连续ARQ协议。
4.2三种传统ARQ方式
这里在前面介绍过的窗口机制、确认和超时重传机制的基础上在三个小节内总结性地讨论三个ARQ方式的特点(蓝色背景字为它们的独有特点),然后用一个小节专门对比介绍它们的窗口大小问题(适合对比记忆),最后再解决信道利用率相关问题(重点且与前面内容关联不大)。
4.2.1单帧滑动窗口与停止-等待协议
停止-等待协议相当于发送窗口和接收窗口大小均为1的滑动窗口协议。
具体实现细节:
- 确认和超时重传机制。
- 用1bit判定重复帧:可能会出现接收方确认帧丢失然后发送方超时重传的情况,只需一个1个比特位对发送的帧交替地用0和1来标识,同时对确认帧也进行0和1编号,用来对ACK0是迟到而不是丢失这种情况的处理。
- 为了超时重传和判断重复帧的需要,发送方和接收方都需要设置一个帧缓冲区。
停止-等待协议的信道利用率很低,为了克服这一缺点,就是产生了后退N帧协议和选择重传协议。
4.2.2多帧滑动窗口与后退N帧协议(GBN)
在后退N帧(GBN)协议中,发送方无须在收到上一个帧的ACK后才能开始发送下一帧,而是可以连续发送帧。发送窗口大于1,接收窗口等于1。
后退N帧的含义:发送方在得知某一帧出错时,不得不重传该出错帧及随后的N个帧。这也反映了接收方只允许按顺序接收帧。当出错率较高时GBN协议也不一定优于停止-等待协议。
发送方如何得知出错帧?接收方发现出错帧后就发送上一正确接收帧的确认ACK,发送方在接收到多个相同的确认ACK后就知道它的下一帧是出错帧(即冗余ACK,称为快速重传);或者发送方的某个帧超时后仍未返回确认信息,则为出错帧(超时重传)。
累积确认,为了减少开销GBN协议规定接收方不必每收到一个正确的数据帧就必须发回一个确认帧。可以在自己有数据要发送时才将对以前正确收到的帧加以捎带确认。(比如收到了1、3、5号帧的确认 ,代表5号帧及以前都收到了)
4.2.3多帧滑动窗口与选择重传协议(SR)
无累积确认,因为要选择出错的那一帧重传,所以每个都要确认。采用NAK机制重传,即发送否认帧NAK,若某帧出错,就要求发送方重传指定帧。
当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,当接收方仍可以收下来,存放在一个缓存区中,同时要求发送方重新传送出错的那一帧。
一旦收到重新传来的帧后,就可以与已存放于缓存区中的其余帧一并按正确的顺序递交高层。缓冲区的数目等于窗口的大小。
数据链路层的可靠传输机制和传输层TCP的可靠传输机制有很多相同之处。将本章的三种协议特点记清后再学习TCP的可靠传输机制就是对比复习而已。
4.2.4三种ARQ协议窗口大小问题
接受窗口超过发送窗口没有意义,但超过了也不能算错,看看有没有更合适的选项。
下面举例说明为什么超过上述限制后接收方无法分辨新、旧数据分组
下图接收方正确接收了0、1、2、3、4,于是滑动窗口滑到下图位置。
但接下来0号的确认帧丢失了,发送方重传0号帧,然后滑动窗口中正好有0,于是发生差错。
4.2.5信道利用率、信道吞吐率、发送周期的计算问题
信道利用率:即信道的效率。指发送方在一个发送周期的时间内,有效地发送数据所需要的时间占整个发送周期的比率。
发送周期:发送方从开始发送数据到收到第一个确认帧为止,称为一个发送周期T。
信道吞吐量=信道利用率×发送方的发送速率。
题一 :利用信道利用率确定数据帧的长度(等同窗口大小=1)
题二:计算信道吞吐量
题三 求可发送的数据量总大小,从而确定窗口大小
补充一个可能的疑问(看图片描述)
解释:窗口是连续滑动的,当第一轮第一个确认帧收到时,第二轮第一个帧可以发送。接着要发送第二轮第二个帧时,第一轮第二个确认帧已经收到了。