什么是ARQ协议
部分内容来源:JavaGuide
什么是ARQ协议
自动重传请求-Automatic Repeat-reQuest,ARQ协议
是 OSI 模型中数据链路层和传输层的错误纠正协议之一
它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输
如果发送方在发送后一段时间之内没有收到确认信息(Acknowledgements,就是我们常说的 ACK)
它通常会重新发送,直到收到确认或者重试超过一定的次数
ARQ 包括停止等待 ARQ 协议和连续 ARQ 协议
停止等待ARQ协议
停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认
-即等待对方回复ACK
如果过超时时间),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组
在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认
无差错情况
发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送
出现差错情况(超时重传)
停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)
因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些
这种自动重传方式常称为 自动重传请求-ARQ
另外在停止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认
确认丢失和确认迟到
确认丢失:确认消息在传输过程丢失。当 A 发送 M1 消息,B 收到后,B 向 A 发送了一个 M1 确认消息,但却在传输过程中丢失
而 A 并不知道,在超时计时过后,A 重传 M1 消息
B 再次收到该消息后采取以下两点措施:
- 丢弃这个重复的 M1 消息,不向上层交付
- 向 A 发送确认消息(不会认为已经发送过了,就不再发送。A能重传,就证明B的ack丢失)
确认迟到:确认消息在传输过程中迟到。A 发送 M1 消息,B 收到并发送确认
在超时时间内没有收到确认消息,A 重传 M1 消息,B 仍然收到并继续发送确认消息(B 收到了 2 份 M1)
此时 A 收到了 B 第二次发送的确认消息。接着发送其他数据
过了一会,A 收到了 B 第一次发送的对 M1 的确认消息(A 也收到了 2 份确认消息)
处理如下:
- A 收到重复的确认后,直接丢弃
- B 收到重复的 M1 后,也直接丢弃重复的 M1
连续ARQ协议
连续 ARQ 协议可提高信道利用率
发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认
接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了
- 优点: 信道利用率高,容易实现,即使确认丢失,也不必重传
- 缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5 条 消息,中间第三条丢失(3 号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息
ARQ协议-简单总结
ARQ(自动重传请求)是TCP可靠传输的底层基础机制,但TCP在ARQ的基础上进行了大幅优化和扩展,两者是【基础】与【增强】的关系
ARS可以实现累计确认,超时重传,确认丢失,确认重传
TCP的底层对ARQ协议进行了改进
TCP在ARQ基础上引入了关键优化,使其适应复杂网络环境:
ARQ的原始缺陷 | TCP的解决方案 | 优化效果 |
Go-Back-N效率低 | 引入选择性确认(SACK) + 快速重传,仅重传丢失包 | 避免无效重传,提升带宽利用率 |
固定超时时间不灵活 | 动态计算RTO(超时时间),基于RTT(往返时间)自适应调整 | 减少不必要的等待时间 |
无拥塞控制 | 集成慢启动、拥塞避免、快速恢复等算法 | 防止网络过载,公平共享带宽 |