STUN/TURN协议(todo)

1、概述

关于NAT的一些基本知识,能够参考NAT基本原理及穿透详解。本文主要讲当前工业场景中穿透NAT,使用最为频繁的STUN/TURN协议。html

2、技术点及原理

3、方式及流程图

STUN协议实现流程图以下(本段参考其余blog): 服务器

STUN协议实现流程图

NAT的探测过程逻辑解释:markdown

假设有UAC(p2p客户端B),NAT(A),SERVER(打洞服务器C), UAC的IP为 IPB, NAT的IP为 IPA , SERVER的 IP为IPC1 、IPC2。 请注意,服务器C有两个IP。oop

  • STEP1:探测B是否可用UDP,是否在NAT后

B向C的IPC1的port1端口发送一个UDP包。 C收到这个包后,会把它收到包的源IP和port写到UDP包中,而后把此包经过 IPC1 和 port1 发还给B。这个IP和port也就是NAT的外网IP和port,也就是说你在STEP1中就获得了NAT的外网IP。post

熟悉NAT工做原理的应该都知道,C返回给B的这个UDP包B必定收到。 若是在你的应用中,向一个STUN服务器发送数据包后,你没有收到STUN的任何回应包,那只有两种可能:spa

  1. STUN服务器不存在,或者你弄错了port。
  2. 你的NAT设备拒绝一切UDP包从外部向内部经过, 若是排除防火墙限制规则,那么这样的NAT设备若是存在,那确定是坏了

当B收到此UDP后,把此UDP中的IP和本身的IP作比较, 若是是同样的,就说明本身是在公网,下步NAT将去探测防火墙类型,就很少说了。若是不同,说明有NAT的存在,系统进行STEP2的操做。rest

  • STEP2:探测A是不是全锥型

B向C的IPC1发送一个UDP包,请求C经过另一个IPC2和PORT(不一样与SETP1的IP1)向B返回一个UDP数据包(如今知道为何C要有两个IP了吧,为了检测cone NAT的类型)。咱们来分析一下,若是B收到了这个数据包,那说明什么?说明NAT来着不拒,不对数据包进行任何过滤,这也就是STUN标准中的full cone NAT。遗憾的是,full cone nat太少了,这也意味着你能收到这个数据包的可能性不大。 若是没收到,那么系统进行STEP3的操做。code

  • STEP3:探测A是不是对称型

B向C的IPC2的port2发送一个数据包,C收到数据包后,把它收到包的源IP和port写到UDP包中,而后经过本身的IPC2和port2把此包发还给B。 和step1同样,B确定能收到这个回应UDP包。此包中的port是咱们最关心的数据,下面咱们来分析:若是这个port和step1中的port同样,那么能够确定这个NAT是个CONE NAT,不然是对称NAT。orm

道理很简单:根据对称NAT的规则,当目的地址的IP和port有任何一个改变,那么NAT都会从新分配一个port使用,而在step3中,和step1对应,咱们改变了IP和port。所以,若是是对称NAT,那这两个port确定是不一样的。若是在你的应用中,到此步的时候PORT是不一样的,那就只能放弃P2P了,缘由同上面实现中的同样。若是不一样,那么只剩下了restrict cone 和port restrict cone。系统用step4探测是是哪种。htm

  • STEP4:探测A是受限锥型仍是端口受限锥型

B向C的IP2的一个端口PD发送一个数据请求包,要求C用IP2和不一样于PD的port返回一个数据包给B。咱们来分析结果:若是B收到了,那也就意味着只要IP相同,即便port不一样,NAT也容许UDP包经过。显然这是restrict cone NAT。若是没收到,没别的好说,port restrict NAT。

4、开源项目

5、参考

相关文章
相关标签/搜索