梯子实验室tizilab.net

梯子UDP要开吗:游戏、语音通话和QUIC

简短回答

梯子 UDP 要不要开,取决于用途。只看网页和视频,不开也基本能用,因为 QUIC 连不上时浏览器会退回 TCP;要打游戏、用语音或视频通话,就得让 UDP 经过节点,这需要客户端用 TUN 接管、节点配置里 udp 为开、服务端也放行 UDP,三处缺一处都不行。

背景:这个问题从哪来

UDP 这个词通常在两种场合冒出来。一种是客户端设置或节点编辑页里有个“UDP”勾选框,旁边没写它管什么;另一种是网页都能打开,可游戏匹配不到人、语音频道一直显示连接中。两件事背后是同一个问题,这台设备发出的 UDP 数据有没有经过节点。

TCP 和 UDP 是两种传输方式。TCP 先握手再传数据,丢了会重传;UDP 直接发数据报,不等确认,适合宁可丢一点也不能等的场景。机场节点和代理客户端多数先为 TCP 设计,UDP 是另外要打开、另外要支持的一项。

哪些应用在用 UDP

用途 传输方式 UDP 过不去时的表现 依据
网页(HTTP/3) QUIC,承载在 UDP 上 浏览器改用 HTTP/2 或 HTTP/1.1,页面照常打开,首次连接可能慢一点 RFC 9000、RFC 9114
语音、视频通话(WebRTC 类) 默认 UDP 应用支持 TURN over TCP 或 ICE-TCP 时退回 TCP,否则通话建立失败 RFC 8835
对战类网络游戏 对局数据多用 UDP,各游戏自定 能登录、能进大厅,匹配或进对局失败 推断,本文没有逐款核对
DNS 查询 通常走 UDP 53 端口 取决于客户端的 DNS 设置,TUN 下的处理见 TUN 模式那篇 推断,本文没有列出 DNS 的来源

表里第一行值得单独说一句。RFC 9114 写明,UDP 被挡导致 QUIC 建不起来时,客户端应当改用基于 TCP 的 HTTP 版本。所以只用梯子看网页的人,UDP 开不开差别很小。真正受影响的是后两类,它们要么没有 TCP 退路,要么退回 TCP 后延迟明显变高。

梯子 UDP 转发要三处都打开

一个 UDP 数据报要从本机走到境外服务器,要依次过三关。

  1. 进得了客户端。 系统代理登记的是 HTTP 代理端口,浏览器用 CONNECT 方法建隧道,RFC 9110 规定这条隧道是 TCP 的。游戏、通话软件大多也不读系统代理。要让 UDP 进入客户端,得开 TUN 模式,或者程序自己支持 SOCKS5,并用 RFC 1928 里的 UDP ASSOCIATE 命令转发。TUN 的开法和权限见梯子 TUN 模式那一篇。
  2. 节点配置允许。 mihomo 文档写明,代理的 udp 字段默认是 false,只有 TUIC 这类本身基于 UDP 的协议、直连和 DNS 类型默认打开。机场下发的 Clash 配置里,每个节点有没有写 udp: true,打开订阅内容就能看到。
  3. 服务端和线路放行。 客户端勾上了,服务端没开 UDP 转发,数据照样到不了。Hysteria 2 文档提到,有国内用户反映运营商会封锁或限速长时间的 UDP 连接,而且往往只针对正在用的那个端口,这也是它提供端口跳跃功能的原因。

第三关用户自己改不了,只能靠后面的检查去判断。

节点只支持 TCP 时的变通

部分协议能把 UDP 包进 TCP 里传,mihomo 的 Shadowsocks 节点就有 udp-over-tcp 选项,默认关闭,协议版本可选 1 或 2。文档没有写服务端的要求,我们的判断是服务端也要支持同一版本,单改客户端不起作用。推测包进 TCP 以后,一个包丢了会卡住后面的包,游戏里表现为偶发的顿挫,所以它更适合当保底手段。

另一种思路反过来,把不需要的 UDP 挡掉。mihomo 的规则类型 NETWORK 可以按 tcp 或 udp 匹配,写一条匹配 udp 的规则把连接拒绝或直连,浏览器就不再先试 QUIC。这样做会连带影响游戏和通话,规则怎么排先后,可以看全局模式和规则模式那一篇。

