1 个不稳定版本

0.8.0-alpha12021 年 5 月 20 日

#3#utp

MIT/Apache

175KB
4K SLoC

rust-utp

Crate Version Build Status Windows Build Status codecov

一个使用 Rust 实现的异步 Micro 传输协议 库。

API 文档

概述

Micro 传输协议是在 UDP 上构建的可靠传输协议。它的拥塞控制算法是 LEDBAT,它试图尽可能多地使用未使用的带宽,但会迅速向竞争流量让步,这使得它在不会在网络上引入拥塞的情况下适用于大量传输。

当前的实现尚不完整,缺乏完整的拥塞控制实现。然而,它支持丢包检测(除了超时之外),选择性确认扩展,处理无序和重复的包,并提供了流接口(UtpStream)。

稳定性

此 crate 是实验性的,并且包含许多错误。我们强烈建议不要在生产环境中使用它。欢迎贡献和修复 :)

用法

要使用 tokio-utp,请将以下内容添加到您的 Cargo.toml

[dependencies]
async-utp = "*"

示例

最简单的示例程序将是

use async_utp::UtpStream;
use tokio::task;
use std::io::Write;

fn main() {
    // Connect to an hypothetical local server running on port 8080
    let addr = "127.0.0.1:8080";
    let (mut stream, driver) = UtpStream::connect(addr).await.expect("Error connecting to remote peer");
    
    task::spawn(driver);

    // Send a string
    stream.write("Hi there!".as_bytes()).await.expect("Write failed");

    // Close the stream
    stream.close().await.expect("Error closing connection");
}

查看 "examples" 目录下的文件以获取更多示例程序,或使用以下命令运行它们:cargo run --example <example_name>.

路线图

  • 拥塞控制
  • 正确关闭连接
    • 处理 RST 和 FIN
    • 在关闭时发送 FIN
    • 如果尚未关闭,则在 drop 时自动发送 FIN
  • 在不匹配时发送 RST
  • 设置器和获取器隐藏头字段端序转换
  • SACK 扩展
  • 处理丢包
    • 发送三次确认以重新请求丢失的包(快速重传请求)
    • 在收到三次确认后回退发送窗口并重发(快速重传)
    • 在确认超时时重发包
  • 流接口
  • 处理无序包
  • 处理重复包
  • 监听器抽象
  • 传入连接迭代器
  • 在重传次数过多后超时连接
  • 路径 MTU 发现

许可

此库根据 Rust 的类似条款分发:双重许可,MIT 许可证和 Apache 许可证(版本 2.0)。

请参阅 LICENSE-APACHE、LICENSE-MIT 和 COPYRIGHT 以获取详细信息。

依赖项

约 4-13MB
~134K SLoC