💬 前言:今天来聊聊网络世界里一个超重要的技术 —— NAT(网络地址转换)。你有没有想过,为啥我们家里的电脑、手机,还有公司里的各种设备,都能同时连上网,但又不会互相冲突呢?这就得感谢 NAT
!
🕸️ IPv4 地址不够用,这事儿大家都清楚。NAT 就像是一个超级聪明的 “翻译官”,它能把我们内网里的私有IP地址(比如192.168.1.x)转换成公网能识别的全局IP地址。这样,我们就能在有限的公网IP下,让无数设备同时上网!
🌰 举个例子,学校里可能有几百台电脑,但学校只需要一个公网IP,NAT 就能搞定这一切。公网IP必须是独一无二的,但私有IP就随便多了,不同的局域网里完全可以重复用,一点儿问题都没有。
🔫 NAT(Network Address Translation
,网络地址转换)是一种用于解决 IPv4
地址短缺的关键技术,允许私有网络内的多个设备通过一个或多个公共IP地址访问互联网
192.168.x.x
)转换为公共IP地址,实现与外部网络的通信。类型 | 描述 |
---|---|
静态NAT | 一对一固定映射,常用于对外提供服务的服务器(如Web服务器)。 |
动态NAT | 从公共IP池中动态分配地址,会话结束后回收地址,适用于临时访问。 |
PAT(NAPT) | 多对一转换,通过不同端口号区分设备(如家庭路由器),最常用类型。 |
Internet
的私有IP地址可随机转换为任何指定合法的IP地址优点 | 缺点 |
---|---|
节省公共IP地址 | 破坏端到端连通性(如影响P2P应用) |
增强内部网络安全性 | 增加网络延迟(需处理地址转换) |
支持灵活的网络扩展 | 部分协议需额外配置(如FTP、IPSec) |
👾 那么这样在网络通信过程中势必会造成问题,因为私有IP并不是唯一的,所以私有IP不能出现在公网通信中的。解决这个问题的机制就是 NAT 机制。
这样就可以私有IP就不会出现在公网中!并且在通信过程中够可以层层向下找到唯一的主机!
NAPT
因此其实际工作时,流程如下:
🤔 那么问题来了,如果局域网内有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的 IP 都是相同的。
这时候 NAPT 来解决这个问题了。使用 IP+port
来建立这个关联关系。
上面的这种关联关系也是由 NAT 路由器 自动维护的。
👻 路由器之中,进行转发时,维护了一张 NAPT 转换表。其中记录 目的 IP + 端口号port 与 WAN口IP + 端口号port 的映射关系,互为键值。
每个路由器在转发过程中都会生成一份 NAPT 表,最终就可以到达 公网 进行通信!
为什么上面转换表中不仅转换IP地址,还转换端口号?
这是因为可能存在同一局域网不同主机访问同一外网服务器的同一端口号服务
如果只转换IP地址,那么这两台主机转换后的数据包其中源IP地址都是NAT路由器的IP地址。当服务器返回响应时,只有NAT路由器的IP地址,无法区分这个响应是给哪台局域网主机的。所以还需要转换端口号来区分不同主机
但是上面这样其实也说明了一个问题,公网是 无法直接访问 内网机器的,只有内网机器向公网发送过数据,建立过 NAPT 表,才能从外部进入内部!
所以 NAT 技术是有缺陷的,由于 NAT 依赖这个转换表, 所以有诸多限制:
使用 Windows
访问我们的 Linux 服务端 时,我们仔细观察会发现服务端接收到的IP地址和 Windows
端是不一致的!
这也是由于路由器 NAT转发的结果!Linux 服务上的实际获取到的 IP
是
出入口路由器的 WAN口IP
🌊 具体而言, 路由器 NAT 转发全过程如下:
① NAT 的「翻译官」工作日记 🌐
场景1:内部小弟出门闯荡(请求阶段)
小弟(内网设备): “我是 10号房的小明(IP:
10.0.0.10:5000
),想给外网的 163号大佬(IP:163.221.120.9:80
)寄个快递!但我的地址是小区内部门牌,外网看不懂咋办?”NAT翻译官(路由器): “莫慌!我给你贴个 国际快递标签(全局IP:
202.244.174.37:6000
),这样外网就能认出来了! ——顺便记到我的 《跨国通讯备忘录》(NAPT表)里: 📝[内网小明:5000] ↔ [国际标签:6000] → 目标大佬:80
”
场景2:外网大佬回礼(响应阶段)
外网大佬: “收到来自 国际标签:6000 的包裹!回礼请按这个地址发~”
NAT翻译官: “收到回礼!火速翻查《备忘录》: 🔍
国际标签:6000 → 内网小明:5000
——撕掉国际标签,换上内部门牌,精准投递给 10号房的小明!”
关键角色解析
术语 | 生动比喻 | 功能 |
---|---|---|
内网IP | 小区内部门牌号 | 只在本地网络有效,对外保密 |
全局IP | 国际快递标签 | 全球通用的“通行证”,NAPT动态分配 |
NAPT表 | 《跨国通讯备忘录》 | 记录“谁用哪个标签发了快递”,防止回礼送错人 |
端口号 | 房间号+信箱编号 | 同一门牌下的不同服务通道(如小明家5000号信箱) |
② 为什么说NAT是“社交达人”?
③ 特殊场景:多人同时呼叫
小明和小红同时给不同外网大佬发快递:
10.0.0.10:5000
→ 标签202.244.174.37:6000
→ 目标A10.0.0.11:3000
→ 同一标签:6001
→ 目标B翻译官の绝活: 📦 回礼时,凭 端口号+IP 组合,像分拣机一样精准投递!
可视化流程图
内网小明喊话 NAT翻译官操作 外网视角
─────────── ─────────────────── ──────────
(小明:5000) 📌 贴上[国际标签:6000] → 看到[国际标签:6000]
📖 记录到《备忘录》
🔄 转换目标IP+端口
⇅ 数据往返
(小明:5000) ← 🏷️ 撕掉标签还原地址 ← 返回[国际标签:6000]
🏴☠️ 正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。
其特点如下:
场景1:害羞买家的秘密行动
小明(客户端): “我想买 ‘绝密小饼干’,但不想让店主知道是我买的!咋办?” —— 小明把购物清单和钱塞给 「代购小哥」(正向代理): “帮我匿名买,别暴露我地址!”
场景2:代购小哥的伪装行动
代购小哥(正向代理): 1️⃣ 检查包裹:
2️⃣ 伪装出击: 换上 「马甲IP」(代理地址),大摇大摆走进店铺: “老板,我要这个!我是普通顾客 202.244.174.37,和小明没关系!”
场景3:老板的包裹快递
网站老板(目标服务器): “收到订单!已打包发货 → 签收人:代购小哥的地址!”
代购小哥:
① 关键技能解析
术语 | 代购比喻 | 实际功能 |
---|---|---|
客户端 | 害羞买家小明 | 想隐藏身份的真实用户 |
正向代理 | 戴面具的代购小哥 | 替客户端发送请求,保护隐私 |
目标服务器 | 零食店铺老板 | 提供资源的网站或服务端 |
缓存 | 代购的储物柜 | 存储历史请求结果,加速重复访问 |
过滤规则 | 安检仪+禁买清单 | 屏蔽危险网站或敏感内容 |
② 为什么需要代购小哥?
经典工作流图示
小明の购物车 代购小哥骚操作 老板视角
─────────── ─────────────────── ──────────
[买小饼干] → 检查缓存&过滤 → [看到马甲地址]
→ 没库存?亲自去买 → [发货给马甲]
← 偷偷送货上门 ← [全程不知小明]
③ 三种常见代购模式
这样解释是不是像在看漫画? 😎 正向代理就像互联网世界的「神秘中间人」,帮你跑腿还守口如瓶!
🛜 反向代理服务器 是一种网络架构模式,其作为 Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。
场景1:VIP客户的专属通道
土豪客户(客户端): “我要订 ‘钻石套房’!钱不是问题,但不想让其他酒店知道我的行踪!” —— 土豪直接把需求丢给 「五星级酒店大堂」(反向代理),全程只和穿制服的前台沟通。
场景2:前台的暗箱操作
智能前台(反向代理): 1️⃣ 神秘分诊术:
2️⃣ 身份掩护: 把土豪的订单悄悄改成 内部工单号,所有服务员只知道“客户是前台派来的”。
场景3:服务员的迷惑日常
保洁阿姨(真实服务器): “今天又是十几个匿名订单!到底谁在订房?不管了,按工单打扫吧!” —— 把打扫好的房间钥匙通过 秘密通道 送回前台。
智能前台:
① 核心技能拆解
术语 | 酒店比喻 | 真实作用 |
---|---|---|
客户端 | 土豪客户 | 以为自己在和“酒店品牌”交互 |
反向代理 | 神秘前台 | 隐藏真实服务器,智能调度请求 |
Web服务器 | 保洁阿姨/实习生 | 实际干活的“打工人” |
负载均衡 | 分诊调度系统 | 避免某阿姨累瘫,雨露均沾派单 |
SSL终止 | 保险箱拆包员 | 先解密危险包裹再转交阿姨(HTTPS处理) |
② 为什么酒店需要神秘前台?
③ 经典工作流图示
土豪客户视角 前台の暗箱操作 保洁阿姨视角
─────────── ─────────────────── ──────────
[我要钻石套房] → 分配工单给3号楼阿姨 → [收到匿名工单123]
← 返回LOGO信封 ← [上交房间钥匙]
💡 全程以为在和酒店对话 💡 不知客户是谁
④ 三大高级模式
反向代理 vs 正向代理 趣对比
反向代理(酒店前台) | 正向代理(代购小哥) | |
---|---|---|
服务对象 | 保护服务员(服务器) | 保护买家(客户端) |
经典台词 | “我们酒店统一标准~” | “老板不知道是你买的!” |
工作定位 | 站在店门口迎客 | 蹲在客户家后门送货 |
知名案例 | Nginx、Cloudflare | 梯子工具、公司上网代理 |
这样解释后,反向代理就像互联网世界的「影分身大师」,用统一门面隐藏了背后复杂的服务器江湖! 🌟
🍑 路由器往往都具备 NAT 设备 的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信过程。代理服务器看起来和 NAT 设备有一点像。
NAT vs 代理服务器(两者区别)
代理服务器是一种应用比较广的技术:
💢 前言:NAT技术 保证内网主机的安全性,比如:NAT技术不仅极大程度缓解了IP地址不足的问题(甚至解决了),还保证了局域网主机的安全性。
但这并不代表无法从外网访问内网主机。从外网访问内网主机的方式就是 内网穿透(NAT穿透)
🤖 内网穿透是一种网络技术,用于解决内网设备与外部网络之间通信的问题。它可以让外部设备访问内网中的设备或服务,而无需直接暴露内网设备的IP地址,从而在一定程度上兼顾了安全性和可访问性。
在大多数网络环境中,内网设备(如家庭路由器内的设备、公司内部网络中的服务器等)通常被隐藏在路由器或防火墙之后,无法直接从外部网络访问。
主要原因如下: ① 私有IP地址的限制 ☠️ 内网设备通常使用私有IP地址(如192.168.x.x),这些地址只能在局域网内使用,无法在公网中直接访问。私有IP地址的范围包括:
这些地址在互联网中是不可路由的,因此外部设备无法直接通过这些地址访问内网设备。
② NAT(网络地址转换)的限制 ☠️ 内网设备通过路由器访问外网时,路由器会将内网设备的私有IP地址转换为公网IP地址(即路由器的WAN口IP)。这个过程称为网络地址转换(NAT)。NAT的作用是:
然而,NAT机制也导致了外部设备只能看到路由器的公网IP,而无法直接访问内网设备的私有IP。
③ 防火墙的限制 防火墙是网络中的安全屏障,通常会阻止外部设备直接访问内网设备,以保护内网的安全。防火墙的作用包括:
防火墙的限制进一步增加了内网设备对外部访问的难度。
【案例】
我们可以在云服务器上使用 frp 软件进行内网穿透服务:
为什么要进行内网穿透呢?内网穿透有以下优点:
这些技术都可以实现内网穿透,但具体选择哪种方式取决于实际需求和网络环境。需要注意的是,在使用内网穿透技术时应确保网络安全,采取适当的安全措施来保护内网设备和数据的安全性。
💤 在上述场景中,客户端最终被云服务器获取的 源IP
是 出入口路由器 的 WAN口 IP。服务端通过配置会有内网服务器的 IP地址表 与 端口号。那么,可不可以将服务端的 IP+port 发给客户端,客户端的 IP+port发给服务端呢?
答案是可以的。
内网打洞的工作原理
① 信息交换:
② 建立直接连接:
③ 绕过云服务器:
内网打洞的优缺点
① 优点:
② 缺点:
适用场景
需要注意的是,一些出入口路由器可能不允许进行内网打洞。这里我们只需要了解其原理即可。
学了这么多网络方面的东西,我们来总结一下 跨网络通信的总体流程吧,如下:
① 应用层:应用程序向操作系统发出请求,例如在浏览器中输入网址——域名解析DNS,获取目标服务器的IP地址。
② 传输层:操作系统将应用程序的请求封装成 传输层数据段(Segment),使用默认的端口号来建立与服务器的连接(三次握手),例如,HTTP为80,HTTPS为443。通常使用 TCP
协议来提供可靠的数据传输
③ 网络层:操作系统将传输层的数据段封装成IP数据包(Packet),并加上源IP地址和目标IP地址。计算机A需要先判断目标主机是否在同一局域网:
两个方法二选一即可
④ 数据链路层:操作系统将IP数据包封装成数据链路层数据帧(Frame),并加上MAC地址和目标MAC地址。
⑤ 物理层:数据链路层的 数据帧 通过物理介质(例如以太网)被发送到路由器。
每一次IP地址的替换,路由器都会维护转换记录,保存在 NAPT
表中
⑥ 重复路由转发和IP地址替换,最后数据到达公网的目的主机,服务器解包,分析需求,返回响应,重复上述操作。
需要注意的是,这只是简单的情况,实际上还有很多因素会影响内网主机访问公网服务器的过程,例如网络拓扑结构,路由策略,防火墙等。不同的应用场景和网络环境可能会有不同的细节和差异
同样,我们这也有个生动比喻:跨网络通信の「快递小哥奇幻漂流」📦🚚
1. 下单阶段:查电话簿找地址(应用层)
小明(浏览器): “我要给 ‘淘宝大酒楼’ 下单!但不知道他家地址啊?” → 翻开 《DNS电话簿》:“哦~ 原来他们公网地址是
180.101.49.12
!”
2. 包装快递盒:贴快递单(传输层)
操作系统快递站:
发件人端口:54321
→ 收件人端口:80
3. 规划路线:先看是不是同小区(网络层)
智能导航系统:
自家门牌(192.168.1.10)
和 酒楼地址(180.101.49.12)
192.168.1.10 & 255.255.255.0 = 192.168.1.0
🔍 180.101.49.12 & 255.255.255.0 = 180.101.49.0
→ “不是一个小区!得找 跨城快递专线(路由器)!”4. 换车接力:MAC地址变身术(数据链路层)
快递小哥(数据帧):
00-1A-3F-xx-xx
!”发车人MAC:AA-BB-CC-DD-EE
→ 接车员MAC:00-1A-3F-xx-xx
5. 跨城运输:快递分拣中心(物理层 & 路由转发)
分拣员(路由器):
原始发件人IP:192.168.1.10 → 公网IP:202.100.1.100
6. 抵达终点:酒楼后厨处理(服务器响应)
淘宝大酒楼(服务器):
发件人:180.101.49.12:80
→ 收件人:202.100.1.100:54321
7. 逆流返乡:按记忆原路返回(NAPT表逆向解析)
分拣员(NAT路由器):
Mermaid流程图
技术术语 | 快递世界版 |
---|---|
DNS解析 | 查餐馆电话簿 |
TCP三次握手 | 打电话确认酒楼能接单 |
子网掩码 | 小区范围测量仪 |
ARP缓存表 | 邻居门牌号通讯录 |
MAC地址 | 快递车的车牌号 |
NAT转换 | 统一换成快递中心对外地址 |
路由表 | 全国高速公路地图 |
场景1:快递车被劫(数据包丢失)
TCP快递员: “检测到包裹丢失!启动 超时重传 —— 再发一辆一模一样的车!” UDP快递员: “丢了就丢了,老子不管!” 🚚💨
场景2:地址写错(IP不可达)
ICMP小秘书: 火速寄回 错误通知单:“亲,您找的地址是黑洞哦~” 📨❌
这样解释后,复杂的网络通信就像一场环环相扣的快递接力赛! 🌐🏁