插图来源:Storyset
每次打开一个新网站,背后都有一场"握手":客户端和服务器来回几趟,确认加密参数,才能开始传数据。这几趟往返就是延迟的固定成本,离服务器越远越明显。0-RTT 技术要干的事很激进:把这几趟握手省掉,第一次发包就带上数据。
从 2-RTT 到 0-RTT:握手在省什么#
- 经典 TLS over TCP:先 TCP 握手(1 个往返),再 TLS 握手(1–2 个往返),加起来 2–3 个往返才能传数据。
- TLS 1.3:把 TLS 握手压缩到 1 个往返,总共约 2 个往返。
- 0-RTT:客户端记住上次连接的参数,直接带着加密数据发过去,0 个往返,服务器收到就能解密。
省掉的每一个往返,在跨国线路上都是几十到上百毫秒。积少成多,首屏速度提升非常明显。
QUIC 是怎么实现的#
QUIC(Hysteria2、TUIC 底层用的传输协议)把 0-RTT 做成了标配能力。原理不复杂:
- 第一次连接正常握手,双方记住会话参数(相当于"老熟人"认证)。
- 下次连接时,客户端用记住的参数直接加密数据发出,不等待服务器回应。
- 服务器用同样的参数解密,如果对得上,连接即刻可用。
关键点在于"记住"——0-RTT 只对曾经连过的服务器有效,第一次见面还是得老老实实握手。
代价:重放攻击风险#
天底下没有免费的午餐。0-RTT 的数据包因为不需要实时握手确认,攻击者可以截获并重放它:把你的请求原样再发一遍给服务器。
这意味着什么?如果你的请求是"查询余额",重放无害;但如果是"转账",重放一次就转两次账。所以 0-RTT 有个铁律:只用于幂等的请求(重复执行无副作用的操作),敏感操作必须走完整握手。
协议设计者们用"限制 0-RTT 数据类型"来做取舍:性能拿到,风险关进笼子。
和代理上网的关系#
- Hysteria2 基于 QUIC,天然享受 0-RTT 带来的重连加速:网络切换(Wi-Fi 切 4G)后恢复连接特别快,这是它体验好的原因之一。原理回顾见Hysteria 详解。
- 但注意:代理场景下 0-RTT 加速的是"客户端到入口服务器"这一段,入口到目标网站该慢还是慢,别指望它解决跨国延迟。
- Trojan 这类 TCP 协议走的是 TLS 1.3 的握手逻辑,没有 QUIC 的 0-RTT,这是 UDP 协议在"连接建立速度"上的结构性优势。
一句话总结#
0-RTT = 用"记住老熟人"的方式跳过握手,代价是只敢用于可重放的操作。它是 QUIC 系协议体验好的幕后功臣之一,但别把它当成解决所有延迟问题的银弹。想了解 WS+TLS 这套经典组合的握手成本,对照看这篇。