请选择 进入手机版 | 继续访问电脑版

网格Pro

 找回密码
 立即注册
查看: 10402|回复: 0

[完结] UDP 环境测试! -- (游戏模式 到底通不通)

[复制链接]
发表于 2017-10-13 09:50:56 | 显示全部楼层 |阅读模式
这几天因为开会,很多机场沦陷了看群里 在什么线路支持不支持游戏模式 (就是UDP 模式)
而这个模式还有人叫 NAT1 NAT2 NAT3
我相信很多人会因为这个事情迷茫。
QQ图片20171012190149.png

NAT123 又是什么梗呢?
这是ps游戏机里的自带的线路检测功能,就跟各种电视盒一样,自带的线路检测
因为ps是游戏机,即时强的游戏都是 通过UDP类型 传输的 。
所以,他自带了一个 NAT类别   分类  1 2 3 级

我以前一直迷茫这个级别是根据什么划分的,后来就没在研究了
网上各种说法都有,也不一样。 有人说 是经过了几层转发,也人说是设备层级
以前并没有特别仔细研究这个,反正至今我也是没弄明白。
但有一点共识! NAT 3 是最差!
如果是NAT3 在ps中 会有 派对无法聊天、某些游戏不能网战或网战不容易搜到人等等各种问题。


  1. 1.全锥型(Full Cone)
  2. 2.限制锥型(Restricted Cone), 或者说是IP受限锥型
  3. 3.端口受限锥型(Port Restricted Cone), 或者说是IP + PORT受限锥型
  4. 4.对称型(Symmetric)

复制代码

--------------------------------------------
上面说了NAT123是什么梗,下面说下对于没有PS的朋友,UDP到底重要不重要。

UDP 上文说了!游戏很多很多游戏都是UDP协议,其次还有P2P 也有UDP什么迅雷 bt这样的工具。
比如你和我下同一个种子,我的嗷嗷嗷跑,你那里没速度。  。 这是就PS中的NAT3 感觉
我们可以通过一个工具 来检测UDP   NatTypeTester

NatTypeTester.rar (477.23 KB, 下载次数: 406)
打开这个工具后,直接点get就行
QQ图片20171013081608.png



注意!看下图  
最好的图,
本机的端口 0.0.0.0 57110  
本地的端口 113.209.79.41:57110 (这个就是 你访问外网后的ip 和端口)
外网的端口和本机的端口一致!

无法P2P的图
本机端口 与外网不同(而且IP地址也不同)
这种情况大内网比较多见,大内网有N个IP   端口又不知道绑定在那个IP了 (下面有详解)
QQ图片20171012223101.png



同为 FullCone  见上上图(最好) 与 下图
最好的公网ip端口 与本机一致! 在PS里属于NAT1
而下图 虽也是 FullCone 但端口不同  依然属于 NAT2
比如你游戏模式下 看到虽然是 FullCone 但ps里依然说你是NAT2

QQ图片20171013093427.png





而这是最糟糕的问题,被封了udp或者限制了UDP反正就是不给用。
这问题也是在大内网中常见的,因为大内网了,UPD端口不知从那个IP出去的。
出去了之后,就再也回不来了,迷路了。

QQ图片20171012221633.png





----------------------------------------------
如果按照NAT 123级划分 (没ps的大致这样理解下)
NAT1 (没开防火墙状态)
Full Cone 无任何限制

NAT2  (轻度防火墙状态)
Restricted Cone   本地外网IP访问过对方 ,对方才能回链进本机 任何端口
Port Restricted    本地外网ip和端口 访问过对方   对方才能会链进本机 端口

NAT3 ?  (重度防火墙 )
Symmetric  本地外网端口和本机IP不同  无法实现UDP-P2P通信注意:虽然不能p2p 但这不一定是 NET3  因为我们玩的是游戏
                  并没有p2p技术 依然有可能是NET2
UdpBlocked 被封或者丢失





-----------        详解      -----------------------------

Full Cone:
   内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,任何外部主机只要知道这个(PublicIP:PublicPort)就可以发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包
Restricted Cone:
   内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机IP发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,任何端口)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包
Port Restricted Cone:
    内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机(IP,Port)发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,Port)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包
