流量控制

较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。

数据链路层流量控制手段:接收方收不下就不回复确认。
传输层流量控制手段:接收端给发送端一个窗口公告。

流量控制的方法

停止-等待协议(发送窗口大小=1,接收窗口大小=1)

每发送一个帧就停止发送,等待对方的确认,在收到确认后在发送下一个帧。
image.png

为什么要有停止-等待协议

除了比特出差错,底层信道还会出现丢包问题,为了实现流量控制
丢包:物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据包的丢失。

研究停等协议的前提

虽然现在常用全双工通信方式,但为了讨论问题方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。
因为是在讨论可靠传输的原理,所有并不考虑数据是在哪一层次上传送的。
“停止-等待”就是每发送完一个分组就停止发送,等待对方确认,在收到确认后在发送下一个分组。

停等协议有集中应用情况

无差错情况&有差错情况

无差错情况

image.png

有差错情况
  • 数据帧丢失或检测到帧出错

image.png

  • ACK丢失

image.png

  • ACK迟到

image.png

停等协议性能分析

简单,信道利用率太低
image.png

滑动窗口协议

image.png

后退N帧协议(GBN)(发送窗口大小>1,接收窗口大小=1)

image.png

GBN发送方必须响应的三件事
  • 上层的调用

上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧将其发送;如果窗口已满,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一会发送(实际实现中,发送方可以缓存这些数据,窗口不满时在发送帧)。

  • 收到了一个ACK

GBN协议中,对N号帧的确认采用累积确认的方式,表明接收方已经收到N号帧和它之前的全部帧。

  • 超时事件

协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复或确认帧的丢失。如果超时,发送方重传所有已发送但未被确认的帧。

GBN接收方要做的事

如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧中的数据部分交付给上层。

其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息:expectedseqnum(下一个按序接收的帧序号)
image.png

总结
  1. 累积确认(偶尔捎带确认)
  2. 接收方只按顺序接收帧,不按序无情丢弃
  3. 确认序号最大的、按序到达的帧
  4. 发送窗口最大为2-1,接收窗口大小为1

image.png

GBN协议性能分析

因连续发送数据而提高了信道了信道利用率
在重传时必须把原来已经正确传送的数据帧重传,是传送效率降低

选择重传协议(SR)(发送窗口大小>1,接收窗口大小>1)

image.png

SR发送方必须响应的三件事
  • 上层调用

从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。

  • 收到了一个ACK

如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接受。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具体的最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。
image.png

  • 超时事件

每个帧都有自己的定时器,一个超时事件发生后只重传一个帧

SR接收方要做的事(窗口内的帧来者不拒)

SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个该帧的确认帧【收谁确认谁】,直到所有帧(即序号更小的帧)都被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
image.png

运行中的SR

image.png
image.png

SR协议重点总结
  1. 对数据帧逐一确认,收一个确认一个
  2. 只重传出错帧
  3. 接收方有缓存

可靠传输

发送端发啥,接收端收啥。