本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. 自动重传请求 ARQ
ARQ 协议是 OSI 模型中数据链路层和传输层的错误纠正协议之一。通过确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,通常会重新发送。
ARQ 协议是 TCP 协议保证可靠性的其中一种机制。
ARQ 包括停止等待 ARQ 协议和连续 ARQ 协议。相比较来说,连续 ARQ 协议可提高信道利用率。
2. 停止等待 ARQ 协议
停止等待 ARQ 协议,每发完一个分组就停止发送,等待对方确认(回复 ACK)。如果过了一段时间(设置的超时时间到达后),还是没有收到对方的 ACK 确认,发送方会认为刚才的数据分组没有发送成功,需要重新发送,所以会重新发送刚才的分组,直到发送方收到确认后再发送下一个分组。
在数据传输过程中会发生的出错情况:
-
超时:发送方等了一定的时间后还没有收到接收方的确认消息(
ACK) -
确认丢失:接收方没有发送确认消息(
ACK)或者在途中丢失了,发送方没有收到 -
确认迟到:接收方发送了确认消息(
ACK),但是发送方在超时重发数据之后收到了确认消息(ACK)。
发送方收到重复的消息和确认,处理方式是丢弃。
3. 连续 ARQ 协议
连续 ARQ 协议,发送方维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置之前的所有分组都已经正确收到了。
缺点:比如发送方发送了 5 条 消息,中间第三条丢失(3 号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。