26个版本

使用旧的Rust 2015

0.8.1 2016年4月8日
0.8.0 2016年2月24日
0.7.2 2016年2月19日
0.7.0 2015年12月28日
0.6.21 2015年11月20日

#8 in #utp

MIT/Apache

160KB
3K SLoC

rust-utp

Crate Version Build Status Windows Build Status Coverage Status

使用Rust实现的微传输协议库。

API文档

概述

微传输协议是一种在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
~102K SLoC