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”,但其全称和含义截然不同,如下所示:
- STUN - 网络地址转换器(NAT)对用户数据报协议(UDP)的简单穿越 (Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs))
- 用于 NAT 的会话穿越实用程序 (Session Traversal Utilities for NAT (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。
- 映射行为:NAT 将具有相同 (1) 源 IP 和 (2) 源端口的所有出站数据包映射到同一外部端口(例如,在下图示例中转换后的端口为 1000),其不考虑数据包的目标 IP 或目标端口。
- 过滤行为:NAT 只检查传入数据包的 (1) 目标 IP 和 (2) 目标端口来决定是否进行过滤。因此,它不关心外部端点的源 IP 或源端口号。
2. IP限制锥型 (Restricted Cone)
[映射行为] 与全锥型相同。
[过滤行为] 与全锥型 NAT 不同,只有当内部主机曾向某个外部主机发送过数据包时,来自该主机的入站数据包才被允许通过。(RFC 3489)
IP限制锥型 NAT 对应 RFC 5780 中使用端点无关映射(Endpoint-Independent Mapping, "EIM") 和地址相关过滤(Address-Dependent Filtering, "ADF")的 NAT。
- 映射行为:与全锥型相同。
- 过滤行为:此 NAT 仅检查入站数据包的 (1) 目标 IP、(2) 目标端口和 (3) 源 IP,以决定是否放行该数据包。它不关心外部端点的源端口号。
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。
- 映射行为:与全锥型相同。
- 过滤行为:此 NAT 检查入站数据包的 (1) 目标 IP、(2) 目标端口、(3) 源 IP 以及 (4) 源端口,以决定是否放行该数据包。
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。
- 映射行为:此 NAT 仅将具有相同 (1) 源 IP、(2) 源端口、(3) 目标 IP 以及 (4) 目标端口的数据包映射到同一外部端口。
- 过滤行为:与 IP 和端口限制锥型相同。
总结
下图展示了 RFC 5780 中定义的九种 NAT 类型和 RFC 3489 中定义的四种 NAT 类型,以及它们的对应关系。
