在《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} 而打洞在STUN中能起作用,是因为在圆锥形、受限圆锥型、端口受限圆锥型的NAT中,这个映射地址是唯一的,即:只要是内网电脑{X,y}发到公网环境上的数据,都经过这个映射。这就需要你很好的理解了受限圆锥型NAT,如果不理解请看下面的分析。 一、受限圆锥型 (1)“打洞” step2:当公网的电脑{M,n}要和内网的电脑{X,y}通信时,根据这条道路原路返回,即:公网电脑{M,n}向公网地址{A,b}发送数据,公网地址{A,b},根据映射{X,y}——>{A,b},将数据发送给内网电脑{X,y} (2)重用已存在的“洞” 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}发送数据时,因为是受限型(端口受限型是基于受限型更严格的存在),所以不通。 总结: 二、对称型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}通信 总结: 三、说明 ps:圆锥型中的全锥形、受限、端口受限针对的不是映射,而是映射生成后的下个环节,即内网的IP、Port已经访问过公网上的IP、Port后,这些公网上的IP、Port反向访问内网的IP、Port时有哪些限制 如果以上内容你依旧无法理解为什么STUN为什么不适用于对称型NAT的穿透,以下结合STUN Server判断NAT类型的过程,说明: 我将STUN的作用理解为提前打洞,也就在于STUN Server查询的第一步,如果确认了内网到公网的唯一映射地址(圆锥型),即这个映射地址是可以复用的,那么打洞是有效的; 上面关于路由器、STUN Server的作用的硕大只是为了说明STUN Server为什么解决不了对称型NAT,可能不准确也不专业,有兴趣的可以自己深入研究。 |
|