跳转到内容

纯 Zig 的 QUIC + HTTP/3

从零用 Zig 编写的 IETF QUIC + HTTP/3 协议栈 —— QUIC v1 与 v2、纯 Zig TLS 1.3 (含 0-RTT 与后量子密钥交换)、完整 HTTP/3 / QPACK / WebTransport、异步 std.Io 运行时,已与 quic-go、quiche、s2n-quic 完成线路级互通验证。

quicz 的握手与 stream 路径由真实 UDP 探针覆盖:进程内 loopback、独立进程 Zig,以及 启用证书校验的 Go / Rust 对端。

Terminal window
$ examples/interop/run_external_interop.sh all
# 对 quic-go (Go)、quiche (Rust)、s2n-quic (Rust) 的证书校验互通:
# 握手 + 传输,stream 0/4 上带 FIN 的 echo —— 全程开启证书校验。
  • 纯 Zig TLS 1.3 + 0-RTT —— 无 C 密码学;ECDSA P-256、X25519、X25519Kyber768(后量子)、AES-128/256-GCM、ChaCha20-Poly1305、会话恢复。
  • QUIC v1 & v2 transport —— stream、flow control、连接迁移、path validation、Retry、stateless reset、密钥更新、版本协商、DATAGRAM、multipath、ECN、PMTUD、GSO/GRO、连接池、qlog。
  • Loss recovery + NewReno / CUBIC —— 报文 pacing、HyStart++、PTO jitter、快速重传、app-limited 检测。
  • 异步 I/O 运行时 —— 事件驱动 std.Io server/client,每连接独立 handler(std.http 模型)。
  • HTTP/3 —— 完整连接管理、SETTINGS、GOAWAY、stream 状态机、QPACK 静态 + 动态表。
  • WebTransport(完整会话管理)+ HTTP Datagrams (RFC 9297) + 流重置部分交付
  • 线路级互通验证:quic-go、quiche、s2n-quic。
const std = @import("std");
const quicz = @import("quicz");
const Client = quicz.runtime.client.Client;
pub fn main() !void {
var gpa: std.heap.DebugAllocator(.{}) = .init;
defer _ = gpa.deinit();
var io_ = std.Io.Threaded.init(gpa.allocator(), .{});
defer io_.deinit();
const io = io_.io();
var client = try Client.init(gpa.allocator(), io, .{
.server_port = 4433,
.server_name = "localhost",
.alpn = &.{"hq-interop"},
});
defer client.deinit();
_ = try client.runEchoSession("hello");
}

推荐生产 API 是异步 std.Io 运行时quicz.runtime)——事件驱动 server + 每连接 独立 handler、async client 会话。低层 Connection packet API 供精细控制使用。见 快速开始

对端 语言 / 协议栈 探针
quic-go Go 启用证书校验的 echo client/server + run_external_interop.sh
quiche Rust 启用证书校验的握手 + 传输
s2n-quic Rust 启用证书校验的握手 + 传输
QUIC-Interop-Runner handshake、transfer、retry 自测

自己跑一遍:示例指南

权威功能矩阵在四个协议栈上追踪 41 项能力,覆盖率汇总如下:

指标 quic-go quiche s2n-quic quicz
传输层(19 项) 19/19 14/19 14/19 19/19
拥塞控制(8 项) 6/8 6/8 7/8 7/8
密码套件(5 项) 5/5 5/5 5/5 5/5
应用层(6 项) 6/6 3/6 0/6 6/6
平台(3 项) 2/3 0/3 1/3 1/3
合计(41 项) 38/41 28/41 27/41 40/41

quicz 覆盖全部传输、密码套件与应用层能力(40/41);缺口仅为 BBR(主动移除)与平台 特有的 FIPS / XDP。完整 41 行逐项对比见功能对比

~390 MB/s
单流 · 真实握手
21.7 μs
回声延迟 · P50
~304 MB/s
4 流聚合

secnetperf 风格的 macOS loopback 微基准,真实 TLS 1.3 握手(无 GSO / XDP);跨实现数字仅为指示性参考;installed-keys(旁路握手)上限约 1.94 GB/s。完整吞吐图、延迟百分位、丢包恢复与方法见性能页。

  • BBR —— 2026-08 主动移除,改用 CUBIC。
  • FIPS 140-3 —— 仅 quic-go(Go 1.26+)。
  • XDP 零拷贝 I/O —— 仅 s2n-quic。

权威状态与验收证据见传输任务矩阵。 API 趋于稳定但仍在演进。

  • 快速开始 —— 用 zig fetch 加入 quicz,跑起第一个端点。
  • 功能对比 —— quicz vs quic-go / quiche / s2n-quic,41 行。
  • 性能 —— 吞吐、延迟、丢包恢复、CPU 开销。
  • 架构 —— endpoint、connection 与 TLS 层如何组合。
  • 规范覆盖 —— RFC 9000/9001/9002 逐节状态。
  • 示例 —— echo、DATAGRAM、后量子、0-RTT 与互通探针。
  • 安全 —— 信任边界与范围内攻击的防御。