打个联机游戏为什么你的网络老出岔子

2019-12-12 23:02:45  阅读:6778+ 作者:责任编辑NO。郑子龙0371

编者按:本文来自微信公众号“游戏时光VGtime”(ID:VGTIME2015),作者 箱子,36氪经授权发布。

那些喜爱对战、共斗的玩家,经过这么多年的磨练,想必早已对稀奇古怪的网络问题见怪不怪。考虑到国内复杂的网络环境,以及运营商本身服务端的设置,如果用户不进行对应调整,联机游戏和线上游戏的体验往往不怎么顺畅。但围绕防火墙、带宽、网络提供商、地理位置等元素,每一种麻烦似乎都有个殊性。

比如《怪物猎人 世界》刚刚发售时,掉线的情况屡见不鲜,又比如让《最终幻想14》玩家深感钻心之痛的错误代码 —— “90002”和“2002”。让人困惑的是,它们是否有共通的成分?有没有一套一劳永逸的解决“公式”?若是从网络工程师的角度出发,专业技术人员又会如何审视这样一些问题?

物理的极限

“首先,所有玩家在联机的时候都存在一个物理延时问题,这个是所有人避免不了的,大家都距离很远,不管玩家和玩家之间,还是玩家和服务器之间都会存在这种问题。比如你玩美服的时候,相当于围着地球绕了半圈,从中国到美国,裸光纤都是 10000 公里以上,你就是乘着光速跑也要 100ms+。”

在向奇游联机宝的工程师请教时,对方抛出了最为基础的前提:传输延迟。

100ms 换算过来是 0.1 秒,尽管看起来很短,但对于某些强对抗的游戏而言,玩家已经能感受到明显的区别了。表现为 FPS 游戏里的命中检定失败,或是动作游戏里该躲的技能躲不开。如果传输的时间超过 200ms,往往还会伴随着无法访问网络的情况。

中国联通的网络路径图

若是路径和介质固定,再排除环境干扰,那么传输延迟基本是恒定的。可以依据光、电信号的传输速度,以及有线的光纤铜缆,无线的各种制式算出具体数值。但距离越长,意味着两台计算机间可能会出现更多的节点和硬件,其中还涉及到数字信号和电信号的转换。要是简单的来分类,可以说产生了“处理延迟”。

事实上,玩国服游戏也觉得“卡”,很大程度上都是“处理延迟”的锅。在工程师们的眼中,跨运营商联机时的复杂网络路径是个大问题:

“游戏数据包从用户侧到服务器会经过很多的中间设备,这些中间设备可能在不同的运营商,如路由器、网关、交换机等等,能够理解为快递的中转站。不同运营商到同一个服务器的路由路径很可能是不一样的,比如,电信用户玩上海的服务器,从用户直连上海,但是移动的用户玩相同的服务器,可能需要绕道广州再到上海,延时就增加了。”

对于消费者来说,网络路径中设备的转发能力是个未知数。如果运营商在硬件上偷工减料,那么封装、解码的时间肯定更长。简单的拿路由器来举例,网络高峰期拥堵的时候,来不及转发的数据包就在缓冲队列里待着。其中有很多猫腻,按照规则,可以让 IP 优先级高的先走,映射到服务里就是卖 VIP 用户。

红色为低延迟队列,VIP 先走

至于饱受诟病的外服联机,工程师表示,在距离更远、路径更复杂,以及上述这些前提条件都存在的情况下,数据包会七绕八绕的来到国际端线:

“第一个问题就是连不上游戏,很大可能是大量丢包或者流量被阻断了,阻断的原因就太多了,各种问题。在连接国际端线时,常见的部分流量被认为是翻墙流量,直接阻断,另外到部分国外 IP 或者地区的流量太大,会被限速,因为国际带宽是有限的,不可能让所有人都敞开用……举个例子就是白天你访问 R 星平台下《大镖客2》,白天下载速度很快,能跑到 10~20m,晚上下载就变成龟速。”

而在所知的范围内,北京(华北区)和上海(华东区)的国际出口,没法直接访问东南亚和澳洲的部分地区,就要绕道广州(华南区)和香港。

难缠的联机方式

上述这些棘手的情况,基本都来自外部环境,但其实在很多情况下,联机不畅源于用户本身的网络设置。换句话说,某种程度上是可以自行解决的。

比如《怪物猎人 世界》的联机方式主要基于 P2P,依靠参与游戏的玩家电脑自行解决网络同步。这里面牵扯到一个 Lockstep 的概念,可以想象成走军步,网络快的玩家要等网络慢的,所以有时候房主卡大家都要遭殃。而在这类方法中,“NAT 类型不开放”往往是弹出"5038f-MW1"等掉线代码的诱因。

P2P 的一个形象比喻

主机游戏玩家肯定对 NAT 不陌生,Xbox One 的 NAT 类型被分为开放、中等、严格和不可用四等,PS4 有 1、2、3 等,而 Switch 上也有 A、B、C、D 等,总之等级越靠后疑难杂症就越多。

NAT 的本意是“网络地址转换”,由于公网的 IP 数量不够用,运营商可以启用 NAT,将你的 IP 地址“转一下”,变成和很多人共享一个公网 IP。

光说概念可能不好理解,举个不算恰当的例子:

  • NAT 类型开放(1 和 A):相当于有个送餐小哥给你送外卖,最后能顺着 IP 地址找到本人。

  • NAT 类型不开放:送餐小哥只能找到你公司的前台,外卖(数据包)得转发一道才能到你手中。

