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 配置导入。步骤和其他服务器一样:

  1. 安装 App Store 上的 Potatso。
  2. 粘贴你的 vmess:// 或 vless:// 链接,扫描它的二维码,或导入你的订阅。
  3. 如果你的服务器会转发 UDP,请在该服务器的设置中打开 UDP 转发。
  4. 允许 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 服务器。

其他语言版本: English · 繁體中文 · 日本語 · Русский