24个版本

0.11.3 2024年8月4日
0.11.2 2024年6月7日
0.11.1 2024年5月24日
0.10.2 2023年8月2日
0.1.0 2018年10月2日

9 / 网络编程

Download history 142004/week @ 2024-05-03 155056/week @ 2024-05-10 136228/week @ 2024-05-17 141160/week @ 2024-05-24 139385/week @ 2024-05-31 139577/week @ 2024-06-07 200632/week @ 2024-06-14 264172/week @ 2024-06-21 315515/week @ 2024-06-28 357376/week @ 2024-07-05 388846/week @ 2024-07-12 410495/week @ 2024-07-19 441466/week @ 2024-07-26 475047/week @ 2024-08-02 516892/week @ 2024-08-09 488261/week @ 2024-08-16

每月2,005,495次下载
865个crates中使用 (140直接使用)

MIT/Apache

1MB
25K SLoC

Documentation Crates.io Build status codecov Chat Chat License: MIT License: Apache 2.0

Quinn是IETF QUIC传输协议的纯Rust、异步兼容实现。该项目由Dirkjan OchtmanBenjamin Saunders于2018年作为副项目发起,此后已发布超过30个版本。如果您在商业环境中使用Quinn,请考虑赞助该项目。

功能

  • 同时支持客户端/服务器操作
  • 有序和无序流读取,以提升性能
  • 在稳定版Rust上运行,已在Linux、macOS和Windows上测试
  • 插件式加密,标准实现由rustlsring支持
  • 适用于小型、不可靠消息的应用层数据报
  • 基于future的异步API
  • 最低支持的Rust版本为1.66

概述

  • quinn: 基于tokio的高级异步API,请参阅示例了解使用方法。这将是大多数开发人员将使用的。 (包含基本基准测试。)
  • quinn-proto: 协议的确定性状态机,内部不执行I/O,适合与自定义事件循环(以及可能的C或C++ API)一起使用。
  • quinn-udp: 为协议优化的具有ECN信息的UDP套接字。
  • bench: 无框架的基准测试。
  • fuzz: Fuzz测试。

入门指南

示例

$ cargo run --example server ./
$ cargo run --example client https://localhost:4433/Cargo.toml

此操作在回环地址上启动一个HTTP 0.9服务器,并服务于当前工作目录。客户端将检索 ./Cargo.toml。默认情况下,服务器生成一个自签名的证书并将其存储到磁盘上,客户端将自动找到并信任它。

链接

使用说明

点击显示说明

缓冲区

Quinn端点对应于单个UDP套接字,无论使用多少个连接。在单个端点上处理高聚合数据速率可能需要比大多数环境中默认配置的更大的UDP缓冲区。如果您在稳定的网络链路上观察到不规则的延迟和/或吞吐量,请考虑增加使用的缓冲区大小。例如,您可以通过调整UDP套接字的 SO_SNDBUFSO_RCVBUF 选项来在传递给Quinn之前使用它。请注意,某些平台(例如Linux)要求提高进程的权限或修改系统配置才能增加其UDP缓冲区大小。

证书

默认情况下,Quinn客户端验证它们连接到的服务器的加密身份。这阻止了路径上的主动攻击者拦截消息,但需要信任某些证书颁发机构。对于许多用途,这可以通过使用服务器的Let's Encrypt证书来实现,并依赖客户端的默认配置。

对于某些情况,包括点对点、首次使用即信任、故意不安全的应用程序或任何服务器不由域名标识的情况,这可能不切实际。可以通过启用dangerous_configuration功能并手动构造一个带有覆盖的证书验证器的Quinn ClientConfig来实现任意证书验证逻辑。

当运营自己的证书颁发机构没有意义时,可以使用rcgen来按需生成自签名证书。为了支持首次使用即信任,应自动生成自签名证书的服务器应将其生成的证书写入持久存储并在未来的运行中重复使用。

贡献

欢迎所有反馈。请随意提交错误报告、对文档的请求或任何其他反馈到问题跟踪器

quinn-proto测试套件使用模拟IO以实现可重复性和避免某些对时间敏感的测试中的长时间睡眠。如果设置了环境变量SSLKEYLOGFILE,则测试将发出UDP数据包以供外部协议分析仪(如Wireshark)检查,并写入环境变量指定的路径的客户端连接的每个连接的兼容NSS的关键日志。

我们crates发布的发布版本支持的最小Rust版本将在发布时至少为6个月前。

依赖关系

~11–23MB
~419K SLoC