Symmetric:
    内网主机建立一个UDP socket(LocalIP,LocalPort),当用这个socket第一次发数据给外部主机1时,NAT为其映射一个(PublicIP-1,Port-1),以后内网主机发送给外部主机1的所有数据都是用这个(PublicIP-1,Port-1),如果内网主机同时用这个socket给外部主机2发送数据,第一次发送时,NAT会为其分配一个(PublicIP-2,Port-2), 以后内网主机发送给外部主机2的所有数据都是用这个(PublicIP-2,Port-2).如果NAT有多于一个公网IP,则PublicIP-1和PublicIP-2可能不同,如果NAT只有一个公网IP,则Port-1和Port-2肯定不同,也就是说一定不能是PublicIP-1等于 PublicIP-2且Port-1等于Port-2。此外,如果任何外部主机想要发送数据给这个内网主机,那么它首先应该收到内网主机发给他的数据,然后才能往回发送,否则即使他知道内网主机的一个(PublicIP,Port)也不能发送数据给内网主机,这种NAT无法实现UDP-P2P通信。


详解
4种NAT类型

用语定义
1.内部Tuple:指内部主机的私有地址和端口号所构成的二元组,即内部主机所发送报文的源地址、端口所构成的二元组
2.外部Tuple:指内部Tuple经过NAT的源地址/端口转换之后,所获得的外部地址、端口所构成的二元组,即外部主机收到经NAT转换之后的报文时,它所看到的该报文的源地址(通常是NAT设备的地址)和源端口
3.目标Tuple:指外部主机的地址、端口所构成的二元组,即内部主机所发送报文的目标地址、端口所构成的二元组





Full Cone NAT:所有来自同一 个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址 和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全.
nat1.png



Restricted Cone NAT: 它是Full Cone的受限版本:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部 主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安 全性
nat2.png


Port Restricted Cone NAT:它是Restricted Cone NAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端 口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性
nat3.png


Symmetric NAT:这是一种比所有Cone NAT都要更为灵活的转换方式:在Cone NAT中,内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的,即与目标Tuple无关; 在Symmetric NAT中,目标Tuple则成为了NAT设备建立转换关系的一个重要考量:只有来自于同一个内部Tuple 、且针对同一目标Tuple的请求才被NAT转换至同一个外部Tuple,否则的话,NAT将为之分配一个新的外部Tuple;打个比方,当内部主机以相 同的内部Tuple对2个不同的目标Tuple发送UDP报文时,此时NAT将会为内部主机分配两个不同的外部Tuple,并且建立起两个不同的内、外部 Tuple转换关系。与此同时,只有接收到了内部主机所发送的数据包的外部主机才能向内部主机返回UDP报文,这里对外部返回报文来源的限制是与Port Restricted Cone一致的。不难看出,如果说Full Cone是要求最宽松NAT UDP转换方式,那么,Symmetric NAT则是要求最严格的NAT方式,其不仅体现在转换关系的建立上,而且还体现在对外部报文来源的限制方面。


nat4.png



已经存在的穿透方案
UPNP,STUN,Teredo等都无法支持对称NAT(第4类NAT)穿透。

新方法
新方法的UDP打洞基于端口预测和限制TTL的值。也适用于其他的NAT类型。
新方法一共有3个阶段。


nat5.png

第一阶段
假设两个通讯的终端分别为echo client和echo server。
F1:echo client跟S1通讯,然后S1获得其经过NAT a的端口号。
F2:S1返回获得的端口号给echo client
F3:echo client给S2发一个包。包括上次S1返回的nat之后的端口号。S2记录下相关的NAT端口信息。

nat6.png

第二阶段
第二阶段是echo server跟S1和S2通信。流程跟echo client类似。


nat7.png

第三阶段
经过之前的通讯,服务器可以获得echo client和echo server两次nat的端口号。比如echo client第一次nat端口为5361,第二次nat端口为5362,那么有理由猜测,第三次的端口为5363.经过测试发现端口的变化多是有一定的规律,递增,递减,跳跃等。
F7: 基于前面两个阶段的通信,可以预测打洞的端口和打洞的模式。发送给echo server.
F8: 基于预测的端口,echo server发送大量的包。这些包包括一个固定的目的端口和低的TTL值。
F9: 同理,服务器将预测的端口发给echo client,跟F7类似。
F10: 基于预测的端口,echo client发送大量固定端口的数据包到预测的端口。之后,echo client 转换到接受模式。
如果预测的端口刚好被大量的包都命中。那么就可以建立通信。


nat8.png

这种方法从安全的角度来说是利用了目前路由器实现对称NAT的方法中存在端口可以预测的漏洞,利用这个漏洞来实现打洞。加上一次发送大量的包,来增加命中的概率。
nat9.png




回复

使用道具 举报

手机版|联系我们 ( 京ICP备16001788号 )

GMT+8, 2021-9-22 14:20

Powered by Discuz! X3.4

快速回复 返回顶部 返回列表