📄 一句话概括
NAT 出门时把源 IP 换成全局地址,并记下来回对照表;回包按表反着改回来——配对关系的记忆是 NAT 的全部魔法。
📝 本节和前面几节的关系
3.4.1 讲了为什么;本篇讲改写怎么做。
一、出门改写
源 IP 私有 → 全局;同时把这条连接的对应关系 写进路由器内部的一张对照表。
二、回包改回
回包的目的 IP 是全局地址——查表找到对应私有地址, 改回来再交给内网主机。
三、动手 Demo:NAT 的改写账
一次改写前后:
for a, b, c in [('源 IP','192.168.1.10','202.1.2.3'),
('源端口','51234','60001'),
('目的 IP','172.20.1.1','不变')]:
print('%-8s %-16s %s' % (a, b, c))
实跑输出:
--------------------------------------------------------------------
NAT 的改写账
--------------------------------------------------------------------
包经过 NAT 路由器时,改了什么:
字段 出门前(私有) 改写后(全局)
----------------------------------------------
源 IP 192.168.1.10 202.1.2.3
源端口 51234 60001
目的 IP 172.20.1.1 不变
----------------------------------------------
回包再反着改回来——靠路由器里的一张对照表。
这张表还记得【哪条内部连接对应哪个全局端口】。
对照表随连接建立而建、随超时/断开而删—— 和 TCP 套接字的生命周期很像。
30 秒实验
- 在路由器管理页找 NAT/端口映射相关的状态表(若有)。
- 想想若路由器重启,已建立的内部对照表会怎样。
- 解释【为什么外网看到的内网机器都是同一个 IP】。
常见误区
- 以为 NAT 只改 IP——端口也改(下节)。
- 以为改写是双向随便改——必须先有出向记录才能回向。
自测三问(点开对答案)
1. 出门时改什么? —— 源 IP(及端口)。 2. 回包怎么找到内网机器? —— 查 NAT 对照表。 3. 对照表的生命周期跟随什么? —— 连接(建立到删除)。- ☐ 下一节(3.4.3 改写端口号的原因)
相关笔记
- 连接是什么意思 — 连接=双方记录
- 改写端口号的原因 — 为什么端口也要改
- 🔌 网络是怎样连接的 · 索引