[功能请求] XHTTP 支持数据包下载和重传
作者: hyperion-cs创建于 2025年6月27日更新于 2026年9月14日
标签enhancement
问题
几周前,俄罗斯审查机构推出了一种新的阻止方式(尤其是在移动网络上),它的工作原理如下。因此,如果:
- 客户通过 HTTPS 和 TLS 1.3 通过 TCP 连接到服务器(现实中实际上模仿了使用 HTTPS 和 TLS 1.3 的连接);
- 服务器的 IP 地址“可疑”(它位于外部(即不在俄罗斯),属于由 Hetzner、Digital Ocean 等外国数据中心拥有的子网 AS );
- 在一个 TCP 连接中(而不是在一个 HTTP 请求/响应中 - 这一点很重要),从服务器接收到的数据量大于 ≈15-20KB(值取决于提供商) - 这是主要的问题。 此连接被“冻结”(即在达到传输数据大小的指定限制后,服务器在该连接中发送的 TCP 数据包停止到达)。有趣的是,通常情况下,审查机构(借口是服务器的响应)不会发送例如 RST 数据包 - 相反,它只是“冻结”TCP 连接(从客户端的角度来看),因此客户端只需等待服务器响应超时错误即可,一切就此停止工作。 重要提示:无论是“合法”的 HTTPS 流量,还是有人模仿它,都无关紧要。他们现在不关注这些问题了。
我是否有这些限制?
您可以使用来自 此 仓库的 RU :: TCP 16-20 检查器检查您的“家庭” ISP。它可以直接从浏览器中工作,检查期间应禁用 VPN。
建议的解决方案
好消息是,如果您将服务器响应分割为几个约为 15-20KB 的数据包(如果大小足够),并在不同的 TCP 连接中发送,一切都会正常运行。这是我建议添加到现实(其中数据包大小将由参数设置)的选项,它与 VLESS 兼容。 重要的是不要将此与在一个连接中分割 TCP 数据包或将传输数据分割为几个 HTTP 请求/响应(在一个连接中)混淆 - 这两者是不同的,它们不会有帮助。 顺便说一句,对于客户端到服务器的流量,可能也会适用相同的规则(如果审查机构尚未这样做),因此描述的分段选项值得在服务器和客户端上添加。当然,也要支持分段数据。
说明
是的,它的速度会明显慢于单个连接(尤其是当我们要上传/下载大文件时)。例如,要下载 50MB 的文件,需要大约 2560 个 TCP 连接 - 这太多了,而且很可疑。但显然比完全不工作要好。不管怎么说,这个问题将有助于宣传这个问题,也许有人会想出更好的解决方案。
一些与相关问题有关的链接:
内容来源: XTLS/Xray-core