ps4吧 关注:1,871,649贴子:51,868,864

【科普】NAT类型详细科普及提升NAT类型的方法

取消只看楼主收藏回复

NAT可以说是被各路大佬科普过了,今天我从一名程序员的角度来讲解一下什么是NAT,为什么NAT会有各种类型,又如何改变我的NAT类型。而关于大家最感兴趣的提升NAT类型的部分我可以保证,只要操作没有问题,最后的效果和你的网络没有任何关联,就算你是城中村亦或者是辣鸡校园网,都是完全可以通过软件层面上改写数据包来实现full cone(nat中最高级别,对应ns的natA,ps4的nat2中最好的),甚至可以享受公网ip的待遇(nat中最高级别,对应ns的natA,ps4的nat1)
同时本帖也用于记录我终于成功完成了路由器稳定的full cone nat以及不稳定到ping命令跑不过但是就是能上网而我也懒得知道为什么的公网ip映射


IP属地:北京1楼2018-12-10 23:58回复
    第二楼用于解答问题


    IP属地:北京2楼2018-12-10 23:59
    收起回复
      首先在看本篇文章之前你需要明白,现在的加速器在很多时候已经能满足大多数的玩家的需求,不管是nat类型改变还是说网络线路的选择,网络加速器可以说是比自己搭建的灵活性和效果好得多,而且面向主机的加速器也逐渐增加,支持多种路由器的加速器插件也逐渐出现,本文中的方法比较复杂并且需要一定的计算机知识,相比之下网游加速器可以说是更好的选择,如果你只是轻度游戏玩家,那么我推荐了解完NAT以及NAT类型相关的知识,就可以看兴趣品读一下我的解决思路而不要去实际操作(会自闭的)


      IP属地:北京3楼2018-12-10 23:59
      收起回复
        NAT简介
        首先现在的大多数设备的网络采用的ipv4网络,ipv4中ip的定义为x.x.x.x,其中每一位为0-255,所以全球的ip总数256^4,这个数量是不足够全球使用的,为了保证每个人都能有ip使用,NAT技术诞生了。
        NAT的思路很简单,将一个公网ip下的子网ip发送的数据包转换成自身的数据包进行发送,然后再把收到的数据包还给子网ip。
        打个比方就像是大学宿舍4个人,选出来一个人去上课,不管是签到还是通知都由这个人来负责,这样一来,可能教室中只有一小半人,但是签到一个不少,这个被选出来的人就是那个公网ip,其余的3人就是下面的子网ip,这样就解决了ip不够的情况。
        由此可见产生nat的直接原因就是你的电脑并没有真正的公网ip,你的电脑只是运营商手中的那个公网ip下面的众多电脑中的一台,所以如果能向运营商获得公网ip就可以实现ps4的nat1(无nat),但是这并不容易,因为有可能你的运营商甚至都没有公网ip而是从别的运营商手里拿到的一堆子网ip再分给你的,或者说你不可能找校长给你分配个公网ip


        IP属地:北京4楼2018-12-10 23:59
        收起回复
          NAT类型简介
          那么知道了什么是NAT那么为什么NAT还分成好几种类型呢?这是因为出于安全考虑,NAT类型越封闭你的计算机越安全,甚至在windows上,就算你外面是公网ip,出于安全考虑防火墙都能把你的NAT类型降低不少
          NAT一共分为2大类
          第一类是克隆(cone)类型,而克隆又分成
          全克隆(Full Cone)
          ip地址限制型(AddressRestricted Cone)
          端口限制型(Port Restricted Cone)
          第二类是对称(Symmetric)类型
          在ps4上这4中都是nat2,而对称性如果端口无法转发则是nat3(可以理解成纯正的对称,尝试拯救失败的那种),而ps4上的nat1则是无nat(ps4上的ip就是公网ip)
          对于ns则能确定的是全克隆是a,中间两种应该是b,对称型是c,至于那些f都出来的我实在不知道是咋分出来的


          IP属地:北京5楼2018-12-10 23:59
          收起回复
            在讲这几种NAT分类之间的区别之前我首先先科普一下ip和端口之间的关系,对于每个ip它都有0~65535共65536个端口,端口的作用是用来区分数据包,同一台电脑上有很多应用在上网,为了区分数据包是给哪个应用的我需要给每个应用分配一个端口,每个端口就像是银行的服务台,不同的窗口不同的业务,只有去对应的窗口才能办对应的业务,如果我想让别人能在我这里办理业务,我也需要打开我这个窗口,这样别人看到窗口打开了才能把单子递进来。
            对于NAT则是同时还要用于区分不同的电脑,老师发文件,如果不说明是发给谁的,那么这个代表也不知道是给自己的还是给寝室里面别人的,所以寝室里面的人在不同作业上写上编号然后给代表,和代表说老师发回来的评语上也写相同的编号这样我就知道这个评语是我哪份作业的了,代表就在跟老师这么说,但是同时如果3个人的语文都用的1编号,那么代表可能会把这3份作业分到123这3个编号上,这样一来给回来1就知道是第一个人的语文作业的评语了,然后再把评语写上1给第一个人,而如果老师给了一个4过来,代表就知道了,这个文件是给我的不是给那三个人的,不过在实际中端口是双方的,老师发送评语过来也是有一个端口的,代表会把作业给老师的3号窗口,然后3号窗口再返回给代表,也就是 甲:1发送给 代表 ,代表:1 发送给 老师:3 , 老师:3 发送给 代表:1 ,代表 发送给 甲:1 这样的一个通信过程,其中两个没有冒号的代表是因为在这个过程中我只是转发了数据包并不是要交给代表的某个应用处理,我只是给你让你帮我交作业而已


            IP属地:北京7楼2018-12-11 00:00
            回复
              通过这个过程就可以发现NAT最大的问题就是NAT这边的电脑如果想让外面的人访问进来就必须我访问过外面的人,这样,才会有给代表1的文件都给我的1这样的一个映射,否则所有的文件都会变成给代表的而不是给我的了,所以在p2p联机中,能够通过一定的手段让外界的人访问到我就很关键了,而在不同的NAT类型中则还会有一定的不同


              IP属地:北京8楼2018-12-11 00:00
              回复
                该楼层疑似违规已被系统折叠 查看此楼


                IP属地:北京9楼2018-12-11 00:00
                回复(1)
                  总结下来,在B:b和A:a在与C:c通信的过程中建立过关系后对于接收的时候D:d向B:b发送数据包,如果无条件把文件给A:a就是全克隆,如果B:b(注意要求端口)之前给D发送过数据包的情况下才转发给A:a否则阻止那么就是ip地址限制型,如果如果B:b(注意要求端口)之前给D:d发送过数据包的情况下才转发给A:a否则阻止那么就是端口限制型,如果直接丢弃则是对称型


                  IP属地:北京10楼2018-12-11 00:01
                  回复
                    该楼层疑似违规已被系统折叠 查看此楼


                    IP属地:北京11楼2018-12-11 00:01
                    回复(1)
                      不行了,发不出去了。。。


                      IP属地:北京20楼2018-12-11 00:31
                      回复
                        那么我们该如何改变NAT类型呢?在这里我首先提供一些思路,首先我们要找到NAT发生的地方,NAT主要发生于公网ip与局域网ip之间的交汇点以及局域网内两个网段(比如192.168.1.x和192.168.2.x,可以认为第3个点前面的就是网段了)之间,但是往往我们的局域网ip会经过大量的局域网网段,而公网ip与局域网的交汇处的设备又不在我们的手里,此时就要用到xxx了,众所周知xxx可以翻x,但是同时也可以用于在两个通过互联网连接的设备之间建立一条虚拟的网线来连接,如此一来我们就可以直接跨过中间复杂的结构把网络结构变成电脑---公网服务器这样简单的结构,这里的服务器就需要去租,最便宜能上网的就行,如此一来我只要在两个设备之间通过openxxx建立连接之后我就可以控制我的服务器上的NAT过程中的NAT类型来改变我的电脑的NAT类型了,此处需要自行百度搭建openxxx服务器


                        IP属地:北京22楼2018-12-11 00:34
                        收起回复
                          我们可以通过无条件将所有的数据包转发给电脑从而实现公网ip映射,不过要注意的是通过这个方法会直接废除你的服务器,你的服务器所有的向外通信的返回都无法接收到而会发送给你的电脑,但是相应的你可以近似获得公网ip的一切,这种方法非常不稳定,我不保证会不会发生什么奇怪的东西,这个方法可以通过iptables的nat表中的SNAT和DNAT来改写数据包的发送地址(source)和目标地址(destination),需要注意的是永远不要更改位于公网ip的那一端,发送时应当更改发送ip为公网ip,接收时应当更改目标ip,将其从公网ip改成电脑的ip(openxxx分配的那个ip,或者在服务器上写静态路由也可)


                          IP属地:北京25楼2018-12-11 00:35
                          回复
                            顺带一提,因为ps4和ns没有那么灵活的网络设置,所以在实际情况中我还采用了一个树莓派用作网关,这样所有的数据包发给树莓派,然后树莓派再发给服务器,需要注意的是,如果不写陆游的话,在主机与树莓派间和树莓派与服务器间是两个局域网网段,需要做和服务器相同的设置,不过所有的出入网卡都要改成xxx的tun0网卡,在硬件上和在操作上都有一定的门槛,所以并不是非常推荐,但是如果有同样喜欢折腾的人,不妨可以理解一下nat和路由然后在树莓派上配置相似的内容,同时这句话适用于上面所有的教程,我只是提供思路,在操作前请一定要理解透彻,不然盲目操作会出现各种各样没见过的网络问题


                            IP属地:北京30楼2018-12-11 00:53
                            回复
                              顺便发现以前写过一点东西,还是有点详细的http://tieba.baidu.com/p/5538730520?share=9105&fr=share&see_lz=0,这个教程大概可以一直管到nat3转nat2,全克隆部分不包括,不过编译的一些难点我前面都说了,挑战一下还是有点希望,主要还是有一个挂xxx并且可以灵活配置的最好是linux系统的设备比较难受


                              IP属地:北京来自Android客户端31楼2018-12-11 01:00
                              收起回复