解决IP不够用的问题

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 功能。

我们可以把路由器想象成一家大公司的收发室

场景模拟:你要给百度写信
  1. 你(内网设备):
    • 你想发请求给百度。
    • 寄信人:192.168.1.5 (你的内网 IP)
    • 收信人:百度 IP
    • 问题: 这封信如果直接扔到公网,回信时百度找不到 192.168.1.5 是谁(因为全世界有一亿人的电脑都叫这个)。
  1. 路由器(NAT 转换):
    • 信到了路由器这里,被拦截下来。
    • 路由器把信封上的"寄信人"擦掉,改成路由器自己的公网 IP
    • 关键动作: 路由器在自己的小本本(NAT 映射表)上记一笔:

"刚才我用我的名义帮 192.168.1.5 发了一封信去百度,如果百度回信了,记得转给它。"

  1. 百度(服务器):
    • 收到信,一看寄信人是路由器的公网 IP。
    • 处理完,把回信发给路由器。
  1. 路由器(逆向转换):
    • 收到百度的回信。
    • 查小本本:"哦,这是刚才帮 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 访问不到你的原因(除非你在路由器上做"端口映射")。

相关推荐
orion5712 小时前
Missing Semester Class1:course overview and introduction of shell
linux
用户1204872216118 小时前
Linux驱动编译与加载
linux·嵌入式
用户805533698031 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式
用户805533698031 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
七歌杜金房2 天前
我终于又有了自己的 Linux 电脑
linux·debian·mac
tntxia3 天前
linux curl命令详解_curl详解
linux
扛枪的书生3 天前
Linux 网络管理器用法速查
linux
顺风尿一寸3 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode3 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫3 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux