过去一个月我一直在尝试设置游戏代理隧道,但遇到了(对我来说)一个非常奇怪的问题。
目前,我正在使用 socksifier 重定向/编辑游戏套接字上的 connect() 命令,使其通过我们的 Socks5 代理服务器进行路由,以便在客户端 > 游戏服务器之间生成最低延迟路径。但是,当多个游戏数据包在短时间内全部发送时,此方法会导致高延迟峰值。不幸的是,游戏发送/使用 TCP,我决定对我们的代理执行相同的操作。
当我们使用 SSH(带有 nodelay 参数 forced/set 的 plink/putty)在 127.0.0.1 上创建 socks 代理(使用动态端口转发)并使用 socksifier 将流量重定向到本地主机时,延迟峰值问题消失了,运行起来非常顺畅。这几乎就像某个地方存在瓶颈或拥塞问题,但不仅服务器相同,拥塞和排队规则设置也相同(尝试了 fq + bbr、noqueue 和 pfifo)。我原本以为使用 SSH 会因为加密开销而导致性能下降。
有人能解释一下我遇到的这个问题吗?这让我很抓狂,我尝试了所有的服务器应用程序。我已经设置了 TCP_NODELAY(在套接字上),并尝试过摆弄 TCP_QUICKACK 和 TCP_LOWLATENCY。
一些额外的信息:我们也尝试使用一系列付费和免费的 Proxifiers,例如 Proxifier 和 ProxyCap。奇怪的是,使用 Proxifier(和任何其他免费替代品)仍然会重现此问题,但使用 ProxyCap 不会。我给 ProxyCap 发了电子邮件,他们回复说他们在您连接的服务器的套接字上设置了 TCP_NODELAY(我猜可能是在 Windows 套接字上)。但我已经这样做了。游戏基于 Windows,代理服务器托管在 Linux VPS 上(尝试了每个“常见/主流”发行版,结果相同)
编辑:我在两端测试了不同的 SO_SNDBUF 和 SO_RCVBUF 值。总体延迟会随着较低/较高的值而变化,但峰值问题仍然存在。还在客户端尝试了 SO_DONTROUTE,但没有成功。
编辑 2:看起来这可能与游戏套接字和出站网络之间的数据包有关。Plink + PCap 都使用环回来创建代理服务器,然后将流量路由到出站网络,但我们的方法没有。即使没有编辑游戏上的任何内容(纯粹是游戏,没有其他内容),这个问题仍然存在。缩小范围!!!
谢谢大家,我也很感激任何有助于找出罪魁祸首的想法。