- Full Cone NAT(全锥型NAT):只要内网某主机给外网地址主动发送过一个网络包(NAT会为之生成公网出口IP:PORT),外网任何主机都可以通过该内网主机在NAT上的出口IP:PORT,向该内网主机发送网络包,也就是对外网主机IP和PORT都不设限,这是最宽松的类型 。
- Restricted Cone NAT(IP受限型NAT):如果内网某主机,给外网某IP发送过一个网络包,则外网可以通过该IP向该内网主机发送网络包,注意,只要以该IP作为网络包src ip就行,其他IP作为src不行,不限制端口号 。
- 举个例子,内网主机10.0.0.1给外网1.2.3.4:2222主动发过网络包,外网主机可以通过1.2.3.4:3333(作为src)向内网主机10.0.0.1发送网络包,端口号不限,但不能通过其他ip向内网主机发送网络包 。
- Port Restricted Cone NAT(Port受限型NAT):跟IP受限类似,但是它更严格,既限制IP,又限制端口号 。内网主机给外网主机10.0.0.1:2222发送过网络包,外网只能以10.0.0.1:2222为src,向内网主机发送网络包 。
检测NAT类型主要是利用上述NAT特点,通过测试连通性和比对端口号来实现目的,所以要搞清楚类型检测,必须对照NAT类型定义来看 。
另外,重复一下:NAT后的主机给外网发网络包,网络包在经过NAT的时候,NAT会为该主机分配出口IP:PORT,NAT会用该公网(出口)IP:PORT替换网络包的SRC,这样,接收端收到包之后,查阅包的src信息,会得到NAT出口IP:PORT,如同该包是直接从NAT发送过来的一样 。
NAT类型检测的前提条件:需要有一台位于公网的服务器(server),且该server拥有2个公网IP地址,并在ip1:port1和ip2:port2做监听 。
注意:检测步骤中的server通过ip:port向client回包,是指server回包的时候,会把ip:port设置为rsp包的src ip和src port 。
检测的步骤:
【步骤1】判断client是否位于NAT后面
很简单,位于NAT后面的主机跟公网通信要做内外网地址转换,两个IP不一样 。所以,可以通过以下操作完成:
- client向server ip1:port1发送一个req UDP包 。
- server收到udp包之后,从IP头部取出src IP,从UDP头部取出src PORT,作为rsp UDP的payload,发送给client 。
- client收到rsp UDP,取出payload里的IP和PORT,跟自己的IP对比,如果相同,则client位于公网,拥有公网IP,检测完成;否则,client位于NAT背后 。
【步骤2】判断是否全锥型Full Cone NAT
client向server ip1:port1发送一个req UDP包,请求server通过ip2:port2(以ip2:port2作为rsp UDP的src)向client回UDP包 。
根据全锥型NAT的定义,如果client收到了rsp UDP,那说明NAT对外网发包IP都不限制,说明client是全锥型NAT 。但全锥型NAT很少,大概率收不到rsp UDP包,如果收不到,则需要继续判断 。
【步骤3】判断是否对称型 Symmetirc NAT
client向server ip2:port2发送一个req udp 。server收到后,把收到的req udp的src ip和src port取出来,塞进rsp UDP的payload字段,通过ip2:port2(以ip2:port2作为rsp UDP的src)向client回UDP包 。
收到的rsp UDP之后,取出payload中的ip和port,跟步骤1中的ip和port对比,如果不一样,则是对称型NAT 。
因为根据前面的定义,对称型NAT,会为同一内网IP,根据不同的外网IP,分配不同的NAT出口PORT 。
如果一样,那么肯定是锥型NAT,步骤2已经测试了全锥型,那剩下的就只有ip受限锥型和port受限锥型两种NAT类型需要继续判断了 。
【步骤4】判断是受限锥型Restricted Cone还是PORT受限锥型
client向server ip2:port2发送一个req udp,要求server用ip2、且不同于port2的端口向client回rsp udp 。就是用ip2+不同于port2的其他port作为udp的src向client回包 。
如果client能收到rsp udp,那说明只要ip相同,哪怕port不相同,NAT也放行,所以NAT是IP受限型;如果没收到,那就是PORT受限型,说明只能通过port2回包 。
至此,所有的NAT类型便都检测出来了,是不是很简单?
对称型NAT不能直接建立P2P连接,只能通过中转服务器relay包 。
【穿越NAT的迷雾:深入理解NAT和NAT穿透,STUN、TURN、ICE的关系】
推荐阅读
- 西洋参泡水喝的正确方法,莲子心泡水喝的正确方法
- 蜂蜜桑葚果酱的做法,桑葚膏的做法
- 5种最适合咽喉炎的水果,慢性咽炎必吃的水果
- PS合成教程,在悬崖上瞭望日出的女孩
- 玉露哪个品种最好看,紫藤花哪个品种的开花期最好看
- 韭菜子与杜仲功效,杜仲的功效杜仲主治功效与作用
- 做SEO的关键不是优化技巧,而是关键词的选择
- 喝雪菊茶的功效与禁忌,雪菊的功效与作用吃法
- 满天星芦荟,芦荟图片芦荟品种辨别图片大全
- 玉兰花泡水禁忌,玉兰花的食用禁忌