1. 从“IP不够用”说起:NAT诞生的真实背景
说句实话,干了这么多年网络运维,我见过太多人对NAT的理解停留在“路由器里一个设置项,开着就能上网”这个层面。直到某天排查一个来回不通的诡异故障时,才意识到如果不懂NAT的底层逻辑,到了真出问题的时候,你会连从哪里下手都不知道。
先看一个最日常的场景:你家宽带有且只有一个公网IPv4地址,但全家人的手机、电脑、电视、智能音箱加起来十几个设备,个个都要上网。如果是早年拨号上网的年代,一台电脑占一个IP,交一份钱,换一台设备上网还得先断开连接。现在呢?一个光猫加一个路由器,全屋设备同时在线,而运营商给你的仍然是一个公网IP。这里面起到核心作用的就是NAT——Network Address Translation,网络地址转换。
为什么会出现这项技术?最根本的原因就一条:IPv4地址不够用了。 IPv4协议的理论地址总数是2的32次方,约42.9亿个。放在今天,这个数字连全球人口的一半都不够,何况一个人往往有好几台联网设备。地址分配机构早就把可分配的IPv4公网地址分得一干二净。于是NAT作为一种过渡技术被大规模部署,它允许一个公网IP背后挂一整片私网——这就是你家里那个192.168.1.1网段的由来。
你可以把NAT想象成一个大公司楼下的收发室。整栋楼只有一个对外门牌号(公网IP),但楼里几百个员工(内网设备)都有自己的工位编号(私有IP)。外部寄来的所有信件(入站流量)都送到收发室,收发室大爷看一眼收件人,在登记本上查出对应工位,再转交过去;员工寄出的信(出站流量)统一贴上公司门牌号寄走,收发室大爷在登记本上记下“谁寄的、寄给谁、什么时候寄的”。这个登记本,就是NAT的会话表。如果没有收发室和登记本,外部根本不知道怎么把信送到某个具体工位。
明白了这个类比,你再看NAT的所有行为都会觉得顺理成章。它本质上就是一个在IP层做地址改写,同时维护状态信息的网关设备。改写的对象,就是IP报文头里的源地址和目的地址,这也是“目的、源地址、双向、地址转换”这几个热搜词背后的核心——NAT从来不是单方向的改地址,而是一进一出、一来一回的双向行为。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 源地址和目的地址的双向翻译:NAT的底层工作逻辑
很多人以为NAT只是把内网IP“翻译”成公网IP,这只是说对了一半。NAT真正在做的事情,是对每个经过它的数据包,在出方向和入方向分别执行一次地址改写,而且这两个方向的改写是关联的、有状态的。这是理解NAT通信奥秘的钥匙。
2.1 出方向:源地址替换
假设内网有一台电脑,IP是192.168.1.10,它要访问一个公网服务器8.8.8.8。数据包从电脑发出时,源IP是192.168.1.10,目的IP是8.8.8.8。这个包到达路由器的WAN口(公网口)时,路由器查看NAT会话表——发现这是新连接,于是在表里登记一条记录,同时把包的源IP替换成自己的公网IP,比如203.0.113.5。改完之后,包才被发往公网。
为什么要改源IP?因为8.8.8.8这个公网服务器根本不知道192.168.1.10这个私有地址的存在,私网地址在公网路由表里是不可路由的。就算服务器收到这样的包,回包也不知道该往哪儿送。所以路由器必须把源地址换成自己这个“合法”的公网身份,让服务器认为这是路由器本人在请求。
2.2 入方向:目的地址还原
服务器收到请求后,回复一个数据包:源IP是8.8.8.8,目的IP是203.0.113.5。这个回包到达你家路由器时,路由器查会话表,匹配到之前登记的那条记录,于是把包的目的IP从203.0.113.5改回192.168.1.10,然后从LAN口转发给内网电脑。
这就是“双向”的含义:出方向改源,入方向改目的。整个过程对内网电脑和公网服务器都是透明的——电脑以为自己在直接跟8.8.8.8通信,服务器也以为自己在跟203.0.113.5通信。真正干了活的路由器,藏在了两边的视野之外。
2.3 会话表:NAT的核心状态
光会改地址还不够,路由器必须记得“谁发给谁的、我改成了什么”,否则回包来了根本无法还原。这张记录表就是NAT会话表,不同厂商叫法不同:
| 厂商/设备类型 | 查看命令 | 关键字段 |
|---|---|---|
| Cisco IOS | show ip nat translations | Inside global/Inside local/Outside local/Outside global |
| 华为/VRP | display na |
