数据链路层之流量控制和可靠传输机制(停止-等待协议、后退N帧协议(GBN)、选择重传协议(SR))
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
前言:流量控制简介
较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。
数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。
数据链路层流量控制手段:接收方收不下就不回复确认。
数据链路层流量控制手段:接收方收不下就不回复确认。
可靠传输:发送端发啥,接收端收啥。
流量控制:控制发送速率,使接收方有足够的缓冲空间来接收每一个帧
滑动窗口解决:
- 流量控制(收不下就不给确认,想发也发不了)
- 可靠传输(发送方自动重传)
一、停止-等待协议
发送窗口大小=1,接收窗口大小=1;
1.为什么要有停止-等待协议?
除了比特出差错,底层信道还会出现丢包问题。(丢包:物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据包的丢失。)
所以为了实现流量控制,而有停止-等待协议。
2.研究停等协议的前提?
虽然现在常用全双工通信方式,但为了讨论问题方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。
因为是在讨论可靠传输的原理,所以并不考虑数据是在哪一个层次上传送的。
“停止-等待”就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。
3.停等协议有几种应用情况?
两种:
无差错情况&有差错情况
4.停等协议――无差错情况
每发送1个数据帧就停止并等待,因此用1bit来编号就够。
5.停等协议――有差错情况
1、数据帧丢失或检测到帧出错
注意:
-
1.发完一个帧后,必须保留它的副本。
-
⒉数据帧和确认帧必须编号。
2.ACK丢失
3、ACK迟到
此时是第一次发送的ACK0在重传0帧接收到重传的ACK0之后
还有一种是第一次发送的ACK0在重传0帧接收到重传的ACK0之前
情况也是一样的,只不过此时是重传的0帧返回的ACK0收到被丢弃罢了。
6、停等协议性能分析
总结就是
- 简单
- 信道利用率太低
信道利用率:发送方在一个发送周期内,有效地发送数据所需要的时间占整个发送周期的比率。
信道利用率=(L/C)/T
L:T内发送L比特数据
C:发送方数据传输率
T:发送周期(从开始发送数据,到收到第一个确认帧为止)
信道吞吐率=信道利用率*发送方的发送速率
例题:
一个信道的数据传输率为4kb/s,单向传播时延为30ms,如果使停止-等待协议的信道最大利用率达到80%,要求的数据帧长度至少为()。
解答:
80%=L/4/(L/4+2×30ms)
即80%=L/(L+2×30ms×4kb/s)
所以L=960bit
二、后退N帧协议(GBN)
发送窗口大小>1,接收窗口大小=1;
前提:累计确认
当接收方按序收到的几个帧都是正确的接收,那么此时会返回一个ACKn,此时的ACKn对于发送方来讲就是:n帧以及n帧前面的所有帧都已经发送成功,这个就叫累计确认。
稍带确认:发送方和接收方都可进行通信,所以可以在发送数据时将确认帧给发送,进行通信。
1、后退N帧协议(GBN)流程
发送窗口:发送方维持一组连续的允许发送的帧的序号。
接收窗口:接收方维持一组连续的允许接收帧的序号。
此时是发送方发送的0帧到达后,返回ACK0给发送方,并且发送方并不是发送一帧数据,1帧也在路上
在发送方接收到ACK0后滑动窗口会向后移动,
发送方可以简单分为这四类
2、GBN发送方必须响应的三件事
1、上层调用
上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送;如果窗口已满,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一会再发送。(实际实现中,发送方可以缓存这些数据,窗口不满时再发送帧)。
2、收到了一个ACK
GBN协议中,对n号帧的确认采用累积确认的方式,标明接收方已经收到n号帧和它之前的全部帧。
3、超时事件
协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧。
3、GBN接收方要做的事
- 如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧中的数据部分交付给上层。
- 其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息:expectedseqnum (下一个按序接收的帧序号)。
4、运行中的GBN
5、滑动窗口长度
窗口长度可以无限吗?
当时是不可以的。
若采用n个比特对帧编号,那么发送窗口的尺寸w_T应满足:1<=W_T<=2^n-1。因为发送窗口尺寸过大,就会使得接收方无法区别新帧和旧帧。
6、GBN协议重点总结
- 1、累积确认(偶尔捎带确认)
- 2接收方只按顺序接收帧,不按序无情丢弃
- 3.确认序列号最大的、按序到达的帧
- 4。发送窗口最大为2^n-1,接收窗口大小为1
例题1:
数据链路层采用了后退N帧(GBN )协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只收到0、2、3号帧的确认,则发送方需要重发的帧数是()。
解答:
发送方收到0、2、3号帧,由于累计确认,我们可以认为3号帧以及3号帧之前的都已经接收到了,所以需要重新发的是4、5、6、7号帧。
7、GBN协议性能分析
- 因连续发送数据帧而提高了信道利用率
- 在重传时必须把原来已经正确传送的数据帧重传,是传送效率降低。
三、选择重传协议(SR)
发送窗口大小>1,接收窗口大小>1;
1、选择重传协议(SR)流程
发送方的数据分类:
接收方的数据分类:
2、SR发送方必须响应的三件事
1.上层的调用
从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。
2.收到了一个ACK
如果收到ACK,加入该帧序号在窗口内,则sR发送方将那个被确认的帧标记为已接收。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。
3.超时事件
每个帧都有自己的定时器,一个超时事件发生后只重传一个帧。
2、SR接收方要做的事
来者不拒(窗口内的帧)
SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个该帧的确认帧【收谁确认谁】,直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
如果收到了窗口序号外(小于窗口下界)的帧,就返回一个ACK.
其他情况,就忽略该帧。
3、滑动窗口长度
发送窗口最好等于接收窗口。(大了会溢出,小了没意义)
W_Tmax=W_Rmax=2^(n-1)
4、SR协议重点总结
- 1.对数据帧逐一确认。收一个确认一个
- 2.只重传出错帧
- 3.接收方有缓存
- W_Tmax=W_Rmax=2^(n-1)
例题1:
数据链路层采用了选择重传(SR)协议,发送方已经发送了编号为O~3的帧。现已收到1号帧的确认,而0、2号帧依次超时,则发送方需要重传的帧数是()
解答:
在SR协议中,对数据帧逐一确认,收一个确认一个,所以1号帧肯定已经接收到了。
因为0、2号帧超时,所以0、2号帧需要重传。因3号帧有缓存,所以还不需要重传。
总结
以上就是数据链路层之流量控制和可靠传输机制(停止-等待协议、后退N帧协议(GBN)、选择重传协议(SR))的相关知识点,希望对你有所帮助。
积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!
- 点赞
- 收藏
- 关注作者
评论(0)