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