插图来源:Storyset
“连不上了"是最让人头大的描述,因为背后的原因可能完全不同。同样是阻断,TCP 被动了手脚和 UDP 被动了手脚,症状天差地别。学会分辨,能少走很多弯路。
先理解两者的根本差异#
- TCP 是"面向连接"的:通信前要先握手(三次握手),任何一方发个 RST 包,连接就断了。阻断者有很多"下手点”。
- UDP 是"无连接"的:发包就不管了,没有握手。阻断手段相对粗暴:要么直接丢包,要么限速。
症状对比#
| 症状 | TCP 阻断 | UDP 阻断 |
|---|---|---|
| 典型表现 | 连接超时、连接被重置(RST) | 发包如石沉大海,无任何响应 |
| 客户端报错 | 超时、被拒绝、握手失败 | 长时间无响应、测速为 0 |
| 特征 | 特定端口/域名突然不行,其他正常 | 整个 UDP 流量异常,TCP 正常 |
| 排查难度 | 相对容易定位(看握手到哪一步) | 较难,因为没有明确的"拒绝"信号 |
举两个真实场景#
场景一:Trojan 节点突然连不上,报错超时。 Trojan 跑在 TCP + TLS 上,这种"能解析域名、TCP 握手到一半被掐"的表现,典型是 TCP 层面的干扰。可以试试换端口、换传输方式。
场景二:Hysteria2 节点测速为 0,但 TCP 节点正常。 Hysteria2 跑在 UDP 上,UDP 被整体限速或丢包时就是这个表现——TCP 一切正常,只有 UDP 流量过不去。这时候换 TCP 协议的节点往往立刻恢复。Hysteria2 的原理见 Hysteria 协议详解。
对应的协议选择思路#
- 怀疑 TCP 被针对:优先试 UDP 系协议(Hysteria2、TUIC、WireGuard),换个赛道。
- 怀疑 UDP 被针对:退回 TCP 系(VLESS + TCP、Trojan),虽然特征明显,但至少路是通的。
- 两者都被针对:考虑套 CDN 的 WebSocket、gRPC 等传输,或者换线路。Trojan 的伪装思路见 Trojan 协议详解。
- IP 被墙:换协议也没用,这是 IP 层面的问题,看 IP 被墙怎么办。
给新手的排查顺序#
连不上时别急着换协议,按这个顺序:先确认是单个节点还是全部节点不行 → 再确认是 TCP 系还是 UDP 系不行 → 最后才是换协议、换线路。对照症状表,基本能缩小到一两个可能性。
理解阻断的"手法",比背一堆协议名字有用得多。