天天看点

计算机网络笔记(5) 传输层滑动窗口协议(GBN、SR)

文章目录

    • 滑动窗口协议(Sliding-window protocol)
      • GBN(Go-Back-N/后退N帧协议)
      • SR协议(Selective Repeat/选择重传协议)

滑动窗口协议(Sliding-window protocol)

  • 窗口
    • 允许使用的序列号范围
    • 窗口尺寸为N:最多有N个等待确认的消息
  • 滑动窗口
    • 随着协议的运行,窗口再序列号空间内向前滑动
  • 滑动窗口协议:GBN,SR

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

发送方:

计算机网络笔记(5) 传输层滑动窗口协议(GBN、SR)
  • 分组头部包含k-bit序列号
  • 窗口尺寸为N,最多允许N个分组未确认
    计算机网络笔记(5) 传输层滑动窗口协议(GBN、SR)
  • ACK(n)机制:确认帧,表示接收到的字符无错误,确认到序列号n(包含n)的分组均已被正确接受
    • 可能收到重复ACK
  • 为空中的纷纷组设置计时器(timer)
    • 超时的话需要重发
  • 超时Timeout(n)事件:重传序列号≥n,即还未收到ACK的所有分组

接收方:

计算机网络笔记(5) 传输层滑动窗口协议(GBN、SR)
  • ACK机制:发送拥有最高序列号的、已被正确接收的分分组的ACK
    • 可能产生重复ACK
    • 只需要记住唯一的expectedseqnum
  • 乱序到达的分组
    • 直接丢弃处理,但是接受方没有缓存
    • 因此需要重新确认序列号最大的、按序到达的分组

SR协议(Selective Repeat/选择重传协议)

GBN重传时会重传多个分组,比如重传n时会重传n以及n序列号以后的分组

SR中解决这种问题:

  • 接收方会对每个分组单独进行确认
    • 设置缓存机制,缓存乱序到达的分组
  • 发送方只重传那些没收到ACK的分组
    • 为每个分组设置定时器
  • 发送方窗口
    • N个连续的序列号
    • 限制已发送且未确认的分组

发送方工作

  • 上层调用事件:上层发送数据时,先检查发送窗口
    • 如果发送窗口未满:则生成数据帧,发送数据
    • 如果发送窗口已满:发送方将该信息通知上层,让上层延迟发送
  • ACK事件:逐一确认
    • 接收确认帧:接收方收到ACK确认帧
    • 标记已接收:发送窗口内将该帧序号对应的帧标记为已接收
    • 移动发送窗口:如果该帧序号是发送窗口的下界(最左侧窗口),将发送窗口移动到最小序号的没有确认的帧位置;可能移动一个位置,也可能移动多个位置
    • 发送未发送帧:发送窗口移动完毕后,如果发现该发送窗口中有没有发送的帧,就将这些帧发送出去
  • 超时事件:每个帧都有自己的定时器,如果某个帧出现了定时器超时事件,重传该单个帧

接收方工作

  • 接收正确帧:接收方接收正确的帧,不管其帧的顺序
  • 失序处理:失序的帧,将会被缓存起来,并向发送方发送该失序帧的ACK确认帧
  • 移动接收窗口:如果接收到的帧序号是接收窗口的下界(最左侧窗口),将成功接收到的连续数据交付给上层,将接收窗口移动到最小序号的没有接收到的帧位置;可能移动一个位置,也可能移动多个位置

继续阅读