快喵VPN · 四协议接入门户。线路公告 · RSS · 协作邮箱 protocol@kuuimiao.com.cn。
快喵VPN 品牌标识快喵VPNKUAIMIAO TECHNICAL PORTAL下载客户端

首页 / 协议 / 握手与加密开销

握手与加密开销:把 58 毫秒拆开看

握手决定点下去多久有反应。加密开销决定跑起来能多快。两件事常被混为一谈,本节分开测,并给出可复现步骤。

蓝色网络拓扑图,展示客户端与服务端之间的握手往返路径

01

一次握手到底发生了什么

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

蓝色网络拓扑图,展示四种协议在客户端、出口与落地之间的握手往返次数
往返对比:WireGuard 与 QUIC 各 1 个往返即可发数据。OpenVPN 需要 2 个,Trojan 还要额外一次 TCP 建连。

握手包含三件事

身份认证、密钥协商、参数确认。三件事可以在 1 个往返内完成(如 Noise_IK),也可以拆成 2 个(如 TLS 控制通道加数据通道协商)。

等待如何累积

每次跨洋往返约 30 至 60 毫秒。多一个往返,就是多一次跨洋等待;在弱网下还会叠加超时重传,实际差距可能翻倍。

  • 香港出口的单程时延约 19 毫秒,一个往返 38 毫秒,这是本文所有握手数字的基准。
  • 东京出口单程 17 毫秒,往返 34 毫秒;洛杉矶单程 69 毫秒,往返 138 毫秒。
  • 同一个协议在不同出口上的握手差值,基本等于两地的往返时延差,说明握手逻辑本身没有额外开销。

02

往返数:1 RTT 与 2 RTT 的差别

把四种协议的握手拆成阶段,就能看清时间花在哪里。下表按香港出口的 38 毫秒往返折算。

表 1 · 握手阶段分解(香港出口,往返 38 ms)
协议阶段一阶段二合计往返理论首包实测首包
WireGuardNoise_IK 发起与响应无1 RTT38 ms38 ms
OpenVPNTLS 控制通道数据通道密钥协商2 RTT76 ms96 ms
TrojanTCP 三次握手TLS 1.3 握手1 RTT + 1 RTT76 ms112 ms
Hysteria2QUIC 内嵌 TLS 1.3无1 RTT38 ms64 ms

理论值与实测值的差距来自三处:内核调度、协议栈处理与网卡中断合并。WireGuard 几乎零差距,因为它全程在内核态。Trojan 差了 36 毫秒,因为 TCP 与 TLS 各自有一次用户态上下文切换。

一个常见误解是把「1 RTT」直接当成「快一倍」。实际上 38 与 96 毫秒的差距在单次网页请求里几乎无感,但它会在每个新连接上重复一次,一个含 30 个独立域名的页面就会累积到 1.7 秒。

03

三条出口的实测对照

同一批探针分别从香港、东京、洛杉矶发起,每个组合 100 次采样取中位,剔除首次连接与前 3 个周期。

测速仪表盘界面截图,对应握手耗时与吞吐的读数面板
读数面板:握手耗时、首包时间与吞吐同屏显示,采样时以中位值为准(客户端 4.8.0)。
表 2 · 三条出口的首包耗时(单位 ms)
出口WireGuardOpenVPNTrojanHysteria2
香港 HK-01389611264
东京 TYO-034110412171
洛杉矶 LAX-05144212236178
  • 三条出口上四协议的排序完全一致,说明排序由协议结构决定,不是线路偶然。
  • 跨境距离越远,绝对值越大,但比值稳定在 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 的本质是把上一次会话的票据拿出来复用,省掉一次往返。省时是真的,风险也是真的。

表 3 · 首次连接与重连的往返数
协议首次连接重连(票据有效)重连实测耗时重放保护
WireGuard1 RTT1 RTT(无票据机制)38 ms由计数器保证
OpenVPN2 RTT2 RTT96 ms由 TLS 会话决定
Trojan1 RTT + 1 RTT1 RTT + 1 RTT112 ms由 TLS 会话决定
Hysteria21 RTT0 RTT27 ms需要服务端去重窗口

省下来的往返

Hysteria2 的重连耗时从 64 毫秒降到 27 毫秒,节省 58%。在移动网络频繁切换的场景里,这个差值直接决定了「页面是否需要重新加载」。

重放风险

0-RTT 数据可以被中间人重放一次,因此只应用于幂等请求。快喵VPN 的实现只对握手与探测包使用 0-RTT,不承载实际的业务数据。

这也是本站没有对所有协议都开 0-RTT 的原因:省 30 毫秒的代价是引入一类新的攻击面,只有在协议本身提供去重窗口时才值得开。

06

加密开销:每 Gbps 需要多少 CPU

加密本身在支持硬件加速的 CPU 上并不贵,贵的是数据在用户态与内核态之间的来回搬运。下表把两者分开列。

表 4 · 加密算法与实测吞吐(单核,1 vCPU)
算法与模式所属协议单核吞吐相对无加密硬件加速
ChaCha20-Poly1305WireGuard2,400 Mbps88%AVX2
AES-256-GCMOpenVPN、Trojan3,100 Mbps91%AES-NI
AES-128-GCMTrojan(可选)3,600 Mbps94%AES-NI
QUIC 内建 AEADHysteria21,900 Mbps74%AVX2

