当前位置: 首页 > news >正文

什么是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 再次收到该消息后采取以下两点措施:

  1. 丢弃这个重复的 M1 消息,不向上层交付
  2. 向 A 发送确认消息(不会认为已经发送过了,就不再发送。A能重传,就证明B的ack丢失)

确认迟到:确认消息在传输过程中迟到。A 发送 M1 消息,B 收到并发送确认
在超时时间内没有收到确认消息,A 重传 M1 消息,B 仍然收到并继续发送确认消息(B 收到了 2 份 M1)
此时 A 收到了 B 第二次发送的确认消息。接着发送其他数据
过了一会,A 收到了 B 第一次发送的对 M1 的确认消息(A 也收到了 2 份确认消息)
处理如下:

  1. A 收到重复的确认后,直接丢弃
  2. 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(往返时间)自适应调整

减少不必要的等待时间

无拥塞控制

集成慢启动、拥塞避免、快速恢复等算法

防止网络过载,公平共享带宽

http://www.lryc.cn/news/597463.html

相关文章:

  • 如何最简单、通俗地理解Python的numpy库?
  • C语言习题讲解-第五讲-循环编程练习等
  • Excel——设置打印的区域
  • CSS3文本阴影特效全攻略
  • 运营端账号管理设计指南:安全与效率的双重保障
  • 牛油果褐变的成因与食用安全
  • ElasticSearch基础数据管理详解
  • 同一个端口无法同时配置基于 server_name 的 HTTP(非加密)和 HTTPS(加密)
  • 数据科学与大数据技术和统计学有什么区别?​
  • [IMX][UBoot] 17.Linux 根文件系统
  • Elasticsearch Circuit Breaker 全面解析与最佳实践
  • MCU驱动AD5231BRUZ_10K
  • 【Elasticsearch】跨集群检索(Cross-Cluster Search)
  • 83、设置有人DTU设备USR-M100采集传感器数据,然后上传阿里云服务
  • now能减少mysql的压力吗
  • 旅游管理虚拟仿真实训室:重构实践教学新生态
  • 【数据库】国产数据库的新机遇:电科金仓以融合技术同步全球竞争
  • 云蝠智能 Voice Agent:重构企业语音交互,引领 AI 服务新范式
  • QGraphicsScene导出为PDF
  • SQL Server 数据类型的含义、特点及常见使用场景的详细说明
  • 【轨物洞见】光伏逆变器数据:分布式电站价值回归的“第一块多米诺骨牌”
  • Pycharm2025 安装教程 免费分享 没任何套路
  • PyCharm高效进阶指南:掌握专业开发技巧与最佳实践
  • Spring DeferredResult 实现长轮询
  • [HarmonyOS] HarmonyOS LiteOS-A 设备开发全流程指南
  • 清华大学层次化空间记忆助力具身导航!Mem4Nav:基于层次化空间认知长短期记忆系统的城市环境视觉语言导航
  • 本地部署 Stable Diffusion:零基础搭建 AI文生图模型
  • 仓颉兴趣组优秀项目-Ginger
  • CPU,减少晶体管翻转次数的编码
  • opencv学习(视频读取)