上网第三十二课:NAT——让 IPv4 地址“够用“的魔法

上周上门给一位用户调路由器,装完他习惯性打开百度,搜"我的 IP",盯着屏幕愣了几秒:"师傅,我家路由器上明明写着 192.168.1.1,这百度上咋显示的又是另一个号?"

我乐了:"这俩都对,中间隔着一个'翻译官'------NAT。你家手机、平板、电脑、电视十来台设备,全挤在一个公网 IP 后面上网,全靠它在路由器里翻来翻去。今天咱就把它扒开看个明白:它到底怎么让 43 亿个 IPv4 地址'够用'了三十多年。"

一、先说问题:IPv4 地址为什么不够分

上一课聊子网掩码时提到过,IPv4 一共就 2³² 个,约 43 亿。听着挺吓人,但刨掉 A/B/C 类保留、组播、私有地址这些不能全球路由的段,真正能分给全世界的公网地址,撑死 33 亿个。

全球联网设备呢?早就破百亿了。手机、电脑、电视、摄像头、智能音箱、扫地机器人......每台都要一个 IP 才能上网。33 亿对一百多亿,三倍的缺口,怎么填?

两条路摆在那:

  • 换新版本:把地址从 32 位扩到 128 位(IPv6),地址多到用不完,但全世界的设备、线路、系统都得跟着升级,不是一两天的事;
  • 先凑合用:让一批设备共用同一个公网 IP,靠 NAT 在中间翻译。

在 IPv6 全面铺开之前,全球运营商基本都选了第二条路------所以今天家家户户路由器里,都藏着这个"翻译员"。

二、NAT 的核心类比:公司大门口的"代收快递前台"

讲原理之前,先打个比方。

把你们家想象成一栋写字楼:

  • 楼里每一间办公室都有个内部分机号 (192.168.1.x),这是私有 IP------只在楼内管用,出了楼谁都不认;
  • 整栋楼对外只有一个门牌号 (比如 114.114.x.x),这是公网 IP------全世界都知道;
  • 快递小哥把包裹都送到大楼前台,前台(NAT)登记:哪间办公室收的、哪个时间收的,然后转交到您手上;
  • 您往外寄快递也一样,前台把您的"内部分机号"换成"大楼门牌号"发出去,对方只看到大楼地址,完全不知道您在哪个屋。

这个"前台"就是路由器里的 NAT 模块。它手里有一张转换表,一行一行记着"谁对应谁"------哪台设备用了哪个端口出去的,回来时该送回哪屋。

三、NAT 干活全流程:地址和端口一块儿换

NAT 不是简单地换个 IP 就完事。您家十几台设备共用一个门牌号,光换地址还是分不清谁是谁------它还得靠端口号来认人。

拿最常见的场景演示一遍:手机(192.168.1.105)打开一个网站(93.184.216.34)。

  1. 手机发出数据包:源 IP 192.168.1.105,源端口 50001 → 目标 93.184.216.34:443;
  2. 路由器收到,做 SNAT(源地址转换):把源 IP 换成公网 IP 114.114.1.1,顺手分配一个新源端口 30001,记进转换表;
  3. 数据包到了公网,对方只看到 114.114.1.1:30001 → 93.184.216.34:443;
  4. 网站回包给 114.114.1.1:30001,路由器查表------"30001 对应 192.168.1.105:50001",翻回去,把包准确送到您的手机上。

整个过程对应这张图:

用表格拆开看更清楚:

步骤 源 IP:端口 目标 IP:端口 说明
手机发出 192.168.1.105:50001 93.184.216.34:443 私有地址出家门
路由器 SNAT 114.114.1.1:30001 93.184.216.34:443 换成公网地址+新端口
网站回包 93.184.216.34:443 114.114.1.1:30001 回包打到大楼门牌
路由器反查 93.184.216.34:443 192.168.1.105:50001 查表翻译员回内网

这就是"地址 + 端口一起换"的 NAPT (Network Address Port Translation,也叫 PAT)。平时大家嘴上说的 NAT,99% 其实指的是 NAPT。 记住这句,出去跟同行聊天不露怯。

四、三种 NAT:SNAT 管出门,DNAT 管进门

按翻译员方向,NAT 分三种,其实记住一句话就够了:

  • SNAT(源地址转换)------管"出门"。内网设备去外网,源 IP 从私有换成公网。家用路由器做的就是这个,上面那个例子就是 SNAT;
  • DNAT(目标地址转换) ------管"进门"。外网访问内网,目标 IP 从公网换成内网。典型操作就是端口映射:路由器上设"外网 8080 → 内网 192.168.1.100:80",外面访问您的公网 IP:8080,路由器把目标地址翻到内网服务器。远程访问 NAS、看家里监控、自己搭网站,全靠 DNAT;
  • 双向 NAT------源和目标都翻,企业网络偶尔用,家里基本不碰。

一句话收工:SNAT 管"出门",DNAT 管"进门"。

五、装维实操:NAT 在工地上的四件实事

光懂原理没用,干活时这几件事最常碰到:

① 判断"有没有公网 IP"------远程访问的前提。

路由器 WAN 口看分配到的 IP,再去百度搜"我的 IP"对比。两个一样 → 恭喜,您有公网 IP,可以做端口映射;不一样 → 运营商在您前面又套了一层 NAT(CGNAT),您拿到的是中间层地址,配端口映射大概率不生效。没有公网 IP 想远程访问 NAS?老老实实用内网穿透(frp、ZeroTier 这类工具)绕过去。

