NAT 类型详解:四种 NAT 的数据流与原理解析 NAT 类型详解四种 NAT 的数据流与原理解析摘要NATNetwork Address Translation是 P2P 通信中绕不开的关卡。不同的 NAT 类型决定了内网设备能否被外部直接访问直接影响 WebRTC 等 P2P 技术的穿透成功率。本文通过四张数据流图直观对比 Full Cone、Address Restricted Cone、Port Restricted Cone 和 Symmetric 四种 NAT 类型的核心区别。什么是 NATNAT网络地址转换是一种将私有 IP 地址映射为公共 IP 地址的技术。它允许多个内网设备共享同一个公网 IP 上网但也给外部主动连接内网设备带来了障碍——这被称为NAT 穿越问题。根据 RFC 3489/4787 的定义NAT 按其对入站数据包的过滤策略可分为四种类型严格程度依次递增。四种 NAT 类型的核心对比场景设定为方便对比四张图采用统一的场景角色地址客户端内网192.168.1.10:5000NAT 公网地址203.0.113.50服务器 A10.0.0.1:80 / :8080服务器 B20.0.0.1:80 / :443一、Full Cone NAT完全锥形NAT核心特征映射建立后不限制入站来源。当内网客户端192.168.1.10:5000向外部发出第一个数据包时NAT 建立一条映射192.168.1.10:5000 → 203.0.113.50:8000此后任何外部主机都可以通过203.0.113.50:8000向该内网客户端发送数据包——无论源 IP 地址或端口是什么。服务器 A10.0.0.1:80✅ 可以回包服务器 A10.0.0.1:8080✅ 可以回包不同端口服务器 B20.0.0.1:80✅ 可以回包服务器 B20.0.0.1:443✅ 可以回包入站过滤策略无。只要目标端口匹配映射表中的公网端口任何源地址的包都会被转发。P2P 穿透性★★★★★ 最容易穿透。二、Address Restricted Cone NAT地址限制锥形NAT核心特征仅允许已通信过的源 IP 回包但对端口不做限制。映射规则与 Full Cone 相同但在入站方向增加了源 IP 地址检查192.168.1.10:5000 → 203.0.113.50:8000 入站白名单{ 10.0.0.1 } ← 客户端曾向 10.0.0.1 发过包服务器 A10.0.0.1:80✅ 可以回包IP 在白名单中服务器 A10.0.0.1:8080✅ 可以回包**同一 IP不同端口仍允许**服务器 B20.0.0.1:80❌被阻止IP 不在白名单中服务器 B20.0.0.1:443❌ 被阻止入站过滤策略src_ip allowed_ip。NAT 维护一个「已通信过的主机 IP」列表只有当入站数据包的源 IP 地址在此列表中时才放行。但该源 IP 可以使用任意端口回包。P2P 穿透性★★★★ 较易穿透仍需打洞辅助。三、Port Restricted Cone NAT端口限制锥形NAT核心特征严格匹配源 IP:PORT 组合二者缺一不可。这是 Cone 类型中最严格的变体在地址限制的基础上进一步增加了端口检查192.168.1.10:5000 → 203.0.113.50:8000 入站白名单{ 10.0.0.1:80 } ← 客户端曾向 10.0.0.1:80 发过包服务器 A10.0.0.1:80✅ 可以回包IP 和端口完全匹配服务器 A10.0.0.1:8080❌被阻止IP 相同但端口不匹配服务器 B20.0.0.1:80❌被阻止IP 不同入站过滤策略src_ip allowed_ip src_port allowed_port。仅允许来自同一 IP:PORT 组合的数据包通过。P2P 穿透性★★★ 需要完整的打洞流程。四、Symmetric NAT对称NAT核心特征不同目标分配不同的映射端口是限制最严格的 NAT 类型。与前三类 Cone NAT 最本质的区别在于映射规则依赖目标地址。发往 10.0.0.1:80 → 建立映射 192.168.1.10:5000 → 203.0.113.50:8000 发往 20.0.0.1:80 → 建立映射 192.168.1.10:5000 → 203.0.113.50:8001不同端口内网客户端使用相同的:5000端口分别向两台服务器发包但在 NAT 上却产生了两个不同的映射:8000和:8001各自独立且互不通用。服务器 A10.0.0.1:80→:8000✅ 允许映射精确绑定服务器 A10.0.0.1:8080→:8000❌被阻止端口不符A 从未用 :8080 通信过服务器 A10.0.0.1:80→:8001❌被阻止:8001映射绑定给 BA 不能用服务器 B20.0.0.1:80→:8000❌ 被阻止同理入站过滤策略dst_port mapped_port src_ip:port dest_ip:port_of_original_packet。入站包必须精确匹配出站包的目标地址和 新分配的映射端口。P2P 穿透性★☆☆☆☆ 极难穿透。传统的 UDP 打洞技术在 Symmetric NAT 下基本失效通常需要借助 TURN 中继服务器来转发数据。为什么 Symmetric NAT 最难穿透在 Cone 类型中内网客户端只要知道自己的公网映射地址IP:Port就可以将其告知对端对端直接往这个地址发数据即可。但在 Symmetric NAT 下映射端口随目标地址变化客户端在对端打洞时使用的地址与自己最终向对端发包时 NAT 分配的端口不同导致打洞失效。四种 NAT 的对比总结特性Full ConeAddress RestrictedPort RestrictedSymmetric映射是否依赖目标地址否否否是检查源 IP否是是是检查源端口否否是是映射端口是否固定是是是随目标变化UDP 打洞成功率极高高中极低推荐穿透方案直接连接打洞打洞 预测TURN 中继实际场景中的 NAT 分布仅供参考根据业界多项统计公网中各种 NAT 类型的大致分布为NAT 类型占比常见场景Full Cone~5%DMZ 主机、部分光猫桥接模式Address Restricted Cone~15%部分家用路由器Port Restricted Cone~35%常见于运营商 CGNATSymmetric NAT~40%企业防火墙、4G/5G 移动网络无法穿透~5%防火墙拦截 UDP注意不同地区和网络环境的分布差异很大移动网络4G/5G中 Symmetric NAT 的比例通常更高。对 P2P 应用的启示媒体流优先走 UDP— UDP 打洞成功率虽取决于 NAT 类型但比 TCP 打洞灵活得多。预留 TURN 保底— 当检测到 Symmetric NAT 或无法穿透时自动降级到 TURN 中继。虽增加延迟和带宽成本但保证了连接成功率。ICE 框架是标配— WebRTC 的 ICEInteractive Connectivity Establishment框架自动枚举候选地址、探测连通性并按优先级从高到低尝试直连 STUN 打洞 TURN 中继。NAT 类型探测— 通过 RFC 3489 定义的流程或 RFC 5780 的改进版客户端可以在连接前探测自己的 NAT 类型从而选择合适的穿透策略。