NAT与Switch联机加速
猛汉R试玩已经于今日上线,这不玩这不玩这不玩?
盾斧的衣服好好看呜呜,我猜是影蜘蛛套,我吹爆
由于穷逼没钱买加速器,所以试玩了两把太刀和盾斧之后就开始研究起了怎么用现有白嫖节点来优化Switch的联机体验,然后产生了这篇文章
Eshop加速
就以我自己为例,使用香港节点直接做到600k/s的下载速度,快速下载mhr,不要小看这个速度,任地狱的垃圾服务器下行带宽有限(虽然用了一堆CDN,但是就这么点速度)就算是充钱买的加速器也就2m/s多一点,对于白嫖党来说这已经很不错了
我用的clash,直接勾选Allow LAN,允许局域网访问,然后让电脑和Switch在同一个WiFi下,配置switch的代理设置为电脑ip加7890端口即可,挑一个港服节点,进行快速港服eshop下载
(其实因为垃圾校园网需要认证switch没法连,我自己还是本机连校园网然后同时开热点让switch连电脑热点下的。。。。)
加速原理
我不知道,我一直以为加速器下载加速肯定是有专线什么的带宽upup,所以下载速度快。但是我就单纯的设置一个代理也能提升速度,如下为猜测原因
1.境外服务器国内互联网不怎么常用,DNS或者路由查询慢(香港本身不算境外啊,不要搞反动!但是和国内互联网不是一个体系,所以按境外考虑)
2.国内网络边界审查流量拖慢访问速度,并且可能误伤正常流量导致大量丢包重传
3.可能是比较重要的一点,链路质量问题,国内存在各种各样运营商的各种各样的链路,CN2系列是我国下一代什么什么承载网,是国内最好的链路产品,然而90%以上的请求却仍然在拥堵的上个世纪搭建的电信骨干网中流动,丢包重传概率高,链路质量差。而如果使用阿里云等商业网络,可能会在各地存在专门的接入网络,加快连接速度。我们使用的节点可能也就是某个商业集团的vps,商用网当然优于家用网。而对于加速器而言,各地部署高速网络,使用BGP来帮助降低用户家宽到中转服务器的延时,并通过内网IPLC隧道一把梭,极致网速体验
虽然不如加速器超级专线的网络速度,但是的确挂了个梯子之后也达到了一定的加速效果,我很开心
NAT
简单测试之后得出MHR的联机方式是CS,但是不是任地狱或者卡普空的官方服务器,是房主自己的机子当服务器(所以房主永远不卡),和其他玩家进行通信,任地狱似乎没有那种中心服务器,switch上大部分游戏可能都是玩家主机做服务器或P2P,任地狱只提供STUN服务器来辅助大家进行互相找到。P2P的话,一个人炸了整个房就炸了例如马造2,马车8?无把握喷喷不知道是哪种,看了几个帖子可能是P2P?动森可能是岛主做服务器?
而IPv4地址很稀缺,所以我相信大家现在都是用NAT上网的
这里就要提到NAT的几种类型了
Full Cone NAT
完全圆锥型NAT,当你获得了一个ip:port映射之后,所有发向你映射的IP端口对的数据都会转发到你本地的对应端口,基本上就等于获得了一个公网IP端口对
对应任地狱的NAT类型A
直接拥有公网IP NAT类型也为A
Address Restricted Cone NAT
地址限制圆锥形NAT,同样给一个映射,但只允许从数据发送的目的机器的回应报文返回,你没发过数据的人知道了你映射出来的IP端口也不能给你发消息
对应任地狱的NAT类型B
Port Restricted Cone NAT
端口限制圆锥型NAT,相较上一个再增加一个端口限制,只允许自己发送过数据的对应机器的对应端口的回应报文返回
对应任地狱的NAT类型C
Symmetric NAT
对称型NAT,贼玄幻的东西,限制先拉满,和端口限制圆锥型NAT的限制规则一致,又加了一个对每个不同的IP:Port发送的数据进行一个映射
就比如我同时向两个主机(或者同一主机的两个端口)发送数据,那么NAT就会对应这两个链接映射两个IP端口对
就是说每一个原宿IP端口对对应一条独一无二的映射关系,公用网络,校园网之类的基本上是这个类型
对应任地狱的NAT类型D
NAT Type F
这已经不是NAT类型了,意思是Fail,你连不上网,你完全没机会联机
NAT类型与联机
之前说了,mhr没有游戏服务器,或者说存在一个大厅服务器,让玩家们能互相找到对方,而实际上的游戏服务器是房主的switch,也就是以房主为中心的一个CS模式
接下来为对联机过程的推测,有待考证
存在一台游戏大厅服务器,简单的认为玩家A和B的switch全部连接到大厅服务器上,A创建一个房间,B加入这个房间,这个时候大厅服务器就分别把AB的IP端口告诉对方,然后让A和B进行连接。
而如何获取AB的IP端口,任地狱使用了STUN服务器,似乎用的是xxx.lp1.n.n.srv.nintendo.net这个域名,从clash中可以看到这个连接,获取到AB各自的NAT状态,且告诉对方各自NAT出来的的IP地址和端口(或者是直接发现超级牛逼的玩家暴露在公网中)在这个情况下ABC三种NAT类型并不影响联机
而D类型由于每个IP端口对应一个映射,导致用户A的switch和STUN连接得到的IP端口和实际去和用户B连接的IP端口组不一致,而其超级限制使得两方无法正常联机
reddit上的一个帖子说到喷喷在NAT为C的时候就玩不了了,我其实不太能理解。。。
内网穿透
也就是NAT打洞,通过STUN服务器的辅助使得两个隐藏在NAT后的主机能互相通信
A为房主
这时候A就约等于暴露在公网中,BCD类型均可直接向A发起请求,建立连接,而A通过建立的请求反向回复即可与BCD类型建立连接
B为房主
B类型只接受其自身通信过的主机的数据,且显然若其他通信方NAT等级高于B,则可用之前的方法建立连接。若对端也为BC类型,则双方互相向对方IP:Port发送请求,完成NAT打洞。
若对端为D类型,则STUN服务器给予房主的IP:Port不是其对端与房主通信的IP:Port(一般来说IP不变,Port增长),则房主到D的请求会被拒绝,但此时房主可接受来自D的通信,因此D可以抵达房主,房主再建立反向通信,双方完成NAT打洞。
C为房主
只考虑对端为CD的情况,对端为C,则双方同上述情况,互相进行试探,在NAT上打洞完成通信建立。
对端为D时,C发给D的请求被丢弃,而打通的洞却只允许D特定端口的数据通过,而D类型在于服务器通信和与房主通信时端口不一致,无法完成打洞(但C可以通过对D进行端口猜测打洞,成功率不高)。C-D类型无法完成联机。
D为房主
只考虑对端为D,比C还惨,双方猜测对方的IP:Port进行通信,撞中的概率比C-D应该高一个数量级,撞大运了就能通信上
NAT对联机影响
NAT类型并不影响联机质量,只是越低等级的NAT导致建立连接的难度加大,但只要能建立连接,NAT就不在影响实际的联机情况,剩下的更多的是看网络的延迟,链路的通畅和丢包率的高低
唯有C-D,D-D类型的网络无法互相联机,房主只要是AB两种类型任何NAT类型的人都能相互联机
推荐阅读NAT 原理以及 UDP 穿透,配了图NAT穿透过程和NAT类型都说到挺清晰的,就是最后所谓的实现UDP NAT穿透就是任天堂现在的这个STUN服务,并不能做到我们想要的加速器效果
Something else
有大哥和我说联机模式取决于房主的NAT质量,当NAT类型为AB时,任天堂服务器只负责让大家找到对方,当任天堂发现房主处于一个内网且不支持端口映射(即类型为C及以下?),将自己作为中介进行数据转发
掘金的帖子中动森的说法为网络类型不好也会让两方尝试进行连接,不过是连接时成功的难度变得高了一点
今天和开了加速器NAT类型为A的大姐联机抓包测试的结论是,我全程只与约等于拥有公网地址的A类NAT房主通信,而与其他两个同在一个房间的玩家并无通信流量(我连的垃圾校园网NAT类型为D,不过好像也不是很卡)
以后如果和网络质量较差的大哥联机时在做更新
联机流畅程度的决定因素
以下为个人的不成熟意见
实际上影响连接质量的我觉得是与境外游戏服务器直接的不通畅,国内家用网络质量不佳,不同运营商之间提供的服务存在差异,以及地域网路条件导致的连接延迟(我和我大哥都在学校的时候联机就流畅的我从来没考虑过这个问题,各自回家之后就卡的连都连不上了)
游戏加速器本质上和一个代理服务器没什么太大的差别,不过加速器为游戏专门在各运营商处建立了专线,降低了报文在联通电信两大ISP之间切换的问题,同时也有专线直连海外,提升带宽,提供一路畅通的专线服务。加速器的服务器就是一个直接拥有公网IP的服务器,这一连上就直接等于最好的NAT类型A
而使用代理服务器代替游戏加速器也能提升一定的速度,是因为优化了GFW的过滤部分,因为连接境外服务器最大的问题可能就在于GFW的误伤导致的丢包重传,并且境外节点可能位于一些高速链路上,很多节点都是买的搬瓦工之类的机房,他们可能有一定的专线网络(不过肯定没有加速器一条龙服务来的顺畅),而实际上物理距离导致的网络延迟并不是最严重的,并且代理服务器肯定也是自己有一个公网IP,也就意味着NAT类型应该也能提升到A
如果mhr在CS的过程中并不向任地狱服务器发送信息,则可以尝试在国内架设一个服务器,商用网络也在一定程度上优于普通的家用网络,让所有人将那个国内服务器作为代理,就在国内解决问题
学习的时候偶然看到了类似的文章,看了下去发现是灵缇的开发者,下载了一个下来看了一眼,他们对动森等部分游戏就存在国内加速节点,估计用于就是纯玩家间网络的加速
而如果还需要像境外服务器提供额外数据的话,最好是每个人都连接到境外的加速器,走高速链路,应该能获取最佳体验
加速器的加速原理
加速器分几种,下载加速的话就是简单高速链路代理,像吃鸡这种与国外游戏服务器加速的代理也是类似情况,都是通过走高速专线一把梭到底来提升游戏体验。
而switch的联机并不存在一个游戏服务器,优化的部分应当是玩家与玩家之间的联系性
如下为灵缇开发者对自己的加速器的描述
如果一台设备直接拥有全球IP,那么它的NAT类型一定为A,因为没有任何中间防火墙的阻挠。我们的游戏加速服务器,就是NAT类型为A的全球服务器,通过端口流量转发对照,实现了这个提升。加速服务器在这个过程中起到两个作用,一个是代理,即Switch的网络数据由加速服务器帮忙转发,使NAT变为A,二是加速,加速器优化了这其中的网络链路,使之更快更流畅。
也就是说switch联机的加速器是通过端口转发使得房主穿越NAT限制直接成为A类型(我感觉实现就是NAT转出来之后直接和公网IP加速器通信,然后公网IP加速器端口作为代理去和外界通信,而这个加速器不走任何防火墙,NAT类型就变成了A。事实上只要我们本身的防火墙不做限制,不是人人都是A类NAT么= =)然后就是我反复强调的网络链路,强力专线,高速直达了
个人认为决定联机质量的是网络链路质量,而NAT只是影响玩家之间的可达性,两个C类NAT已经是联机的下限了,但我觉得如果他们之间的链路带宽够好,应该也会比两个在家用网上挤得要死的A类NAT联机更为顺畅
update
我太天真了。平常使用的代理确实能加速下载,他们都是HTTP代理,因为转发的是TCP流量,但是对于游戏加速可能并不实用,因为大部分的HTTP代理只代理TCP流量,而众多游戏似乎都是用UDP进行数据传输,就算Socks5支持UDP的转发,也需要看代理节点是否支持UDP转发,不然还是白给
clash可以通过启动TAP或者TUN来进行全局代理,把所有流量全部劫持到自建的cfw-tap网卡上,再进行下一步的转发,能强行扭转一些不走代理的软件的流量(但是我switch直接指定了代理服务器应该不需要这步吧?)暂时不知道UDP无法转发是clash设置问题还是对端节点支持问题,若是对端节点不支持UDP转发,那我switch是不是应该直接没法联机才对?TCP从clash里可以看见和任天堂服务器仍存在通信,不过感觉是好友服务之类的,STUN也用的UDP协议,或者说clash遇到UDP的数据还是走的直连,所以联机无问题?
有的机场好像也提供那种游戏节点,不知道是不是只有那种才提供UDP转发,剩下的只是普通的HTTP代理?
不过如果只是要公网IP和商业网络路线的话,要不我到时候试试用我的阿里云上海vps试一下做个代理?
挖坑,考完试还没忘就填一下。。。为什么别人考试都考完了我还在上课。。。
NAT和DHCP的区别
作为无关话题,思考时突然想到而进行的学习
NAT进行的是IP地址的转换,将内网地址转换为公网地址
DHCP进行的是IP的分配,给你先来个内网地址进行NAT(据说有的神仙DHCP也能分配一个公网地址),那估计就没NAT的事情了
参考链接
三天高强度学习switch联机。。。。期末要死了,不学了不学了
网络地址转换-维基百科
nat_types_and_connection_problems_explained
NAT和DHCP的区别
网络游戏加速器原理
Switch 的 NAT类型硬核向趣味图解
Nintendo Switch:联机加速方案的研究与折腾
怎么用VPS搭建网游加速器(自己玩而已)?
从动物森友会聊主机游戏联机机制
很多游戏机(Switch/3ds/PS4)是否没有公网ip无法联机,原因是什么?
udp协议怎么穿透Symmetric NAT?
NAT 原理以及 UDP 穿透