Shadowrocket 博客 · 原理科普

从 Shadowsocks 到 VLESS:
代理协议为什么一直在换。

节点列表里经常能看到 Shadowsocks、VMess、VLESS、Trojan 这几种协议名称混在一起,很多人选节点时只看速度,从不关心协议本身是什么。这篇文章按大致时间线梳理这几种协议的设计思路差异,帮助理解节点信息里的"协议"这一项到底代表什么。

协议在 Shadowrocket 里到底管什么

添加节点或查看订阅内容时,每个节点信息里都会标一个协议类型,比如 ss(Shadowsocks)、vmessvlesstrojan。这个字段决定的是客户端和服务器之间用什么方式打包、加密、传输数据——不同协议在加密强度、流量特征、连接效率上各有取舍,但对使用者来说,日常操作(选节点、连接、看速度)是完全一样的,协议差异主要体现在稳定性和被识别的概率上。Shadowrocket 作为客户端,同时兼容以上几种主流协议,具体使用哪一种,取决于你导入的节点或订阅提供的是哪种类型。

几种协议的大致时间线

协议大致出现时间设计思路
Shadowsocks2010 年前后思路很简单:只做加密转发,协议尽量轻量,客户端和服务器实现都不复杂
VMess2017 年前后在 Shadowsocks 的基础上加入了用户身份校验(UUID)、协议层自带加密、时间戳防重放等更完整的机制
Trojan2019 年前后思路转向"伪装":让代理流量在外观上尽量接近正常的 HTTPS 网页访问流量
VLESS2020 年前后把协议层的加密去掉,只保留身份校验,加密完全交给外层的 TLS 连接来做,协议本身变得更轻

可以看出一个大致的演进方向:从"协议自己把内容加密好",逐渐转向"协议尽量简单,把安全性交给更标准、更难被特别对待的外层传输方式(比如 TLS)去处理"。

为什么旧协议会显得"过时"

这几种协议之间不是简单的"后出的更好",而是各自在解决上一代协议暴露出的问题:

这也是为什么"协议"和"是否安全"不能简单划等号——同一个协议,配置方式不同,实际表现也会不同;相对新的协议往往设计上更成熟,但也不是配置了就一定万无一失。

作为 Shadowrocket 用户,需要自己判断协议吗

绝大多数情况下不需要。协议类型是由你使用的订阅服务商决定的,节点信息里已经写明了协议种类,Shadowrocket 会按对应协议自动完成连接,不需要用户手动选择"用哪种协议连接"。这篇文章的意义更多是帮助理解"为什么同一家服务商的订阅里,有时候会同时提供好几种协议的节点"——通常是为了在不同网络环境下提供更多可选方案,而不是让用户从中随意挑选一个"更快"的。

如果你在意某类协议的兼容性问题(比如某个协议在当前网络环境下连接总是不稳定),比较实际的做法是在同一批节点里换用另一种协议类型试一下,而不是纠结协议本身孰优孰劣——服务器的部署质量往往比协议选择本身影响更大。

这篇文章会不会帮你选协议?

不会,也不建议这样理解。协议是节点信息里已经确定好的属性,本站的立场和其他文章一致:不代理、不推荐任何具体订阅服务商,这篇文章只是解释协议名称背后的技术差异,方便你看懂节点列表里的信息,不构成"哪种协议更好"的选购建议。

说明:本文协议演进信息基于公开的技术资料整理,具体协议实现细节以对应开源项目的官方文档为准,本文不涉及任何具体订阅服务商的评价。

还没下载 Shadowrocket? 客户端本身兼容以上所有主流协议,App Store 一次性付费 $2.99
查看下载指南 →