更细致的来看,假设你的 NAT 类型是“中等”,那证明前台小姐姐还愿意提着外卖来找你。如果是“不可用”,你的外卖可能就没人管了。总之在 P2P 的联机环境下,“不开放”会造成很大的影响。

NAT 服务器就像是夹在中间的一把锁

提高 NAT 类型等级的方法大同小异,要么找运营商协商(花钱)搞个公网 IP,要么用主机直接拔号上网,一定要用路由器的话,也要设置 DMZ,把端口开放给外部网络,核心思想是“少一面墙是一面墙”。

当然,游戏联机的方式并不全都基于 P2P,也有不少厂商用到了 C/S,即服务端与客户端直接通信,不涉及到 NAT 类型的问题,具体的案例有《守望先锋》《泰坦天降》和《光环》等等。

左边的连接方式是 P2P,右边为 C/S

但在这种较为传统的模式下,也会有一些特殊的问题。联机宝的工程师认为,同样是 C/S,有些游戏的服务器设置适合中国玩家,有些就不太适合了。通常表现为游戏中部分域名或者 IP 不通,导致登录问题,或者路由不是最优,导致丢包太多:

“比如《使命召唤 现代战争》,登录服务器在欧洲,游戏服务器在日本、韩国、新加坡、美国等各洲,试想一下,从你家到这些地方的网络都要延时稳定,不丢包才能够有比较好游戏体验。但是实际上国内到这些地区的网络延时大多数都 100ms 以上,到欧洲和美国都 200ms 以上,而且还大量丢包,所以根本没办法玩。”

值得一提的是,还有一些开发商会对联机方式来进行优化。以《荒野大镖客2》为例,如果玩家也可以用 P2P 直接打通,那就使用 P2P 进行通信。如果不行,会转到 R 星的中继服务器。但国内用户通常是两头都不占,不仅 NAT 类型不开放,连接服务器又受到物理极限的重重阻碍,往往只能望洋兴叹。

加速器干了什么

对于大多数人而言,改善联机体验的省心办法,无非就是开个游戏加速器。

有人会对它们的原理感到好奇,这背后其实是一个比较综合性的问题,牵扯到为客户端选择正真适合的端口,减少网络路径的复杂性,或是直接架设区域服务器,最大限度的降低访问延迟。

经营加速器业务的机构,通常会架设多个节点服务器,租借多线机房来提高用户的连接效率。玩家启动客户端时,用 SOCKS5 协议来和代理服务器打交道,代理服务器再和真正的游戏服务器打交道。要么就是部署自动切换运营商的多线 VPN 服务器作为加速节点,给玩家分配一个虚拟的 IP 地址。

比如联机宝的节点接入了三大运营商,中转后走专线直接连到游戏服务器,此外国际出口用的也是专线。正如之前提到的,这么做可以简化网络路径,好比数据包没有必要从成都绕到广州,又到黑龙江,折腾一大圈最后到北京,而是从成都到北京的直达线路。

所谓的专线你能够理解成,本来一条道路上有视频、语音、文档等牌子的“汽车”在跑,而专线只允许“游戏牌汽车”通过。而且加速器一般会租用国际企业带宽,腾出来给玩家用,再加上加速网络中能做到 NAT 开放,因此能够解决 NAT 穿透中的不开放问题,所以掉线和延迟的情况都会得到较大改善。

亚马逊云的专线服务:左边正常接入需要走复杂的网络路径,右边专线就是直达

不过,虽然原理是这个原理,用户的问题总是千奇百怪。

根据工程师透露,原则上他们是通过游戏测试对数据包做多元化的分析,确认数据包的收发路径(去程和回程的路径),看看问题类型到底是丢包还是阻断,总之讲究一个对症下药:

“比如我们检测到一个用户丢包,会优先排查用户的本地网络是不是真的存在问题,然后再排查用户到我们节点的网络问题,最后一步是排查我们节点到服务器的网络……举个例子,发现用户到我们节点连接不稳定,会给用户更换节点,然后保障网络顺畅。”

但在这样的一个过程中,经常会遇到比较无厘头的事情。有的暴躁老哥把对应 WAN 口的网线插到 LAN 口,最后让他拍了个视频,开远程才发现是网线接错了。还有《怪物猎人 世界》的玩家,没法联机的真正原因是“下载包缺失了部分文件”,得重新下载游戏。总之缘由无论是不是加速器引起的,事情总得管到底。

总的来说,若是纯粹在国内联机,掉线、延迟与两台电脑间的直线距离关系不大,毕竟现在用光导纤维传输很普及。问题在于,国内数得上名字的网络运营商就接近 10 家,它们之间的网络是有壁垒的,这会加大数据交互的处理成本,也是中小运营商和校园网体验不好的原因之一。

另外无论是连国内、还是要走国际端线,都有可能遇上网络拥塞的情况。特定情况下,这与运营商超卖带宽的行为有关,导致的结果,可以类比成那些 MMORPG 的排队盛况,归根究底,可能还是运营商的硬件没那么给力。

你会发现很多技术工作都是围绕着处理延迟展开的。无论是优化“本没必要那么复杂”的网络路径,解决跨运营商问题,还是改善 NAT 类型,共通之处都是在现有硬件下,对游戏联机的环境做简化。但具体到细节,就未必有一劳永逸的解决办法了。

在与我交流的过程中,网络工程师们的态度大多很有意思,他们排查故障的切入点,往往都是我们觉得比较浅层的东西。或许从基础的细节入手,恰恰是能够全面审视网络状况,以及深耕这一行的关键所在吧。

“如果发现本网站发布的资讯影响到您的版权,可以联系本站!同时欢迎来本站投稿!