1. 根本矛盾:僧多粥少
IPv4 地址总共只有 43 亿个(2\^{32})。
早在 2011 年,全球的 IPv4 地址就已经被分配光了。但是现在你家里可能就有 5 台设备(手机、电脑、iPad、电视...),全世界加起来设备早已超过几百亿。
如果不解决这个问题,大约 90% 的人都没法上网。
2. 解决方案:公网 IP vs 私网 IP
为了省着用,工程师们想出了一个绝妙的办法:"只有在公海上航行才需要合法执照,在自家小河沟里划船随便叫什么都行。"
于是,IP 地址被划分成了两类:
- 公网 IP (Public IP): 全球唯一,必须花钱向运营商申请。这才是真正的"互联网门牌号"。
- 私网 IP (Private IP): 免费,随便用,但是出不去互联网。
-
- 你最眼熟的
192.168.x.x - 还有
10.x.x.x - 以及
172.16.x.x
- 你最眼熟的
现在的家庭网络架构通常是这样的:
- 你家里的所有设备(手机、电脑) :用的全是私网 IP(比如 192.168.1.5, 192.168.1.6)。这些 IP 在互联网上是无效的,出了你家门就是废纸。
- 你的路由器 :它是全家唯一的"富豪",拥有一个运营商分配的公网 IP(比如 110.242.68.4)。
Shutterstock
3. 核心魔术:路由器如何"偷天换日"?
既然只有路由器有公网 IP,那你的手机是怎么刷到抖音的呢?全靠路由器的 NAT 功能。
我们可以把路由器想象成一家大公司的收发室。
场景模拟:你要给百度写信
- 你(内网设备):
-
- 你想发请求给百度。
- 寄信人:
192.168.1.5(你的内网 IP) - 收信人:
百度 IP - 问题: 这封信如果直接扔到公网,回信时百度找不到
192.168.1.5是谁(因为全世界有一亿人的电脑都叫这个)。
- 路由器(NAT 转换):
-
- 信到了路由器这里,被拦截下来。
- 路由器把信封上的"寄信人"擦掉,改成路由器自己的公网 IP。
- 关键动作: 路由器在自己的小本本(NAT 映射表)上记一笔:
"刚才我用我的名义帮 192.168.1.5 发了一封信去百度,如果百度回信了,记得转给它。"
- 百度(服务器):
-
- 收到信,一看寄信人是路由器的公网 IP。
- 处理完,把回信发给路由器。
- 路由器(逆向转换):
-
- 收到百度的回信。
- 查小本本:"哦,这是刚才帮
192.168.1.5发的那个请求的回信。" - 把信封上的"收信人"擦掉,改回 192.168.1.5。
- 把信转交给你。
结果: 你完全感觉不到中间发生了替换,你以为是你直接连上了百度。
4. 进阶:如果全家人都在刷百度怎么办?(NAPT)
你可能会问:"如果我和我爸同时访问百度,百度回了两封信,路由器怎么知道哪封是给我的,哪封是给爸爸的?"
这时候,传输层 的知识(端口号)就派上用场了!这叫 NAPT (Network Address Port Translation)。
路由器的小本本记得更详细:
|---------------------|----------|---------------|------------|--------|
| 内网 IP | 内网端口 | 转换后的公网 IP | 分配的新端口 | 目标 |
| 你 (192.168.1.5) | 1001 | 110.242.68.4 | 8001 | 百度 |
| 爸 (192.168.1.6) | 1001 | 110.242.68.4 | 8002 | 百度 |
- 当路由器收到发给
110.242.68.4:8001的数据包,就知道是给你的。 - 当路由器收到发给
110.242.68.4:8002的数据包,就知道是给爸爸的。
5. 总结
- NAT 的本质: 用一个公网 IP 代表无数个内网设备上网。
- 好处: 极大地节省了 IPv4 地址(原本需要 10 个 IP 的家庭,现在只要 1 个)。
- 副作用: 外网无法主动访问内网(因为外网不知道你在内网的端口映射)。这就是为什么你在家里搭个网站,外面的人直接输 IP 访问不到你的原因(除非你在路由器上做"端口映射")。