网络地址转换(NAT)

网络地址转换(NAT)

网络地址转换(NAT)详解:从基础到四种锥型及对称型

你家的路由器到底是怎么让所有设备共享一个公网IP的?这篇文章彻底讲透NAT的工作原理和五种典型类型。

一、什么是NAT?为什么需要它?

简单来说,NAT(Network Address Translation,网络地址转换) 是一种将私有IP地址映射为公网IP地址的技术。

你没有那么多公网IPv4地址给家里的每一台设备。IPv4地址只有约42亿个,而全球设备早已远超这个数字。NAT的诞生很大程度上缓解了IPv4地址枯竭的压力。

一个经典场景:

  • 家里的手机、电脑、平板都分配了像 192.168.1.x 这样的私有地址
  • 当这些设备访问互联网时,路由器会把它们的私有IP+端口替换成路由器的公网IP+一个新端口
  • 外部服务器看到的请求来源全是路由器的公网IP,响应数据再通过路由器分发给正确的内网设备

这个过程被称为 NAT,它不仅节省公网IP,还天然提供了一层安全隔离------外部无法直接主动访问你内网的设备。

二、NAT的核心概念:绑定(Session Binding)

理解NAT类型之前,必须先搞懂"绑定"这个概念。

当内网设备 192.168.1.100:12345 访问外部服务器 8.8.8.8:80 时,路由器会建立一张映射表:

内网地址:端口 映射后的公网地址:端口 目标地址:端口
192.168.1.100:12345 1.2.3.4:50000 8.8.8.8:80

这个 1.2.3.4:50000 就是路由器临时为该会话分配的"公网出口"。后续来自 8.8.8.8:80 发往 1.2.3.4:50000 的包,路由器会转回给 192.168.1.100:12345

不同NAT类型的本质区别:当一个内网设备已经建立了一个映射关系后,另一个外部主机(不同于之前的目标)能否利用这个已有的映射往内网发包?以及,同一个内网端口访问不同外部主机时,是否会复用同一个公网端口?

三、NAT的五种类型(核心内容)

这是你需要重点理解的部分。下面按照从"最开放"到"最严格"的顺序介绍。

1. 完全锥型 NAT(Full Cone NAT)

定义 :一旦内网设备 (内网IP, 内网端口) 映射到 (公网IP, 公网端口),任何外部主机都可以通过这个 (公网IP, 公网端口) 向内网设备发送数据包。

特点

  • 最开放,安全策略最宽松
  • 外部主机A、B、C、D...都可以主动连接进来
  • 对P2P应用最友好

映射示例

复制代码
内网 192.168.1.100:12345 → 路由器映射为 1.2.3.4:10000

外部主机 (任意IP:任意端口) → 1.2.3.4:10000 → 可送达 192.168.1.100:12345

为什么叫"锥型"? 想象一个锥体,从内网这个点出发,映射到一个固定的公网端口后,所有外部主机都能通过这个锥底(公网端口)访问进来。

注意:完全锥型并不常见,因为太不安全。绝大多数家用路由器都不是这个类型。

2. 受限锥型 NAT(Restricted Cone NAT)

定义 :只有内网设备曾经主动访问过 的外部主机,才能通过 (公网IP, 公网端口) 向内网设备发送数据包。但对端主机的端口不做限制。

特点

  • 比完全锥型多了一道门禁:外部主机必须在"白名单"里
  • 白名单的判定标准:内网设备曾经向该IP地址发送过数据
  • 该外部主机的任意端口都可以向内发包

映射示例

复制代码
内网 192.168.1.100:12345 先访问了 8.8.8.8:80
→ 路由器映射 1.2.3.4:10000
→ 外部主机 8.8.8.8 的任何端口(如 8.8.8.8:9999)都可以通过 1.2.3.4:10000 向内发包
→ 但 9.9.9.9(未访问过)发来的包会被丢弃

3. 端口受限锥型 NAT(Port Restricted Cone NAT)

定义 :这是受限锥型的加强版。仅当内网设备曾经主动访问过 特定的 (外部IP, 外部端口) 时,该外部主机才能从相同的端口向内发送数据包。

特点

  • 门禁更严:不仅限制IP,还限制端口
  • 外部主机必须使用内网设备曾经访问过的那个端口来发包
  • 这是家用NAT中最常见的类型之一

映射示例

复制代码
内网 192.168.1.100:12345 访问了 8.8.8.8:80
→ 路由器映射 1.2.3.4:10000
→ 只有来自 8.8.8.8:80 的包可以到达内网
→ 来自 8.8.8.8:53(不同端口)的包会被丢弃
→ 来自 9.9.9.9:80 的包也会被丢弃

三种锥型对比

类型 同IP任意端口可访问? 未访问过的IP可访问?
完全锥型
受限锥型
端口受限锥型

4. 对称型 NAT(Symmetric NAT)

