跳到主要内容

crate quinn

搜索

crate quinn 

源代码
展开描述

QUIC 传输协议实现

QUIC 是一种现代传输协议,针对 TCP 的不足之处进行了改进,例如队头阻塞、安全性弱、握手慢以及拥塞控制效率低下等。本 crate 提供了一套可移植的用户态实现。它构建于 quinn-proto 之上,后者实现了与具体运行时无关的协议逻辑。

本 crate 的入口点是 Endpoint

§About QUIC

QUIC 连接是两个端点之间的关联。发起连接的端点称为客户端,接受连接的端点称为服务器。单个端点可以针对不同连接同时充当客户端和服务器,例如在对等应用中。为了传输应用数据,每个端点都可以打开流,但流的数量受对端限制。通常该限制会随着旧流的结束而增加。

流可以是单向或双向的,创建开销很低且用完即可丢弃。例如,传统面向数据报的应用可以为每条要发送的消息使用一个新流,而无需再考虑 MTU 问题。双向流的行为与传统 TCP 连接非常相似,适合发送需要立即响应的消息,例如 HTTP 请求。流数据是可靠交付的,不同流之间的数据不保证顺序。

通过避免队头阻塞并在同一连接的所有流之间提供统一的拥塞控制,QUIC 能够在相同两个主机之间的一条或多条 TCP 连接之上提供更高的吞吐量和更低的延迟,同时相比原始 UDP 套接字提供更有用的语义。

Quinn 还提供不可靠的数据报接口,这是一种底层原语,适合在不需要对某些数据进行自动分片和重传时使用。

QUIC 直接基于 TLS 1.3 构建加密与身份验证机制。正如 TLS 服务器一样,QUIC 服务器最好使用由可信机构签发的证书来标识身份。如果这一点难以做到——例如服务器是短生命周期的或不绑定域名——那么与 TLS 一样,可以使用自签名证书来单纯提供加密。

重新导出§

pub use rustls;
pub use udp;

模块§

congestion
控制数据发送速率的逻辑
crypto
QUIC 加密协议的 trait 与实现

结构体§

Accept
Endpoint::accept 产生的 Future
AcceptBi
Connection::accept_bi 产生的 Future
AcceptUni
Connection::accept_uni 产生的 Future
AckFrequencyConfig
用于控制对端确认(ACK)频率的参数
ApplicationClose
应用层给出的关闭连接的原因
BloomTokenLog
基于布隆过滤器的 TokenLog
Chunk
来自接收流的一块数据
ClientConfig
出站连接的配置
ClosedStream
表示流尚未打开或已经结束 / 重置的错误
Connecting
正在进行的连接尝试的 Future
Connection
一个 QUIC 连接。
ConnectionClose
传输层给出的关闭连接的原因
ConnectionId
连接的协议级标识符。
ConnectionStats
连接统计信息
Endpoint
一个 QUIC 端点。
EndpointConfig
端点的全局配置,会影响所有连接
EndpointStats
关于 Endpoint 活动的统计信息
FrameStats
每种帧类型已发送或已接收的数量
FrameType
QUIC 帧类型
IdleTimeout
在使连接超时之前所允许的最大空闲时长
Incoming
一个尚未由服务器开始其握手部分的入站连接
IncomingFuture
一个基础适配器,让 Incoming 能够像 Connecting 一样被 await
MtuDiscoveryConfig
控制 MTU 探测的参数。
NoneTokenLog
TokenLog 的空实现,从不接受任何 token
NoneTokenStore
TokenStore 的空实现,不存储任何 token
OpenBi
Connection::open_bi 产生的 Future
OpenUni
Connection::open_uni 产生的 Future
PathStats
与某条传输路径相关的统计信息
ReadDatagram
Connection::read_datagram 产生的 Future
RecvStream
只能用于接收数据的流
RetryError
尝试重试一个 Incoming 时产生的错误,因为它已带有一个先前重试留下的 token
SendDatagram
Connection::send_datagram_wait 产生的 Future
SendStream
只能用于发送数据的流
ServerConfig
控制入站连接的参数
StdSystemTime
TimeSource 的默认实现
StreamId
特定连接中某条流的标识符
TokenMemoryCache
TokenStore 的一个实现:在内存中为有限数量的服务器名称各存储最多 N 个 token
TokenReuseError
校验 token 疑似被复用时产生的错误
TokioRuntime
用于 Tokio 的 Quinn 运行时
Transmit
一个出站数据包
TransportConfig
控制 QUIC 核心状态机的参数
TransportErrorCode
传输层错误码
UdpStats
连接上已发送或已接收的 UDP 数据报统计信息
ValidationTokenConfig
用于在入站连接中发送和处理校验 token 的配置
VarInt
一个小于 2^62 的整数
VarIntBoundsExceeded
当使用大于等于 2^62 的值构造 VarInt 时返回的错误
Written
指示一次写入操作中已传输的字节数和块数
ZeroRttAccepted
在连接完全建立时完成的 Future

枚举§

ConfigError
端点配置中的错误
ConnectError
用于创建新连接的参数中的错误
ConnectionError
连接可能丢失的原因
Dir
流是双向通信还是仅由发起方单向通信
EcnCodepoint
显式拥塞通知 (ECN) 码点
ReadError
从流读取时产生的错误。
ReadExactError
从流读取时产生的错误。
ReadToEndError
RecvStream::read_to_end 产生的错误
ResetError
在等待流被重置时产生的错误
SendDatagramError
发送数据报时可能产生的错误
Side
端点是连接的发起方还是接收方
StoppedError
在监视对端停止发送流时产生的错误
WriteError
向流写入时产生的错误

trait§

AsyncTimer
异步定时器的抽象实现,用于运行时无关性
AsyncUdpSocket
UDP 套接字的抽象实现,用于运行时无关性
ConnectionIdGenerator
为入站连接生成连接 ID
Runtime
对 I/O 与定时器操作的抽象,用于运行时无关性
Time源代码
用于获取当前 SystemTime 的对象
TokenLog
负责限制客户端复用校验 token 的能力
TokenStore
负责存储从服务器接收到的校验 token,并在后续连接中取出使用
UdpPoller
通过轮询检测关联的 AsyncUdpSocket 是否可写

函数§

default_runtime
从编译时启用的运行时中自动选择一个合适的运行时