摘要:从一次"为什么公司所有电脑IP都是192.168.1.x"的疑问出发,深度剖析私有IP地址与NAT网络地址转换的原理。通过IPv4地址耗尽危机、公网IP与私网IP的区别、以及NAT转换的完整流程,揭秘为什么全世界只有43亿个IPv4地址却能支持百亿设备上网、路由器如何实现端口映射、以及为什么内网设备无法被外网直接访问。配合抓包图展示NAT转换过程,给出内网穿透的实现方案。
💥 翻车现场
周一早上,新来的实习生小王问了一个问题。
小王:"哈吉米哥,我发现咱们公司100多台电脑,IP地址都是192.168.1.x,这不会冲突吗?"
哈吉米:"不会啊,这是正常的。"
小王:"但我在家的电脑IP也是192.168.1.100,和公司的IP一样,怎么不冲突?"
哈吉米:"呃……这个……"(突然意识到自己也说不清楚)
小王:"还有啊,IP地址不是全球唯一的吗?为什么这么多人都用192.168开头?"
哈吉米:"……"(欲言又止)
下午,哈吉米找南北绿豆和阿西噶阿西请教。
哈吉米:"为什么大家的IP都是192.168开头?这不会冲突吗?"
南北绿豆:"这涉及到公网IP和私网IP的概念。"
阿西噶阿西:"来,我给你讲讲IPv4地址不够用的故事。"
🤔 IPv4地址耗尽危机
IPv4能提供多少地址?
阿西噶阿西在白板上算了一笔账。
IPv4地址:
- 32位二进制
- 格式:x.x.x.x(每个x是0-255)
总数:
2^32 = 4,294,967,296 ≈ 43亿个
看起来很多?
实际:
- 全球人口:80亿
- 联网设备:手机、电脑、平板、IoT...
- 每人平均3-5个设备
- 总需求:80亿 × 4 = 320亿个
问题:
43亿个IP << 320亿个设备
地址严重不够 ❌
历史:IP地址分配
早期(1980年代):
分配很随意
示例:
- MIT:整个18/8网段(1677万个IP)
- 苹果:整个17/8网段(1677万个IP)
结果:
- 2011年:IPv4地址分配完毕
- 2019年:亚太地区IP地址彻底耗尽
现实:
- 阿里云买个服务器,1个公网IP要钱
- 家庭宽带,多数没有固定公网IP
🎯 私有IP地址:解决IP不够的妙招
什么是私有IP?
南北绿豆:"为了解决IP不够,设计了私有IP地址。"
私有IP地址(Private IP):
只能在内网使用,不能在公网路由
3个私有IP地址段:
A类:10.0.0.0 - 10.255.255.255 (1个A类网络,1677万个地址)
B类:172.16.0.0 - 172.31.255.255 (16个B类网络,104万个地址)
C类:192.168.0.0 - 192.168.255.255 (256个C类网络,6.5万个地址)
192.168.x.x的分配:
192.168.0.0/24:192.168.0.1 - 192.168.0.254(254个地址)
192.168.1.0/24:192.168.1.1 - 192.168.1.254
192.168.2.0/24:192.168.2.1 - 192.168.2.254
...
192.168.255.0/24:192.168.255.1 - 192.168.255.254
总计:256 × 254 = 65024个地址
为什么192.168最常见?
原因:
1. 家用路由器默认网段:192.168.1.0/24
2. 企业小型网络:192.168.x.0/24
3. 数量够用(254个设备)
4. 好记(192.168.1.1是常见网关)
其他网段:
- 10.x.x.x:大型企业(地址多)
- 172.16.x.x - 172.31.x.x:中型企业
哈吉米:"所以192.168.1.100在公司是一个设备,在家里是另一个设备,它们不冲突?"
南北绿豆:"对!因为它们在不同的局域网,通过NAT访问公网。"
🎯 NAT:私网访问公网的桥梁
NAT的工作原理
NAT(Network Address Translation):网络地址转换
场景:
公司内网:
- 电脑A:192.168.1.100
- 电脑B:192.168.1.101
- 路由器:
- 内网IP:192.168.1.1
- 公网IP:123.45.67.89
访问百度:
1. 电脑A发送:
源IP:192.168.1.100
目标IP:220.181.38.251(百度)
2. 数据包到达路由器
3. 路由器NAT转换:
源IP:192.168.1.100 → 123.45.67.89(路由器公网IP)
源端口:12345 → 50001(路由器分配的新端口)
4. 记录NAT表:
内网IP:端口 → 公网IP:端口
192.168.1.100:12345 → 123.45.67.89:50001
5. 发送到公网:
源IP:123.45.67.89
源端口:50001
目标IP:220.181.38.251
6. 百度服务器回复:
目标IP:123.45.67.89
目标端口:50001
7. 路由器查NAT表:
50001 → 192.168.1.100:12345
8. 转换后发给电脑A:
目标IP:192.168.1.100
目标端口:12345
NAT转换时序图
sequenceDiagram
participant PC as 电脑A<br/>192.168.1.100
participant Router as 路由器<br/>内网:192.168.1.1<br/>公网:123.45.67.89
participant Internet as 百度<br/>220.181.38.251
PC->>Router: 1. 请求<br/>src: 192.168.1.100:12345<br/>dst: 220.181.38.251:80
Note over Router: NAT转换
Router->>Router: 2. 修改源地址<br/>192.168.1.100:12345<br/>→ 123.45.67.89:50001
Router->>Router: 3. 记录NAT表
Router->>Internet: 4. 转发<br/>src: 123.45.67.89:50001<br/>dst: 220.181.38.251:80
Internet->>Router: 5. 响应<br/>src: 220.181.38.251:80<br/>dst: 123.45.67.89:50001
Note over Router: 查NAT表
Router->>Router: 6. 还原目标地址<br/>123.45.67.89:50001<br/>→ 192.168.1.100:12345
Router->>PC: 7. 转发<br/>src: 220.181.38.251:80<br/>dst: 192.168.1.100:12345
NAT表示例:
路由器的NAT表:
内网IP:端口 公网IP:端口 目标IP:端口
----------------------------------------------------------------
192.168.1.100:12345 123.45.67.89:50001 220.181.38.251:80
192.168.1.101:23456 123.45.67.89:50002 220.181.38.148:443
192.168.1.100:34567 123.45.67.89:50003 220.181.38.251:80
特点:
- 多个内网IP映射到1个公网IP
- 通过端口区分不同的连接
- 100台电脑共享1个公网IP ✅
哈吉米:"所以公司100台电脑,只用1个公网IP,通过NAT转换?"
南北绿豆:"对!这就是NAT的威力:让多个设备共享1个公网IP。"
🎯 为什么外网不能直接访问内网?
内网设备的"隐身"
问题:
场景:
小王在家里搭建了一个网站(192.168.1.100:8080)
朋友想访问:
http://192.168.1.100:8080
# 访问失败 ❌
原因:
1. 192.168.1.100是私有IP
2. 公网路由器不转发私有IP(RFC 1918规定)
3. 公网上看不到192.168.1.100
4. 无法访问
内网穿透方案
方案1:端口映射(Port Forwarding)
路由器配置:
内网IP:端口 → 公网IP:端口
示例:
192.168.1.100:8080 → 123.45.67.89:8080
流程:
1. 外网访问:http://123.45.67.89:8080
2. 路由器收到请求
3. 查端口映射表:8080 → 192.168.1.100:8080
4. 转发给内网设备
5. 内网设备响应
6. 路由器转发回外网 ✅
方案2:内网穿透工具(frp、ngrok)
原理:
内网设备 → 主动连接 → 公网服务器(中转)
外网访问 → 公网服务器 → 转发 → 内网设备
示例(frp):
# 内网设备
frpc -c frpc.ini
# frpc.ini
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = myapp.example.com
# 外网访问
http://myapp.example.com → 公网服务器 → 内网设备:8080
🎯 公网IP vs 私网IP
完整对比
| 特性 | 公网IP | 私网IP |
|---|---|---|
| 范围 | 除了私有IP的所有IP | 10.x、172.16-31.x、192.168.x |
| 全球唯一 | ✅ | ❌(每个局域网可重复) |
| 可路由 | ✅ 公网可路由 | ❌ 公网不可路由 |
| 直接访问 | ✅ 外网可直接访问 | ❌ 需要NAT或端口映射 |
| 成本 | 高(需要购买) | 免费 |
| 安全性 | 低(暴露在公网) | 高(NAT隐藏) |
如何判断公网IP还是私网IP?
# 查看本机IP
ifconfig # Linux/Mac
ipconfig # Windows
# 如果是以下开头,就是私网IP:
10.x.x.x
172.16.x.x - 172.31.x.x
192.168.x.x
# 查看公网IP(路由器的外网IP)
curl ifconfig.me
# 或
curl ip.sb
# 返回:123.45.67.89 ← 这是你的公网IP
🎯 真实案例:家庭网络
网络拓扑
互联网
↓
【运营商路由器】公网IP: 123.45.67.89
↓
【家用路由器】
- WAN口(外网口):192.168.0.2(运营商分配的私网IP)
- LAN口(内网口):192.168.1.1
↓
┌───────────┼───────────┐
↓ ↓ ↓
电脑A 手机B 电视C
192.168.1.100 192.168.1.101 192.168.1.102
多级NAT:
电脑A访问百度:
电脑A(192.168.1.100)
↓ 第1次NAT
家用路由器(192.168.0.2)
↓ 第2次NAT
运营商路由器(123.45.67.89)
↓
百度(220.181.38.251)
特点:
- 经过2次NAT转换
- 最终公网IP:123.45.67.89
- 家里所有设备共享这1个公网IP
🎓 面试标准答案
题目:为什么大家的IP都是192.168开头?
答案:
原因:192.168.x.x是私有IP地址(Private IP)
背景:
- IPv4地址总共43亿个
- 全球设备超过320亿
- 地址不够用
解决方案:私有IP + NAT
私有IP地址段:
- 10.0.0.0 - 10.255.255.255(A类,1677万个)
- 172.16.0.0 - 172.31.255.255(B类,104万个)
- 192.168.0.0 - 192.168.255.255(C类,6.5万个)
为什么192.168最常见:
- 家用路由器默认:192.168.1.1
- 小型企业:192.168.x.0/24
- 地址数量适中(254个设备)
不会冲突吗:
- 不会!私有IP只在局域网内有效
- 公司的192.168.1.100 和 家里的192.168.1.100 在不同局域网
- 通过NAT访问公网(转换成公网IP)
NAT的作用:
- 把私有IP转换成公网IP
- 多个设备共享1个公网IP
- 节省IP地址
题目:什么是NAT?工作原理是什么?
答案:
NAT(Network Address Translation):网络地址转换
作用:
- 把私有IP转换成公网IP
- 让内网设备访问公网
工作原理:
-
内网设备发送请求
- 源IP:192.168.1.100(私网)
- 目标IP:220.181.38.251(公网)
-
路由器NAT转换
- 修改源IP:192.168.1.100 → 123.45.67.89(路由器公网IP)
- 修改源端口:12345 → 50001(路由器分配)
- 记录NAT表:192.168.1.100:12345 ↔ 50001
-
发送到公网
- 源IP:123.45.67.89
- 源端口:50001
-
公网服务器响应
- 目标IP:123.45.67.89
- 目标端口:50001
-
路由器查NAT表
- 50001 → 192.168.1.100:12345
-
转换后发给内网设备
- 目标IP:192.168.1.100
- 目标端口:12345
好处:
- 节省IP地址(100台设备共享1个公网IP)
- 隐藏内网(外网看不到内网IP)
- 安全性(天然的防火墙)
缺点:
- 外网无法主动访问内网(需要端口映射)
- 某些协议不兼容(FTP主动模式)
🎉 结束语
晚上7点,小王终于理解了。
小王:"原来192.168.1.100是私有IP,只在局域网有效,通过NAT转换成公网IP访问互联网!"
南北绿豆:"对,全世界无数个192.168.1.100,它们在各自的局域网,不冲突。"
阿西噶阿西:"记住:私有IP解决了IPv4地址不够的问题,NAT让私网设备共享公网IP。"
哈吉米:"还有192.168最常见,因为家用路由器默认就是这个网段。"
南北绿豆:"对,理解了私网IP和NAT,就理解了现代互联网的架构!"
记忆口诀:
IPv4地址四十三亿,设备数量远超不够用
私有IP三个地址段,192.168最常见
NAT网络地址转换,私网转公网访问
多个设备共享一个公网IP,节省地址是关键
外网无法访问内网,端口映射可穿透