ARQ协议中重复帧的处理方法
在 自动重传请求(ARQ, Automatic Repeat Request) 协议中,由于确认(ACK)丢失或超时重传,接收方可能会收到重复的数据帧。以下是处理重复帧的常见方法:
1. 为什么会出现重复帧?
- ACK丢失:发送方未收到确认,超时后重传,但接收方实际上已成功接收。
- 延迟ACK:ACK在网络中延迟,发送方误认为丢失而重传。
- 帧序号回绕:在滑动窗口协议中,如果序号空间太小,可能导致旧序号被误认为新数据。
2. 如何处理重复帧?
(1)序号(Sequence Number)机制
- 每个数据帧携带唯一序号(如1-bit序号或更大的窗口序号)。
- 接收方检查序号:
- 如果是新帧(序号未见过)→ 接收并发送ACK。
- 如果是重复帧(序号已接收过)→ 丢弃,但仍发送ACK(避免发送方无限重传)。
示例(1-bit 序号,如停等ARQ)
- 发送方发送帧
seq=0
,接收方ACK。 - 如果ACK丢失,发送方超时重传
seq=0
。 - 接收方发现
seq=0
已接收过,丢弃并重新发送ACK。
(2)缓存+去重(如滑动窗口ARQ)
- 接收方维护接收窗口,记录已正确接收的帧。
- 如果收到重复帧(序号在窗口内且已接收),直接丢弃,但仍发送ACK(确保发送方继续推进窗口)。
示例(Go-Back-N ARQ)
- 发送方窗口
[0,1,2,3]
,发送0,1,2,3
。 - 假设
1
丢失,接收方仅接收0,2,3
(丢弃失序帧)。 - 发送方超时后重传
1,2,3
。 - 接收方发现
2,3
是重复帧,丢弃,但仍ACK1
以推进窗口。
(3)选择性重传ARQ(Selective Repeat ARQ)
- 接收方缓存失序帧,仅重传丢失的帧。
- 重复帧直接丢弃,但发送ACK避免发送方等待。
示例
- 发送方发送
0,1,2,3
,1
丢失。 - 接收方缓存
0,2,3
,发送ACK0, NAK1, ACK2, ACK3
。 - 发送方仅重传
1
,接收方组合完整数据。
3. 关键点总结
方法 | 处理重复帧的方式 | 适用场景 |
---|---|---|
停等ARQ | 丢弃重复帧,重发ACK | 简单低效率场景 |
Go-Back-N ARQ | 丢弃所有后续帧,要求重传丢失帧后的所有数据 | 中等效率,易实现 |
Selective Repeat ARQ | 缓存正确帧,仅重传丢失帧 | 高效,但复杂 |
4. 实际应用建议
- 使用足够大的序号空间(如16-bit),避免序号回绕导致混淆。
- 接收方应持续发送ACK,即使收到重复帧,避免发送方死锁。
- 结合超时+快速重传(如TCP的SACK机制)提高效率。
通过合理的序号管理和重传策略,ARQ协议可以有效处理重复帧,确保可靠数据传输。