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

4.4 可靠传输的工作原理

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!

文章目录

  • 前言
  • 1 停止等待协议
    • 1.1 无差错情况
    • 1.2 出现差错的情况
    • 1.3 解决方案:超时重传
    • 1.4 确认丢失与确认迟到
    • 1.5 信道利用率的瓶颈
  • 2 连续 ARQ 协议
    • 3 Go-Back-N 协议


前言

在现代网络通信中,确保数据传输的可靠性是至关重要的。然而,IP 网络本身并不保证数据传输的可靠性。由于网络中存在数据包丢失、损坏或顺序错乱的情况,必须依赖可靠传输协议来保障数据的正确传输。

1 停止等待协议

理想情况下,网络信道不产生差错,发送方可以按需发送数据,而接收方能够即时处理。
但现实中,网络环境通常并不理想,因此需要通过多种可靠传输协议来应对如丢包、错序、重复传输等问题。

停止等待协议(Stop-and-Wait Protocol)是最基础的可靠传输协议之一,设计简单,确保数据传输可靠性。其基本思想是,发送方每次发送一个数据包后,会暂停,等待接收方确认消息(ACK)才能继续发送下一个数据包。

1.1 无差错情况

在理想情况下,发送方 A 发送数据包 M1 后,暂停发送,等待接收方 B 发送确认消息 ACK。当 A 收到 ACK 后,继续发送下一个数据包 M2。此过程可以通过以下流程图展示:

停止等待协议无差错流程

1.2 出现差错的情况

在网络传输过程中,若发生差错,则可能出现以下两种情况:

  1. B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
  2. M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。

问题:A 如何知道 B 是否正确收到了 M1 呢?
停止等待协议丢包流程

1.3 解决方案:超时重传

为了解决上述情况,发送方 A 为每个数据包设置超时计时器
A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 ;若 A 在超时计时器规定时间内没有收到 B 的确认,则认为分组错误或丢失,重发该分组。
这种超时重传机制确保了数据的可靠传输,但也带来了一些性能上的影响,信道利用率较低。

1.4 确认丢失与确认迟到

  • 确认丢失:如果接收方 B 的确认消息丢失,发送方 A 会超时重传数据包。B 会丢弃重复的 M1,并向 A 发送新的确认。
  • 确认迟到:如果确认消息延迟到达,A 在超时后会重传数据包,尽管 B 已经收到 M1,B 会丢弃重复的包并重新确认。A 收到重复确认时只需忽略它。

在这里插入图片描述

1.5 信道利用率的瓶颈

尽管停止等待协议在确保可靠性方面有效,但它的信道利用率较低。特别是在网络延迟较大时,发送方会因为等待确认而停顿,导致信道的空闲时间较长。
在这里插入图片描述
这使得停止等待协议难以高效利用网络带宽,尤其在高延迟环境中表现明显。

为了解决停止等待协议的低效问题,流水线传输(Pipelining)应运而生。
流水线传输允许发送方在未收到前一个数据包确认的情况下,连续发送多个数据包,从而提高信道的利用率,减少空闲时间。流水线传输的核心思想是让发送方并行发送多个数据包,而不必等待单个数据包的确认

在这里插入图片描述
由于信道上一直有数据不间断地传送,流水线传输拥有很高的信道利用率

2 连续 ARQ 协议

流水线传输可以通过两种主要协议实现:连续 ARQ 协议滑动窗口协议。这两种协议通过不同方式提高信道的利用率,并减少等待确认的时间。

在连续 ARQ 协议中,发送方维护一个发送窗口,可以在窗口内连续发送多个数据包,而无需等待每个数据包的确认。每收到一个确认,发送窗口会向前滑动一个位置。
在这里插入图片描述
接收方采用累积确认机制,确认序列中按序到达的最后一个数据包,从而确认所有前面的数据包都已成功接收。
在这里插入图片描述

  • 优点:简洁易实现,能提高带宽利用率,特别是在网络延迟较高时具有显著优势。
  • 缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。

3 Go-Back-N 协议

Go-Back-N 协议是连续 ARQ 的一种实现方式。在该协议中,发送方可以在不等待确认的情况下连续发送多个数据包。若某个数据包丢失或损坏,接收方会丢弃该数据包及之后所有的数据包,并要求发送方从丢失的包重新发送。

Go-back-N(回退N)表示需要再退回来重传已发送过的 N 个分组。

  • 优点:实现简单,能够有效提高传输效率。
  • 缺点:在丢包率较高的网络环境中,可能导致大量数据的重复传输,影响协议效率。

http://www.kler.cn/a/428924.html

相关文章:

  • 流量分析复现(第十八届信息安全大赛 第二届长城杯 )
  • 如何设置HTTPS站点防御?
  • RabbitMQ基础篇
  • 西门子【Library of Basic Controls (LBC)基本控制库”(LBC) 提供基本控制功能】
  • 【postgres】sqlite格式如何导入postgres数据库
  • RPA赋能内容创作:打造小红书入门词语图片的全自动化流程
  • 自然语言处理的未来愿景
  • 【Nacos03】消息队列与微服务之Nacos 集群部署
  • Android 还在使用LogCat打日志?XLog框架;日志打印到控制台,打印到文件中。
  • ES(elasticsearch)整合Spring boot使用实例
  • C—初阶结构体
  • 第23周:机器学习及文献阅读
  • 【postgresql初级使用】在表的多个频繁使用列上创建一个索引,多条件查询优化,多场景案例揭示索引失效
  • WEB_星河飞雪_Windows(全)
  • HCIA-Access V2.5_2_2网络通信基础_TCP/IP模型结构
  • Unity引擎UI滚动列表——滚动复用基础介绍
  • Javascript Clipper library, v6(介绍目录)
  • 六、隐语PIR功能及使用介绍
  • 漫画之家:基于Spring Boot的漫画社交网络平台
  • C# WPF抽奖程序
  • 如何在UI自动化测试中创建稳定的定位器?
  • 笔记:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景
  • SpringBoot实现前后端传输加密设计
  • php项目的sdk封装成composer包的创建与发版
  • 【光电融合集成电路制造与封测】第四讲:扩散工艺,扩散的类型,恒定表面源扩散,限定表面源扩散,硼扩散
  • 分享一个您在汽车软件安全性测试中发现严重漏洞的案例,以及如何处理