#传输 #协议 #网络

utp

一个使用 Rust 实现的 µTP(Micro/uTorrent 传输库)库

23 个版本

使用旧的 Rust 2015

0.7.0 2017 年 5 月 7 日
0.6.3 2015 年 10 月 23 日
0.6.1 2015 年 8 月 24 日
0.6.0 2015 年 6 月 13 日
0.1.0 2014 年 11 月 20 日

173#传输

每月 31 次下载

MIT/Apache

140KB
2.5K SLoC

rust-utp

Crate Version Build Status Windows Build Status codecov Dependency Status

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

API 文档

概述

µTP 是在 UDP 之上构建的可靠传输协议。其拥塞控制算法为 LEDBAT,它试图尽可能多地使用未使用的带宽,但会及时让出给竞争流,这使得它在不会引入网络拥塞的情况下非常适合大规模传输。

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

用法

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

[dependencies]
utp = "*"

然后,在您的 crate 根目录或需要的地方导入它

extern crate utp;

示例

最简单的示例程序将是

extern crate utp;

use utp::UtpStream;
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 = UtpStream::connect(addr).expect("Error connecting to remote peer");

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

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

查看 "examples" 目录下的其他示例程序,或使用 cargo run --example <example_name> 运行它们。

路线图

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

许可证

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

有关详细信息,请参阅 LICENSE-APACHE、LICENSE-MIT 和 COPYRIGHT。

依赖关系

~5.5MB
~111K SLoC