VMess、VLESS、Trojan、Shadowsocks 怎么选:四种代理协议横向对比

从诞生背景、加密方式、握手开销与移动端耗电四个角度对比四种协议,并给出按使用场景选择协议类型的参考建议。

本文速览

协议名不能单独决定速度、稳定性或耗电。本文面向已经拿到订阅、正在选择节点的用户,先区分代理协议、传输方式与安全层,再比较四种协议的认证和连接成本。选择时先确认客户端内核支持,再检查 TLS、传输及 UDP 配置,最后在同一网络条件下验证。

协议、传输与安全层

VMess、VLESS、Trojan、Shadowsocks 是代理协议名称;v2rayN 是桌面客户端,不是第五种协议。客户端负责管理节点、订阅、系统代理与路由,实际连接由内核执行。安卓端的 v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核。两者的功能支持不能仅凭相似的界面推断。

阅读节点详情时,需要同时看三层信息。协议负责描述认证和代理请求;传输方式决定数据如何承载,例如 TCP 或 WebSocket;安全层决定链路如何保护,例如 TLS。REALITY 是 Xray 中的安全机制,不是与 VMess 并列的代理协议,也不能理解成给任意节点增加的一键加速开关。

四种协议的背景与加密边界

VMess 来自 V2Ray 项目,包含用户认证和数据保护机制。VLESS 最初以更精简的协议设计减少重复工作,常见配置把链路保护交给 TLS 或 REALITY。Trojan 以 TLS 通道承载代理请求。Shadowsocks 则采用相对紧凑的加密代理设计,具体能力取决于所用方法及实现。

协议 认证与数据保护 导入后重点核对
VMess 以 UUID 标识用户;现代配置使用 VMess AEAD,载荷加密由 security 等设置决定,可另外叠加 TLS。 UUID、alterId、security、传输类型;现代 AEAD 配置通常使用 alterId 为 0。
VLESS 以 UUID 认证;常见 encryption 为 none 的部署依赖外层 TLS 或 REALITY 保护链路。 UUID、encryption、flow、安全层;扩展加密能力以两端内核版本支持为准。
Trojan 密码认证,通常通过 TLS 保护代理请求和载荷;密码认证不能替代服务器证书验证。 密码、端口、服务器名称、证书验证与传输方式。
Shadowsocks 由所选加密方法保护数据;传统 AEAD 与 Shadowsocks 2022 的密钥和协议细节不同。 method、密码或密钥格式、UDP 支持;不能只看节点名称中的“SS”。

“VLESS 不加密”只适合描述常见的 encryption: none 协议层配置,不能据此判断整个连接是否加密。相反,启用了 TLS 也不意味着参数可以随意填写:服务器名称、证书链和服务端配置仍须对应。不要通过关闭证书验证来掩盖配置错误。

443
常见 TLS 服务端口,不是协议强制值
16 字节
VMess、VLESS 所用 UUID 的二进制长度
0
现代 VMess AEAD 常见的 alterId 设置

握手开销:区分首连与持续传输

握手开销影响连接刚建立时的等待时间,不等同于下载带宽。以常规 TCP 加 TLS 1.3 的新连接为例,TCP 建连通常需要 1 个往返,完整 TLS 握手通常还需要 1 个往返;DNS、代理请求和目标站连接另计。TLS 会话恢复、连接复用和网络丢包都会改变实际结果,不能把这些往返机械相加当作页面加载时间。

WebSocket 的 HTTP 升级会引入额外过程。连接复用可以让多个逻辑连接共享底层连接,但也会改变拥塞和故障影响范围。因此,比较“VMess 加 WebSocket 加 TLS”与“Shadowsocks 直连 TCP”,比较的是整套连接配置,不只是协议头大小。

结论:先检查传输组合,再判断握手成本

如果短连接首开慢,先检查 DNS、TLS 建连和是否频繁重连;如果大文件持续传输慢,先检查线路带宽、丢包和服务端负载。两类问题不宜用同一个“延迟”数值解释。

移动端耗电:无线唤醒比协议名更重要

没有统一可信的“最省电协议”排行。加密会消耗 CPU,但设备的 AES 硬件加速、ChaCha20 实现和吞吐负载都会影响结果。在蜂窝网络上,反复唤醒无线模块、保持连接、信号较弱时重传,以及应用后台同步,也可能成为主要耗电来源。

