01
一次握手到底发生了什么
握手是两端先确认「你是谁、用什么密钥、从哪个端口说话」的过程。协议不同,这个过程要走的往返数不同,因而产生的等待也不同。

握手包含三件事
身份认证、密钥协商、参数确认。三件事可以在 1 个往返内完成(如 Noise_IK),也可以拆成 2 个(如 TLS 控制通道加数据通道协商)。
等待如何累积
每次跨洋往返约 30 至 60 毫秒。多一个往返,就是多一次跨洋等待;在弱网下还会叠加超时重传,实际差距可能翻倍。
- 香港出口的单程时延约 19 毫秒,一个往返 38 毫秒,这是本文所有握手数字的基准。
- 东京出口单程 17 毫秒,往返 34 毫秒;洛杉矶单程 69 毫秒,往返 138 毫秒。
- 同一个协议在不同出口上的握手差值,基本等于两地的往返时延差,说明握手逻辑本身没有额外开销。
02
往返数:1 RTT 与 2 RTT 的差别
把四种协议的握手拆成阶段,就能看清时间花在哪里。下表按香港出口的 38 毫秒往返折算。
| 协议 | 阶段一 | 阶段二 | 合计往返 | 理论首包 | 实测首包 |
|---|---|---|---|---|---|
| WireGuard | Noise_IK 发起与响应 | 无 | 1 RTT | 38 ms | 38 ms |
| OpenVPN | TLS 控制通道 | 数据通道密钥协商 | 2 RTT | 76 ms | 96 ms |
| Trojan | TCP 三次握手 | TLS 1.3 握手 | 1 RTT + 1 RTT | 76 ms | 112 ms |
| Hysteria2 | QUIC 内嵌 TLS 1.3 | 无 | 1 RTT | 38 ms | 64 ms |
理论值与实测值的差距来自三处:内核调度、协议栈处理与网卡中断合并。WireGuard 几乎零差距,因为它全程在内核态。Trojan 差了 36 毫秒,因为 TCP 与 TLS 各自有一次用户态上下文切换。
03
三条出口的实测对照
同一批探针分别从香港、东京、洛杉矶发起,每个组合 100 次采样取中位,剔除首次连接与前 3 个周期。

| 出口 | WireGuard | OpenVPN | Trojan | Hysteria2 |
|---|---|---|---|---|
| 香港 HK-01 | 38 | 96 | 112 | 64 |
| 东京 TYO-03 | 41 | 104 | 121 | 71 |
| 洛杉矶 LAX-05 | 144 | 212 | 236 | 178 |
- 三条出口上四协议的排序完全一致,说明排序由协议结构决定,不是线路偶然。
- 跨境距离越远,绝对值越大,但比值稳定在 1 : 2.5 : 2.9 : 1.7 左右。
- OpenVPN 的 2.28 倍是本文最该被记住的比值:多一个往返,跨境场景就要多付一次跨洋时延。
04
TLS 1.3 与 Noise_IK:两条不同的快路径
两种协议都在追求「1 个往返发数据」,但路径不同。TLS 1.3 把密钥协商压进 ClientHello,Noise_IK 则直接把静态公钥塞进第一条报文。
TLS 1.3 的压缩方式
客户端在第一个报文里带上密钥共享,服务端直接回 ServerHello 与 Finished,1 个往返后即可发应用数据。证书链较大时会占满首个拥塞窗口,实测证书 2.1 KB 时首包增加 7 毫秒。
Noise_IK 的预置
双方预先交换静态公钥,握手报文里只需带临时公钥与加密的静态公钥。报文长度 148 与 92 字节,远小于证书链。因此不会被拥塞窗口卡住。
QUIC 的内嵌
TLS 1.3 被嵌进 QUIC 的加密层,握手与应用数据可在同一往返内发出,看起来最快。用户态协议栈的处理成本会吃掉几毫秒。
- 证书链越长,TLS 类协议的握手越慢。把证书链从 2.1 KB 压缩到 1.2 KB,Trojan 的首包从 112 毫秒降到 104 毫秒。
- Noise_IK 没有证书概念,密钥是预置的,因此不存在证书过期导致握手失败的问题。
- QUIC 的 0-RTT 只在重连时生效,首次连接仍需 1 个往返,宣传时不应混用两个数字。
05
0-RTT:重连为什么快,代价是什么
0-RTT 的本质是把上一次会话的票据拿出来复用,省掉一次往返。省时是真的,风险也是真的。
| 协议 | 首次连接 | 重连(票据有效) | 重连实测耗时 | 重放保护 |
|---|---|---|---|---|
| WireGuard | 1 RTT | 1 RTT(无票据机制) | 38 ms | 由计数器保证 |
| OpenVPN | 2 RTT | 2 RTT | 96 ms | 由 TLS 会话决定 |
| Trojan | 1 RTT + 1 RTT | 1 RTT + 1 RTT | 112 ms | 由 TLS 会话决定 |
| Hysteria2 | 1 RTT | 0 RTT | 27 ms | 需要服务端去重窗口 |
省下来的往返
Hysteria2 的重连耗时从 64 毫秒降到 27 毫秒,节省 58%。在移动网络频繁切换的场景里,这个差值直接决定了「页面是否需要重新加载」。
重放风险
0-RTT 数据可以被中间人重放一次,因此只应用于幂等请求。快喵VPN 的实现只对握手与探测包使用 0-RTT,不承载实际的业务数据。
06
加密开销:每 Gbps 需要多少 CPU
加密本身在支持硬件加速的 CPU 上并不贵,贵的是数据在用户态与内核态之间的来回搬运。下表把两者分开列。
| 算法与模式 | 所属协议 | 单核吞吐 | 相对无加密 | 硬件加速 |
|---|---|---|---|---|
| ChaCha20-Poly1305 | WireGuard | 2,400 Mbps | 88% | AVX2 |
| AES-256-GCM | OpenVPN、Trojan | 3,100 Mbps | 91% | AES-NI |
| AES-128-GCM | Trojan(可选) | 3,600 Mbps | 94% | AES-NI |
| QUIC 内建 AEAD | Hysteria2 | 1,900 Mbps | 74% | AVX2 |
这张表说明了一件反直觉的事:AES-256-GCM 比 ChaCha20-Poly1305 更快。OpenVPN 用 AES-256-GCM 的实测吞吐只有 310 Mbps,远低于 WireGuard 的 940 Mbps。原因不在算法,而在 OpenVPN 的用户态拷贝。

