深岩银河吧 关注:52,866贴子:692,883

关于当前游戏联机问题的分析以及解决思路

只看楼主收藏回复

(Part1)国内玩家受限于各种各样的drg游戏网络问题。然而,如今大多数解决网络问题的工具无法完全解决问题。目前没有任何一个自动化工具,能够帮助没有任何专业知识的人去自动实现全过程。然而,如果某些人有一定基础,具有一些相关知识,实际上还是存在某些解决方法
该贴旨在从稍微底层的角度,大致解释当前游戏所会遇到网络问题的原因,并提供大致解决思路。目前自己没那么多时间去写一篇保姆级别教程或者开发一款高度定制化的工具来帮助常规玩家去解决网络问题,因为有太多基础知识需要科普,而且还不方便说。尽管如此,这篇帖子可以帮助一些有基础的人了解当前自己的网络问题并进一步改善。通过这些说明,可以去更好地排查当前网络问题、提升当前游戏体验、或者去帮助其他人
目前我所说用的这个方法可以一定程度上降低了网络问题的出现频率,当加其他人房间时。这个出错频率大致比U35之前会遇到的频率大一点但在可接受范围内。Mod 访问已经没什么问题了。虽然游戏过程中仍然会出现一些网络问题,但根据自己排查那是房主的问题而不是自己的原因。比如自己加入其他人房间后,游戏过程中掉线,重新加入相同房间发现其他人也全掉了。并且自己可以加其他游戏房间。通过这些现象可以大概率推断出是房主网络问题
这里提到的部分原文来自https://www.bilibili.com/video/BV1aF411c7Em下面的评论。这里会进一步补充、改善它


