流量传输与可靠传输机制

一、流量控制、可靠传输与滑动窗口机制

  • 流量控制:
    • 概念:较高的发送速度较低的接收能力的不匹配,会造成传输出错,控制发送速率,使接收方有足够的缓冲空间来接收每一个帧
    • 数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的
    • 数据链路层流量控制手段:接收方收不下就不回复确认
    • 传输层流量控制手段:接收方给发送端一个窗口公告
  • 可靠传输:发送端发啥,接收端收啥
  • 滑动窗口协议分为
    • 后退N帧协议
    • 选择重传协议

二、停止-等待协议

  • 1、为什么要有停止-等待协议:除了比特出差错,底层信道还会出现丢包(丢包:物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据报(不同层次有不同名字)的丢失)问题。为了实现流量控制

  • 2、研究停止-等待协议的前提

    • ①虽然现在常用全双工通信方式,但为了讨论方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)
    • ②因为是在讨论可靠传输的原理,所以并不考虑数据是在哪个层次上传送的
    • 停止-等待协议就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组
  • 3、停止-等待协议有几种应用情况

    • 无差错情况
      • 每发送1个数据帧就停止并等待,因此用1bit来编号就够
    • 有差错情况
      • 数据帧丢失或检测到帧出错(如下图)
        • 超时时计时器设置的重传时间比帧传输的平均RTT更长一些的原因:发送方和接收方都有传输时延,还有接收方对帧的处理时延
        • 注意点 :
          • 发送完一个帧后 ,必须保留它的副本
          • 数据帧和确认帧必须编号(因为要知道发送帧与确认帧是否是对应的)
      • ACK丢失
      • ACK迟到
        • 对于上图中的迟到的ACK0和重传的ACK0,哪个先到就收哪个,然后发送1帧,后来的收到就丢掉
  • 4、信道利用率

    • 定义:发送方在一个发送周期内,有效地发送数据所需要的时间占整个发送周期的比率
    • 公式: 信道利用率=(L/C)/T,其中L发送方发送的比特数,C为发送发数据传输率,T为发送周期
    • 类似的信道吞吐率=信道利用率*发送方的发送速率
  • 5、停止-等待协议性能分析

三、后退N帧协议(GBN--Go Back N)

  • 1、后退N帧协议中的滑动窗口
  • 2、GBN发送方必须响应的三件事
    • ①上层的调用:上层要发送数据时,发送方要先检错发送窗口是否已满,如果未满,则产生一个帧并将其发送;如果窗口已满,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一会儿再发送。(实际现实中,发送方可以缓存这些数据,窗口不满时再发送)
    • ②收到了一个ACK:GBN协议中,对n号帧的确认采用累积确认的方式,标明接收方已经收到n号帧和它之前的全部帧
    • ③超时事件:协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧
  • 3、GBN接收方要做的事
    • ①如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧的数据部分交付给上层
    • ②其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK,接收方无需缓存任何失序帧,只需维护一个信息:expectedseqnum(下一个按序接收的帧序号)
  • 4、运行中的GBN
    • 如上图,2帧丢失,发送方发送后续3帧,4帧,5帧,接收方收到后都直接丢弃,并且返回ACK1,直到2帧超时,发送方重传2帧,然后3,4,5...
  • 4、滑动窗口长度
    • 若采用n个比特对帧编号,那么帧的序号应该是0 ~ ,一共有种帧号,如果滑动窗口恰好为,那么当0帧丢失或全部丢失时且窗口满了即窗口中为0 ~ 号帧,重0号帧开始超时重传,但接收方并不能确定该0号帧是超时重传的0号帧还是新的0号帧,所以发送窗口最大为-1,即窗口最多能容纳0~-2号帧,超时重传也只能是这些号帧,而新的帧应该是-1号,故发送窗口大小应满足1 -1
  • 5、GBN协议重点总结
    • ①累积确认(偶尔捎带确认--双方通信,接收方发送数据给发送方时可以顺便带上确认帧)
    • ②接收方只按顺序接收帧,不按序无情丢弃
    • ③确认序号最大的、按序到达的帧
    • ④发送窗口最大为-1,接收窗口大小为1

四、选择重传协议(SR--Selective Repeat)

  • 1、GBN协议的弊端
  • 2、选择重传协议中的滑动窗口
  • 3、SR发送方必须响应的三件事
    • ①上层的调用:从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输
    • ②收到了一个ACK:如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接受。如果该帧序号是窗口的下界(最左边第一个窗口对于的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧
    • ③超时事件:每个帧都有自己的定时器,一个超时事件发生后只重传一个帧
  • 4、SR接收方要做的事
    • ①特点:对于窗口内的帧来者不拒
    • ②过程:SR接收方将确认一个正确接收的帧不管其是否按序。失序的帧将被缓存,并返回给发送方一个确认帧,直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前滑动窗口,如下图6,7帧先缓存,等5帧到后一起交互给网络层,然后窗口滑动
    • ③如果收到了窗口序号外(小于窗口下界)的帧,因为ACK可能丢失,就返回一个ACK。其他情况,就忽略该帧
  • 5、运行中的SR
  • 6、滑动窗口长度
    • 发送窗口最好等于接收窗口,因为大于则接收方来不及接收而溢出,小于则接收方多余的窗口没有意义
    • 假设用2个bit给帧编号,滑动窗口长度为3,如下图
    • 情形一:左边图接收方发送0,1,2帧的ACK全部丢失,那么发送方将要重传0帧,情形二,右边图发送方接收到0,1帧的ACK,但还未收到2,3帧ACK,于所发送方也将发送下一个0帧。这样的话,接收方是无法区别该0帧到底是重传的0帧还是新的0帧,产生二义性,因此最好= ,或者表示为+
    • 简单证明(个人理解)情况1:帧的编号为0 ~ -1,窗口为编号数一半即,当发送方发送前半序号的帧时,接收方接收且返回响应的ACK,窗口则滑到全为后半序号的帧,此时接收方接收到发送方发送的前半序号即0~-1号帧时,由于窗口内没有对应的序号,肯定不是新的帧而是重传的帧,则返回对应的ACK。但凡接收窗口大一个即最后一个窗口装了一个序号0,都不能区分发送方传来的0帧是否是重传的0帧还是新0帧。情况2:发送方窗口不等于接收窗口,但+ 时,想象一下发送方将窗口的帧全部发送完,接收方返回相应的ACK同时向后滑动个帧,此时接收窗口从最后一个帧开始往前的帧数量应该是+,因为数量大于,所以接收窗口必定包括了新的0帧,1帧或者更多,若前面的ACK丢失,接收窗口收到0帧同样像情况1一样不能确认
  • 7、SR协议重点总结
    • 1、对数据帧逐一确认,收一个确认一个
    • 2、只重传出错帧
    • 3、接收方有缓存
    • 4、==

本文章使用limfx的vscode插件快速发布