使用一个云服务器改善GTA5的联机网络
本文所有内容未经证实,全是作者本人的猜测,仅供参考,尚待完善。
0. 前言
GTA5 online使用的联机方式是P2P的UDP,使用UDP端口6672,可以查看官方的文章。
0.1 名词约定
R星服务器:指R星官方的服务器
GTA服务器:某个玩家的电脑,该玩家在P2P联机中充当服务器。
1. 预实验
经过和好友抓包测试,我们发现:
- 当联机好友中有能打洞或者有人有公网IP时,会把他当作服务器,都连接他的6672端口
- 如果无法互联,会使用R星的一些免费服务器中转,中转无法保证质量和延迟
2. 6672端口的具体用处
gta5启动后就会监听udp 6672端口,游戏发送数据时使用的源端口是6672,目的端口是R星服务器告诉的端口(这个端口最终会被映射到“GTA服务器”的6672);GTA服务器接收数据也是从6672端口接收
3. 尝试的解决方案
我们猜测从点击进入在线模式后,发生的内容:
- 本地给R星服务器发消息,问问有没有在线服务器
- 本地用源端口6672给R星的第一个IP发消息,尝试给源端口6672打洞,R星用2号IP给打洞后的端口回消息
2.1 本地收到了2号IP的回应,打洞成功,给R星服务器汇报该端口可用,本机可作为服务器
2.2 本地没收到2号IP的回应,打洞失败。给R星服务器汇报,无法打洞,若要加入本机,需要R星官方的服务器给穿透。
我们的解决方案:(1)拦截第2步发出的数据包,让云服务器使用源端口A发送给R星;(2)R星返回给端口A的数据包,转发给本机的6672端口。
其中,(2)就是个普通的内网穿透,好办,关键是(1)
我们的做法是:在云服务器上搭建一个L2TP服务器,本地新建一个猥皮恩,路由R星的所有网址到云服务器上,这样,就让云服务器替我们转发发给R星服务器的数据包,在R星看来,我们的外网IP就是云服务器的外网IP。
关于以上内容,博主有兴趣阅读GTA5源码,来进行确认,但是由于磁盘空间不足,暂时无法进行。
分类:
游戏
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步