NAPT类型测试

在内网穿透传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。

一种新的代理类型 XTCP 来解决这个问题,XTCP 模式下可以在传输大量数据时让流量不经过服务器中转。

由此,实现内外内网穿透有 点对点穿透 和 服务器中转穿透 两种不同途径。

然而,并不是所有网络环境下,都可以采用 点对点穿透 ,在了解 点对点穿透 前,需要先了解NAT分类。

(1) Full Cone(完全圆锥型)

从同一私网地址端口192.168.8.100:5000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:8000 ,192.168.8.100可以收到任意外部主机发到1.2.3.4:8000的数据报。

这种NAPT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A,不管是不是C发过来的。

例如:

A:192.168.8.100 ——NAT:1.2.3.4 ——C:292.88.88.88
[ok] C(292.88.88.88:2000) ——> NAT(1.2.3.4 : 8000) ——> A(192.168.8.100:5000)
[ok] C(292.88.88.88:3000) ——> NAT(1.2.3.4 : 8000) ——> A(192.168.8.100:5000)
[ok] D(292.99.99.99:3000) ——> NAT(1.2.3.4 : 8000) ——> A(192.168.8.100:5000)
任何发送到 NAT(202.100.100.100:8000) 的数据都可以到达 A(192.168.8.100:5000)

(2)Address Restricted Cone(地址限制圆锥型)

从同一私网地址端口192.168.8.100:5000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:8000,只有当内部主机192.168.8.100先给服务器C 292.88.88.88发送一个数据报后,192.168.8.100才能收到292.88.88.88发送到1.2.3.4 : 8000的数据报。

这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口,然后C可以用任何端口和A通信,其他的外网机器不行。

例如:

A:192.168.8.100 ——NAT:1.2.3.4 ——C:292.88.88.88
[ok] C(292.88.88.88:2000) ——> NAT(1.2.3.4 : 8000) ——> A(192.168.8.100:5000)
[ok] C(292.88.88.88:3000) ——> NAT(1.2.3.4 : 8000) ——> A(192.168.8.100:5000)
任何从C发送到 NAT(1.2.3.4:8000)的数据都可以到达A(192.168.8.100:5000)

(3)Port Restricted Cone(端口限制圆锥型)

从同一私网地址端口192.168.8.100:5000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:8000,只有当内部主机192.168.8.100先向外部主机地址端口292.88.88.88:2000 发送一个数据报后,192.168.8.100才能收到292.88.88.88:2000 发送到1.2.3.4:8000的数据报。

这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口,然后C可以用原来的端口和A通信,其他的外网机器不行。

例如:

A:192.168.8.100 ——NAT:1.2.3.4 ——C:292.88.88.88
[ok] C(292.88.88.88:2000) ——> NAT(1.2.3.4 : 8000) ——> A(192.168.8.100:5000)
C(202.88.88.88:2000)发送到 NAT(1.2.3.4:8000)的数据都可以到达A(192.168.8.100:5000)

以上三种NAT通称Cone NAT,我们只能用这种NAT进行UDP打洞。

(4)Symmetic

内网主机建立一个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,PublicIP-1和PublicIP-2只能相同,Port-1和Port-2就肯定不同,也就是说一定不能是PublicIP-1等于 PublicIP-2且Port-1等于Port-2。

如果任何外部主机想要发送数据给这个内网主机,那么它首先应该收到内网主机发给他的数据,然后才能往回发送,但对于这种NAT,不同于Cone NAT,在连接不同的外部目标,原来NAT打开的端口(Port)会变化,虽然可以用端口猜测,但是成功的概率很小,这种NAT无法实现UDP-P2P通信。

即在Symmetic环境下,无法适用点对点穿透,只能选择服务器中转穿透。

结论:

只要NAT类型不是 Symmetic ,就可以尝试使用 点对点穿透,以减缓服务器端带宽压力。

检测方法:
使用 NatTypeTester.exe ,点击 get ,即可检测完成。

原文:https://blog.csdn.net/deng_xj/article/details/89187944


已发布

分类

来自

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注