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 是重复帧,丢弃,但仍ACK 1 以推进窗口。

(3)选择性重传ARQ(Selective Repeat ARQ)

  • 接收方缓存失序帧,仅重传丢失的帧。
  • 重复帧直接丢弃,但发送ACK避免发送方等待。

示例

  • 发送方发送 0,1,2,31 丢失。
  • 接收方缓存 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协议可以有效处理重复帧,确保可靠数据传输。