跳转至

数据链路层

王道

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

流量控制、可靠传输,非常重要

都与滑动窗口机制有关系,也需要多种机制配合

要掌握:停止等待协议、后退N帧协议(GBN)、选择重传协议(SR)

这3者本质都是滑动窗口机制,区别在发送窗口和接受窗口的数量不同

滑动窗口机制

发送窗口\(W_T\):发送方当前允许发送的帧

接受窗口\(W_R\):接收方当前允许春节收的帧

停止等待协议 (S-W)

  • 滑动窗口机制:发送窗口\(W_T=1\), 接收窗口\(W_R=1\)
  • 确认机制:确认帧\(ACK_i\), 若接收方收到i号帧,且没有检测出差错,需要给发送方返回确认帧\(ACK_i\)
  • 重传机制:超时重传,如果发送方超时未收到\(ACK_i\),则重传i号帧
  • 帧编号:仅需1bit给帧编号,要求\(W_T+W_R \leq 2^n\)
流程

注:帧序号为序号\(i % 2\)

  • 发送方把0号数据帧传给接收方
  • 接受方检错,无错则将该帧交给网络层,并向发送方发送一个确认帧0
  • 接受方的窗口移到下一个1号帧
  • 发送方收到0号接受帧后,发送窗口也移到1号帧

如果发送发生了错误呢?超时重传机制,顾名思义

后退N帧协议 GBN

  • 滑动窗口机制:发送窗口\(W_T \gt 1\),接收窗口\(W_R = 1\)
  • 确认机制:确认帧\(ACK_i\),若接收方收到i号帧,且没有检测出差错,需要给发送方返回确认帧\(ACK_i\)
  • 重传机制:超时重传,若发送方超时未收到\(ACK_i\),则重传i号帧
  • 帧编号:为了支持以上机制正确运行,至少要用n bit给帧编号,要求\(W_T + W_R \leq 2^n\)
  • 特殊规则:

    • 关于确认帧:接收方可以积累确认,即连续收到多个数据帧是,可以仅返回最后一个帧的ACK
    • 关于超时重传:若发送方超时未收到\(ACK_i\),则重传i号帧及其之后的所有帧
流程
  • 发送方连续按顺序发送发送窗口中的n个帧
  • 接收方每收到一个就把接收窗口往后移一格
  • 发送方窗口内的发完就没得发了
  • 接受方将收到的最后一个帧的确认帧发回给发送方(累积确认:连续收到多个数据帧时,可以仅返回最后一个帧的ACK)
  • 发送方收到确认帧,发送窗口就可向后移动

如果发生错误:

  • 发送方的某一帧,超过时限没有收到确认帧,就从这一帧开始往后都重传

后退并非滑动窗口后退,而是已经发出的帧要退回来重新发送

如果发送确认帧发生错误:

  • 发送方没有收到确认帧,则会在超时后重发,但此时接收方的接收窗口已经往后移,收到的重发的数据会不在接收窗口内,此时接收方则会重发最后一个成功收到的确认帧,其实也就是重发了刚才发送失败的确认帧
为什么要满足\(W_T + W_R \leq 2^n\)

\(发送窗口+接收窗口的宽度 \leq 帧序号的种类个数\)

\(帧序号有n位,故有2^n种\)

会出现某一时刻在发送窗口和接收窗口内的不同帧的帧序号确实相同的

选择重传协议 Selective Repeat(SR)

  • 滑动窗口机制:发送窗口\(W_T \gt 1\), 接收窗口\(W_R \gt 1\)
  • 确认机制:确认帧\(ACK_i\),接收方收到i号帧,检测无差错,则给发送方返回确认帧
  • 重传机制:发送方超时未收到\(ACK_i\),则重传i号帧
  • 帧编号:为了支持以上机制,要使用n bit给帧编号,且\(W_T + W_R \leq 2^n\)
  • SR的特殊规则:

    • 否认帧:若接收方收到i号帧,但检测出i号帧有差错,则要丢弃该帧,并给发送方返回否认帧\(NAK_i\)
    • 请求重传:若发送方收到\(NAK_i\),则重传i号帧
    • 要求:\(W_R \leq W_T\),即接收窗口不能大于发送窗口(否则会资源浪费,无恶性影响)
流程

如果丢失

  • 返回所有正确接收的帧,