欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!
文章目录
- 前言
- [1 停止等待协议](#1 停止等待协议)
-
- [1.1 无差错情况](#1.1 无差错情况)
- [1.2 出现差错的情况](#1.2 出现差错的情况)
- [1.3 解决方案:超时重传](#1.3 解决方案:超时重传)
- [1.4 确认丢失与确认迟到](#1.4 确认丢失与确认迟到)
- [1.5 信道利用率的瓶颈](#1.5 信道利用率的瓶颈)
- [2 连续 ARQ 协议](#2 连续 ARQ 协议)
-
- [3 Go-Back-N 协议](#3 Go-Back-N 协议)
前言
在现代网络通信中,确保数据传输的可靠性是至关重要的。然而,IP 网络本身并不保证数据传输的可靠性。由于网络中存在数据包丢失、损坏或顺序错乱的情况,必须依赖可靠传输协议来保障数据的正确传输。
1 停止等待协议
理想情况下,网络信道不产生差错,发送方可以按需发送数据,而接收方能够即时处理。
但现实中,网络环境通常并不理想,因此需要通过多种可靠传输协议来应对如丢包、错序、重复传输等问题。
停止等待协议(Stop-and-Wait Protocol)是最基础的可靠传输协议之一,设计简单,确保数据传输可靠性。其基本思想是,发送方每次发送一个数据包后,会暂停,等待接收方确认消息(ACK)才能继续发送下一个数据包。
1.1 无差错情况
在理想情况下,发送方 A 发送数据包 M1 后,暂停发送,等待接收方 B 发送确认消息 ACK。当 A 收到 ACK 后,继续发送下一个数据包 M2。此过程可以通过以下流程图展示:
1.2 出现差错的情况
在网络传输过程中,若发生差错,则可能出现以下两种情况:
- B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
- 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 个分组。
- 优点:实现简单,能够有效提高传输效率。
- 缺点:在丢包率较高的网络环境中,可能导致大量数据的重复传输,影响协议效率。