UDP 端口跳跃,不连续的端口阻断

15次阅读

共计 824 个字符,预计需要花费 3 分钟才能阅读完成。

其他人用 hysteria2 的相关帖子:hysteria2 有什么伪装 TCP 的方案么?现在跑个几十分钟就随机阻断几分钟 UDP

这个现象其实已经存在很长时间了,去年年中开始,我自己的 kcptube 经常见到这种情况,困扰了我好几个月。

我观察到的阻断是这样的
刚开始的几天、十几天都畅通无阻,但慢慢地,端口临时阻断会越来越多,并且端口阻断并不是一段连续的端口范围,而是分散的不连续端口。
更换成新的端口范围,可以暂时“解决”,然后又重复同样的阻断过程。

后来实在受不了,毕竟一旦跳跃到受阻断的端口等于临时断网。于是趁上个月过年期间,我给自己的 kcptube 加了个小改进:跳跃端口前检查下新端口是否已经阻断,如果是阻断端口就找另一个端口号,找到真正畅通的才跳过去。

有了这个小改进,整个连接就重新畅通了。

不过我也很好奇,这种阻断到底阻隔了多少端口,我猜测范围一定不小。

接着我想起来,我的这个工具有现成的 --try 命令行参数用于测试连接通断,只不过每次只测 1 个随机端口。
于是,又做了个新改进,改成测试整个端口范围。

测试结果实在“壮观”,3000 个端口,有一百多个是阻断的,剩下都是通畅的。
而这一百多个阻断端口并不是连续的一片,都是分散的。尽管也有极个别的连续端口,但不多,也就三四个而已。


按理来说,其实 hysteria2 是可以做到跳跃前先检查下通断的,发起个探测连接即可。
需要有人给 hysteria2 提个 issue 或者 patch

至少我的 kcptube 就是这样做的。依靠 KCP,确定性有保障。而 hysteria2 有 QUIC,理论上来讲其实也是有确定性的。

至于我的另一个工具,UDPHop,完全就是 raw udp,我实在想不到有什么好办法能够可靠地做到这种检测。

还好的是,流量很小的情况下不会出现这种阻断。无论多久都还是很顺畅。比如单纯只用来做游戏线路,只用来听电台、Podcast。


备注:以上情况都特指公网跨大墙,并非指省间、省内、市内的情况。省市内部的连接没那么夸张。

正文完
 0