引言
1. 项目概述
本项目旨在基于 Tokio 的异步 UdpSocket
,从零开始实现一个高性能、支持并发连接的可靠UDP传输协议库。
核心目标 (Core Goal): 为高丢包、高延迟、网络抖动等不稳定网络环境提供一个健壮、可靠的传输层解决方案。协议在设计上优先保证数据的可靠到达,其次才是吞吐量,力求在极差的网络条件下也能维持稳定通信。
2. 核心设计理念
为实现上述目标,整个协议库遵循以下核心设计原则:
-
极致异步与无锁化 (Async-first & Lock-free):
- 所有I/O操作和内部状态管理均采用完全异步的设计。
- 严格禁止使用任何形式的阻塞锁,通过
tokio::sync::mpsc
消息传递和原子操作来管理并发,确保每个连接的状态由独立的异步任务拥有,从而实现无锁化,根除死锁风险。
-
为极差网络环境优化 (Optimized for Unreliable Networks):
- 基于延迟的拥塞控制: 采用类似 Vegas 的算法,通过监测 RTT (往返时间) 的变化来判断网络拥塞,而非依赖于丢包。这使得协议能更早地对拥塞做出反应,避免在无线等高丢包但未必拥塞的网络中错误地降低吞吐量。
- 高效的确认与重传: 采用 SACK (选择性确认) 机制,一次性告知对端多个非连续数据块的接收情况,极大提升了确认效率,并结合快速重传机制,精确重传真正丢失的数据包。
-
清晰的架构与代码 (Clarity in Architecture & Code):
- 分层设计: 协议栈被清晰地解耦为
Endpoint
(端点层),ReliabilityLayer
(可靠性层), 和CongestionControl
(拥塞控制层),使得逻辑单元高度内聚,易于维护和扩展。 - 完备的文档: 所有公开 API 均提供详细的文档注释,关键与复杂逻辑也配有清晰的实现注释。
- 分层设计: 协议栈被清晰地解耦为
3. 关键特性一览
本协议当前已实现以下关键特性:
- 清晰的协议分层:
Endpoint
,ReliabilityLayer
,CongestionControl
Trait。 - 0-RTT 连接建立: 客户端首个包即可携带数据,实现快速连接。
- 可靠的四次挥手: 确保连接在关闭时所有数据都被确认,防止数据丢失。
- 基于SACK的高效确认机制: 减少ACK包数量,提升确认信息的效率。
- 动态RTO与快速重传: 高效地从丢包中恢复。
- 滑动窗口流量控制: 防止发送方压垮接收方。
- 基于延迟的拥塞控制 (Vegas): 为不稳定网络环境优化,表现更稳定。
- 基于MPSC的无锁并发模型: 安全、高效地管理上千个并发连接。
- 连接迁移 (Connection Migration): 支持客户端在网络切换(如 Wi-Fi/4G 切换)后保持连接不中断,有效应对NAT设备地址变化。
- 面向用户的流式API (
AsyncRead
/AsyncWrite
): 提供与TcpStream
类似的易用接口。 - 统一的配置系统: 通过
Config
结构体可对协议的各项参数进行统一配置。 - 结构化日志: 基于
tracing
的日志系统,便于调试和监控。
4. 本文档的目的
本系列文档是理解和使用该协议库的官方指南。它既面向希望在自己应用中集成此协议的 使用者,也面向希望参与贡献的 开发者。
文档详细介绍了协议的各项功能、设计决策、实现细节和API用法,旨在帮助您:
- 快速上手,将协议集成到您的项目中。
- 深入理解协议的工作原理和内部机制。
- 在遇到问题时,能有据可查,快速定位。
我们建议您从感兴趣的特性章节开始阅读。