穿越NAT的迷雾:深入理解网络地址转换和NAT穿透,以及STUN、TURN、ICE的关系
另外,重复一下: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不一样。所以,可以通过以下操作完成:
【步骤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包。 未完待续。 太长了,后面讲打洞、STUN、TURN、ICE。
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |