什么是 NAT?网络地址转换是怎么工作的?
简化版
NAT(Network Address Translation,网络地址转换)让一大片内网设备共用一个公网 IP 上网。内网用的是私有 IP(如 192.168.x.x),出公网时路由器/网关把源 IP 换成自己的公网 IP,并记住这个映射;响应回来时再换回对应的内网 IP。它解决了 IPv4 地址不够用的问题,顺带隐藏了内网结构、提供了一层安全隔离。
详细版
为什么需要 NAT:IPv4 地址只有 43 亿个,早就不够全球设备用了。私有 IP 地址段(10.x、172.16~31.x、192.168.x)可以在各个内网里重复使用,但私有 IP 不能直接上公网。NAT 就是内网私有 IP 和公网 IP 之间的「翻译层」。
工作过程(内网主机 192.168.1.5 访问外网 8.8.8.8):
- 主机发出的包:源
192.168.1.5:5000→ 目的8.8.8.8:80; - 经过 NAT 网关(公网 IP 是
1.2.3.4)时,网关把源地址换成自己的公网 IP + 一个新端口:源1.2.3.4:6000→ 目的8.8.8.8:80,并在 NAT 映射表里记下「1.2.3.4:6000↔192.168.1.5:5000」; - 外网服务器看到的是
1.2.3.4:6000,响应发回给它; - 网关收到响应,查映射表,把目的地址换回
192.168.1.5:5000,转发给内网主机。
关键:靠「IP + 端口」的映射来区分同一个公网 IP 背后的众多内网主机——这叫 NAPT(网络地址端口转换),是最常用的 NAT 形式。
完整版教学
一、NAT 要解决的根本问题:IPv4 地址枯竭
要理解 NAT,先看它诞生的背景。IPv4 地址是 32 位,理论上约 43 亿个,听着不少,但面对全球数十亿台设备(手机、电脑、IoT)远远不够,早在 2011 年顶级地址就已分配殆尽。
在 IPv6 还没全面普及的漫长过渡期里,怎么让这么多设备上网?答案就是 NAT + 私有 IP:
- 划出私有地址段(
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),这些地址只在内网有效、可以在无数个内网里重复使用(你家的192.168.1.1和邻居家的192.168.1.1互不冲突); - 一整个内网(可能几百上千台设备)对外只占用一个(或少数几个)公网 IP,靠 NAT 在出口做地址转换。
这样公网 IP 的消耗从「每台设备一个」变成「每个内网一个」,极大缓解了地址枯竭。可以说,NAT 是 IPv4 得以撑到今天的关键补丁。
二、NAPT:靠端口区分内网的众多主机
最基础的 NAT 是「一个私有 IP 换一个公网 IP」(一对一),但那样并不省地址。真正省地址的是 NAPT(Network Address Port Translation,也叫 PAT)——多个内网主机共用一个公网 IP,靠端口号区分。
关键在于映射表里记录的是「公网IP:端口 ↔ 私有IP:端口」的四元组关系:
NAT 映射表(示意):
公网侧 内网侧
1.2.3.4:6000 ↔ 192.168.1.5:5000
1.2.3.4:6001 ↔ 192.168.1.6:5000
1.2.3.4:6002 ↔ 192.168.1.5:5001
即使两个内网主机用了相同的源端口(都用 5000),NAT 网关也会给它们分配不同的公网端口(6000、6001),响应回来时靠公网端口就能准确对应回内网主机。所以一个公网 IP 理论上能支撑几万个并发连接(端口号范围决定上限)。这就是为什么一整栋楼、一个小区共用少数公网 IP 也能同时上网。
三、NAT 的类型(面试进阶)
NAT 按「对内网发起的连接如何处理外部入站」分几种,影响 P2P 通信能否成功:
- 全锥形 NAT(Full Cone):内网主机一旦通过 NAT 建立了映射,任何外部主机都能通过这个公网端口访问它。限制最松。
- 受限锥形 NAT(Restricted Cone):只有内网主机之前访问过的那个 IP 能通过映射回来。
- 端口受限锥形(Port Restricted Cone):更严,要求 IP 和端口都匹配之前访问过的。
- 对称 NAT(Symmetric):内网主机访问不同的外部目标时,NAT 会分配不同的公网端口。限制最严,也最难穿透。
这些类型直接决定了 P2P/NAT 穿透(如视频通话、游戏联机)的难度——对称 NAT 最难打洞,往往要靠中继服务器(TURN)兜底。
四、NAT 带来的副作用
NAT 虽好,但也改变了「端到端」的网络模型,带来一些问题:
- 破坏端到端连通性:内网主机没有独立公网 IP,外部无法主动发起连接到它(除非配端口映射/DMZ)。这对需要被外部访问的服务(自建服务器、P2P)是障碍,催生了「内网穿透」需求(详见「VPN 与隧道」相关题目)。
- 有状态、是性能瓶颈:NAT 网关要为每条连接维护映射表项,连接数巨大时消耗内存和 CPU,且映射表项有超时(长连接要靠心跳保活,否则映射被回收就断连)。
- 某些协议不友好:像 FTP 主动模式、SIP 等在应用层报文里携带了 IP/端口信息,NAT 换了外层地址但改不了应用层内容,需要 **ALG(应用层网关)**特殊处理。
五、NAT 顺带提供的「安全性」
NAT 有个副作用常被当成优点:内网结构对外不可见。外部只能看到那个公网 IP,看不到内网有多少台设备、各自什么 IP;而且外部无法主动连入内网(没有映射就进不来)。这相当于一道天然的「隐身 + 单向门」。
但要注意:NAT 不是防火墙,它的安全性是「副产品」而非设计目的。它挡不住内网主机主动发起的连接被利用,也不做内容过滤。真正的安全还得靠防火墙。所以别把「有 NAT」当成「安全了」。
六、常见误区
- ❌ 以为 NAT 就是防火墙——NAT 隐藏内网是副作用,不做内容过滤,安全还得靠防火墙。
- ❌ 以为一个公网 IP 只能一台设备上网——NAPT 靠端口区分,一个公网 IP 可支撑成千上万连接。
- ❌ 以为内网设备能被外网直接访问——默认不能,NAT 是单向的,要外部访问得配端口映射。
- ❌ 忽略 NAT 类型对 P2P 的影响——对称 NAT 最难穿透,视频/游戏联机常需中继服务器兜底。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 静态 NAT | 固定一对一映射 |
| 动态 NAT | 从公网地址池临时映射 |
| NAPT/PAT | 多个内网地址共享公网 IP,通过端口区分 |
10.0.0.5:52344 -> NAT -> 203.0.113.9:40001
10.0.0.6:52344 -> NAT -> 203.0.113.9:40002
reply uses mapping table to return inside
家用和企业出口最常见的是端口复用 NAT:公网 IP 相同,靠端口映射表把回包分回内网主机。
- 误区:NAT 只是把私网 IP 改成公网 IP。 NAPT 还会改源端口,并维护五元组映射表。
- 误区:NAT 是安全机制。 NAT 会隐藏内网地址,但不能替代防火墙、鉴权和访问控制。
- 误区:有 NAT 就无法建立任何入站连接。 可通过端口映射、UPnP、打洞或中继实现,但复杂度增加。
- 追问:NAT 如何处理回包? 根据映射表中的公网端口和协议,把回包还原到内网 IP 和端口。
- 追问:NAT 穿透为什么难? 不同 NAT 类型和映射规则不同,双方都在 NAT 后面时直连路径不稳定。
- 追问:IPv6 还需要 NAT 吗? 地址充足后端到端可达性更好,通常不再依赖 NAT 解决地址不足,但仍可做防火墙策略。
七、加强记忆
NAT(网络地址转换)让内网私有 IP 共用少数公网 IP 上网,出网时把源私有 IP 换成公网 IP:端口、记进映射表,回来时换回去——核心是 NAPT 靠「IP+端口」四元组区分同一公网 IP 背后的众多主机。它是缓解 IPv4 枯竭的关键补丁,副作用是隐藏内网(伪安全)、破坏端到端连通(催生内网穿透)、有状态成瓶颈。NAT 类型(锥形/对称)决定 P2P 穿透难度。