🔌 第三章 从网线到网络设备
📄 一句话概括

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 秒实验

  1. 在路由器管理页找 NAT/端口映射相关的状态表(若有)。
  2. 想想若路由器重启,已建立的内部对照表会怎样。
  3. 解释【为什么外网看到的内网机器都是同一个 IP】。

常见误区

  1. 以为 NAT 只改 IP——端口也改(下节)。
  2. 以为改写是双向随便改——必须先有出向记录才能回向。
自测三问(点开对答案) 1. 出门时改什么? —— 源 IP(及端口)。 2. 回包怎么找到内网机器? —— 查 NAT 对照表。 3. 对照表的生命周期跟随什么? —— 连接(建立到删除)。

相关笔记