较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。
数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。
数据链路层流量控制手段:接收方收不下就不回复确认。(确认帧)
传输层流量控制手段:接收端给发送端一一个窗口公告。
流量控制的方法有停止-等待协议、滑动窗口协议(后退N帧协议GBN、选择重传协议SR)
1 停止-等待协议
为什么要有停止等待协议?
除了比特出差错,底层信道还会出现丢包(物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据包的丢失)问题。为了实现流量控制。
研究停等协议的前提?
虽然现在常用全双工通信方式,但为了讨论问题方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。
因为是在讨论可靠传输的原理,所以并不考虑数据是在哪一个层次上传送的。
“停止等待”就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。
分为两种情况研究:
😁无差错情况
😁有差错情况(分三种情况)
——数据帧丢失或检测到帧出错
——ACK丢失
——ACK迟到
停止等待协议简单,但是信道利用率太低。
2 后退N帧协议GBN
GBN发送方必须相应的三件事
1.上层的调用
上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送;如果窗口已满,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一会再发送。(实际实现中, 发送方可以缓存这些数据,窗口不满时再发送帧)。
2.收到了一个ACK
GBN协议中,对n号帧的确认采用累积确认的方式,标明接收方已经收到n号帧和它之前的全部帧。
3.超时事件
协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧。
GBN接收方要做的事
如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧中的数据部分交付给上层。
其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息: expectedseqnum (下一个按序接收的帧序号)。
窗口长度可以无限吗?
若采用n个比特对帧编号,那么发送窗口的尺寸WT应满足: 。因为发送窗口尺寸过大,就会使得接收方无D法区别新帧和旧帧。
例:
因为GBN是累积确认,3号帧的确认代表3及3之前的都受到了,所以需要重发的帧是4、5、6、7帧,即需要重发的帧数是4,选择C
3 选择重传协议SR
SR发送方必须相应的三件事:
1.上层的调用
从上层收到数据后,SR发送方检查下一一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN-样,要么将数据缓存,要么返回给上层之后再传输。
2.收到了一个ACK
如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接收。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。
3.超时事件
每个帧都有自己的定时器,一个超时事件发生后只重传一个帧。
SR接收方要做的事
来者不拒(窗口内的帧)
SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个该帧的确认帧[收谁确认谁],直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
如果收到了窗口序号外(小于窗口下界)的帧,就返回一个ACK。其他情况,就忽略该帧。
窗口长度可以无限吗?
对于SR,发送窗口最好等于接收窗口,
如果超过了,比如n=2时,窗口最大是2,如果窗口是3,就无法区分重传的是旧帧还是新帧(下图所示)
例题
解答:
连续ARQ协议(GBN):发送方可以连续发送若干个数据帧,如果收到接收方的确认帧则可以继续发送。若某个帧出错,接收方只是简单地丢弃该帧及其后所有的后续帧,发送方超时后需重传该数据帧及其后续的所有数据帧。这里要注意,连续ARQ协议中,接收方一般采用累积确认的方式,即接收方对按序到达的最后一个分组发送确认;
选择ARQ协议(SR):选择重传协议中,接收方逐个地确认正确接收的分组,不管接收到的分组是否有序,只要正确接收就发送选择ACK分组进行确认。因此选择重传协议中的ACK.分组不再具有累积确认的作用。这点要特别注意与GBN协议的区别。
0和2号帧两个都需要重传,因此本题需要重传的帧的数量num=2,选择B