文章插图
3)端口受限型NAT(Port Restricted Cone NAT)
特点:IP和端口都受限 。
表现形式:该技术与受限锥形NAT相比更为严格 。除具有受限锥形NAT特性,对于回复主机的端口也有要求 。也就是说:只有当内部主机曾经发送过报文给外部主机(假设其IP地址为A且端口为P1)之后,外部主机才能以公网IP:PORT中的信息作为目标地址和目标端口,向内部主机发送UDP报文,同时,其请求报文的IP必须是A,端口必须为P1(使用IP地址为A,端口为P2,或者IP地址为B,端口为P1都将通信失败) 。例子见下图 。这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性 。
文章插图
4)对称型NAT(Symmetric NAT)
特点:对每个外部主机或端口的会话都会映射为不同的端口(洞) 。
表现形式:只有来自同一内部IP:PORT、且针对同一目标IP:PORT的请求才被NAT转换至同一个公网(外部)IP:PORT,否则的话,NAT将为之分配一个新的外部(公网)IP:PORT 。并且,只有曾经收到过内部主机请求的外部主机才能向内部主机发送数据包 。内部主机用同一IP与同一端口与外部多IP通信 。客户端想和服务器A(IP_A:PORT_A)建立连接,是通过NAT映射为NatIP:NatPortA来进行的 。而客户端和服务器B(IP_B:PORT_B)建立连接,是通过NAT映射为NatIP:NatPortB来进行的 。即同一个客户端和不同的目标IP:PORT通信,经过NAT映射后的公网IP:PORT是不同的 。此时,如果B想要和客户端通信,也只能通过NatIP:NatPortB(也就是紫色的洞洞)来进行,而不能通过NatIP:NatPortA(也就是黄色的洞洞) 。
文章插图
以上,就是NAPT的四种NAT类型 。可以看出由类型1)至类型4),NAT的限制是越来越大的 。
三、NAT路由类型判断根据上面的介绍,我们可以了解到,在实际的网络情况中,各个设备所处的网络环境是不同的 。那么,如果这些设备想要进行通信,首先判断出设备所处的网络类型就是非常重要的一步 。举个例子来说:对于视频会议和VoIP软件,对位于不同NAT内部的主机通信需要靠服务器来转发完成,这样就会增加服务器的负担 。为了解决这种问题,要尽量使位于不同NAT内部的主机建立直接通信,其中,最重要的一点就是要判断出NAT的类型,然后才能根据NAT的类型,设计出直接通信方案 。不然的话,两个都在NAT的终端怎么通信呢?我们不知道对方的内网IP,即使把消息发到对方的网关,然后呢?网关怎么知道这条消息给谁,而且谁允许网关这么做了?
为了解决这个问题,也就是处于内网的主机之间能够穿越它们之间的NAT建立直接通信,已经提出了许多方法,STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)技术就是其中比较重要的一种解决方法,并得到了广泛的应用 。在这个部分,我们将重点介绍下STUN技术的原理 。(PS:除此之外,还有UPNP技术,ALG应用层网关识别技术,SBC会话边界控制,ICE交互式连接建立,TURN中继NAT穿越技术等等,本文不一一做介绍 。)
四、STUN协议STUN是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口 。这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信 。该协议由RFC 5389定义 。STUN由三部分组成:STUN客户端、STUN服务器端、NAT路由器 。STUN服务端部署在一台有着两个公网IP的服务器上 。大概的结构参考下图 。STUN客户端通过向服务器端发送不同的消息类型,根据服务器端不同的响应来做出相应的判断,一旦客户端得知了Internet端的UDP端口,通信就可以开始了 。
文章插图
STUN协议定义了三类测试过程来检测NAT类型 。
Test1:STUN Client通过端口{IP-C1:Port-C1}向STUN Server{IP-S1:Port-S1}发送一个Binding Request(没有设置任何属性) 。STUN Server收到该请求后,通过端口{IP-S1:Port-S1}把它所看到的STUN Client的IP和端口{IP-M1,Port-M1}作为Binding Response的内容回送给STUN Client 。Test1#2:STUN Client通过端口{IP-C1:Port-C1}向STUN Server{IP-S2:Port-S2}发送一个Binding Request(没有设置任何属性) 。STUN Server收到该请求后,通过端口{IP-S2:Port-S2}把它所看到的STUN Client的IP和端口{IP-M1#2,Port-M1#2}作为Binding Response的内容回送给STUN Client 。
推荐阅读
- 喝苦荞茶的注意事项,四大步骤教你如何简易而快速的冲泡百合花茶
- 如何快速办理信用卡
- ElasticSearch快速入门
- 手把手从头开始教你,彻底理解服务端渲染原理
- 感冒了怎么办 推荐7款食疗帮你快速治愈
- 从草本植物角度科学的认识百合花茶,四大步骤教你如何简易而快速的冲泡百合花茶
- IT综合运维视频设备监控管理解决方案
- 快速的查找mac文件,你有什么好方法吗?
- 总结的非常详细 深入理解linux系统的目录结构
- 百合花茶搭配,四大步骤教你如何简易而快速的冲泡百合花茶