文章目录
对比传输控制协议中流水线(pipelining)差错恢复方法回退N步GBN(Go-Back-N)发送方接收方
选择重传SR(Selective Repeat)发送方接收方
TCP 选择确认(Selective acknowledgment)发送方接收方
对比
对比方面 | GBN | SR | TCP |
---|
定时器 | 一个滑动窗口一个定时器 | 每个分组都有定时器 | 一个滑动窗口一个定时器 |
确认 | 累积确认 | 选择确认 | 累积确认 |
重传 | 重传滑动窗口所有未被确认的分组 | 重传超时的分组 | 重传base处分组 |
对待乱序分组 | 丢弃 | 缓存在缓冲区 | 缓存在缓冲区,并发送冗余ACK,触发快速重传 |
传输控制协议中流水线(pipelining)差错恢复方法
回退N步GBN(Go-Back-N)
发送方
维护两个变量base和nextseqnum,base代表滑动窗口中第一个发送但并未被确认的分组序号,nextseqnum代表滑动窗口中第一个未被发送的分组序号nextseqnum - base就是窗口长度,如果窗口长度到达给定最大值,不会再接收上层的数据采用累积确认,即发送方接收到接收方发送的大于base的确认号n,会把n到base之间的所有分组全部确认收到,只有被确认后base才能增大,nextseqnum才能增大,才能发送更多分组当出现超时事件,会重传窗口中所有已经发送但未被确认的分组,即base到nextseqnum序号之间的分组,这个超时事件指的是发送base分组时开启的定时器超时,一个滑动窗口多个分组只用一个定时器
接收方
只需要维护一个变量expectedseqnum,expectedseqnum代表下一个期望收到的分组序号当收到大于expectedseqnum序号的分组,即乱序分组,会直接丢弃乱序分组
选择重传SR(Selective Repeat)
发送方
维护一个滑动窗口(相对于字节数组)和两个变量base和nextseqnum,base和nextseqnum和上面一样不采用累积确认,滑动窗口中每个分组都对应一个ack确认,所以base后面的分组可能在base之前被确认,但是如果base没有被确认滑动窗口无法向右移动,也无法发送更多数据滑动窗口中每个分组都有一个定时器,当出现超时,只重传对应超时的分组
接收方
维护一个乱序分组缓冲区和rev_base、rev_base+N-1两个变量,如果在[rev_base, rev_base+N-1]范围内的分组被正确接收,则缓存该分组,并发送该分组的ack,如果序号恰好等于rev_base则将以前缓存的和rev_base连续序号的分组一起提交到上一层,然后窗口可以右移接收更多的数据序号在[rev_base -N, rev_base-1]内的分组被收到,也必须发送一个ACK,不然发送方的滑动窗口无法向右移动
TCP 选择确认(Selective acknowledgment)
发送方
仅需维护已经发送过但未被确认的字节的最小序号SendBase和下一个要发送的字节序号NextSeqNum,这和GBN一样采用累积确认只有一个定时器,但超时只重传序号为SendBase的分组,在收到ack定时器重新刷新用来记录后一个分组的超时采用快速重传,即判断分组比特错误被丢弃或者丢包(路由器排队缓存已满丢弃数据包)的依据不再只有超时,还有冗余ACK,在接收方接到乱序报文时会发送最近一个正序收到的报文的ACK,即冗余ACK,当收到3个冗余ACK时(说明有3个冗余报文被接收方接收),会直接重传SendBase序号分组
接收方
维护一个乱序分组缓冲区和rev_base,不丢弃失序报文,这和SR一样收到乱序报文,会发送最近一个正序收到的报文的ACK
参考
《计算机网络 自顶向下方法》
评论列表(0条)