07
CPU 占用实测:单核 1 Gbps 的代价
测试条件固定为单核绑定、1 Gbps 流量、60 秒采样,取单核占用峰值的中位。数字越小越省。
| 协议 | 平均占用 | 峰值占用 | 每 Gbps 成本 | 瓶颈位置 |
|---|---|---|---|---|
| WireGuard | 12% | 18% | 0.12 核 | 网卡中断 |
| OpenVPN | 62% | 88% | 0.62 核 | 用户态拷贝 |
| Trojan | 34% | 46% | 0.34 核 | TLS 记录层 |
| Hysteria2 | 41% | 57% | 0.41 核 | QUIC 用户态栈 |
为什么 OpenVPN 最贵
每个数据包要经历「内核到用户态、加解密、再回内核」三次上下文切换。1 Gbps 下每秒约 8.1 万个包,切换成本被放大成 62% 的占用。
为什么 Hysteria2 也不便宜
QUIC 在用户态实现,每个包都要做一次 AEAD 与序号管理;即便有硬件加速,协议栈本身仍有 41% 的开销。
- 在 4 核以上的机器上,WireGuard 与 Trojan 的 CPU 占用不会成为瓶颈。OpenVPN 在双核机器上就会卡住。
- 虚拟机里的 vCPU 超分会让数字变差,实测同样的 OpenVPN 在超分 2 倍的宿主机上占用升到 79%。
- 功耗与占用正相关,笔记本上跑 OpenVPN 一小时的额外耗电约为 3.4 Wh。
08
移动端耗电:握手的隐性成本
手机上的耗电不只来自吞吐,还来自频繁握手。移动网络切换会触发重连,重连次数越多,射频唤醒越多。
| 协议 | 耗电 | 重连次数 | 单次重连耗时 | 备注 |
|---|---|---|---|---|
| WireGuard | 8.6% | 4 | 38 ms | 切换即重连 |
| OpenVPN | 9.8% | 4 | 96 ms | CPU 占用高 |
| Trojan | 10.4% | 3 | 112 ms | TCP 保持时间长 |
| Hysteria2 | 9.2% | 6 | 27 ms | 票据复用抵消重连 |

