第一次看 NAT 的题,我以为「内网主机 192.168.1.5 访问外网,经过 NAT 路由器后源 IP 还是 192.168.1.5」。毕竟数据包不就是原样转发吗?
结果 2023(38) 告诉我:源 IP 变成了路由器公网侧的接口地址。
原来 NAT 路由器干的事,就是在出门时把「内网身份证」换成「公网身份证」,让整个内网共用一个(或几个)公网 IP 上网。这篇把 NAT 到底是什么、转换表怎么查、出门进门各改哪几个字段讲清楚,并直接拿两道近年真题开刀。
〇、先花两分钟:NAT 是「公司总机分机」
IPv4 地址早就不够用了,但很多设备其实没必要人人都有一个公网 IP。于是人们划出一批私有地址(只在局域网内部用,Internet 不路由),让家里/公司几十台设备共用一个公网 IP 出门:
- 类比:私有地址像公司内部分机号(8001、8002) ,外面打不进来;NAT 路由器像总机,所有分机打外线时都先报到总机,总机用自己唯一的对外号码(公网 IP)替你打出去,回电时也由总机按记录转给对应分机。
一句话:NAT 让「多台私网主机」共享「少量公网 IP」访问 Internet。
图示:内网主机 192.168.1.5:1234 发出 → NAT 路由器查转换表,改写为公网 202.1.1.1:5000 出门;回包时再按表改回目的地址
一、私有地址:三段固定范围
RFC 1918 规定以下地址只能在内部用,不能被 Internet 路由,专门留给 NAT 前的私网:
| 类别 | 地址块 | 前缀 | 可用数量 |
|---|---|---|---|
| A 类私网 | 10.0.0.0 ~ 10.255.255.255 | 10.0.0.0/8 | 1 个 A 段 |
| B 类私网 | 172.16.0.0 ~ 172.31.255.255 | 172.16.0.0/12 | 16 个 B 段 |
| C 类私网 | 192.168.0.0 ~ 192.168.255.255 | 192.168.0.0/16 | 256 个 C 段 |
家用路由器默认给你分配的 192.168.x.x 就在这里面。这些地址出不了公网,必须靠 NAT 翻译。
二、基本 NAT vs NAPT(重点)
NAT 分两种,考试考的是后者:
-
基本 NAT :只改 IP 地址,不碰端口。一个内网 IP 对应一个公网 IP,没省多少地址,几乎不用。
-
NAPT(网络地址端口转换,也叫 PAT) :同时改 IP 和端口。多个内网主机(甚至同一主机的多个进程)可以映射到同一个公网 IP 的不同端口上。这才是「几十台设备共用一个公网 IP」的真正实现。
⚠️ 易错:NAT 通常特指 NAPT(端口级复用)。题里说「NAT」默认就是指带端口转换的版本。
三、NAPT 转换表:一对映射
路由器维护一张转换表,典型一行是:
(内网 IP : 内网端口) ⇄ (公网 IP : 公网端口)
192.168.1.5 : 1234 → 202.1.1.1 : 5000
-
内网主机发出包:源是
192.168.1.5:1234; -
路由器查表(没有就新建一条映射),把源改成
202.1.1.1:5000后发出; -
外网回包的目的地是
202.1.1.1:5000,路由器按表找到192.168.1.5:1234,把目的改回再转进内网。
所以 NAT 是有状态的:必须记住映射才能把回包送回来。
四、出门改源、进门改目的
记住方向,就不会乱:
| 方向 | 被改的地址 | 改之前 → 改之后 |
|---|---|---|
| 内网 → 外网(出) | 源 IP : 端口 | 内网地址 → 公网地址(查表/建表) |
| 外网 → 内网(回) | 目的 IP : 端口 | 公网地址 → 内网地址(查表) |
IP 首部的源/目的 IP 会被改写;如果是 NAPT,传输层(TCP/UDP)首部的源/目的端口也会相应改写。
五、真题拆解 1:源 IP 变成什么(2023(38),答案 A)
拓扑中路由器 R2 实现 NAT 功能。主机 H 向 Internet 发送一个 IP 分组,经过 R2 转发后,该分组的源 IP 地址是?
推演 :H 在私网,发包时源 IP 是自己的私网地址;经过 NAT 路由器 R2 时,R2 把它替换成自己公网侧接口的公网 IP 。所以出门后源 IP = R2 的公网接口地址(题中为 192.168.0.33)。
答案:A。
考点:无论内网主机私网地址是什么,经过 NAT 后「对外可见的源 IP」都是 NAT 路由器的公网 IP。
六、真题拆解 2:UDP 首部哪些字段被改(2025(37),答案 B)
路由器实现 NAT,内网主机 H(192.168.1.5/24)向 Internet 发送一个 UDP 报文段。路由器转发时,UDP 首部字段中被修改的是:I 源端口号 II 目的端口号 III 总长度 IV 校验和。
推演:
-
NAT 把私网源 IP 改成公网 IP,同时把源端口 映射成公网端口 → I 源端口号被改(目的端口是服务器端口,不变,II 排除);
-
源端口和 IP 都变了,而 UDP 校验和的计算范围包含「伪首部」,伪首部里有源 IP 和源端口 → 校验和必须重新计算 → IV 校验和被改(III 总长度指 UDP 自身长度字段,没变,排除)。
所以被修改的是 I、IV。
答案:B(仅 I、IV)。
⚠️ 关键细节:很多人漏掉「校验和也要重算」------只要 IP 或端口一变,涉及它们的校验和(UDP/TCP 校验和、IP 首部校验和)都得重新算。
七、NAT 的代价:穿越难题
因为 NAT 是有状态的、且外部看不到内网真实地址,带来一个问题:外部主机没法主动连进内网(不知道该连哪个内网 IP)。这就是 P2P、视频通话等需要「NAT 穿透(打洞)」的原因------得由内网主机先向外发,借已有的映射让外部回连。
考试通常不深挖打洞,但要知道:NAT 破坏了端到端透明性,这是它与 IPv6(地址充足、无需 NAT)相比的固有缺点。
八、17 年真题考在哪
| 年份(题号) | 考法 | 答案 |
|---|---|---|
| 2023(38) | NAT 后源 IP 变为路由器公网接口地址 | A(192.168.0.33) |
| 2025(37) | NAT 转发时 UDP 首部被修改的字段 | B(仅 源端口、校验和) |
命题规律:NAT 在 408 里题量不大但近年初现(2023、2025 连续考),且偏爱「改写哪些字段」这种细节题,重点记「源 IP/源端口变、校验和重算、目的端口不变」。
九、易错点清单
| 易错点 | 正确说法 |
|---|---|
| NAT 后源 IP 还是私网地址 | 错,变成 NAT 路由器的公网 IP |
| NAT 只改 IP 不改端口 | 错,NAPT 同时改 IP 和端口(考试默认 NAPT) |
| 目的端口会被 NAT 改 | 错,只改源端口,目的端口(服务器端口)不变 |
| IP 改了端口没变,校验和不用管 | 错,UDP/TCP 校验和含伪首部,IP 一变校验和必须重算 |
| 外部主机能直接连内网主机 | 错,NAT 有状态,外部无法主动进,需穿透 |
| 私有地址能上公网路由 | 错,私有地址 Internet 不路由,必须 NAT 翻译 |
速查表(文末收藏版)
私有地址三段:10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
NAT 默认 = NAPT(IP + 端口一起改,多机共用公网 IP)
转换表一行:(内网IP:端口) ⇄ (公网IP:端口)
出方向:改【源】 IP:端口 → 内网变公网(查/建表)
回方向:改【目的】IP:端口 → 公网变内网(查表)
被修改字段:源 IP、源端口、IP 首部校验和、传输层校验和(含伪首部)
不被改:目的端口、UDP 总长度
真题:2023(38) 源IP→路由器公网IP;2025(37) UDP 被改为 源端口+校验和
本文依据 :谢希仁《计算机网络(第 8 版)》第 4 章 4.4.4;真题年份题号来自 zhenti_all.json(2009--2025 计网 no 33--40)。
图示:内网主机 192.168.1.5:1234 发出 → NAT 路由器查转换表,改写为公网 202.1.1.1:5000 出门;回包时再按表改回目的地址