TL;DR
TUIC 是基于 QUIC 的代理协议,v5 是当前唯一推荐版本。设计目标:RTT 稳定 + 多用户公平 + UDP relay 原生支持。强项:多人共享场景、UDP 转发(游戏 / WireGuard)、跨平台客户端覆盖完整。弱点:大陆电信 UDP 限速下表现不稳、没有内置混淆、握手特征比 Hy2 易识别。典型用法:海外节点 / 私有机场。
TUIC(The Ultimate Internet Connector)由 EAimTY 在 2022 年发布,目标是”在 QUIC 上做一个比 Hysteria 更通用、比 Trojan 更现代的代理协议”。2023 年定型 v5 之后,TUIC 在机场圈和自建社区都站稳了脚跟。本篇按 QUIC 基础 → TUIC 设计 → v4/v5 差异 → 与 Hy2 工程差异 → 实测 → 故障排查 的顺序剖析。
QUIC 简要回顾
QUIC(RFC 9000)是 IETF 在 2021 年标准化的传输层协议,特点:
- 基于 UDP,避免 TCP 的握手成本
- 内置 TLS 1.3,握手 0-RTT
- 多路复用无队头阻塞(每个 stream 独立丢包恢复)
- 内置拥塞控制(cubic / bbr / 自定义)
所有”QUIC 系代理”(Hysteria、TUIC、QUICv2)都建立在这些特性之上。
TUIC 的协议设计
帧结构(v5)
TUIC v5 在 QUIC 之上定义了自己的应用层帧:
+----+------+--------+
|Cmd | Len | Payload|
+----+------+--------+
命令类型(Cmd):
Authenticate:握手认证(UUID + password 哈希)Connect:发起 TCP 连接到目标Packet:UDP 数据包Dissociate:关闭 UDP 关联Heartbeat:保活
每条命令一个独立的 QUIC stream,做到了真正的多路复用。
认证机制
TUIC v5 用 UUID + password 双因素:
Authenticate frame = {
uuid: 16 字节,
hash: SHA256(uuid || password || token)
}
服务端验证 UUID 在白名单 + hash 正确。比 Trojan 的单 password、VMess 的时间戳更稳。
v4 → v5 主要变更
| 维度 | v4 | v5 |
|---|---|---|
| 认证 | Token(容易泄漏) | UUID + password + 哈希 |
| UDP relay | quic 模式(依赖 QUIC stream) | native 模式(直接 QUIC datagram) |
| 帧结构 | 复杂多层 | 简化为单层 Cmd |
| 服务端实现 | tuic-server | tuic-server v1+ / sing-box / mihomo |
| 客户端实现 | 老 sing-box | sing-box 1.4+ / mihomo 1.18+ |
新部署用 v5,旧节点逐步迁移。
TUIC vs Hysteria 2 的工程差异
虽然都是 QUIC 路线,工程取舍完全不同:
| 维度 | TUIC v5 | Hysteria 2 |
|---|---|---|
| 拥塞控制 | bbr(保守) | Brutal(激进,假设带宽充足) |
| 多用户公平 | 高(每用户独立 stream 配额) | 中(单 stream 易吃满) |
| 内置混淆 | 无 | OBFS salamander |
| UDP relay | native 数据报 | datagram + 流封装 |
| 端口跳跃 | 不支持 | 支持 |
| 配置简洁 | 中 | 简单 |
| 大陆稳定性 | 中 | 中 + OBFS 提升 |
经验法则:你独享 VPS、追求峰值速度,用 Hy2;你在机场服务多用户、要 RTT 稳定,用 TUIC。
服务端示例(sing-box)
{
"inbounds": [{
"type": "tuic",
"listen": "::",
"listen_port": 443,
"users": [{
"uuid": "<uuid>",
"password": "<password>"
}],
"congestion_control": "bbr",
"tls": {
"enabled": true,
"server_name": "your-domain.com",
"certificate_path": "/etc/letsencrypt/live/your-domain.com/fullchain.pem",
"key_path": "/etc/letsencrypt/live/your-domain.com/privkey.pem",
"alpn": ["h3"]
}
}]
}
客户端示例(sing-box)
{
"outbounds": [{
"type": "tuic",
"tag": "tuic-jp",
"server": "vps.your-domain.com",
"server_port": 443,
"uuid": "<uuid>",
"password": "<password>",
"congestion_control": "bbr",
"udp_relay_mode": "native",
"tls": {
"enabled": true,
"server_name": "vps.your-domain.com",
"alpn": ["h3"]
}
}]
}
tuic:// 链接格式
tuic://<uuid>:<password>@<host>:<port>?sni=<sni>&alpn=h3&congestion_control=bbr&udp_relay_mode=native#<tag>
V2RayN 7+、Karing、Hiddify 都支持直接粘贴此链接导入。
实测数据(2026-05)
- 服务端:东京 VPS(4 核 8G)
- 客户端:上海 Mac(联通家宽)
| 维度 | TUIC v5 | Hy2 (no obfs) | Hy2 (+obfs) |
|---|---|---|---|
| 单 TCP 下载 | 380 Mbps | 580 Mbps | 510 Mbps |
| 多用户公平性(5 并发) | 70/70/72/68/74 | 95/50/30/15/10 | 90/55/35/20/15 |
| RTT P99 | 145 ms | 200 ms | 220 ms |
| CPU 占用(服务端) | 14% | 12% | 28% |
TUIC 在多用户场景下吞吐分布最均匀,这是机场服务最看重的指标。
常见故障排查
”tuic handshake failed: invalid uuid”
- 客户端 UUID 与服务端配置不一致
- 服务端配置文件有 BOM 或不可见字符
”udp relay packet dropped”
- udp_relay_mode 客户端 / 服务端不匹配(native vs quic)
- 中间 NAT 限制 UDP 大包
”connection reset by peer”
- VPS 防火墙拦 443 UDP
- ISP 主动 reset QUIC 连接
- TLS 证书过期
连接慢 / 不稳
- 拥塞控制选错(gbn 已弃用,用 bbr)
- 客户端 alpn 未填 h3
- VPS 到客户端的路由质量差
典型部署模式
模式 A:单用户独享 VPS
- TUIC 单端口 443
- 用 bbr 拥塞控制
- 客户端固定 sni 与服务端域名一致
模式 B:机场多用户
- TUIC 端口段(443、8443、9443)
- 每用户独立 UUID + password
- 服务端配合 prometheus + grafana 监控 stream 数与流量
模式 C:与 Hy2 / VLESS Reality 混合
- TUIC 跑 UDP 转发(游戏 / RTC)
- Hy2 跑大文件下载
- VLESS Reality 跑日常浏览
- 客户端按规则集自动分流
相关阅读
来源与最后核对
- TUIC 仓库:github.com/EAimTY/tuic
- TUIC v5 协议规范:github.com/EAimTY/tuic/blob/dev/SPEC.md
- QUIC 协议规范:datatracker.ietf.org/doc/html/rfc9000
- sing-box TUIC 文档:sing-box.sagernet.org/configuration/inbound/tuic
本文最后实际验证日期:2026-05-19。