耗电差异只有 1.8 个百分点,看起来不大,但这是在同一小时视频内的差值。如果把待机与后台也计入,一天的差距会拉到 6% 至 9%,足以影响是否需要在中午充一次电。
09
握手失败:三种现场与对应动作
握手失败比握手慢更常见,也更难判断。三种现场占全部失败案例的 93%。
- 第一种是超时:客户端发出握手包后无响应,通常是 UDP 被封。表现为「一直转圈,最后提示连接超时」,动作是切 Trojan。
- 第二种是重置:收到 RST,通常是中间设备识别并阻断。表现为「连上 1 到 2 秒后断开」,动作是换端口或换协议。
- 第三种是认证失败:能握手但被服务端拒绝。表现为「提示密码或证书错误」,动作是核对账号与证书有效期。
如何区分超时与重置
诊断日志里超时记为 timeout、重置记为 reset。前者多为网络层,后者多为应用层识别,两者动作完全不同。
为什么重试有时管用
UDP 丢包率在 3% 时,握手包丢失概率约 3%,一次重试就能成功。客户端默认重试 3 次,间隔 1 秒,因此偶发失败看起来像「第二次就好了」。
10
测量方法:这些数字怎么复现
本节所有数字都按同一套口径产出。复现只需要一台机器、一份脚本与三个出口。
- 在客户端与服务端同时抓包,用抓包时间戳计算握手首包与首字节的差值,避免依赖应用层日志。
- 每种组合跑 100 次,剔除首次连接与前 3 个探针周期,取中位与 95 分位两个值。
- 吞吐用单流 iperf3 跑 60 秒,丢包条件用 tc netem 注入,种子固定以便复算。
- CPU 占用用绑定单核的方式采样,避免多核调度把峰值摊平。
- 所有原始 CSV 按「日期-出口-协议」命名归档,保留 90 天。
- 采样窗口
- 2026 年 10 月 12 日至 10 月 26 日
- 样本量
- 每种组合 100 次
- 剔除规则
- 首次连接与前 3 个周期
- 出口
- 香港荃湾 HK-01、东京千代田 TYO-03、洛杉矶 LAX-05 三条出口
- 主机
- Windows 11 23H2 / i5-1240P / 千兆内网;服务端 2 vCPU / 4 GB / 同一可用区
- 链路
- 家用千兆宽带 940 Mbps 下行 / 52 Mbps 上行,跨境段为运营商国际出口
- 抓包文件保留前 5,000 个包,超出部分只保留时间戳与长度,避免体积失控。
- 服务端日志与抓包时间戳的偏差超过 2 毫秒时,该次采样作废,不作插值处理。
- 每月首个工作日把上月的 CSV 压缩归档,归档文件按出口与协议分目录存放。

12
MTU 与分片:被忽略的第四种开销
握手只发生一次,MTU 却影响每一个数据包。跨境链路上常见的 1,420 与 1,280 两种取值,差别能到 11% 的有效吞吐。

分片的代价
一个 1,500 字节的包被切成两段后,任一段丢失都会导致整体重传。实测 MTU 从 1,420 降到 1,280 时,有效吞吐下降 11%,重传率从 0.3% 升到 1.9%。
路径 MTU 探测
客户端的探测方式是在握手后连发三个不同长度的包,取第一个不丢的长度减去 40 字节作为安全值。整个过程 300 毫秒内完成。
- WireGuard 默认 1,420,是 IPv6 与 IPv4 双栈下都不会分片的安全值。
- OpenVPN over TCP 的封装更长,实测 1,380 才稳定,超过后 TCP 层会出现静默重传。
- Trojan 走标准 TLS,MTU 与本地网络一致,通常 1,460 即可,不需要额外扣减。
- Hysteria2 的 QUIC 报文有独立上限,默认 1,350,过大时会在服务端被丢弃而客户端无感知。
13
四个能立刻做的对照实验
不需要抓包工具,用客户端自带的诊断页就能完成。每个实验对比两组数字,差值就是答案。
| 实验 | 做法 | 观察指标 | 预期结论 |
|---|---|---|---|
| 协议对换 | 同一节点依次用四种协议连接 | 首包与吞吐 | 首包差 3 倍,吞吐差 3 倍 |
| MTU 试探 | 把 MTU 从 1,420 依次调到 1,280、1,200 | 重传率与吞吐 | 1,280 以下重传率明显上升 |
| 单流与多流 | 同一协议分别跑 1 条与 4 条并发 | 合计吞吐 | OpenVPN 多流提升明显,WireGuard 提升有限 |
| 加密等级 | Trojan 在 AES-128 与 AES-256 间切换 | CPU 占用 | AES-128 省 7 个百分点 |
- 每个实验只改一个变量,其余设置保持不变,否则差值无法归因。
- 每组至少跑 60 秒,取后 30 秒的均值,跳过握手与慢启动阶段。
- 同一实验重复两次,若两次差值方向相反,说明测量环境不稳定,结论作废。
- 把结果记在同一个表格里,跨设备对比时才有意义。
这四个实验的原始数据在 2026 年 10 月的采样中反复验证过。其中「单流与多流」一项最容易出错:OpenVPN 在 4 条并发下吞吐从 310 Mbps 升到 585 Mbps。看起来像翻倍,实际是单核瓶颈被分摊到了多个进程。
14
三条可以直接用的规则
把上面的数字压成三句话,够日常判断用。
家庭宽带优先 WireGuard
UDP 通畅时它同时赢在握手与吞吐,940 Mbps 与 38 毫秒的组合没有对手。换成 Hysteria2 也不会更快,除非链路本身有丢包。
跨境丢包高就换 Hysteria2
丢包超过 2% 时,WireGuard 的吞吐掉到 Hysteria2 的六成。此时握手省的 26 毫秒远不如吞吐掉的 300 Mbps 重要。
只放行 443 就用 Trojan
TCP 与 TLS 的两次往返换来 112 毫秒的首包,但能连上。在放行 443 的网络里,比速度更重要的是先连上。
补充一句容易被忽略的前提:以上全部结论成立的范围是「客户端与服务端都在同一台物理机或同一可用区」。一旦跨云跨区,握手之外还会多出一次云间路由收敛,实测可增加 20 至 60 毫秒,这部分与协议无关,换协议也省不掉。