控制传输协议差错恢复方法 滑动窗口协议 GBN(Go-Back-N)回退N步 和 SR(Selective Repeat)选择重传 对比

文章目录

  • 对比
  • 传输控制协议中流水线(pipelining)差错恢复方法
    • 回退N步GBN(Go-Back-N)
      • 发送方
      • 接收方
    • 选择重传SR(Selective Repeat)
      • 发送方
      • 接收方
    • TCP 选择确认(Selective acknowledgment)
      • 发送方
      • 接收方

对比

对比方面 GBN SR TCP
滑动窗口缓冲区 不维护 维护接收和发送缓冲区 维护接收缓冲区
定时器 一个滑动窗口一个定时器 每个分组都有定时器 一个滑动窗口一个定时器
确认 累积确认 选择确认 累积确认
重传 重传滑动窗口所有未被确认的分组 重传超时的分组 重传base处分组
对待乱序分组 丢弃 缓存在缓冲区 缓存在缓冲区,并发送冗余ACK,触发快速重传

传输控制协议中流水线(pipelining)差错恢复方法

回退N步GBN(Go-Back-N)

发送方

  1. 维护两个变量base和nextseqnum,base代表滑动窗口中第一个发送但并未被确认的分组序号,nextseqnum代表滑动窗口中第一个未被发送的分组序号
  2. nextseqnum - base就是窗口长度,如果窗口长度到达给定最大值,不会再接收上层的数据
  3. 采用累积确认,即发送方接收到接收方发送的大于base的确认号n,会把n到base之间的所有分组全部确认收到,只有被确认后base才能增大,nextseqnum才能增大,才能发送更多分组
  4. 当出现超时事件,会重传窗口中所有已经发送但未被确认的分组,即base到nextseqnum序号之间的分组,这个超时事件指的是发送base分组时开启的定时器超时,一个滑动窗口多个分组只用一个定时器

接收方

  1. 只需要维护一个变量expectedseqnum,expectedseqnum代表下一个期望收到的分组序号
  2. 当收到大于expectedseqnum序号的分组,即乱序分组,会直接丢弃乱序分组

选择重传SR(Selective Repeat)

发送方

  1. 维护一个滑动窗口(相对于字节数组)和两个变量base和nextseqnum,base和nextseqnum和上面一样
  2. 不采用累积确认,滑动窗口中每个分组都对应一个ack确认,所以base后面的分组可能在base之前被确认,但是如果base没有被确认滑动窗口无法向右移动,也无法发送更多数据
  3. 滑动窗口中每个分组都有一个定时器,当出现超时,只重传对应超时的分组

接收方

  1. 维护一个乱序分组缓冲区和rev_base、rev_base+N-1两个变量,如果在[rev_base, rev_base+N-1]范围内的分组被正确接收,则缓存该分组,并发送该分组的ack,如果序号恰好等于rev_base则将以前缓存的和rev_base连续序号的分组一起提交到上一层,然后窗口可以右移接收更多的数据
  2. 序号在[rev_base -N, rev_base-1]内的分组被收到,也必须发送一个ACK,不然发送方的滑动窗口无法向右移动

TCP 选择确认(Selective acknowledgment)

发送方

  1. 仅需维护已经发送过但未被确认的字节的最小序号SendBase和下一个要发送的字节序号NextSeqNum,这和GBN一样
  2. 采用累积确认
  3. 只有一个定时器,但超时只重传序号为SendBase的分组,在收到ack定时器重新刷新用来记录后一个分组的超时
  4. 采用快速重传,即判断分组比特错误被丢弃或者丢包(路由器排队缓存已满丢弃数据包)的依据不再只有超时,还有冗余ACK,在接收方接到乱序报文时会发送最近一个正序收到的报文的ACK,即冗余ACK,当收到3个冗余ACK时(说明有3个冗余报文被接收方接收),会直接重传SendBase序号分组

接收方

  1. 维护一个乱序分组缓冲区和rev_base,不丢弃失序报文,这和SR一样
  2. 收到乱序报文,会发送最近一个正序收到的报文的ACK

参考
《计算机网络 自顶向下方法》

你可能感兴趣的:(计算机网络,计算机网络)