② 端口映射配置------DNAT 最常见的现场操作。

路由器"端口映射/虚拟服务器"页面:外部端口 8080 → 内部 IP 192.168.1.100 → 内部端口 80 → 协议 TCP。配完,外网就能用"公网 IP:8080"访问内网服务。再强调一遍:没公网 IP 的用户配了也白搭,外面根本到不了您。

③ NAT 会话数耗尽------"能 ping 通外网,网页却打不开"的元凶。

家用路由器 NAT 表容量有限,低端机几百到几千条。P2P 下载、设备太多、中招木马疯狂建连接时,NAT 表一满,表现就是"能 ping 通但网页打不开"。重启路由器能临时清空恢复,治本得换带机量更大的路由。

④ 游戏"NAT 类型"不是玄学。

PS5/Xbox 网络设置里显示 NAT 类型:开放(NAT1,有公网 IP)> 中等(NAT2,能做端口映射)> 严格(NAT3,在 CGNAT 后面)。NAT3 联机老失败,解法就俩:找运营商要公网 IP,或开 UPnP 让游戏机自动映射端口。

六、CGNAT:运营商的"套娃 NAT"

公网 IP 那么缺,运营商自己也不够分。于是又在前面套了一层:您的路由器做第一层 NAT,运营商的 CGNAT(运营商级 NAT) 再做第二层,两层翻译员完才真正到公网。

这也是 100.64.0.0/10 这段地址的由来------专门给 CGNAT 中间层用的"伪公网"地址,全球不可路由,只在运营商内部认识。

CGNAT 后面是什么体验?

  • 您路由器 WAN 口拿到的"公网 IP",其实是 CGNAT 分配给您的中间地址,不是真公网;
  • 端口映射彻底失效------运营商的 CGNAT 不会为您的家用路由做端口映射;
  • 出口 IP 是共享的,和同区域邻居共用一个大 IP。

目前国内大部分家庭宽带都在 CGNAT 后面。想要真公网 IP 得主动申请,部分运营商可免费改,部分要上企业宽带套餐。

七、NAT 的"原罪":补丁终归是补丁

NAT 扛住了 IPv4 三十年,但也背着三笔"债":

  • 端到端被打破:NAT 是"有状态"翻译员------只有内网主动发起的连接才能正确回包,外网想主动访问内网,默认不通。这跟互联网"任意两台设备都可互通"的本意相违背;
  • NAT 表是单点瓶颈:路由器一重启,所有会话全断。在线视频、游戏掉线,很多时候就这原因;
  • P2P 打洞难:语音通话、P2P 下载得靠 STUN/TURN/ICE 这套复杂的穿越技术,NAT 类型越严,越难打通。

一句话总结:NAT 是让 IPv4 续命的补丁,IPv6 才是真正的解法------每台设备一个全球唯一地址,不用翻译员、不用打洞,端到端直连。

小结

  • IPv4 公网地址约 33 亿,而全球设备超百亿,缺口的答案就是 NAT;
  • NAT 靠"地址 + 端口"一起翻译,用转换表区分不同设备的会话;
  • SNAT 管出门 (私有→公网),DNAT 管进门(端口映射),家用路由器两样都做;
  • CGNAT 是运营商的第二层套娃,导致用户拿不到真公网 IP、端口映射失效;
  • NAT 表会耗尽,症状是"能 ping 通但网页打不开";
  • NAT 是过渡方案,IPv6 才是终局。

思考题:您在办公室手机连 VPN 访问公司内网,一直超时。查了家里路由器,WAN 口 IP 是 100.64.x.x。问题出在哪?有什么临时解法?(提示:100.64.x.x 是 CGNAT 地址段,说明家里没有真公网 IP,VPN 的回包根本找不到您。)

下期预告

NAT 这个"补丁"撑了几十年,那"正版答案" IPv6 什么时候接班?其实------您的宽带很可能早就在用 IPv6 了,只是没注意过。明天开讲:IPv6------你的宽带其实早就用上它了。

相关推荐
傲世仙尊2 小时前
HTTP深水区-重定向状态码与GETPOST的传参之路
网络·网络协议·http
网络小江3 小时前
上网第三十五课:第五周复盘——IP 与 DNS 快问快答
网络协议
可乐鸡翅yeah_3 小时前
hls.js 配置 loadStartPosition,点播起始播放位置踩坑
开发语言·javascript·网络协议·ecmascript·m3u8在线
一条破秋裤4 小时前
TCP 缓冲区:用户空间 stdio 与内核 Socket 缓冲
arm开发·网络协议·tcp/ip
web打印社区4 小时前
JS 静默打印怎么做:纯前端为什么不行,以及最小可跑通写法
开发语言·前端·javascript·websocket·网络协议·http·pdf
自己的九又四分之三站台5 小时前
TCP 与 UDP:从可靠字节流到无连接数据报,怎么选、怎么测
网络协议·tcp/ip·udp
wangbing11256 小时前
开发指南147-WebSocket-前端
前端·websocket·网络协议
要吃这碗饭19 小时前
深入理解 TCP 协议:从三次握手到可靠传输
网络·网络协议·tcp/ip
Zelman1 天前
HTTPS 协议
网络协议·https