STUN 在 RFC 3489 和 RFC 5389/5780 中的区别

2013年10月21日 | 作者:Netmanias (tech@netmanias.com) | 汉化:ie12

 

  在 RFC 3489 和 RFC 5780 中定义的 NAT 类型有什么区别? 为了理解下文将要解释的差异,您必须熟悉我们上次所说的 NAT 映射行为(Mapping Behavior)和过滤行为(Filtering Behavior)

 

什么是 STUN?
 

  STUN 是一种协议,它允许两个设备(P2P 设备)发现它们之间是否存在 NAT 及其类型,并找出经过 NAT 转换后的外部 IP 地址和端口,以便在两个设备之间进行 P2P 通信。
 
  STUN 最初在 2003 年的 RFC 3489(标准)中定义,随后进行了两次修订:一次是 2008 年的 RFC 5389(标准),另一次是 2010 年的 RFC 5780(实验性)。  
  根据 RFC 5389 所述,“经典 STUN 用于分类 NAT 类型的算法(在 RFC 3489 中定义)被发现存在缺陷,因为市场上的许多 NAT(设备)无法完美的归类到其所定义的(四种)类型中。”
  为了解决这个问题,经典 STUN 在 RFC 5389 中进行了修改(即向 Binding 消息添加属性)。而在 RFC 5780 中,重新定义了 NAT 类型,并修改了 NAT 类型的分类算法(方法)。 
 
  在RFC 3489 和 5389 都使用相同的术语“STUN”,但其全称和含义截然不同,如下所示:

 

 

RFC 3489 和 5780 中定义的 NAT 类型

 

1. 全锥型 (Full Cone)

 

[映射行为] 全锥型 NAT 是指来自相同内部 IP 地址和端口的所有请求都被映射到相同的外部 IP 地址和端口。

[过滤行为] 此外,任何外部主机都可以通过此映射的外部地址向对应的内部主机发送数据包。(RFC 3489)

 

  RFC 3489 中的全锥型 NAT 对应 RFC 5780 中使用端点无关映射(Endpoint-Independent Mapping, "EIM")和端点无关过滤(Endpoint-Independent Filtering, "EIF")的 NAT。 

 

2. IP限制锥型 (Restricted Cone)

 

[映射行为] 与全锥型相同。

[过滤行为] 与全锥型 NAT 不同,只有当内部主机曾向某个外部主机发送过数据包时,来自该主机的入站数据包才被允许通过。(RFC 3489)

 

   IP限制锥型 NAT 对应 RFC 5780 中使用端点无关映射(Endpoint-Independent Mapping, "EIM") 和地址相关过滤(Address-Dependent Filtering, "ADF")的 NAT。

 

3. IP 和端口限制锥型 (Port Restricted Cone)

 

[映射行为] 与全锥型相同。

[过滤行为] 不过限制条件增加了端口号。具体来说,只有当内部主机曾向 IP 地址为 X、端口为 P 的外部主机发送过数据包时,来自该 IP 和端口的入站数据包才被允许通过。(RFC 3489)

 

  IP 和端口限制锥型 NAT 对应于 RFC 5780 中使用端点无关映射(Endpoint-Independent Mapping, "EIM") 和地址和端口相关过滤(Address and Port-Dependent Filtering, "APDF")的 NAT。

 

4. 对称型 (Symmetric)

 

[映射行为] 对称型 NAT 是指从相同内部 IP 和端口发送到特定目标 IP 和端口的所有请求都被映射到同一外部 IP 和端口。如果同一主机发送具有相同源 IP 和端口但目标不同的数据包,则会使用不同的映射。

[过滤行为] 此外,只有接收到内部发出数据包的外部主机,其发回的 UDP 数据包才被允许通过。(RFC 3489)

 

  对称型 NAT 对应 RFC 5780 中使用地址和端口相关映射(Address and Port-Dependent Mapping, "APDM")与地址和端口相关过滤(Address and Port-Dependent Filtering, "APDF" 的 NAT。

 

 

总结 

 

  下图展示了 RFC 5780 中定义的九种 NAT 类型和 RFC 3489 中定义的四种 NAT 类型,以及它们的对应关系。