# Ditto **Repository Path**: LYRbbding/Ditto ## Basic Information - **Project Name**: Ditto - **Description**: Ditto 是一种基于用户需求感知的网络拥塞控制机制,旨在突破传统拥塞控制算法仅依据网络状态(如带宽、RTT、丢包率)进行调节的局限,通过显式建模用户对不同传输性能指标的偏好,实现更加灵活、个性化的传输控制。 - **Primary Language**: C - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2026-01-15 - **Last Updated**: 2026-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ditto:基于用户需求感知的拥塞控制机制 ## 📌 项目简介 **Ditto** 是一种**基于用户需求感知的网络拥塞控制机制**,旨在突破传统拥塞控制算法仅依据网络状态(如带宽、RTT、丢包率)进行调节的局限,通过显式建模用户对不同传输性能指标的偏好,实现更加灵活、个性化的传输控制。 Ditto 的核心思想是: > 在传输层感知网络状态的同时,引入用户需求信息,动态调整拥塞控制策略,在吞吐量、时延等指标之间实现按需权衡。 本项目基于 **QUIC 协议栈 XQUIC**,并在 **Tengine + ngx_http_xquic_module** 上完成工程实现,支持在真实网络环境下进行 HTTP/3 服务部署与实验评估。 ------ ## 🧩 代码组成 本项目围绕 **Ditto 拥塞控制机制** 的实现与验证,整体代码主要由 **Tengine、XQUIC 以及测试客户端** 组成,并依赖若干基础库完成加密、配置与实验支撑。 #### 📁 代码主要目录结构 ``` Ditto/ ├── tengine/ # Web 服务器(HTTP/3 服务端) ├── xquic/ # QUIC 协议栈(Ditto 核心实现) ├── testclient/ # 实验用客户端程序 ├── start-1.6.0.sh/ # 编译与测试脚本 └── README.md ``` #### 关键组件说明 - **xQUIC** Alibaba 开源的 QUIC 协议实现,作为 Ditto 的传输层基础。 - **Tengine + ngx_http_xquic_module** 用于在服务端启用 HTTP/3 服务,并将 Ditto 拥塞控制机制集成至实际部署环境。 - **Ditto 拥塞控制逻辑** 集成于 Tengine 的 QUIC 相关模块中,通过修改并重新编译 Tengine 生效。 #### 🚀 XQUIC(核心修改模块) **XQUIC** 是阿里巴巴开源的、遵循 IETF 标准的 QUIC / HTTP3 协议实现,支持 QUIC v1 和 draft-29,是 Ditto 拥塞控制机制的**核心实现载体**。 仓库地址:https://github.com/alibaba/xquic ##### XQUIC 目录说明 - **build/** 编译过程中生成的构建目录。 - **demo/** 提供测试用的服务端与客户端示例,以及部分 HTTP/3 连接相关源码,本项目未对该部分进行修改。 - **docs/** 包含编译与测试说明文档,其中 `API.md` 记录了 XQUIC 的主要接口,便于快速理解与二次开发。 - **include/** XQUIC 对外暴露的基础接口与结构体定义。 - **interop/** QUIC 互操作测试相关内容,与本项目无直接关联。 - **scripts/** XQUIC 自带的测试脚本,用于基础功能验证。 - **src/** (**主要修改位置**) XQUIC 的核心源码目录,Ditto 的主要实现集中于此,具体包括: - `transport/conn.c` - `transport/send_ctl.c` Ditto 在该部分实现了新的发送控制逻辑,其中: - `active_retrans` 与 `CCA_info` 为 Ditto 拥塞控制的核心实现 - `extra_sample` 提供了 Ditto 中**拥塞控制切换机制**的示例实现 - **tests/** 简单功能测试用例,该部分流量规模有限,**不适用于带宽占满型实验场景**。 - **third_party/** XQUIC 依赖的第三方库,包括 Tongsuo 和 libxml2 等。 ------ #### 🌐 Tengine(HTTP/3 服务端) **Tengine** 是本项目用于部署 HTTP/3 服务的 Web 服务器框架,通过集成 `ngx_http_xquic_module`,实现对 QUIC / HTTP3 的支持。 在 Ditto 中: - 仅对 **Tengine 源码中的 QUIC 相关模块**进行了修改 - Ditto 的拥塞控制逻辑通过 xQUIC 生效 - 修改完成后需 **重新编译 Tengine 并生成 `tengine-install` 目录** 用于部署 主要修改位置: ``` tengine/ └── modules/ └── ngx_http_xquic_module/ └── ngx_xquic.c ``` ------ #### 🧪 testclient(实验客户端) `testclient` 用于配合服务端进行实验验证,支持: - 建立 QUIC / HTTP3 连接 - 触发不同网络与拥塞控制场景 - 收集实验所需的性能指标数据 该模块主要用于论文实验与机制验证,不作为通用客户端发布。 ------ #### 📌 说明 - 本项目 **不直接修改系统环境**,所有功能通过重新编译 Tengine 与 xQUIC 生效 - Ditto 的实现重点位于 **XQUIC 的发送与拥塞控制路径** - 代码结构以科研实验复现为目标进行组织 ------ ## 🚀 代码运行与部署 > ⚠️ 本项目仅对 **Tengine 源码** 进行了修改,部署方式为: > **修改源码 → 重新编译 Tengine → 使用生成的 tengine-install 运行** ### 1️⃣ 编译环境依赖 - **Tongsuo(Babassl)** 用于 QUIC 所需的加密支持 https://github.com/Tongsuo-Project/Tongsuo - **XQUIC** QUIC 协议实现 https://github.com/alibaba/xquic - **Tengine(≥ 3.0.0)** Web 服务器框架 https://github.com/alibaba/tengine ------ ### 2️⃣ 编译流程概述 #### (1)编译 Tongsuo ```bash ./config --prefix=/home/qnwang/worknew/babassl make make install ``` #### (2)编译 XQUIC ```bash cmake \ -DXQC_SUPPORT_SENDMMSG_BUILD=1 \ -DXQC_ENABLE_BBR2=1 \ -DXQC_ENABLE_RENO=1 \ -DSSL_TYPE=babassl \ -DSSL_PATH=... \ -DSSL_INC_PATH=... \ -DSSL_LIB_PATH=... \ -DCMAKE_BUILD_TYPE=Debug \ -DXQC_ENABLE_EVENT_LOG=1 make -j ``` > 若使用 XQUIC ≥ 1.6.2,需额外添加: > `-DXQC_NO_PID_PACKET_PROCESS=1` ------ #### (3)编译 Tengine(集成 Ditto) ```bash ./configure \ --with-xquic-inc="../xquic/include" \ --with-xquic-lib="../xquic/build" \ --with-http_v2_module \ --add-module=modules/ngx_http_xquic_module \ --with-openssl="../Tongsuo" make make install ``` ------ ### 3️⃣ 部署与运行 - 将以下目录整体移动到目标服务器(路径需保持一致): - `tengine-install` - `xquic` - `babassl` ```bash rsync -av tengine-install user@server:/home/xxx/ ``` - 启动服务: ```bash cd tengine-install/sbin ./tengine ``` ------ ### 4️⃣ HTTP/3 验证 - 浏览器访问: ``` https://:8443/ ``` - 查看响应头: ``` Alt-Svc: h3=":8443" ``` - 使用 Wireshark 抓包确认: ``` (quic || http3) ``` ------ ## ⚙️ 拥塞控制配置说明 - 支持的拥塞控制算法: - **BBR** - **CUBIC** - **COPA(需额外修改源码)** ### COPA 支持说明 默认配置下 COPA 无法直接启用,需要在: - `ngx_xquic.c` 中补充 COPA 接口 - 并在 `xquic.h` 中声明 `xqc_copa_cb` 修改完成后,重新编译 Tengine 即可生效。 ------ ## 👥 贡献者 - **王清楠** 西安交通大学 研究方向:拥塞控制 / QUIC / 用户需求感知传输机制 联系方式:wangqingnan@stu.xjtu.edu.cn 欢迎对本项目感兴趣的研究者和工程实践者交流与合作。