背景:
在PC上玩战地5饱受外挂毒打,早想接触主机游戏又没有机会。最近突然有个好机遇带我入坑switch,那肯定得赶紧体验一下啊~~
被安利的游戏是斯普拉遁3(splatoon3),是一款switch独占的第三人称射击游戏,主要的玩法就是PVP。这里就存在一个问题,任天堂似乎没有取得GFW的白名单,因此直接在switch上下载游戏速度极慢,同样的由于PVP模式服务器搭建在国外,游戏中按照正常网络裸连后在游戏中匹配基本匹配不到对友和对手。基于此,想办法连接到国外服务器愉快游戏就是本文讲述的核心目的。本人非网络工程科班出身,只有一些最基础网络工程的常识,因此在了解学习这方面内容主要是发现现象,推测,查询资料,验证的模式进行的。本文主要记录在此过程中学习到的一些知识和心得。
通用解决方案–网游加速器
既然连接国外服务器是个问题,那肯定已经有成熟的解决方案,即使用国内一些厂商提供的加速器,如UU加速器。接下来以UU为例,使用方式很简单(简单吧!一个月30),在PC机安装后,选择斯普拉遁3,加速,然后出现以下界面:
按照其要求,首先加速的PC和switch要在同一个路由下,即属于同一个局域网。然后要求在switch按照显示的IP,网关,子网掩码,和DNS设置,再连接至局域网内即可。操作方式很简单。
话虽如此,但是在实操阶段仍然出现问题,即当我配置完毕后,尝试接入局域网时,switch会提示接入局域网但,但“DNS解析失败”,无法接入互联网,百度找到的解决办法包括但不限于:重启电脑,重启switch,重启路由器,更换DNS,关闭PC防火墙等等,均无效果。这些操作都是治标不治本,了解其中原理才是解决问题的王道。
从IP地址出发
网上有一大堆对IP的解释,按照我的理解,简单的说就说在公网中IP就是唯一的地址,理论直接定位到终端。
那这里第一个问题,以IPv4为例,IPv4是由0.0.0.0-255.255.255.255,32bit的数据构成,最多可以编码2^32即4,294,967,296个地址,那如果我们所使用的每一个设备都占用一个公网IP,全球40多亿网民,每个人还不一定只有一台设备,IP肯定不够了。解决方案就是使用网关,将相近设备组成局域网然后该局域网内设备对公网共用一个IP,从而大大减少公网IP的占用率。
由IP到网关,以及NAT
由上引出第二个问题,局域网内设备对公网共用IP,那局域网连接公网时或者公网往局域网传输数据时如何精准定位到数据请求和接受的终端?实际上仍然是用IP,只不过现在的IP是局域网IP。而代表局域网接收公网数据,将公网IP翻译为对应请求数据的局域网IP,是通过NAT(Network Address Translation)协议实现的。翻译完毕后将数据传送到局域网IP对应的终端,是上述网关要做的事情。所以按照我的理解,从概念上网关是设备,NAT是网关设备中常用的协议,一个是硬件一个是软件。
因此,假如我们的PC连接至路由器并成功连接网络,那PC中网络设置的网关对应的地址就是路由器的地址,往往就是我们配置路由器的局域网IP地址(常见的由192.168.0.1;192.168.1.1;192.168.31.1等等)。在此,不难推测路由器的基本原理–一个集成各项网络协议固件的嵌入式硬件,监听局域网中的网络请求并将其传输到公网,接收数据后再将数据传回请求终端。
这里有个容易令人confuse的点,如下图为switch连接网络成功的截图,其中有个指标为NAT类型,我一开始就很自然地认为那是网速快慢的评价指标,但是在理解NAT的作用后,就有个疑问,既然NAT只是一个协议,协议怎么能衡量网速呢?果然一查发现将NAT类型与网速挂钩是错误的,网速更加直接的评价指标用下面的“连接速度”更加合适。NAT类型描述的是网络的开放程度,越A越开放,数据来者不拒,越后越封闭,传输数据前双方互联的要求就越高。根据我的查询,NAT可以从技术上分为四种类型:full cone NAT,restricted cone,port restricted cone NAT和symmetric NAT,NS(Nintendo switch)将full cone NAT划分为A,其他三种划分为B,因此NAT类型主要和你的连接模式有关,而非和网速有关,NAT类型也是可以通过设置修改的(参考下放链接)。但是不是理论越A网速越快?毕竟所说的越OPEN嘛,这个我就不知道了。之后再试试。
NAT相关参考:NAT类型介绍 ,NAT类型介绍2,switch NAT类型以及修改类型,VPN与NAT
回到switch加速配置要求–背后的原理
回到我们的问题,在将PC与switch连接在一个局域网后,我被要求按照图一设置IP,掩码与网关,DNS。
此时出现一些比较混乱的局面:
我的PC的局域网IP地址是192.168.31.197
switch的局域网IP是172.24.32.197,网关是172.24.31.197,
UU生成的虚拟网卡IP是172.19.83.237
按照正常理解,switch的数据肯定是要从我PC上走的,所以172.24.31.197这个网关IP对应的应该是我的PC才对,然而此IP实际上和我真实的IP网关不在一个段儿上,而后面两个数又如此相似,所以推测是APR欺骗策略,即192.168.31.197为了和switch 172.24.32.197 握手,声称自己是172.24.31.197,从而实现握手。这里有个知识点是,局域网内的数据包传递是认的实际上是设备MAC,而非认准IP,因此PC欺骗switch实现握手后,172.24.31.197这个就没有用了,switch的数据会向实现握手的MAC,也就是我的PC(192.168.31.197)发送数据。我通过wireshark抓包验证了这一想法。
紧接着我们就能抓到UU的虚拟网卡(172.19.83.237)开始与另一个IP(172.19.83.238)开始进行数据交换,以及PC(192.168.31.197)与UU加速器设置的一些位于广东的一些IP之间进行握手和数据交换(如下图),广东的服务器可能与国外服务器有专线所以速度更快。
switch连入网络的同时,虚拟网卡的两个IP之间的交互:
综上,可以推测这是通过VPN的形式进行链接加速,流程为PC申请与服务器交互,信息被网卡截获(NAT),走隧道到172.19.83.238处理后返回,解析为广东服务器从而实现数据传输和加速。(这段描述是根据个人理解的推测,如有大佬觉得有问题请指出)。
直接使用魔法尝试加速?
我的目的是为了连接到外网的服务器,那是否可以直接使用现成的魔法实现加速呢?答案是可以的,但是和国外服务器专线比起来,稳定性很差,而且由于没有专门的设计,NAT类型为B,但是下载速度是优于UU加速器的,所以只能说术业有专攻,该花的钱还得花。
操作方式,在PC梯子软件设置全局模式并开启“允许局域网加入”,届时会有一个端口开放。然后switch支持http协议的代理服务器,在switch开启代理服务器,IP地址写PC的IP,端口写梯子软件告诉你的端口。然后switch的流量就会经过PC然后以PC的身份收发数据,再由PC传回。
区分VPN与代理
两者之间还是有区别的,而国内似乎非常喜欢混淆这两个概念。相关的帖子有很多,我就不在这专门写了。
参考:代理(Proxy)和VPN的区别
说一些结论,我们常用的梯子实际上大部分都是代理,不是VPN。因为VPN有数据加密的功能,而虚拟网卡正好可以实现截获数据并进行加密的功能,因此区分两者主要的方式通常就是看开启连接后是否会多出一个多出虚拟网卡。有网卡是VPN,没有网卡是代理。
从抓包分析也可以看出区别:
上述游戏加速器是VPN抓包结果,不再赘述,而代理开启时抓包结果如下:
不开代理的情况下,刷新某网站,PC与某网站 IP之间直接尝试连接(灰色阴影部分),结果没有响应也正常。
开启代理后,刷新某网站,不再会看到DNS以及某网站本身的IP等信息,只能看到PC在和某台电脑之间交互
最后
背后的原理我们大概清楚了,那么回到最最一开始问题,即尝试接入局域网时,switch会提示接入局域网但,但“DNS解析失败”。通过了解背后的机制,最后我终于找到了核心原因,那就是加速器当时没有连上他的服务器,因为我什么都没改什么都没做,晚上就连上了。(大哭)
总结
看起来简单的操作背后还是鱿点东西的。欢迎大家批评指正。