先区分代理协议、传输方式与安全层,再核对服务端参数和客户端内核。本文适合正在选择订阅节点、迁移桌面与 Android 配置,或准备自建服务的用户。读完可以判断 VMess、VLESS、Trojan、Shadowsocks 分别依赖哪些字段,哪些组合不能互换,以及连接失败时应该先检查哪一层。
一、代理协议、传输方式与安全层不是同一项
VMess、VLESS、Trojan、Shadowsocks 规定客户端与代理服务端怎样认证、封装和转发请求。TCP、WebSocket、gRPC 描述连接或承载方式;TLS、REALITY 则属于安全机制。节点名称经常把几层信息连在一起,因此不能只看开头的协议名判断完整配置。
例如,VLESS + WebSocket + TLS 与 VLESS + TCP + REALITY 都使用 VLESS,但服务端入口、握手参数与中间网络要求不同。把第一种节点的传输方式改成 TCP,不会自动得到第二种节点;服务端没有对应监听时,客户端只会连接失败。
- 代理协议:决定使用 UUID、密码或特定密钥材料,以及请求的封装格式。
- 传输方式:决定直接建立流连接,还是使用 WebSocket、gRPC 等承载。可用组合受内核与服务端实现限制。
- 安全层:决定如何保护链路、验证服务端身份。TLS 通常需要正确的服务器名称和可信证书。
- 路由与接管:系统代理、TUN、域名分流属于客户端流量入口和出站选择,不是四种协议自身的属性。
二、四种协议的加密与配置差异
比较加密方式时,需要同时问两个问题:代理协议本身是否加密载荷,外层是否还有 TLS 等保护。某个字段显示 none,不一定代表整条连接没有加密;反过来,使用 443 端口也不能证明连接已经启用 TLS。
| 协议 | 认证与加密 | 常见组合 | 重点核对字段 |
|---|---|---|---|
| VMess | 以 UUID 识别用户;现代配置使用 VMess AEAD,载荷加密由 security 设置决定 | TCP;WebSocket + TLS | UUID、security、alterId、传输、安全层、系统时间 |
| VLESS | 以 UUID 识别用户;协议本身不负责载荷加密 | TCP + TLS;WebSocket + TLS;Xray 下的 TCP + REALITY | UUID、encryption、flow、TLS 或 REALITY 参数 |
| Trojan | 以密码认证;常见部署依赖 TLS 保护链路 | TCP + TLS;其他承载需双方实现支持 | 密码、端口、服务器名称、证书验证、传输 |
| Shadowsocks | 按 method 与密码或密钥材料加密;AEAD 与 2022 系列的要求不同 | 原生 TCP、UDP 转发;附加承载需额外支持 | method、密码或密钥格式、端口、UDP 能力 |
VMess:留意 AEAD 与旧字段
现代 VMess 配置通常使用 alterId: 0 表示 AEAD 用法。旧教程里的非零 alterId 不应直接套入当前配置。VMess 认证还依赖时间,Windows 或 Android 的系统时间明显偏差时,应先开启自动校时,再判断 UUID 是否错误。是否叠加 TLS,仍以服务端部署为准。
VLESS:不内置载荷加密,不等于应当明文运行
VLESS 的 encryption: "none" 是常见配置值,链路保护交给 TLS 或 REALITY 等机制。普通公网部署不应仅凭“VLESS 开销低”就移除安全层。xtls-rprx-vision 是特定组合中的 flow 值,不能照抄到所有 WebSocket 节点,也不能只在客户端一侧启用。
Trojan 与 Shadowsocks:密码之外还有匹配条件
Trojan 的密码正确但 TLS 服务器名称错误,仍可能在认证前就握手失败。Shadowsocks 则必须准确匹配加密方法;aes-128-gcm 与 2022-blake3-aes-128-gcm 不是可互换名称,后者对密钥格式有具体要求,不能随意填入普通口令。
结论:先找安全层,再比较协议名称
检查节点编辑页的 TLS 或 REALITY 设置及证书验证状态。不要因为 VLESS 的 encryption 为 none 就关闭安全层,也不要把关闭证书验证当作 Trojan 的长期修复办法。
三、按使用场景选择,而不是给协议排速度榜
使用订阅时,可选范围首先由服务提供方决定。两条不同协议的节点如果服务器、线路、负载和出口都不相同,测速结果不能证明某个协议普遍更快。自建服务则可以先确定证书、域名与网络入口条件,再决定承载组合。
VLESS:新建 Xray 配置
推荐在服务端和客户端都支持的前提下,按部署条件选择 TLS 或 REALITY。先核对 UUID、安全参数与 flow,不把“参数少”误当成“可以省略安全层”。这里的推荐限定于可控制服务端的新建配置。
适合:使用 Xray、可管理服务端、能够维护完整连接参数
VMess:保留已验证的节点
现有 VMess AEAD 节点连接稳定,且桌面与 Android 均能导入时,可以继续使用。迁移协议之前先确认旧字段和时间设置,不必仅为改变协议名称重建服务。
适合:现成订阅、已有 WebSocket + TLS 部署、兼容既有配置
Trojan:已有域名与证书
常规 TCP + TLS 部署的配置结构比较直接,但仍需维护证书有效期、域名解析与服务器名称。密码之外,TLS 握手链路同样需要排查。
适合:具备证书维护条件、服务端已提供 Trojan 入口
Shadowsocks:明确的加密转发需求
原生连接的字段较集中,重点是 method、密钥与端口。需要 UDP 时必须单独验证服务端转发和网络放行情况,不能只根据网页能够打开判断。
适合:已有匹配服务端、希望保持原生 TCP/UDP 转发结构
四种协议都不是匿名性的完整保证。服务端运营方式、DNS 路径、应用自身登录状态和客户端分流设置仍会影响实际使用结果。选型时应记录部署约束,而不是根据名称推断所有安全属性。
四、v2rayN、v2rayNG、v2flyNG 的支持边界
v2rayN 是桌面客户端,v2rayNG 是使用 Xray 内核的 Android 客户端,v2flyNG 使用 v2fly 内核。客户端负责管理节点与生成配置,真正执行协议的是内核。能识别订阅条目,不代表当前内核一定接受其中的所有扩展参数。
| 客户端 | 核对位置 | 选型注意事项 |
|---|---|---|
| v2rayN | 节点编辑窗口中的协议、传输、安全设置;启动日志中的内核信息 | 桌面端按实际选用内核判断;VLESS + REALITY 应核对 Xray 支持与参数 |
| v2rayNG | 长按节点 → 编辑;日志页中的启动错误 | 四类基础协议可按对应配置使用;新扩展取决于随应用提供的 Xray 版本 |
| v2flyNG | 节点编辑页、应用版本与启动日志 | 以 v2fly 内核实际能力为准;不能把 Xray 的 REALITY、Vision 参数直接迁入 |
迁移方案:先核对协议族,再核对扩展字段
桌面端:v2rayN
- 导入后查看节点编辑窗口,确认地址、端口、传输与安全层。
- 涉及 REALITY 时核对公钥、shortId、服务器名称与指纹设置。
- 启动后读取内核日志,先处理配置解析错误,再测试网页。
Android:v2rayNG 或 v2flyNG
- 使用与服务端参数匹配的内核,不只比较应用界面中的协议名称。
- 迁移到 v2flyNG 前确认是否含 Xray 专属扩展。
- 检查系统 VPN 授权与分应用设置,避免把流量入口问题归因于协议。
共用订阅地址可以减少重复录入,但两端能否使用同一节点仍取决于内核支持;订阅更新也需要各端分别执行。
五、用端口与日志分清连接失败的位置
下面三个数字用于说明不同层的端口含义,不是所有客户端的默认值,也不是部署要求。服务端入站端口和本机代理监听端口属于连接两端,不能相互替代。填写之前应查看节点配置与本地实际监听值。
- 先确认内核启动。日志出现配置解析失败、未知字段或端口占用时,先修复配置。此时测试协议速度没有意义。
- 再确认应用交出流量。桌面端检查系统代理是否指向实际监听端口;Android 检查 VPN 是否建立,以及目标应用是否被排除。
- 检查服务端可达性。连接超时先核对地址、入站端口、防火墙与服务是否运行。超时本身不能证明 UUID 错误。
- 区分安全握手与用户认证。证书错误优先检查时间、服务器名称和证书链;认证错误再核对 UUID、密码、密钥及加密方法。
- 最后检查传输参数。WebSocket 核对 path 与 Host;gRPC 核对 serviceName;REALITY 核对服务端提供的公钥、shortId 等字段。
例如,本机 SOCKS 监听确认为 127.0.0.1:10808 时,可以用下面的命令验证请求能否经过客户端。这里使用域名测试页,不含订阅凭据;若实际端口不同,应改用实际值。
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://example.com/
socks5h 表示把目标域名交给 SOCKS 代理处理。这个测试绕过系统代理设置,但不会绕过内核路由:如果该域名被规则分到直连,成功返回也不能证明远端代理出站可用。应同时查看日志中的命中规则与出站,再作判断。
六、性能比较应保持哪些条件一致
不同线路之间,时延、拥塞、丢包和服务端负载往往比协议封装差异更明显。VMess、VLESS、Trojan、Shadowsocks 的名称无法直接换算成吞吐量。硬件是否具备加密加速、是否启用额外承载,以及测试流量是否经过同一出站,都会影响结果。
- 同一设备与接入网络:不要把桌面有线网络的结果和 Android 移动网络直接对比。
- 同一服务端与出口:尽量只改变协议组合,保持地区、带宽和测试目标一致。
- 同一测试窗口:每组至少重复 3 次,分别记录连接耗时、持续传输速度与失败次数。
- 分别验证 TCP 与 UDP:网页加载正常只说明相应请求成功,不能代表 UDP 转发已经通过。
- 保留完整组合名称:记录“VLESS + TCP + REALITY”,不要只写“VLESS”,否则结果缺少关键条件。
结论:保留稳定组合,再做单变量测试
先导出可恢复的配置,每次只调整一个有服务端对应支持的选项。连续 3 次测试都改善,且日志确认走同一出口后,再考虑替换日常使用的节点。
七、协议选型常见问题
VLESS 的 encryption 是 none,需要手动改成 AES 吗?
不需要。VLESS 的这个字段不是 VMess 或 Shadowsocks 的加密方法选择器。打开节点编辑页,检查安全层是否按服务端要求设置为 TLS 或 REALITY,并核对对应参数;不要在 encryption 中填入其他协议的算法名称。
Trojan 用了 443,为什么还报证书错误?
端口不负责验证身份。先开启设备自动校时,再把 TLS 的服务器名称与服务端证书覆盖的域名对照,检查证书是否过期、链是否完整。连接地址与服务器名称可以不同,但后者必须符合部署要求,不应靠关闭验证长期运行。
同一条订阅在 v2rayNG 能用,v2flyNG 不能用怎么办?
先打开该节点的编辑页,检查是否包含 REALITY 或 xtls-rprx-vision。此类 Xray 扩展不能当作通用 VLESS 参数迁移。选择服务端另行提供的兼容节点,或使用匹配内核;不要只删除报错字段,因为服务端可能仍要求它们。
Shadowsocks 能打开网页,游戏流量却失败,是协议选错了吗?
先确认游戏是否使用 UDP,再检查服务端是否启用 UDP 转发、防火墙是否放行相应端口,以及客户端的流量接管方式是否覆盖该应用。TCP 网页成功不能替代 UDP 测试;只有确认这些条件后,才比较其他服务端提供的协议组合。
现有 VMess 节点稳定,有必要全部换成 VLESS 吗?
没有仅凭名称就迁移的必要。先确认现有配置使用现代 AEAD 用法、系统时间正确且安全设置符合部署要求。如果确有新功能或维护需求,再新增一条匹配的 VLESS 服务端配置,测试通过后迁移,不要直接覆盖唯一可用节点。