定义 :内网设备 (内网IP, 内网端口) 访问不同的外部主机时,路由器会分配不同的公网端口。并且,只有内网设备主动访问过的外部主机才能向内回包。

特点

  • 与前三种"锥型"完全不同
  • 锥型NAT中,同一个内网端口访问任何外部主机都复用同一个公网端口
  • 对称型NAT中,每次连接的目标不同,公网端口就不同
  • P2P最难穿透的一种NAT

映射示例

复制代码
内网 192.168.1.100:12345 访问 8.8.8.8:80 → 映射为 1.2.3.4:10000
内网 192.168.1.100:12345 访问 9.9.9.9:80 → 映射为 1.2.3.4:10001(不同的端口!)

只有 8.8.8.8:80 可以向 1.2.3.4:10000 发包
只有 9.9.9.9:80 可以向 1.2.3.4:10001 发包

对称型 vs 端口受限锥型

关键区别在于:同一个内网端口访问不同的外部服务器时,公网端口是否会变化

复制代码
端口受限锥型:
192.168.1.100:12345 → 8.8.8.8:80   → 映射为 1.2.3.4:10000
192.168.1.100:12345 → 9.9.9.9:443  → 映射为 1.2.3.4:10000(复用端口)

对称型:
192.168.1.100:12345 → 8.8.8.8:80   → 映射为 1.2.3.4:10000
192.168.1.100:12345 → 9.9.9.9:443  → 映射为 1.2.3.4:10001(新端口)

四、为什么NAT类型对P2P如此重要?

P2P(如BitTorrent、视频通话、区块链、游戏联机)要求两个内网设备能直接建立连接。

锥型NAT比较容易打洞

  • 双方通过中间服务器交换彼此的NAT映射地址
  • 直接向对方的公网地址发包,利用已有的映射关系实现穿透

对称型NAT打洞很困难

  • 因为每个目标都对应不同的公网端口,端口不可预测
  • 通常需要中间服务器进行数据中转(TURN协议),这会增加延迟和服务器负载

所以,如果你玩的主机游戏经常提示"NAT类型严格",多半是落在了对称型或者端口受限锥型上。

五、如何检测自己的NAT类型?

简单方法

  1. Windows上用netstat -ano查看本地端口
  2. 访问 whatsmyip.org 获取公网IP
  3. 用telnet或nc向自己的公网IP+端口发包测试

专业工具

  • STUN服务器测试 :最标准的方法

    • 命令示例:stunclient --mode full stun.stunprotocol.org
  • 推荐开源工具:pystun3

    复制代码
    pip install pystun3
    pystun3

六、如何优化NAT类型?

如果你想要更开放的NAT(比如为了Switch/PS5/Xbox联机体验):

  1. 开启UPnP(通用即插即用)

    • 路由器管理后台 → 启用UPnP
    • 应用可以动态请求端口映射
  2. 手动端口转发

    • 为特定设备设置DMZ主机(不推荐,安全性较低)
    • 或针对特定端口做静态映射
  3. 使用Full Cone NAT的路由器

    • 某些企业路由或开源固件(OpenWrt、Padavan)支持
    • 但家用原厂固件极少支持完全锥型
  4. IPv6:终极方案

    • IPv6下每台设备都有全球唯一公网地址
    • 不再需要NAT,也就没有NAT类型的问题

总结对比表

NAT类型 同内网端口访问不同目标 外部可访问性 P2P穿透难度
完全锥型 同一公网端口 任何外部主机 极易
受限锥型 同一公网端口 访问过的IP(任意端口)
端口受限锥型 同一公网端口 访问过的IP:端口 中等
对称型 不同公网端口 仅限访问过的IP:端口 困难(需中转)
相关推荐
Bushlet2 小时前
交换综合实验
网络
思茂信息2 小时前
CST可重构雷达吸波器设计与仿真
网络·算法·平面·智能手机·重构·cst·电磁仿
计算机安禾2 小时前
【计算机网络】第25篇:Linux网络数据包的解剖路径——从网卡驱动到协议栈的关键路径
linux·网络·计算机网络
深蓝易网2 小时前
工厂目视化实操手册,告别形式主义
运维·网络·数据库·人工智能·汽车
小明同学012 小时前
linux———进程间通信
linux·服务器·网络
ErizJ2 小时前
CN|腾讯面经总结
网络·计算机网络·面试
X7x52 小时前
广域网技术全解:从 CE/PE/P 设备到 PPP/PPPoE 协议与三厂商配置实战
网络·网络协议·信息与通信·广域网技术
半壶清水2 小时前
windows环境下,bmv2虚拟交换机的部署与使用方法
网络·windows·python·网络协议
TechWayfarer2 小时前
营销数据分析:如何利用IP归属地识别和规避虚假流量
网络·数据库·python·tcp/ip·数据分析