# VMess 和 VLESS 的区别，同一串 UUID 的两种用法

> 来源 https://jichangtuijianweb.co/kepu/vmess-vless-qubie/，更新于 2026 年 9 月 20 日。机场推荐网（https://jichangtuijianweb.co/）原创内容。
> 分类 协议与内核。

两种协议都拿一串 UUID 认用户。VMess 自己带加密，认证时要核对系统时间，设备的钟偏了会整组超时。VLESS 不加密也不看时间，只能跑在 TLS 或 REALITY 里面。

两个协议认用户靠的是同一样东西，一串 UUID。节点详情里 `uuid` 那一行，[VMess](https://jichangtuijianweb.co/cidian/#vmess) 节点有，[VLESS](https://jichangtuijianweb.co/cidian/#vless) 节点也有，格式一模一样。差别出在这串 UUID 上了线路以后怎么用。我把 V2Fly 的 VMess 协议规范和 Xray 的 VLESS 协议文档找出来，两种请求头摆在一起，设计思路差得很远。

## VMess 把 UUID 和当前时间揉成一段认证信息

V2Fly 的开发者文档管 VMess 叫无状态协议。客户端不用先跟服务器打招呼，发出去的头一个包就带着全部信息。按最初的格式，包的最前面是 16 个字节的认证信息。

```
16 字节   认证信息   HMAC(MD5, 用户 ID, UTC 时间)
不定长    指令部分   AES-128-CFB 加密，里面有目标地址、数据的加密方式和密钥
不定长    数据部分   按指令部分指定的方式加密
```

认证信息的算法是拿用户 ID 当密钥，对当前的 UTC 时间做一次 HMAC，时间还要在前后 30 秒的范围里随机偏一下。服务器想认出这 16 个字节，只能拿自己存的 UUID 和自己的时钟照同样的办法算一遍，算出来对得上，才知道来的是哪个用户。指令部分的密钥也从 UUID 推出来，初始向量则从时间推出来。

VMess 怕时钟不准，根子就在这里。客户端和服务器的时间差得太远，服务器怎么算也对不上那 16 个字节，连接只能丢掉。V2Fly 的配置文档给的容差是 90 秒，指系统 UTC 时间的误差，Xray 文档放宽到 120 秒，两家都注明和时区无关。排查的时候这是一条省事的线索，VMess 那几个节点一起超时，别的类型的节点没事，多半是设备的钟走偏了。完整的排查顺序见[机场连不上怎么查](https://jichangtuijianweb.co/kepu/lianbushang-paicha/)。

MD5 和 AES-CFB 这套算法后来被换掉了。2020 年 9 月 12 日发布的 v2ray-core v4.28.1 规定，客户端把 alterId 设成 0 就启用新的 VMessAEAD 头部。V2Fly 文档里还有一个日期，自 2022 年 1 月 1 日起，服务器端默认不再兼容 MD5 认证。开发者文档的那一节如今直接标着 MD5 认证方式已弃用。

节点里的 `alterId` 就是这段历史留下来的字段。mihomo 文档解释它只用了半句话，不为 0 则启用旧协议。sing-box 列了张小表，0 代表 AEAD，1 代表旧协议，比 1 大的值和 1 等效。到了 Xray 这边，VMess 出站那一页压根不列这个字段。Surge 的处理不一样，它用一个叫 `vmess-aead` 的开关，手册里写的默认值是 false。

```
日本 01 = vmess, jp01.example.net, 443, username=这里填 UUID, tls=true, vmess-aead=true
```

机场的订阅转换通常会替你带上这个开关。自己手写 Surge 配置的人要记得加，按 V2Fly 的默认设置，2022 年以后的服务器已经不收旧头部。

VMess 节点里另一行 `cipher` 管的是数据部分用什么算法加密，订阅里一般写 `auto`。V2Fly 和 Xray 的文档对 `auto` 的解释相同，运行在 AMD64、ARM64 或 s390x 上选 `aes-128-gcm`，其余平台选 `chacha20-poly1305`。V2Fly 还顺手给了建议，前一个适合电脑，后一个适合手机。这一栏留着 `auto` 就行，手动改成服务端不收的算法反而会连不上。

## VLESS 的请求头是几十个字节的明文

Xray 的协议文档给出的 VLESS 请求格式是下面这样。

```
1 字节    协议版本
16 字节   UUID
1 字节    附加信息长度 M
M 字节    附加信息（ProtoBuf）
1 字节    指令
2 字节    端口
1 字节    地址类型
不定长    地址
```

UUID 原样躺在第 2 到第 17 个字节上，不做哈希，不掺时间，整个头部也不加密。服务器收到以后查一下这 16 个字节是不是自己的用户，是就开始转发。用不着附加信息时长度填 0，文档特意说明这种情况下没有 ProtoBuf 序列化的开销。从指令往后的那几项，文档说和 VMess 的写法完全一致。Xray 还允许 `id` 填一段 30 字节以内的任意字符串，内核按 UUIDv5 的规则把它映射成 UUID，文档说两种写法等价，所以个别节点的这一栏看上去不像 UUID 也不用奇怪。

头部是明文，VLESS 就不能单独上路。Xray 文档给它定了一条硬规矩，外面一定要有传输安全层。例外只有两种，服务器在私有地址上并且整条链路可信，或者打开了后面要讲的 VLESS Encryption。V2Fly 那边的提醒更短，VLESS 没有自带加密，请用于 TLS 这样的可靠信道。

配置里那行 `encryption` 是专门为这件事设的。V2Fly 文档规定它只能填 `none`，还不许留空，并且解释了为什么非写不可，一来让用的人清楚这一层没有加密，二来以后真加了加密方式，老配置不至于出错。所以在 Clash 格式的订阅里看 VLESS 节点，总能找到 `tls: true`，走 REALITY 的还会多出一段 `reality-opts`。那一套参数怎么读，放在 [REALITY 与 Vision](https://jichangtuijianweb.co/kepu/vless-reality-vision/) 那篇里。

明文头部加上外层 TLS，还带来一个 VMess 没有的功能，叫回落。Xray 文档的说法是，TLS 解密之后，首包不足 18 个字节、协议版本无效或者身份认证失败的流量，会被转交给事先指定的另一个服务，比如一台普通的网站服务器。18 这个数正好是版本号、UUID 和附加信息长度三项加起来的字节数。拿着错误 UUID 来试探的人，看到的就是那个网站。文档把它的用处概括成两条，高强度的防主动探测，以及一个端口给多种服务共用。回落只在 TCP 加 TLS 的组合下可用，Trojan 也支持。

VMess 节点一旦开了 TLS，数据就被加密两遍，VMess 自己一遍，TLS 再一遍。V2Fly 给 VMess 的 `security` 留过两个不加密的选项，`none` 不加密但保留校验，`zero` 连消息认证也省掉，后者是 v4.35.0 加进来的。VLESS 走得更远，协议里干脆不设加密这一层。

## 2020 年下半年的三个发布日期

两个协议后来各走各路，从三个日期能看出个大概。

2020 年 8 月 6 日，v2ray-core 发布 v4.27.0，更新说明的功能栏头一条写着 VLESS PREVIEW 1.3。同年 9 月 12 日的 v4.28.1 让 VMessAEAD 在 alterId 为 0 时自动启用。11 月 9 日，XTLS 组织名下的 Xray-core 仓库创建，VLESS 此后的新功能都加在了这一边。

今天去翻两家的文档，态度正好相反。V2Fly 在 VLESS 那一页的开头放了一则声明，说 VLESS 已被弃用、可能被移除，建议考虑拿 [Trojan](https://jichangtuijianweb.co/kepu/trojan-xieyi/) 代替。Xray 的 VLESS 出站文档里，`flow` 有 `xtls-rprx-vision` 和 `xtls-rprx-vision-udp443` 两个取值，还多了一套叫 VLESS Encryption 的加密，握手方式写作 `mlkem768x25519plus`，文档称它支持抗量子算法，服务端可以用 `xray vlessenc` 命令生成配置。mihomo 的 VLESS 文档已经有对应的 `encryption` 字段，sing-box 的 VLESS 出站文档里目前没有这一项。

查 VLESS 的资料前，先弄清自己的客户端跑的是哪个[内核](https://jichangtuijianweb.co/kepu/daili-neihe-shi-shenme/)，再去翻那一家的文档。拿 V2Fly 的页面去对 Xray 的节点，字段会对不上。

## 各家客户端认哪一个

下面这张表只写我在官方文档里查到的内容。

| 内核或客户端 | VMess | VLESS | 查的是哪份文档 |
|---|---|---|---|
| Xray | 支持 | 支持，含 flow 与 VLESS Encryption | Xray 出站文档 |
| mihomo | 支持 | 支持，flow 可填 `xtls-rprx-vision` | mihomo 节点文档 |
| sing-box | 支持 | 支持，flow 可填 `xtls-rprx-vision` | sing-box 出站文档 |
| Stash | 支持 | 支持，含 Vision 和 REALITY | Stash 协议页 |
| Loon | 支持 | 支持，含 Vision 和 REALITY | Loon 节点文档 |
| Surge | 支持 | 手册目录里没有这一页 | Surge 手册 |

安卓上的 [v2rayNG](https://jichangtuijianweb.co/kehuduan/v2rayng/) 用的是 Xray 内核，v2rayN 的 README 写的是同时支持 Xray 和 sing-box，Clash Verge Rev、FlClash 这一批跑的是 mihomo，Hiddify 和 Karing 跑的是 sing-box。它们对两种协议都没有障碍。要留神的只有 Surge 用户，买之前先问清机场发不发 VLESS 以外的节点。Shadowrocket 的 App Store 介绍里没有列协议清单，我没法从官方页面核实它的支持范围，这里不写。

两种节点里还可能有一行 `packet-encoding`，管的是 UDP 怎么打包。sing-box 文档在两个取值后面各注了出处，`packetaddr` 对应 v2ray 5 及更新的版本，`xudp` 对应 xray，VLESS 出站默认用 `xudp`。这一栏由机场按自己的服务端来定，用户不用改。

## 本站的机场资料里 VLESS 有 6 家，VMess 是 0 家

本站收录的 28 家机场，协议一栏有记录的是 8 家。写 VLESS 的有 6 家，星岛梦、Sogo云、灵动云、梯子云、飞为和微风网络，其中灵动云还记了 Trojan，星岛梦还记了 AnyTLS。写 VMess 的一家也没有。这些记录来自机场自己的说法和我整理的资料，核对时间多数是 2026 年 8 月 8 日和 9 日，星岛梦是 9 月 19 日，我没有逐家抓包验证过。

另外 20 家的资料里没提协议，所以这组数字说明的是机场愿意把什么写进介绍。VLESS 是眼下机场愿意写出来的名字，VMess 已经没人拿来宣传。订阅里实际有哪几种节点，导入客户端后看类型那一栏。六种协议放在一起的对照，在[机场常见协议总览](https://jichangtuijianweb.co/kepu/daili-xieyi-zonglan/)里。

## 常见问题

### Surge 能导入 VLESS 节点吗

按 Surge 手册目前的内容，不能。手册的协议目录里有 VMess、Trojan、Hysteria 2、AnyTLS 等十几种，没有 VLESS 这一页。机场如果只发 VLESS 节点，iPhone 上可以换 Stash 或 Loon，两家的文档都写明支持 VLESS 和 REALITY 参数。

### VLESS 节点里写着 encryption none，数据是不是没加密

VLESS 这一层确实不加密，加密由外面的 TLS 或 REALITY 负责。V2Fly 文档规定这一行必须填 none 且不许留空，用意就是提醒使用者协议本身没有加密。只要节点同时开着 TLS 或带着 REALITY 参数，线路上看到的就是密文。

### 机场只给了 VMess 节点，我能自己改成 VLESS 吗

不能。用哪种协议是服务端定的，客户端只能照着订阅里的类型去连。把配置里的 type 从 vmess 改成 vless，服务器那头没有对应的入站，结果只会是连接失败。想用 VLESS 就挑节点里本来带 VLESS 的机场。

### VMess 和 VLESS 哪个更快

本站没有做过两种协议的对照测速，给不出数字。从协议本身看，VLESS 的请求头只有几十个字节而且不再加密一遍，VMess 开着 TLS 时数据要加密两次。这点差别落到日常看视频、刷网页上很难察觉，机场之间的速度差距主要还是线路带来的。

### 节点的 UUID 被别人看到了会怎样

对方拿到 UUID 和服务器地址就能用你的流量。两种协议认用户都只靠这一串 UUID，没有第二道密码。节点截图、配置文件和订阅链接一样不能外传，已经泄露的话去机场后台重置订阅，让旧的凭据作废。

## 参考来源

- [V2Fly 开发者文档，VMess 协议规范](https://www.v2fly.org/developer/protocols/vmess.html)
- [V2Fly 文档，VMess 配置](https://www.v2fly.org/config/protocols/vmess.html)
- [V2Fly 文档，VLESS 页面及其弃用声明](https://www.v2fly.org/config/protocols/vless.html)
- [Xray 文档，VLESS 协议规范](https://xtls.github.io/development/protocols/vless.html)
- [Xray 出站文档里的 VLESS 一页](https://xtls.github.io/config/outbounds/vless.html)
- [Xray 文档，VLESS 入站](https://xtls.github.io/config/inbounds/vless.html)
- [Xray 文档，VMess 出站](https://xtls.github.io/config/outbounds/vmess.html)
- [v2ray-core v4.27.0 发布说明（2020-08-06）](https://github.com/v2fly/v2ray-core/releases/tag/v4.27.0)
- [v2ray-core v4.28.1 发布说明（2020-09-12）](https://github.com/v2fly/v2ray-core/releases/tag/v4.28.1)
- [GitHub API，XTLS/Xray-core 仓库创建时间](https://api.github.com/repos/XTLS/Xray-core)
- [mihomo 文档，VMess 节点](https://wiki.metacubex.one/config/proxies/vmess/)
- [mihomo 文档，VLESS 节点](https://wiki.metacubex.one/config/proxies/vless/)
- [sing-box 文档，VMess 出站](https://sing-box.sagernet.org/configuration/outbound/vmess/)
- [sing-box 文档，VLESS 出站](https://sing-box.sagernet.org/configuration/outbound/vless/)
- [Surge 手册，VMess 策略](https://manual.nssurge.com/policies/vmess.html)
- [Surge 手册目录](https://manual.nssurge.com/)
- [Stash 文档，支持的代理协议](https://stash.wiki/proxy-protocols/proxy-types)
- [Loon 文档，节点格式](https://nsloon.app/docs/Node/)
- [v2rayN 仓库 README](https://github.com/2dust/v2rayN)
