NAT类型与检测 

 
一、NAT分类
 Full Cone NAT(完全圆锥型)
 Address Restricted Cone NAT(地址限制圆锥型)
 Port Restricted Cone NAT(端口限制圆锥型)
 Symmetric NAT(对称型) 1.Full Cone NAT
 完全锥形NAT,所有从同一个内网IP和端口号发送过来的请求都会被映射成同一个外网IP和端口号,并且任何一个外网主机都可以通过这个映射的外网IP和端口号向这台内网主机发送包。

 2.Address Restricted Cone NAT
 地址限制锥形NAT,它也是所有从同一个内网IP和端口号发送过来的请求都会被映射成同一个外网IP和端口号。与完全锥形不同的是,外网主机只能够向先前已经向它发送过数据包的内网主机发送包。

 3.Port Restricted Cone NAT
 端口限制锥形NAT,与限制锥形NAT很相似,只不过它包括端口号。也就是说,一台IP地址X和端口P的外网主机想给内网主机发送包,必须是这台内网主机先前已经给这个IP地址X和端口P发送过数据包。

 4.Symmetric NAT对称型NAT,所有从同一个内网IP和端口号发送到一个特定的目的IP和端口号的请求,都会被映射到同一个IP和端口号。如果同一台主机使用相同的源地址和端口号发送包,但是发往不同的目的地,NAT将会使用不同的映射。此外,只有收到数据的外网主机才可以反过来向内网主机发送包。
二、使用STUN服务器检测设备所处网络的NAT类型
 STUN服务器需要两个公网IP,下面client是要检测的设备,server是STUN服务器,并假设server的两公网SOCKET的IP地址和端口号分别是IP1:port和IP2:port。
 -- STEP1 --
 client向server IP1:port发送请求,server使用IP1:port将收到请求的源IP和port(即设备的公网IP地址和端口号)回复给client,如果得到的公网IP和设备自身的IP一样,则判断设备自身处在公网,无NAT,检测结束,否则进行下一步STEP2。
 -- STEP2 --
 client向server IP1:port发送请求,server使用IP2:port来回复,如果设备能收到回复,则判断为Full Cone NAT,检测结束,否则进行下一步STEP3。
 -- STEP3 -- 
 client向server IP2:port发送请求,server使用IP2:port将收到的源IP和port回复给client,client判断此port和STEP1得到的port是否一样,如果不一样,则为Symmetric NAT,检测结束;如果一样,则为Restricted Cone NAT,进行下一步STEP4继续检测是哪种Restricted Cone NAT。 
 -- STEP4 --
 client向server IP2:port发送请求,要求server使用该IP的另一个端口来回复,server使用IP2:port2回复请求,如果client能收到回复,则判断为 Address Restricted Cone NAT,否则为Port Restricted Cone NAT。