欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

NAT 穿透技术简介和实施场景分析-2.STUN 简介

最编程 2024-06-20 17:14:53
...

  STUN最早在RFC3489中定义为NAT穿透工具:STUN - Simple Traversal of UDP Through NATs,之后在RFC5389中更名为Session Traversal Utilities for NAT (STUN)。

  由其名字的变化可以看到,STUN设计初衷是作为NAT穿透的工具,但是随着后续TURN和ICE的出现,其功能被细化,明确规定为实现NAT穿透功能中的一部分工具。其主要功能在于根据NAT不同类型的特点,对客户端进行检测和类型判断,并将其判断结果传给客户端以及NAT穿透工具实现穿透。下图为RFC文档中描述的整个检测流程图。
在这里插入图片描述
  假设客户端为A,STUN服务器为S,这里要求S至少提供两个IP和端口。

(1)STEP1判断客户端是否在NAT后

  A向S的IP1:pot1端口发送一个UDP 包。S收到这个包后,会把它收到包的源IP和port写到UDP包中,然后把此包通过IP1和port1发还给A。这个IP和port也就是NAT的外网 IP和port。当A收到此UDP后,把此UDP中的IP和自己的IP做比较,如果是一样的,就说明自己是在公网,再检测是否有防火墙。如果不一样,说明有NAT的存在,系统进行STEP2的操作。

(2)STEP2是否是Full Cone NAT

  A向S的IP1发送一个UDP包,请求S通过另外一个IP2和PORT向A返回一个UDP数据包。如果A收到了这个数据包,说明NAT不对数据包进行任何过滤,即full cone NAT。如果没收到,那么系统进行STEP3的操作。

(3)STEP3是否是Symmetric NAT

  A向S的IP2:port2发送一个数据包,S收到数据包后,把它收到包的源IP和port写到UDP包中,然后通过自己的IP2和port2把此包发还给A。如果这个port和step1中的port一样,那么可以肯定这个NAT是个CONE NAT,继续执行STEP4,否则是Symmetric NAT。

(4)STEP4判断是Restrict Cone NAT还是Port Restrict NAT

  A向S的IP2的一个端口发送一个数据请求包,要求S用IP2和不同的端口返回一个数据包给A。如果A收到了,那也就意味着只要IP相同,即使port不同,NAT也允许UDP包通过。显然这是Restrict Cone NAT。如果没收到,则是Port Restrict NAT.