这张表说明了一件反直觉的事:AES-256-GCM 比 ChaCha20-Poly1305 更快。OpenVPN 用 AES-256-GCM 的实测吞吐只有 310 Mbps,远低于 WireGuard 的 940 Mbps。原因不在算法,而在 OpenVPN 的用户态拷贝。

绿色电路板特写,对应网卡与 CPU 的加密卸载路径
硬件路径:支持 AES-NI 的 CPU 让加密接近免费,瓶颈转移到数据拷贝与中断处理。

07

CPU 占用实测:单核 1 Gbps 的代价

测试条件固定为单核绑定、1 Gbps 流量、60 秒采样,取单核占用峰值的中位。数字越小越省。

表 5 · 单核 CPU 占用(1 Gbps 流量)
协议平均占用峰值占用每 Gbps 成本瓶颈位置
WireGuard12%18%0.12 核网卡中断
OpenVPN62%88%0.62 核用户态拷贝
Trojan34%46%0.34 核TLS 记录层
Hysteria241%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

移动端耗电:握手的隐性成本

手机上的耗电不只来自吞吐,还来自频繁握手。移动网络切换会触发重连,重连次数越多,射频唤醒越多。

表 6 · 连续 1 小时 1080p 视频的耗电对照
协议耗电重连次数单次重连耗时备注
WireGuard8.6%438 ms切换即重连
OpenVPN9.8%496 msCPU 占用高
Trojan10.4%3112 msTCP 保持时间长
Hysteria29.2%627 ms票据复用抵消重连
手持设备上的科技界面特写,对应移动端重连与耗电的实际场景
移动端场景:地铁进出隧道时每小时可触发 6 次重连,票据复用把每次都压到 27 毫秒。

耗电差异只有 1.8 个百分点,看起来不大,但这是在同一小时视频内的差值。如果把待机与后台也计入,一天的差距会拉到 6% 至 9%,足以影响是否需要在中午充一次电。

09

握手失败:三种现场与对应动作

握手失败比握手慢更常见,也更难判断。三种现场占全部失败案例的 93%。

  1. 第一种是超时:客户端发出握手包后无响应,通常是 UDP 被封。表现为「一直转圈,最后提示连接超时」,动作是切 Trojan。
  2. 第二种是重置:收到 RST,通常是中间设备识别并阻断。表现为「连上 1 到 2 秒后断开」,动作是换端口或换协议。
  3. 第三种是认证失败:能握手但被服务端拒绝。表现为「提示密码或证书错误」,动作是核对账号与证书有效期。

如何区分超时与重置

诊断日志里超时记为 timeout、重置记为 reset。前者多为网络层,后者多为应用层识别,两者动作完全不同。

为什么重试有时管用

UDP 丢包率在 3% 时,握手包丢失概率约 3%,一次重试就能成功。客户端默认重试 3 次,间隔 1 秒,因此偶发失败看起来像「第二次就好了」。

10

测量方法:这些数字怎么复现

本节所有数字都按同一套口径产出。复现只需要一台机器、一份脚本与三个出口。

  1. 在客户端与服务端同时抓包,用抓包时间戳计算握手首包与首字节的差值,避免依赖应用层日志。
  2. 每种组合跑 100 次,剔除首次连接与前 3 个探针周期,取中位与 95 分位两个值。
  3. 吞吐用单流 iperf3 跑 60 秒,丢包条件用 tc netem 注入,种子固定以便复算。
  4. CPU 占用用绑定单核的方式采样,避免多核调度把峰值摊平。
  5. 所有原始 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 压缩归档,归档文件按出口与协议分目录存放。
终端窗口中的测量脚本与抓包输出,对应握手耗时的采集过程
采集现场:抓包时间戳与服务端日志交叉验证,差值超过 2 毫秒的记录作废。

12

MTU 与分片:被忽略的第四种开销

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

光缆剖面结构图,对应跨境链路的 MTU 与分片位置
分包位置:跨境链路的隧道外层再加一层封装,MTU 必须扣掉 60 至 80 字节,否则会触发分片。

分片的代价

一个 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

四个能立刻做的对照实验

不需要抓包工具,用客户端自带的诊断页就能完成。每个实验对比两组数字,差值就是答案。

表 7 · 四个对照实验的设计与预期结论
实验做法观察指标预期结论
协议对换同一节点依次用四种协议连接首包与吞吐首包差 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 个百分点
  1. 每个实验只改一个变量,其余设置保持不变,否则差值无法归因。
  2. 每组至少跑 60 秒,取后 30 秒的均值,跳过握手与慢启动阶段。
  3. 同一实验重复两次,若两次差值方向相反,说明测量环境不稳定,结论作废。
  4. 把结果记在同一个表格里,跨设备对比时才有意义。

这四个实验的原始数据在 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 毫秒,这部分与协议无关,换协议也省不掉。

  • 1 RTT
  • 2 RTT
  • Noise_IK
  • TLS 1.3
  • 0-RTT 重连
  • 单核 CPU
  • 加密卸载

下一层的问题是「选哪条线路」,见选路与线路;如果只想确认自己现在用的是哪种协议,直接看一分钟自测。

按症状查

按场景查

按数字查