ARQ自动重传详解

ARQ简介

ARQ称为Automatic Repeat Request,叫做自动重传

ARQ是TCP实现可靠传输的重要协议。

自动重传的两个触发条件
1、定时器倒计时结束还未收到ack包。
2、连续收到三个相同的ack包。

ARQ分类
ARQ有以下三种实现,分别对于滑动窗口的三种状态:
1、停止-等待协议
发送窗口大小 = 1 ,接收窗口大小 = 1

发送方每发送一个数据包,就要等待接收方返回ack包。如果在定时器内没有收到ack包,就重新发送数据包。

在这里插入图片描述

在这里插入图片描述

缺点: 发送效率慢,串行发送

2、回退N步协议

发送窗口大小 n > 1,接收窗口 = 1

发送方最多可以连续发送n个数据包,不必等待接收方的ack包。

接收窗口必须按照顺序来接收数据包,如果接收到无序数据包的时候,会发送当前最小的有序数据包的序列号+1作为ack回应包。

接收窗口采用累计确认的方式来发送ack包。

进一步加快了发送效率

在这里插入图片描述

从上图就可以看出,当接收到重复的ack包的时候,发送方会重传将所有大于ack包的处于发送窗口中的数据包重传,这就是回退N步。

缺点:每次都要重新传送N个数据包,造成冗余。

3、选择重传协议

发送窗口大小 > 1,接收窗口大小 > 1

在这里插入图片描述
相较于回退n步协议,选择重选只会重传那些丢失和顺坏的数据包。

比如上面的图片中的接收窗口,200~299的数据包丢失了

ack是无法满足选择重传的要求的,接收窗口发送一个ack = 200的ack包,只能通知发送端 序列号小于200的数据包都已经被接收了。当过了超时时间的时候,发送窗口 会将大于200的所有数据包都重新发送。

ack无法满足选择重传的要求,所以引入了sack (Selective Acknowledgement)

SACK存储在TCP头部中的选项字段中,选项是一个可变长度。
在这里插入图片描述

下面是具体例子:
在这里插入图片描述

如上图所示,SACK会将接收窗口中的缓存信息发送给发送端,让发送端只重传丢失的数据。

选择重传的时候,接收窗口可以无序的接收数据包。

总结

方法窗口大小是否有序接收做法
停止-等待协议发送:接收=1:1有序发送窗口每次只能发送一个数据包,然后就停止等待ack包。接收窗口有序的接收数据包,接收成功后发送ack包给发送窗口,如果收到的数据包是无序的,就直接丢弃
后退N步协议发送:接收=N:1有序发送窗口每次最多一次性发送n个数据包,接收窗口有序的接收数据包,当接收到有序的数据包后,发送ack包给发送窗口,如果收到的数据包时无序的,就直接丢弃。当数据包丢失的时候,会将发送窗口中的后面的所有数据包都重新发送
选择重传协议发送:接收=N:N无序发送窗口每次最多一次性发送n个数据包,接收窗口无序的接收数据包,当接收到数据包后,发送ack包给发送窗口,ack中会携带SACK信息,也就是接收窗口中的缓存信息。发送端会根据SACK信息来只重传丢失的数据包
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值