Trojan 是什么
Trojan 是一种代理协议,设计目标非常明确:让代理流量在网络特征上与访问普通 HTTPS 网站完全一致。这与 Shadowsocks 等协议"自创一套加密握手方式再想办法伪装"的思路不同,Trojan 选择了一条更彻底的路径——直接复用标准的TLS协议栈,用真实的域名和有效的证书完成握手,代理数据只是在 TLS 加密隧道建立之后,作为"载荷"混在里面传输。
从网络观察者的角度看,一次 Trojan 连接的建立过程,与用户打开浏览器访问一个正常的 HTTPS 网站,在流量特征层面几乎没有区别。
工作原理
Trojan 服务端本质上会伪装成一台正常的 HTTPS 服务器(通常背后确实运行着一个真实的网站或反向代理),其具体逻辑是:
- 客户端与服务器之间先完成标准的 TLS 握手,这一过程使用真实有效的证书,与访问任何 HTTPS 网站的握手过程完全相同。
- TLS 加密隧道建立后,客户端在加密内容中携带一个预先约定的密码(Password)。
- 服务器解密后校验这个密码:如果验证通过,则将后续流量识别为代理请求并转发到目标地址;如果验证失败(例如是一次普通的网页访问请求,或是探测扫描),服务器会将其当作正常网站请求处理,返回一个真实的网页内容。
这种设计使得 Trojan 具备一定的"抗探测"能力——即便有人尝试连接 Trojan 服务器来判断它是否是代理节点,只要不知道正确密码,看到的都只是一个正常运作的网站,难以仅凭连接行为判断其背后是否运行着代理服务。
Trojan 与 TLS、WebSocket 的关系
Trojan 默认直接基于 TCP 和 TLS 传输,不依赖额外的应用层协议。这种"原生 TLS"的方式已经能够提供很强的伪装能力,但也存在局限——例如无法直接被 CDN 识别和中转。
为了解决这个问题,Trojan 也支持搭配WebSocket传输(即 Trojan-Go 等实现提供的 WS 支持),将流量进一步包装成标准的 WSS(WebSocket over TLS)连接,这样就可以借助 CDN 节点进行中转,兼顾隐蔽性与部署灵活性,这一思路与VMess、VLESS搭配 WebSocket 的做法是一致的。
Trojan 与其他协议的对比
| 特性 | Trojan | Shadowsocks |
|---|---|---|
| 握手方式 | 标准 TLS 握手 | 自定义加密握手 |
| 是否需要真实域名/证书 | 需要 | 不需要 |
| 流量伪装效果 | 接近真实 HTTPS 网站 | 需配合插件增强伪装 |
| 部署复杂度 | 相对更高(需域名与证书) | 相对更低 |
更详细的对比分析可参考Trojan 与 Shadowsocks 对比。与VLESS相比,两者都强调"依赖外层 TLS 提供加密与伪装"这一设计思路,区别更多在于协议细节和生态工具链的成熟度。
部署门槛与实际使用
对普通用户而言,Trojan 协议本身的使用方式与其他代理协议并无明显差异——在客户端填入服务器地址、端口、密码等信息即可连接。协议层面的部署复杂度(域名注册、证书申请)通常由服务提供方在后台完成,用户不需要关心这些细节。
理解了 Trojan 如何模拟 TLS 流量之后,可以进一步阅读VLESS 协议介绍与VMess 协议介绍,了解 V2Ray/Xray 生态下另外两种主流协议的设计思路,也可以参考VLESS 与 VMess 对比。