
为什么你明明住在 192.168.1.1,却能收到来自全世界的快递?
1. 什么是 NAT?
NAT (Network Address Translation),网络地址转换。
它的核心作用是解决 IPv4 地址不够用 的问题,同时也充当了家庭网关的看门人。
形象比喻:小区与门牌号
- 私有 IP (局域网):就像你家的门牌号"3号楼 201 室"。全世界有很多个"3号楼 201 室",但在你们小区里是唯一的。
- 公网 IP (互联网):就像小区的街道地址"北京市海淀区xx路88号"。这是全球唯一的。
- NAT (路由器) :就是小区门口的保安大爷(兼职收发快递)。
💡 补充知识:私有 IP 地址段 (保留地址)
前置知识:IPv4 的结构
IPv4 本质是 32 位二进制 (比如 11000000...)。
为了方便记忆,我们把它切成 4 段 ,每段 8 位 (8 bit),中间用点隔开。
- 每段最大值:
11111111(二进制) = 255 (十进制)。 - 所以 IP 长这样:
0.0.0.0~255.255.255.255。
私有地址的划分逻辑:
不是随便写个 IP 都能当内网 IP 的。国际标准根据网络规模 (即:前几位固定,留多少位给主机),规定了 3 段私有地址:
| 类别 | IP 范围 | 容量 (典型子网) | 适用场景 |
|---|---|---|---|
| A 类 | 10.0.0.0 ~ 10.255.255.255 |
约 1600 万 | 超大型企业 (如阿里巴巴内网) |
| B 类 | 172.16.0.0 ~ 172.31.255.255 |
约 6.5 万 | 中型网络 (学校、Docker 默认网段) |
| C 类 | 192.168.0.0 ~ 192.168.255.255 |
254 | 家庭/小公司 (最常见,因为你家设备少) |
- 为什么这么分?(二进制视角的奥秘)
- A 类 (10.x.x.x) :
- 标准子网掩码
/8(前8位固定)。 - 剩余 24位 给主机 -> 224≈16002^{24} \approx 1600224≈1600 万。
- 注:整个 A 类私有段就是一个超大局域网。
- 标准子网掩码
- B 类 (172.16.x.x) :
- 标准子网掩码
/16(前16位固定)。 - 剩余 16位 给主机 -> 216=655362^{16} = 65536216=65536 (约 6.5 万)。
- 注:
172.16到172.31包含了 16 个这样的 B 类网段。
- 标准子网掩码
- C 类 (192.168.x.x) :
- 标准子网掩码
/24(前24位固定)。 - 剩余 8位 给主机 -> 28=2562^{8} = 25628=256 (减去头尾,可用 254 台)。
- 注:
192.168.0.0到192.168.255.0包含了 256 个这样的 C 类网段。
- 标准子网掩码
- A 类 (10.x.x.x) :
2. 为什么需要 NAT?
如果全世界每台手机、电脑都要一个全球唯一的公网 IP,IPv4 的 43 亿个地址早在 2011 年就发完了。
NAT 允许一整个小区的几千户人,共用这一个公网 IP 地址。
3. NAT 的工作流程 (SNAT)
假设你在家里 (192.168.1.2) 想访问百度 (公网 IP)。
出门 (请求)
- 你 :把信交给路由器(保安)。信封上写着:
- 寄件人:
192.168.1.2:8888(你家门牌号) - 收件人:
百度
- 寄件人:
- 路由器 (NAT) :一看,"192.168"这种内部号寄不出去啊。
- 它把寄件人 改写成路由器的公网 IP:
202.100.1.1:10001(小区地址+临时编号)。 - 同时在小本本上记下一笔:
编号 10001 的信是 192.168.1.2 寄的。
- 它把寄件人 改写成路由器的公网 IP:
- 互联网 :百度的服务器收到了信,它只知道是
202.100.1.1寄来的,不知道你家具体门牌。
进门 (响应)
- 百度 :把回信寄给
202.100.1.1:10001。 - 路由器 (NAT) :收到了信。拿出小本本一查:
- "哦,
10001号是给192.168.1.2的。"
- "哦,
- 转发 :路由器把信封上的收件人 改回
192.168.1.2:8888,送给你。
这就是 SNAT (源地址转换),也是我们家庭上网最常用的模式。
百度服务器 路由器 (NAT) 电脑 (192.168.1.2:8888) 百度服务器 路由器 (NAT) 电脑 (192.168.1.2:8888) 公网IP: 202.100.1.1 【记录映射表】 内网 192.168.1.2:8888 ⇋ 外网 202.100.1.1:10001 【查表匹配】 收到端口 10001 ➔ 转发给 192.168.1.2:8888 1. 发送请求 (源: 192.168.1.2:8888) 2. 转发请求 (源: 202.100.1.1:10001) 3. 响应数据 (目: 202.100.1.1:10001) 4. 转发响应 (目: 192.168.1.2:8888)
4. 另一种情况:端口映射 (DNAT)
如果你在家里搭了个网站,想让外面的朋友访问,怎么办?
外面的朋友只知道你家小区的地址 (公网 IP),不知道怎么进你家 (私网 IP)。
这时候你需要告诉保安 (配置路由器):
"大爷,凡是找咱们小区
80端口的快递,统统送到192.168.1.2这一家去。"
这就是 DNAT (目的地址转换)。
- 外网访问 :
202.100.1.1:80 - 路由器转发 :
192.168.1.2:80
⚠️ 避坑指南:80 端口被封
大部分家庭宽带的运营商 (电信/联通等) 默认会封锁 80 和 443 端口 。
如果你在家搭网站,建议改用 8080、8888 这种大号端口,否则外网根本连不上。
5. 进阶痛点:套娃的"大内网" (CGNAT)
你可能会发现,明明在路由器做了端口映射,外网还是连不上你家。
原因可能是:你的公网 IP 也是假的!
运营商为了省 IP,在小区宽带上面又加了一层 NAT(运营商级 NAT)。
- 现状 :你的路由器拿到的"公网 IP"其实是运营商局域网的 IP (比如
10.x.x.x)。 - 比喻:你以为你是小区户主,其实你住在"城中村",村口还有个大保安,外面的快递根本送不到你家门口。
- 解决:打电话给运营商客服,"投诉监控连不上,申请改为公网 IP"。
💡 怎么判断我有没公网 IP?
- 登录路由器后台,看 WAN 口 IP (比如
100.64.x.x)。 - 打开百度搜"IP",看显示的 IP。
- 如果两个 IP 不一样,恭喜你,你在大内网里。
6. 总结
- NAT 是 IPv4 续命的神器,它让内网设备可以"隐身"访问互联网。
- SNAT (源转换):让内网访问外网(大家一起上网)。
- DNAT (目的转换):让外网访问内网(发布网站)。
- 在 IPv6 普及之前,我们还得靠这位"保安大爷"过日子。