Shadowsocks 和 Trojan 怎么选
快速回答
Shadowsocks 结构简单、开销低、兼容性广;Trojan 借助真实域名与 TLS 伪装成普通 HTTPS,更适合识别严格的网络。两者是取舍关系,不是新旧优劣。
这两个协议经常被放进「哪个更好」的比较框架里,但它们本来就不是同一道题的两个答案。Shadowsocks 回答的是「怎么用最少的开销完成加密代理」,Trojan 回答的是「怎么让代理流量看起来不像代理」。理解各自押注的方向,选择就会从站队变成对号入座。
核心结论
- 两者的差别不是快慢档次,而是把重点放在哪一层:Shadowsocks 押注低开销,Trojan 押注伪装。
- Shadowsocks 自带加密、无额外伪装,层数少、兼容性最广,但流量特征相对固定。
- Trojan 把加密交给 TLS,用真实域名与有效证书让流量看起来就是普通 HTTPS 访问。
- Trojan 的代价是配置依赖:证书过期或域名不匹配会直接导致握手失败。
- 选择依据是网络适配而非理论性能,能稳定连上的协议就是最快的协议。
原理差异
Shadowsocks:自带加密,直接传输。 应用数据经过协议自带的加密(当前常见为 AEAD 方案)后直接走 TCP。结构里没有多余的层,这带来了两个直接好处:开销低、实现简单——后者正是它兼容性极广的原因。
Trojan:把加密交给 TLS,把外观做成 HTTPS。 它的核心思路是「看起来就是一次普通的网站访问」:服务端挂着真实域名与有效证书,客户端与它完成标准的 TLS 握手,代理数据在这条加密通道里传输。对外部观察者来说,这与访问任何 HTTPS 网站的流程一致。
设计目标的不同决定了后面所有差异:一个为效率让路,一个为外观让路。两者在常见机场协议完整解释的三层框架(加密、伪装、传输)里,是两种典型的分工方式。
伪装能力
- Shadowsocks 不做额外伪装。加密让内容不可读,但流量的行为特征(握手模式、包长分布等)相对固定。在识别宽松的网络里这无关紧要;在识别严格的网络里,这可能表现为连接成功率下降或速度被限制。
- Trojan 的伪装来自「成为」而不是「模仿」。它不是把流量伪装得像 HTTPS,而是真的用标准 TLS 流程传输——域名是真的、证书是真的、握手是真的。识别方需要付出高得多的成本才能区分它与正常网站访问。
需要说清楚的边界:伪装不是绝对的。识别技术在演进,任何协议的存活率都是特定时间、特定网络下的观察结果,而不是永久属性。
性能开销
- 封装层数:Shadowsocks 少一层 TLS 封装,握手也更简单,理论开销更低。
- 握手成本:Trojan 的 TLS 握手在建立连接时多一次往返,对频繁建立短连接的场景略有影响;连接建立后的传输开销两者差距很小。
- 实际体验:这些差异通常被线路质量完全掩盖。一条拥堵线路上的 Shadowsocks 不会比一条干净线路上的 Trojan 快——协议开销是小数点,线路质量才是整数位。
兼容性
这是两者差距最实际的一项:
- Shadowsocks 的客户端覆盖面最广:主流客户端全部支持,大量老设备、旧版客户端与路由器固件也支持。
- Trojan 需要相对较新的客户端。主流平台的现代客户端基本都已支持,但老设备与小众平台上的可选实现明显更少。
- 订阅格式:多数服务商在同一订阅里混合提供多种协议的节点,客户端按支持情况显示可用节点。购买前值得确认订阅里包含你设备能用的协议类型。
配置复杂度
对用户来说,两者在客户端里的使用体验几乎相同——导入订阅、选节点、连接。复杂度的差异在服务端,但它会以故障的形式传导给用户:
- Trojan 依赖域名与证书。证书会过期,域名解析会出问题,两者任何一个出错,节点就会突然全部连不上,且用户端无法自行修复。遇到这类情况,参考所有节点都超时怎么办先排除本地因素,再等服务商修复。
- Shadowsocks 没有证书环节,少了这一整类故障来源,排错时的变量也更少。
TLS 证书在这条链路里具体做什么、过期为什么会导致握手失败,见 TLS 和 WebSocket 在节点中有什么作用。
核心差异表
| 对比项 | Shadowsocks | Trojan |
|---|---|---|
| 加密 | 协议自带(常见为 AEAD 方案) | 交给外层 TLS |
| 伪装 | 无额外伪装,流量特征相对固定 | 伪装成标准 HTTPS 访问 |
| 依赖条件 | 无需域名与证书 | 需要真实域名与有效证书 |
| 封装开销 | 层数少,开销低 | 多一层 TLS 握手与封装 |
| 兼容性 | 几乎所有客户端与老设备都支持 | 需要相对较新的客户端 |
| 典型故障 | 识别严格的网络中可用性下降 | 证书过期或域名不匹配导致握手失败 |
选择建议
按网络环境对号入座,比比较协议本身有效:
- 网络识别宽松(多数家庭宽带的日常使用):优先 Shadowsocks,享受低开销与广兼容,不为用不上的伪装支付复杂度。
- 网络识别严格(连接成功率明显异常、特定协议疑似被限制):优先 Trojan,此时伪装能力直接决定可用性。
- 设备很老或客户端受限:Shadowsocks 几乎是默认选择。
- 拿不准:如果订阅同时提供两种协议,各用一段时间、覆盖晚高峰,以实际连通率与稳定性为准。
常见误解
- 「Trojan 比 Shadowsocks 新,所以更好」——两者押注的方向不同,不构成迭代关系。
- 「Shadowsocks 已经过时」——在识别宽松的网络里,低开销与高兼容仍是实打实的优势。
- 「Trojan 一定不会被识别」——伪装大幅提高识别成本,但不存在绝对不可识别的协议。
- 「换成 Trojan 速度会变快」——速度由线路决定,协议开销的影响是次要的。
- 「节点突然全挂是被限制了」——如果是 Trojan 节点,先想到证书过期的可能。相关术语见机场常用术语词典。