如何在不可靠协议上构建可靠通信:重传、确认与顺序
副标题 / 摘要 不可靠协议上构建可靠通信的核心是:确认、超时、重传与顺序控制。本文给出工程要点与简化实现示例。 目标读者 需要理解可靠传输机制的后端工程师 设计自定义协议的开发者 对网络底层原理有兴趣的同学 背景 / 动机 UDP 等不可靠协议不保证送达、不保证顺序。 但许多业务需要可靠性:日志上报、订单同步、状态更新等。 因此需要在应用层补齐可靠性能力。 核心概念 ACK 确认:接收方回执 超时重传:超时未确认就重发 序列号:保证顺序与去重 窗口机制:提升吞吐(Stop-and-Wait / Sliding Window) 实践指南 / 步骤 每个消息加序列号 接收端发送 ACK 发送端设置超时重传 去重与乱序处理 必要时加入滑动窗口 可运行示例 下面用“丢包概率 + 重试”模拟可靠发送: import random import time def unreliable_send(loss_rate: float) -> bool: return random.random() > loss_rate def send_reliable(data: str, loss_rate=0.3, timeout=0.1, max_retry=10): for attempt in range(1, max_retry + 1): ok = unreliable_send(loss_rate) if ok: return attempt time.sleep(timeout) return None if __name__ == "__main__": tries = send_reliable("hello", loss_rate=0.4) print("delivered after", tries, "tries") 解释与原理 可靠传输的本质是“在不可靠通道上建立协议保障”。 ACK 表示已收到,超时重传保证最终送达,序列号避免重复与乱序。 ...