1 个不稳定版本
0.8.0-alpha1 | 2021 年 5 月 20 日 |
---|
#3 在 #utp
175KB
4K SLoC
rust-utp
一个使用 Rust 实现的异步 Micro 传输协议 库。
概述
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