对比Cone NAT 和 Symmetric NAT,说明STUN为何不适用于对称型NAT的穿透

在《NAT No【NAT原理和类型】》和《STUN》中已经介绍了NAT的分类(锥型、圆锥型)和STUN Server检测的机制,这对于理解STUN为什么解决不了symmetric NAT很重要

NAT的类型是由路由器的处理决定的,路由器将来自LAN口(局域网)的设备(IP:Port)在和WAN口环境(公网)上存在的设备(IP:Port)进行通信时,会生成映射即NAT(Network Address Translation,网络地址转换),而圆锥形NAT和对称型NAT生成映射的方式是不一样的。

要理解STUN为什么解决不了对称NAT,首先要理解STUN在圆锥形、受限圆锥型、端口受限圆锥型中提前“打洞”(映射)的作用,我个人理解的打洞就是路由器的NAT功能(映射:——>),将内网电脑的地址{X,y}(LAN口)映射成公网地址{A,b}(WAN口),即 {X,y}——>{A,b}
注:{X,y} X对应IP,y对应port

而打洞在STUN中能起作用,是因为在圆锥形、受限圆锥型、端口受限圆锥型的NAT中,这个映射地址是唯一的,即:只要是内网电脑{X,y}发到公网环境上的数据,都经过这个映射。这就需要你很好的理解了受限圆锥型NAT,如果不理解请看下面的分析。

一、受限圆锥型
如下图所示,是一个端口受限圆锥型NAT的模型:

端口受限圆锥型的NAT

(1)“打洞”
step1:内网电脑{X,y}在访问公网电脑{M,n}的时候,路由器(墙)生成了一个映射{X,y}——>{A,b},采用stun server的第一步就会将这个映射返回给内网电脑,这是就存在了一条到{M,n}的通路(端口受限):内网电脑{X,y}映射到公网地址{A,b},公网地址{A,b}将数据发送到公网电脑{M,n}

step2:当公网的电脑{M,n}要和内网的电脑{X,y}通信时,根据这条道路原路返回,即:公网电脑{M,n}向公网地址{A,b}发送数据,公网地址{A,b},根据映射{X,y}——>{A,b},将数据发送给内网电脑{X,y}

(2)重用已存在的“洞”
step1:当内网的电脑{X,y}再次访问公网上其它的电脑如{P,q},因为还是从同一台内网电脑{X,y}发出的数据,在端口受限型的路由器上,并不会为他生成一个新的映射,依旧采用{X,y——>{A,b},当{X,y}已经向{P,q}发送过数据后,这条道路就通了;

step2:当公网的电脑{P,q}要和内网的电脑{X,y}通信时,根据step1的这条道路原路返回,即:公网电脑{P,q}向公网地址{A,b}发送数据,公网地址{A,b},根据映射{X,y}——>{A,b},将数据发送给内网电脑{X,y}

(3)上图中,存在公网映射地址{A,b}公网电脑{P,q}的道路后,公网电脑P换个端口{P,r}也想重用(2)是做不到的,因为这里有端口限制(端口受限)

(4)上图中,因为{A,b}没有向公网电脑S发送过数据;当公网的电脑S向内网电脑{X,y}发送数据时,因为是受限型(端口受限型是基于受限型更严格的存在),所以不通。

总结:
对于圆锥型,他们的相同点是内网的设备映射到公网的地址是唯一的,这就是锥型的顶点
而不同圆锥型的分类,则决定了公网上其它设备是否有权限与内网的设备通信,或者说公网设备与内网设备通信时的限制(端口、IP),这些被限制的设备就形成了圆锥面;能够双向通信的线路就是圆锥的母线

二、对称型NAT
理解了圆锥型NAT后,下面来看对称型NAT

对称型NAT

(1)内网电脑{X,y}访问公网上的电脑{M,n}的时候,路由器(墙)生成了一个的映射{X,y}——>{C,d},{M,N}能沿着这条路径原路返回

(2)内网电脑{X,y}再次访问公网上的其它电脑{P,q}的时候,路由器(墙)生成了一个新的映射{X,y}——>{A,b},{P,q}能沿着这条路径原路返回

(3)对称型NAT在公网上的部分也是端口受限的,所以公网电脑电脑P换一个端口{P,r}的时候是无法与内网的电脑{X,y}通信

(4)对称型NAT在公网上的部分也是受限型的,所以内网电脑未通信过的S,无法通过内网电脑已存在的公网地址{A,b}与内网电脑{X,y}通信

总结:
STUN的打洞在对称型NAT不起作用就在于(1)、(2)这里,内网电脑{X,y}每次与公网的一个电脑通信,路由器(墙)都会生成一个新的映射,{X,y}——>{C,d},{X,y}——>{A,b}。

三、说明
一定要理解 圆锥型 和 对称型的区别:
圆锥型(Cone NAT):内网设备与公网设备通信,在路由器(墙)上有唯一的映射
对称型(Symmetric NAT):内网设备与公网设备通信,每换一个IP、Port,在路由器(墙)上会新生成一个映射

ps:圆锥型中的全锥形、受限、端口受限针对的不是映射,而是映射生成后的下个环节,即内网的IP、Port已经访问过公网上的IP、Port后,这些公网上的IP、Port反向访问内网的IP、Port时有哪些限制

如果以上内容你依旧无法理解为什么STUN为什么不适用于对称型NAT的穿透,以下结合STUN Server判断NAT类型的过程,说明:
(1)STUN Server(看做这里的{M,n})返回的classicstun response中携带的内网话机{X,y}在公网的映射,如这里的{X,y}——>{C,d}
(2)内网话机{X,y}与其它设备(SIP Server、公网话机)通信时,又生成了的映射,如:{X,y}——>{A,b}
(3)如果采用STUN Server,公网设备与内网设备的通信,都是发向STUN Server上的映射地址(提前打的洞),可实际这个映射地址只对应STUN server,是无法实现通信的,也就是STUN Server打洞,只对STUN Server生效,只要换成与其它公网设备通信,就会形成新的映射。

我将STUN的作用理解为提前打洞,也就在于STUN Server查询的第一步,如果确认了内网到公网的唯一映射地址(圆锥型),即这个映射地址是可以复用的,那么打洞是有效的;
而当内网到公网的映射地址是一一对应(对称型),打洞就没有意义了。

上面关于路由器、STUN Server的作用的硕大只是为了说明STUN Server为什么解决不了对称型NAT,可能不准确也不专业,有兴趣的可以自己深入研究。

(0)

相关推荐