IP属地:罗马尼亚1楼2022-06-22 21:37回复
    (Part2)一些前提注意事项
    1. 部分陈述是基于推理得到的,可能没有什么确凿的证据。因为自己通过帖子所提到的方法已经把网络问题降低到了自己可接受的范围,所以就没有细查。这类陈述一般会有”可能”和”猜测”关键字
    2. 考虑到吞楼和自己重新编写文本的可能性。这里会用序号(Part1,Part2…)来表示这个帖子说明顺序,以方便阅读


    IP属地:罗马尼亚2楼2022-06-22 21:38
    回复
      2025-11-23 02:10:33
      广告
      不感兴趣
      开通SVIP免广告
      (Part3)当前游戏需要同时解决多种访问问题才能正常进行游戏。大致上说,从游戏正常启动到正式连接到其他玩家房间过程中,根据主机所联系的网络对象,大致可以分为以下几个阶段
      1.启动游戏时,游戏安装、更新、验证mod。游戏进程会提前跟其他某些网站联系,比如discord
      2.游戏画面出现后,游戏通过联系游戏服务器来获取游戏房间列表
      3.点击游戏房间时,自己的主机尝试获取房主IP。之后与房主主机进行通信,之后加入游戏
      4.如果自己创建房间,那么就是把自己IP告知游戏服务器。之后其他人就可以通过游戏服务器来获取自己IP,从而与自己通信
      从这里可以看到,为了能够加入别人的房间或者让别人加入自己的房间,客机需要借助中心服务器来知道房主的IP。在当前这个游戏上下文中,除了上面提到游戏本身自带的游戏服务器可以获取到房主IP,中心服务器还可以是steam上的好友列表(本人只能想到这两个)。虽然这个游戏是P2P游戏,但是客机仍然需要借助中心服务器来获取到房主的IPv4。整个过程中,我们需要保证整条网络链没有问题。任何一个环节出问题都会导致联机失败。整条网络链的大致过程就是
      1.房主创建好房间,把自己的IP以及相关信息发给中心服务器。中心服务器既可以是游戏内含的服务器(即服务器、游戏房间列表),也可以是steam上的好友列表
      2.客机通过相同类型的中心服务器获取到房主IP
      3.客机和房主建立联系。成功后,客机就可以加入到游戏房间
      正常情况下,这三个步骤会在用户不知情的情况下自动完成。然而这里为了分析网络问题,我们需要在这里指出。值得一提的是,客机和房主都需要跟中心服务器成功联系。假设房主不能与服务器列表通信,那么就算他自己开了房间,客机哪怕能够刷新服务器列表也不一定知道这个房间的存在


      IP属地:罗马尼亚3楼2022-06-22 21:44
      回复
        (Part4)而在整个过程中,游戏会根据域名与多个服务器通信(可以通过抓包得知。之后这些域名可能会变)
        1.mod.io (或者其子域名api.mod.io): 游戏会在启动时联系这个网站,从而安装、更新mod。之前游戏的鲁棒性不佳。游戏没有考虑”如果没有连接到mod.io”的非预期情况,最终导致了游戏黑屏现象
        2.drg.ghostship.dk: 游戏正常启动时也会自动去联系这个网站。个人没去细查这台主机在游戏中的意义
        3.services.ghostship.dk:游戏会联系这个域名出现在许多场景中。包括但不限于
        3.1.获取、刷新服务器列表
        3.2.加入其他人房间也会需要通过它来获取到房主IP。注意获取房主IP还有其他方式,比如通过steam好友的加入功能
        3.3.当自己开房间时,也需要跟这个服务器通信并告知自己IP以及其他相关信息,以表示“自己开了一个房间,大家快来玩“
        4.steam相关的网站 : 游戏也会与steam相关网站进行联系。这会发生在多个场景中,比如游戏同步云文件、用户访问到商店、用户获取好友列表等等。虽然按照上面的应用场景来看,会感觉这类网站似乎并不是一个必须要解决的访问问题。然而,个人建议最好还是要考虑一下,因为自己在加入游戏房间时,通过抓包发现游戏进程偶尔会去联系某些steam相关域名。另外,考虑到steam有不少功能本来就不可用,解决他们也可以进一步提高游戏体验
        而这里面的域名比较多且复杂。可以自行抓包得知。这里可出少许例子仅供参考。不同地方会联系的域名可能会不同
        [1]steamuserimages-a.akamaihd.net
        [2]steamcloud-hkg.oss-accelerate.aliyuncs.com
        [3]api.steampowered.com
        [4]steamcommunity-a.akamaihd.net
        [5]steamcdn-a.akamaihd.net
        5.其他 : 游戏还会联系一些额外网站,比如discordapp、live.com 等。可以通过自行抓包来查找


        IP属地:罗马尼亚4楼2022-06-22 21:46
        回复
          (Part5)而正常情况下,当前游戏可能无法访问到前面提到的五类网站。其具体体现在于
          1.mod.io: 黑屏(出现在早期,如今可能没了)、无法更新mod、mod界面一直在转圈圈
          2.drg.ghostship.dk: 前面提到过,个人不太清楚联系这台主机在游戏中的意义,虽然它是鬼船官方网站。不过个人猜测,”退出队伍之后游戏画面变黑但不会跳到初始化界面”可能跟这个有关
          3.services.ghostship.dk :服务器列表一直在转圈圈,或者 ”点击房间后显示参加(但没有取消选项),过了一段时间显示多人游戏已经停止(个人猜测是因为无法获取房主IP) ”。个人猜测加入失败(unknownXXXXX) 也可能是这个原因
          4.steam相关的网站 :无法同步云文件、无法访问商店、无法获取好友列表。加入游戏失败可能跟这个也有关系,因为自己抓包时偶尔发现游戏会跟这类网站通信
          5.其他: 自己没细查,不太清楚这类网站对游戏是否有影响。可能无法参加游戏中那3个工会任务会跟这个有关?
          从这里可以看到,我们需要做的事情之一就是尽量保证能够访问到这5类网站(主要以前四类为主)
          注意,尽管这里假设用户都无法访问到所有上述提到的网站,但部分地区可能可以直接连接上面提到的某些网站。正常情况下,用户是否能够直接访问到网站得根据当地ISP政策,因此各地所不能访问的网站会有所不同。不过,个人根据多定ping测试发现大部分地方都无法访问(从4月开始查,截止到当前发帖时间)某些域名。注意这个测试准确率并非100%,因为多地ping测试是基于IP协议,而不是TCP和UDP协议
          这里拿services.ghostship.dk(游戏获取游戏房间时会联系的域名)为例。结果可以参考
          ping.chinaz.com/services.ghostship.dk
          再次强调一下,部分地区能够访问到上面某些网站的域名是很正常的。但是处于理论分析,这里需要假设用户都无法访问到所有上述提到的网站,否则所提出的解决方案可能只会作用于部分地区的用户


          IP属地:罗马尼亚5楼2022-06-22 21:52
          回复
            (Part6)再说说当前一些常见的工具。据个人所知,当前常见的工具有"根号91204"和Game Booster(比如UU、雷电)。然而这两者都无法完美解决问题
            1. 根号91204 : 只能解决访问mod.io(即前面提到的第一个网站域名),以及steam相关问题。这个工具开发的初衷是为了解决玩家普遍出现的steam网络访问问题,因此这个工具可以访问到大部分游戏都会访问的网站,比如商店、mod.io(这好像还是后期加上去的,个人印象中好像是U35时间点?)。然而,当谈及到具体游戏涉及到的服务器时,这个工具无法解决它们,因为这不是大部分游戏都要访问的服务器。然而,值得一提的是,由于302能够让用户访问到steam相关网页(对应part3中的第4类网站),因此用户可以访问steam好友列表,因此可以用它来联机(获取房主IP,或者自己开房间告知其他人自己IP)。正因如此,使用这个工具的一些现象可能为
            1.1 玩家可能可以通过好友方式来相互加入房间。因为这个工具可以让玩家访问到steam相关网站,而好友列表中的加入游戏功能可以在不通过services.ghostship.dk的情况下获取到房主IP
            1.2 好友A自己开房间,好友B可以通过好友列表看到游戏状态。但是无法从游戏内部的房间列表找到这个房间(如果A无法与services.ghostship.dk建立联系,那么就不能把”自己开了一个房间”的信息告知游戏内含的服务器,即services.ghostship.dk)
            另外,这个工具可能不太稳定,因为其是公益服务器。作者还是用爱发电(搭服务器需要钱啊),服务器数量有限


            IP属地:罗马尼亚8楼2022-06-22 22:35
            回复
              (Part7)说完第一个工具,再说第二个工具
              2. Game Booster:可以解决上面提到的部分游戏问题(比如获取不到服务器、可以加入游戏房间),因为它让当前主机成功访问到了游戏本身自带的游戏服务以及steam上的好友列表。然而它的主要缺点是延迟,因为游戏流量也走了转发流量的服务器。对于P2P游戏,这个工具反而会增加延迟。这体现在,当自己开了这个工具时,加别人房间时自己卡 ;自己开房间别人卡。如果房主和客机所连接的服务器距离之间比较远会造成比较大的延迟。外加上U35中部分游戏效果由房主的主机实现(比如抛掷物,连飞斧子如今非常不顺可能就是因为这个原因),高延迟会带来更差的游戏体验
              跟第一个工具类似,也有稳定性问题。然而如果这个工具不稳定,其所造成的影响要比第一个工具更高,因为游戏流量也走转发流量的服务器。如果服务器断了或者有网络波动,就会影响到当前主机的延迟甚至导致主机掉线
              值得一提的是,这两个的原理跟magic一样,虽然三者细节会有所不同。许多文章为了用户的需求以及避免过深的原理,因此只会告知用户 "下载XX软件,按照教程点几个按钮和选项就好了"


              IP属地:罗马尼亚10楼2022-06-22 22:49
              回复
                (Part8)再总结一下,为了正常游戏,客机需要知道房主IP。Part6,7提到的两个工具都从某些角度上解决这些问题,然而他们都具有一定的局限性。其中,第一个工具的特性只能让房主IP通过好友列表透露给其他人,它只能允许玩家通过"好友列表的加入游戏"的方式相互进入房间,而可能不能从游戏自带的服务器列表加入其他人房间。第二个工具虽然弥补了第一个工具的缺点,但可能会增加游戏延迟增加从而影响了游戏体验,因为第二个工具导致游戏流量也走了节点


                IP属地:罗马尼亚11楼2022-06-22 22:50
                回复
                  2025-11-23 02:04:33
                  广告
                  不感兴趣
                  开通SVIP免广告
                  (Part9)那么如何完全解决问题?结合前面提到的现有两个工具所暴露的问题,我们所要做的事情就是让主机能够成功访问到两种中心服务器(参考part3)。这样房主可以告知自己的IP,客机也可以获取房主IP。同时,我们又要避免游戏流量走节点。其中一种实现方式就是控制流量走向 : 让原本不能访问的网站(即part3提到的那几类网站)通过节点访问到; 但不能让游戏流量(即跟其他玩家的实际流量)走这些节点,从而避免增加游戏延迟和不稳定性
                  之后再找到可用的主机用于流量转发。这样就可以解决问题了
                  而其中一种控制流量走向的方法就是基于域名规则的转发。我们需要在对应的软件中编写规则就可以实现。至于怎么写规则,如果相关软件支持,软件官方会有帮助文档可供参考


                  IP属地:罗马尼亚12楼2022-06-22 22:52
                  回复
                    (Part10)再说一下解决方案的大致步骤。再次强调一下,我们的目的是让前面提到的几类网站流量(参考Part3)全部走服务器,但要直接连接跟其他玩家的主机
                    1.确认自己的t/*读首尾字母*/z是否支持控制流量功能,以及能够查看当前主机的连接记录
                    2.通过查看当前主机的连接记录,找到在正式加入游戏前,游戏进程跟什么域名有联系。关于怎么查看,猫咪应用在日志log模块下,v字开头在软件正下方的日志中。个人用的是前者
                    3.将当前软件设置成基于规则的转发模式
                    4.控制流量转发。在配置里面加几条基于域名(域名就是上面第二步查看到的内容)的规则。具体所需要添加的规则数量得看所用的默认规则配置。像自己只需要加3条就好了,因为自己的默认配置文件被设置成了默认情况不会直连steam相关网站。语法可以参考应用官网
                    5.设置成“直接连接其他玩家的主机,而非走服务器“。玩家的主机IP往往是动态IP,因此没有绑定域名,所以跟这类主机联系会直接通过IP而不是域名。小猫咪的配置文件可能会自带这类规则因此不需要考虑这一步。不清楚v字开头应用和其他应用什么样子
                    6.设置完成后。调一个地理位置近一点的服务器即可。理论上说,通过前面的设置,游戏流量不会走服务器,因此无论调哪个地方的服务器都不会影响游戏延迟(就算高延迟也不是自己的问题,要么是原本自己与房主距离很远,要么房主自己开游戏加速器,导致游戏流量走了服务器)。然而,调一个地理位置近一点的服务器可以使得CN房间不会出现在远和世界的服务器列表中,从而方便找房间。同时这也可以防止自己开的房间被归类到非常远的地方(比如US)


                    IP属地:罗马尼亚13楼2022-06-22 22:55
                    回复
                      (Part11)从这里看到,对于会用相关软件的人来说,要做的事情就简单了。如果用的是猫咪应用,只需要查看连接记录(log模块) ;找到游戏正常情况下会跟哪些域名通信 ;调成基于规则模式 ;把这些域名全部写到配置文件中 ;调一个稳定、较近的服务器就好了。如果嫌麻烦,可以头铁不看连接记录,直接把mod.io、 drg.ghostship.dk、services.ghostship.dk(对应part3中提到的前三种网站)写到配置文件里面。如果自带的配置文件被设置“当访问steam相关网站时走服务器节点 “,那么第四类网站也被解决了。至于第五类网站,只有当自己仍然有网络问题时,才需要考虑他们,把他们加入配置文件中。而其他软件也差不多,要做的事情本质相似,只是细节会有所不同
                      而网络排查又是另外一个大话题了,不太好讲。这里就暂时先不细说了。这也是一个难度较大的点


                      IP属地:罗马尼亚14楼2022-06-22 22:56
                      回复
                        (Part12)一个关于part10、11的建议 :关于规则,最好写基于域名的规则,而不是写基于进程的规则。因为游戏流量可能会从steam.exe走而不是从游戏本体进程(FSD-Win64-Shipping.exe)走。如果把配置文件设置成“所有从steam发起的流量全部走服务器“,会导致游戏流量也会走服务器,这个效果就跟game booster(参考part6、7)与magic的全局差不多了。这里拿以前自己实验截图(当时实验目的是想验证drg是否的确是P2P游戏)来展示“部分游戏流量会从steam进程走,而不是从游戏本体进程“


                        IP属地:罗马尼亚15楼2022-06-22 23:13
                        收起回复
                          干货贴来喽,帮顶


                          IP属地:广西来自iPhone客户端16楼2022-06-22 23:18
                          收起回复
                            (Part13)最后,总结一下这个贴的主要内容
                            为了解决游戏联机问题,客机和房主都需要跟中心服务器(有两种,游戏内含的服务器列表和steam好友列表)建立联系。这需要主机能够成功访问到几类域名。部分地区能够访问到这些网站的域名是很正常的(得根据当地ISP策略而定)。但是处于理论分析,该帖子需要假设用户都无法被访问到所有上述提到的网站
                            "根号91204"和Game Booster(比如UU、雷神等)这两个现有的工具都有各自的局限性(不知道为什么要查这两个短语….)。第一个工具能够让玩家通过steam好友列表来互相加入游戏,但不能保证服务器列表的连通。第二个工具或许能让用户可以通过两种类型中心服务器加入游戏或者自己开房让别人加入,但是会增加延迟和不稳定性。同时,可能某些第二种工具会有一些域名、协议相关的限制条件,导致开了也不一定有用
                            对于有基础的人来说,可以尝试控制流量走向 :让原本不能访问的网站(即part3提到的那几类网站)通过转发流量的主机访问到; 但不能让游戏流量走这些主机节点,即我们需要让自己主机(作为客机时)直连房主或者直连客机(当自己作为房主时)。控制流量走向可以通过编写基于域名的转发规则来实现,需要在对应的软件中编写规则。至于怎么写规则,如果相关软件支持,软件官方会有帮助文档可供参考
                            希望自己所给出的思路能够给一些人提供改善网络思路
                            现在人少的时候,房间列表中5级难度可能只有6,7个空房间。有1、2个是6-7级或者mod房。还有几个延迟高的离谱(200+)的房间。剩余的可选野房只有少数了


                            IP属地:罗马尼亚18楼2022-06-22 23:28
                            回复
                              2025-11-23 01:58:33
                              广告
                              不感兴趣
                              开通SVIP免广告
                              干货帮顶 我用Tz之后能解决大部分无法加入的问题 ,我觉得应该就是你说的P3的原因


                              IP属地:广东来自Android客户端19楼2022-06-22 23:51
                              收起回复