Trojan 节点支持 UDP 吗?UDP 转发原理与限制说明
Trojan 协议原生支持 UDP 转发,但需要服务端与客户端两侧同时开启。本文解释 UDP ASSOCIATE 的封装原理、Clash 配置中的 udp 开关、游戏与语音场景的表现,以及 UDP 被限制时的现象和测试方法。
Trojan 协议在设计上原生支持 UDP:协议规范定义了与 SOCKS5 一致的 UDP ASSOCIATE 命令,把 UDP 数据包封装进已建立的 TLS 连接中转发。但「协议支持」不等于「拿来就能用」——服务端要开启 UDP,客户端配置里要打开 UDP 开关,线路还得放行 UDP 流量,三个条件同时满足,游戏、语音这类应用才能正常工作。如果你的节点网页正常但游戏连不上,多数是这条链上某一环没打通。
核心结论
- Trojan 协议规范原生定义了 UDP 转发,不需要额外插件;
- UDP 可用 = 服务端支持 + 客户端开启(如 Clash 的
udp: true)+ 线路放行;- UDP 数据被封装在 TLS/TCP 通道内传输,行为与直连 UDP 略有差异;
- 网页正常、游戏语音异常,是 UDP 未生效的典型信号。
工作原理
Trojan 的请求格式沿用了 SOCKS5(RFC 1928)的命令语义:CONNECT 用于 TCP 代理,UDP ASSOCIATE 用于 UDP 转发。当客户端需要发送 UDP 包时,流程如下:
- 客户端与服务端建立正常的 TLS 连接,发送带 UDP ASSOCIATE 命令的 Trojan 请求;
- 之后每个 UDP 数据包都加上「目标地址 + 端口 + 长度」的头部,作为数据流写入这条加密通道;
- 服务端解出数据包,以真实 UDP 发往目标服务器,并把返回的 UDP 包按同样格式送回客户端。
值得注意的是,客户端与服务端之间实际跑的仍是 TCP 上的 TLS 流——UDP 包是「装进」这条流里的。这带来两个特点:一是中间网络看到的依旧是一条普通 HTTPS 连接,伪装性与 TCP 代理一致(握手细节见 Trojan 协议如何通过 TLS 建立连接);二是 UDP 原本「丢了就丢了」的语义被 TCP 的重传机制改变,弱网下可能出现延迟抖动放大的现象。
核心组成
一条 UDP 可用的链路需要三方配合:
| 环节 | 要求 | 常见问题 |
|---|---|---|
| 服务端 | 运行的 Trojan 实现开启 UDP 支持 | 部分服务方主动关闭 UDP |
| 客户端 | 节点配置中开启 UDP 开关 | 订阅转换丢失 udp 字段 |
| 线路 | 机房与运营商放行出入 UDP | UDP 被限速、丢弃或封禁 |
以 Clash 系客户端为例,节点级开关是 udp: true(示例为占位配置):
- name: "示例节点"
type: trojan
server: node1.example.com
port: 443
password: "your-password"
sni: node1.example.com
udp: true
sing-box、v2rayN 等客户端的 Trojan 出站默认支持 UDP,一般无需单独开关;而 Clash 系若省略该字段,部分版本会按不支持处理。订阅生成的配置是否带上此字段,取决于服务方的模板。
优点
- 一条连接承载两类流量:TCP 与 UDP 共用同一节点与同一伪装通道,无需额外端口;
- 游戏与语音可用:在线对战、实时语音、视频会议等依赖 UDP 的应用可以通过节点工作;
- 对 QUIC 友好:HTTP/3(QUIC)基于 UDP,UDP 转发可用时这类流量也能正常代理;
- 配置成本低:多数场景只是一个开关的差别。
限制
- UDP over TCP 的固有代价:封装在 TCP 流内传输,丢包时触发重传,实时应用的抖动可能比直连更明显;
- 受线路策略影响大:不少国际线路对 UDP 有 QoS 限速甚至封禁,表现为游戏高峰期突然掉线、语音断续,而网页毫无异常;
- NAT 类型受限:经代理转发后 NAT 类型通常变为对称型或受限型,部分主机游戏的联机匹配会受影响;
- 可用性不由使用者控制:服务端不开、线路不放行,客户端怎么配置都无效。
与其他协议的区别
| 协议 | UDP 实现方式 | 特点 |
|---|---|---|
| Trojan | UDP ASSOCIATE,封装进 TLS/TCP 流 | 伪装一致,但受 TCP 重传影响 |
| Shadowsocks | 独立的 UDP relay,UDP 包直接加密后走 UDP | 语义保留完整,但 UDP 流量特征独立 |
| VLESS | 依传输层而定,常配 XUDP 等扩展 | 灵活,依赖实现 |
| Hysteria2 / TUIC | 协议本身基于 QUIC(UDP)构建 | 原生 UDP 转发,弱网表现是设计目标 |
简单说:Trojan 的 UDP 是「借 TCP 通道捎带」,Shadowsocks 是「UDP 走 UDP」,而 Hysteria2、TUIC 这类新协议整个就建在 UDP 之上。对 UDP 性能要求极高的场景,后者是常见的替代选择,协议整体对比见 Trojan、VLESS 与 Shadowsocks 有什么区别。
适用场景
日常网页与流媒体基本不依赖本文机制;需要关心 UDP 的主要是三类用户:在线游戏玩家(对战数据与语音)、实时通信用户(会议、网络电话)、以及希望代理 HTTP/3 流量的用户。建议的做法是:先向服务方确认哪些节点支持 UDP,再在客户端确认开关生效,最后用实际应用验证。测试延迟、丢包与稳定性的通用方法见 Trojan 节点如何测试延迟、丢包和稳定性;若 UDP 正常但游戏体验仍差,可参考 Trojan 节点延迟低但速度慢是什么原因。协议基础概念可回看 Trojan 节点是什么,更多文章见 Trojan 协议专栏。
延伸阅读
- Trojan 协议如何通过 TLS 建立连接——理解 UDP 所依附的加密通道;
- Trojan 节点如何测试延迟、丢包和稳定性——把 UDP 测试纳入整体测试流程;
- Trojan 节点延迟低但速度慢是什么原因——区分 UDP 问题与线路质量问题;
- 术语速查:UDP · TLS。
常见问题
- Clash 配置里写了 udp: true,为什么 UDP 还是不通?
- 客户端的 udp 开关只决定「是否尝试通过节点转发 UDP」,能否成功还取决于服务端是否开启 UDP 支持、线路是否放行 UDP,以及订阅转换过程是否保留了该字段。三者任一缺失都会导致 UDP 不通,应先向服务方确认节点是否支持 UDP。
- 怎么测试 Trojan 节点的 UDP 是否可用?
- 常用方法有三种:在依赖 UDP 的应用里实测,如发起一次网络语音通话或进入在线游戏;在游戏主机或加速工具中查看 NAT 类型检测结果;或在电脑上用支持指定代理的测试工具向公共 STUN 服务器发起请求。若 TCP 网页正常而这些测试全部失败,基本可判定 UDP 未生效。
- 玩游戏延迟高,是 UDP 没开吗?
- 不一定。UDP 未生效的典型表现是连不上对战服务器、语音无声或 NAT 类型受限,而不是延迟高。延迟高更多与节点物理距离、线路拥塞有关。可先确认 UDP 是否可用,再用延迟和丢包测试评估线路质量,两个问题要分开定位。
- 为什么有的服务方故意关闭 UDP?
- UDP 流量缺少拥塞控制,容易被滥用于扫描或放大攻击,部分机房和线路对 UDP 有严格的限速或封禁策略,开启后反而影响整体稳定性。因此一些服务方只在特定节点开放 UDP,或整体关闭。是否支持 UDP 应以服务方说明为准,而非协议能力。