Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

引言

1. 项目概述

本项目旨在基于 Tokio 的异步 UdpSocket,从零开始实现一个高性能、支持并发连接的可靠UDP传输协议库。

核心目标 (Core Goal): 为高丢包、高延迟、网络抖动等不稳定网络环境提供一个健壮、可靠的传输层解决方案。协议在设计上优先保证数据的可靠到达,其次才是吞吐量,力求在极差的网络条件下也能维持稳定通信。

2. 核心设计理念

为实现上述目标,整个协议库遵循以下核心设计原则:

  1. 极致异步与无锁化 (Async-first & Lock-free):

    • 所有I/O操作和内部状态管理均采用完全异步的设计。
    • 严格禁止使用任何形式的阻塞锁,通过 tokio::sync::mpsc 消息传递和原子操作来管理并发,确保每个连接的状态由独立的异步任务拥有,从而实现无锁化,根除死锁风险。
  2. 为极差网络环境优化 (Optimized for Unreliable Networks):

    • 基于延迟的拥塞控制: 采用类似 Vegas 的算法,通过监测 RTT (往返时间) 的变化来判断网络拥塞,而非依赖于丢包。这使得协议能更早地对拥塞做出反应,避免在无线等高丢包但未必拥塞的网络中错误地降低吞吐量。
    • 高效的确认与重传: 采用 SACK (选择性确认) 机制,一次性告知对端多个非连续数据块的接收情况,极大提升了确认效率,并结合快速重传机制,精确重传真正丢失的数据包。
  3. 清晰的架构与代码 (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用法,旨在帮助您:

  • 快速上手,将协议集成到您的项目中。
  • 深入理解协议的工作原理和内部机制。
  • 在遇到问题时,能有据可查,快速定位。

我们建议您从感兴趣的特性章节开始阅读。