TUN 接管的流量范围通常比单个应用代理更大,DNS 请求、UDP 和后台连接也可能进入内核。由此产生的耗电变化不能全部归给 VLESS 或 Trojan。测试时还要避免同时开启详细日志、频繁测速和大规模节点探测,否则测到的是额外任务的成本。

  1. 固定设备、网络类型和屏幕亮度,先记录未进行测试时的电量、信号状态与后台应用。
  2. 每轮使用相同的 20 分钟操作:例如 10 分钟浏览、5 分钟固定画质视频、5 分钟息屏待机。这里是测试方案,不是本站实测结果。
  3. 保持相同的 TUN 或应用代理方式、DNS 和路由规则;每轮只更换一个协议配置,并记录实际流量。
  4. 每个候选重复 3 轮,查看系统电池用量和内核日志中的重连情况。低于电量显示精度的差异,不应直接下结论。

按现有节点与客户端选择

下面的“推荐”仅针对已经具备对应服务端参数、使用兼容 Xray 内核的日常连接场景,不表示协议排名。若订阅只提供某一种可用协议,优先使用已验证的配置,不必为了更换名称重新搭建整条链路。

VLESS:已有完整安全层参数

推荐

使用服务端提供的完整 TLS 或 REALITY 配置,核对 flow 和内核支持。参数不齐时,不要靠反复切换选项猜测。

适合:使用 Xray 内核,已有匹配的 VLESS 服务端配置

VMess:保留已验证的连接

现有 VMess AEAD 节点工作正常时,可以继续使用。排错重点是系统时间、UUID、alterId 与传输参数,而不是先更换协议。

适合:现有订阅以 VMess 为主,已有稳定连接记录

Trojan:已有 TLS 部署

按密码、服务器名称与证书配置连接。TLS 是连接链路的重要部分,需要维护证书有效期和两端名称的一致性。

适合:服务端已经配置可验证的 TLS 通道

Shadowsocks:明确方法与 UDP 需求

先核对加密方法和密钥格式,尤其区分传统 AEAD 与 2022 方法。游戏、语音等场景还要独立验证 UDP 转发。

适合:参数明确,客户端支持对应方法的 TCP 或 UDP 代理

在 v2rayN 中选中节点后,打开节点编辑窗口检查协议与传输参数;界面字段可能随版本变化。安卓端使用 v2rayNG 或 v2flyNG 时,应先确认内核对该协议、加密方法和安全扩展的支持,不能认为同一订阅在两个内核中必然表现一致。

同条件验证:不要只看 Tcping

Tcping 主要反映到指定端口的 TCP 可达性和建连耗时。它不能验证 UUID、密码、TLS 名称和代理请求是否正确,也不能代表 UDP 可用。真连接测试更接近实际代理请求,但结果仍取决于测试目标、DNS、路由和连接复用情况。

  1. 固定入口:在 v2rayN 使用相同的系统代理或 TUN 状态,检查本地监听端口是否与应用设置一致。例如本地端口设为 10808 时,应用不能仍指向旧端口;这只是示例设置,不代表所有版本的默认值。
  2. 确认规则命中:确保测试流量确实经过选中的代理出站。若路由规则将目标设为直连,测试结果就无法说明该节点表现。
  3. 分别测量:记录首次请求、连续请求、大文件传输和 UDP 应用的结果,不把不同项目混成一个分数。
  4. 交错复测:按 A、B、A、B 的顺序测试,每个候选至少进行 5 次请求,记录中位数和失败次数,减少网络时段变化的影响。

结论:先选可用配置,再比较重复结果

先排除认证失败、证书错误和路由未命中的候选,再比较同一任务的重复测试。若协议对应不同服务器,结果应记录为“节点对比”,不要写成协议性能结论。

协议选型常见问题

把 VMess 节点类型改成 VLESS,能直接连接吗?

不能。服务端也必须提供 VLESS 入站,UUID、安全层及传输参数需要匹配。应导入服务端给出的 VLESS 配置,而不是只修改客户端的协议下拉框。

Trojan 的 Tcping 正常,为什么真连接失败?

先打开客户端日志,区分连接超时、TLS 验证失败和认证失败。依次核对端口、密码、服务器名称、设备时间及证书有效期;TCP 端口能连通,不代表 TLS 和代理认证已经通过。

Shadowsocks 能打开网页,游戏为什么仍然不通?

先确认游戏是否使用 UDP,再检查应用流量是否进入代理、服务端是否允许 UDP,以及当前加密方法和内核是否支持对应转发。网页的 TCP 请求成功不能证明 UDP 路径正常。

换成 VLESS 后手机更耗电,需要马上换回去吗?

先对照切换前后的 TUN、路由、后台限制和日志级别,查看是否出现持续重连。保持同一流量负载做重复测试;如果同时更换了线路和传输方式,暂时不能把耗电变化归因于 VLESS。

下载v2rayN