自己怎么验证

  1. 看连接记录里有没有 UDP。 用 mihomo 内核的客户端(例如 Clash Verge Rev)打开连接或日志页,每条连接会标出 TCP 或 UDP。开着 TUN 进一次游戏对局或发起一次语音通话,再看这些 UDP 连接选中的是节点还是 DIRECT。
  2. 核对节点配置。 在客户端的配置编辑或订阅预览里找当前节点,确认有 udp: true。没有这一行,按 mihomo 文档的默认值,UDP 不会经过它。
  3. 做一组对照。 同一个游戏、同一时段,分别用 TCP 类节点和 Hysteria 2、TUIC 这类基于 UDP 的节点各试一次进对局。前者失败后者成功,多半是节点或线路没有放行 UDP。只试一次的结果容易受偶然因素干扰,建议换个时段再试。
  4. 网页不必专门测。 浏览器会自动退回 TCP,网页能打开不能说明 UDP 通了。

客户端测出来的节点延迟一般是一次 HTTP 请求,走的是 TCP。这个数字说明不了 UDP 能不能过,延迟低的节点照样可能在游戏里连不上。

这篇没有覆盖的

  • 具体游戏用哪些端口、哪些游戏对 UDP 依赖最重,本文没有逐款核对。Steam 下载、商店和联机分别怎么走,放在梯子和 Steam 那一篇里。
  • 本站 28 家机场里,7 家的站长测速截图带“UDP 类型”一列(MiaoKo 测出的 NAT 类型)。其中 6 家的正文写了全部节点的分布,FullCone 在 50 个节点里占 43 到 47 个,或在 60 个里占 57 个,其余是 RestrictedCone、PortRestrictedCone 或 Unknown;星岛梦只写了香港组 20 个全为 FullCone。其余 21 家没有这一项。我们的理解是,这一列只说明测速工具经节点做的 UDP 探测拿到了结果,本站没有拿这些节点测过游戏和语音通话。
  • 只写了 mihomo 内核的字段名。sing-box、Xray 的对应设置名称不同,各客户端的界面入口也会随版本变化,下载和版本信息以梯子下载页的核验日期为准。
  • 游戏加速器处理 UDP 的方式和梯子不同,这里没有展开。

本文引用的来源9 条 · 在新窗口打开

  1. RFC 9000:QUIC 传输协议rfc-editor.org
  2. RFC 9114:HTTP/3(第 3.1 节 发现 HTTP/3 端点)rfc-editor.org
  3. RFC 8835:WebRTC 的传输要求rfc-editor.org
  4. RFC 1928:SOCKS 协议第 5 版(UDP ASSOCIATE)rfc-editor.org
  5. RFC 9110:HTTP 语义(第 9.3.6 节 CONNECT)rfc-editor.org
  6. mihomo 文档:代理通用字段(udp)wiki.metacubex.one
  7. mihomo 文档:Shadowsocks(udp-over-tcp)wiki.metacubex.one
  8. mihomo 文档:路由规则(NETWORK)wiki.metacubex.one
  9. Hysteria 2 文档:端口跳跃v2.hysteria.network

常见问题4 题

梯子 UDP 转发开了会多用流量吗

开关本身不产生流量。打开后,原本直连或者被丢弃的 UDP 数据改走节点,这部分会计入机场流量。语音通话和游戏的数据量通常比视频小,具体多少取决于应用,本站没有测过。

节点延迟很低,游戏里还是连不上,和 UDP 有关吗

有可能。客户端测延迟多数是发一次 HTTP 请求,走的是 TCP,只能说明 TCP 通。游戏对局常用 UDP,节点或线路不放行 UDP 时,延迟数字照样好看,进对局却失败。

系统代理模式下 UDP 能走梯子吗

一般不能。浏览器按系统代理连 HTTP 代理端口,用 CONNECT 建的是 TCP 隧道,承载不了 UDP。想让游戏、通话软件的 UDP 进入客户端,要开 TUN,或者程序本身支持 SOCKS5 的 UDP 转发。

为什么有人专门把 QUIC 屏蔽掉

有些线路对 UDP 限速或不稳定,浏览器先试 QUIC 失败再退回 TCP,会多等一会儿。在 mihomo 里加一条按 NETWORK 匹配 udp 的规则拒绝掉,浏览器会直接用 TCP。代价是依赖 UDP 的通话和游戏也会一起受影响,要按需要缩小范围。

本文最后一次核对来源是 。软件界面、服务政策和法规会变,发现和现在不一致的地方,请按更正与反馈里的方法告诉我们。

梯子和Steam:商店、下载、联机分别要不要挂

梯子 Steam 怎么设置才合适。本文按 Steam 支持页公布的域名和端口,把商店社区、游戏下载、联机语音拆成三类连接,分别说明走不走机场、会…

用梯子做什么更新约 5 分钟