VMess 和 VLESS 的区别归根结底在于一个设计选择。VMess 用内置的加密方式自己加密你的流量,而 VLESS 自身没有加密,依靠下层的 TLS 或 REALITY。这让 VLESS 更轻量,也让它拥有了 REALITY 和 Vision 流控等较新的功能。新搭服务器时,VLESS 通常是更好的选择;已有的、配了 TLS 的 VMess 服务器照样能好好用。
下面详细比较这两种协议。
两者的由来
VMess 是 V2Ray(Project V)最早的协议,大约诞生于 2016 年。它的设计目标是自身就足够安全,所以不需要 TLS 也能为每个连接做认证和加密。
VLESS 于 2020 年在 V2Ray 社区提出,作为更轻量的继任者。同年 Xray 从 V2Ray 分叉出来,VLESS 的开发也在 Xray 中延续。Xray、V2Ray、sing-box 和 Mihomo 都同时支持这两种协议,但新功能都加在 VLESS 上。VLESS 和 REALITY 的细节请阅读 VLESS REALITY 是什么?
VMess 和 VLESS 区别一览
| VMess | VLESS | |
|---|---|---|
| 内置加密 | 有:aes-128-gcm、chacha20-poly1305、auto 或 none |
无(Xray 中有可选的 VLESS Encryption) |
| 用户 ID | UUID | UUID,或由 Xray 转换成 UUID 的文本 |
| 是否需要 TLS 才能保护隐私 | 不需要,但建议使用 | 需要,或使用 REALITY |
| 依赖时钟时间 | 是 | 否 |
| alterId | 有;填 0 | 无 |
| REALITY | 不支持 | 支持 |
| Vision 流控 | 不支持 | 支持 |
| XHTTP 传输 | Potatso 中不支持 | 支持 |
| WebSocket、gRPC、HTTP Upgrade、HTTP/2 | 支持 | 支持 |
| 证书固定、ECH(Potatso 中) | 不支持 | 支持 |
| UDP | 支持,Potatso 中默认关闭 | 支持,Potatso 中默认关闭 |
| 搭配 TLS 时的开销 | 加密两次 | 加密一次 |
标注“Potatso 中”的行描述的是 Potatso 的支持情况;VMess 和 VLESS 参考页列出了每一项设置。
加密:自带加密 vs TLS
VMess 用你在服务器上选定的加密方式加密每个连接:
aes-128-gcm在任何 Apple 设备上都很快,因为这些设备有 AES 硬件加速。chacha20-poly1305适合没有 AES 硬件加速的设备。auto让客户端自行选择,Potatso 会选aes-128-gcm。none关闭 VMess 自身的加密。只应在搭配 TLS 时使用,由 TLS 来加密连接。
VLESS 省掉了这一层。VLESS 连接的私密程度完全取决于下层,所以它几乎总是搭配 TLS 或 REALITY 使用。两者都不用时,VLESS 会以明文发送你的流量。
所以 TLS 上的 VMess 会把数据加密两次:一次由 VMess 完成,一次由 TLS 完成。这样做安全,但有浪费。TLS 上的 VLESS 只加密一次。
关于 VLESS Encryption。 2025 年 Xray 加入了 VLESS Encryption,这是 VLESS 的一层可选后量子加密。它仍然很新,大多数服务器没有使用。如果链接或订阅中带有它,Potatso 也支持。
alterId 与认证
VMess 最初的认证使用一种基于 MD5 的方案,由一个叫 alterId 的设置控制。2020 年 V2Ray 引入了 AEAD 认证,在 alterId 为 0 时使用;2022 年服务器端弃用了旧方案。
- 如果服务商给了你 alterId,能填 0 就填 0。
- Potatso 始终使用 AEAD 认证。用户 alterId 仍大于 0 的服务器同样接受它,所以服务器端不需要做任何修改。
VMess 还会检查时间戳,所以你设备的时钟必须与服务器相差不大。iPhone 会自动设置时间,因此这一点很少出问题;但如果服务器时钟不对,它会拒绝所有 VMess 客户端。
VLESS 没有 alterId,也不检查时间。它只发送用户 ID,其余交给 TLS 或 REALITY。
传输方式
两种协议支持同一类传输方式:
- TCP,不使用传输方式,直接连接或搭配 TLS。
- WebSocket、HTTP Upgrade 和 gRPC,常用来经过 CDN。
- HTTP/2,Xray 已经用 XHTTP 取代了它。
在 Potatso 中,两者的差别在于 Xray 最新的、基于 HTTP 的传输方式 XHTTP:它可以搭配 VLESS 使用,但暂不支持 VMess。两者都不支持 mKCP 和 QUIC。
REALITY 和 Vision:VLESS 独有
如今选择 VLESS 的最大理由,是建立在它之上的功能:
- REALITY 让服务器借用一个真实网站的 TLS 握手,因此不需要自己的域名和证书,陌生访问者看到的也是那个网站。VMess 无法使用 REALITY。
- Vision(
xtls-rprx-vision)会填充你经代理发起的 TLS 握手,让“TLS 套 TLS”的特征更难被发现。
想用其中任何一个,都需要 VLESS。客户端怎么配置,请看 iPhone 配置 VLESS REALITY 教程。
速度与限制
VLESS 省掉了 VMess 的额外加密,所以 CPU 占用略低,额外开销也略小。不过在手机上你很难感觉到:服务器的距离、负载和网络路径影响要大得多。
在 Potatso 中,VMess 有一个实际的限制:单个 VMess 连接上传约 1 GiB 后,Potatso 会关闭该连接,而不是降低加密强度。下载没有限制。如果需要单次上传非常大的文件,请使用 VLESS 或 Trojan。
流量特征
两种协议在正确配置时都是加密的,但加密并不能隐藏一切。不带 TLS 的 VMess 有它自己可识别的形态。Potatso 不使用 VMess 的分块掩码(chunk masking)和填充选项,所以在没有 TLS 包裹时,VMess 流量的大小特征更容易被识别。TLS 上的 VLESS,尤其是搭配 Vision 的 REALITY 上的 VLESS,看起来更像普通的 HTTPS。两者都不是无法检测的。
该选哪个?
以下情况选 VLESS:
- 你要搭建一台新服务器;
- 你想用 REALITY,从而不需要域名和证书;
- 你想用 Vision、XHTTP 或证书固定。
以下情况继续用 VMess:
- 服务商只提供 VMess,或者你已经有一台能用的 VMess 服务器;
- 它使用了 TLS,或者通过 CDN 使用 TLS 上的 WebSocket。
应当避免:
- 在新服务器上使用 alterId 大于 0 的 VMess;
- 使用
none或zero加密方式且不带 TLS 的 VMess; - 不带 TLS、REALITY 或 VLESS Encryption 的 VLESS。
如果你要比较的不只这两种,代理协议对比把 VLESS、VMess 与 Trojan、Shadowsocks、Hysteria 2 和 AnyTLS 放在一起做了比较。
在 iPhone 上使用 VMess 或 VLESS
Potatso 可以从分享链接、二维码以及 Clash、V2Ray 或 Xray 订阅导入这两种协议;VMess 还可以从 Surge 配置导入。步骤和其他服务器一样:
- 安装 App Store 上的 Potatso。
- 粘贴你的
vmess://或vless://链接,扫描它的二维码,或导入你的订阅。 - 如果你的服务器会转发 UDP,请在该服务器的设置中打开 UDP 转发。
- 允许 VPN,然后在首页连接。
想看包含 REALITY 字段和常见错误的完整教程,请阅读 iPhone 配置 VLESS REALITY 教程。如果你的订阅里有很多服务器,请看 Clash 订阅怎么导入 iPhone。
常见问题
- VMess 和 VLESS 有什么区别?
- VMess 会用 aes-128-gcm 等加密方式自己加密你的流量。VLESS 没有内置加密,依靠下层的 TLS 或 REALITY,因此更轻量,也能用上 REALITY 和 Vision 流控等较新的功能。
- VLESS 比 VMess 快吗?
- 通常稍快一点,因为 TLS 上的 VLESS 只加密一次流量,而 TLS 上的 VMess 要加密两次。在手机上差别往往不大,服务器的距离和负载影响要大得多。
- 不带 TLS 的 VLESS 安全吗?
- 不安全。裸 VLESS 会以未加密的形式发送你的流量。请始终搭配 TLS 或 REALITY 使用,或者使用 Xray 的 VLESS Encryption。
- VMess 的 alterId 应该填多少?
- 填 0。alterId 为 0 表示使用当前的 AEAD 认证。大于 0 的值属于旧的 MD5 认证,服务器端已在 2022 年弃用;Potatso 始终使用 AEAD,这类服务器同样接受。
- VMess 能用 REALITY 吗?
- 不能。REALITY 适用于 VLESS(部分服务器上也适用于 Trojan),不适用于 VMess。想用 REALITY,就要搭建 VLESS 服务器。