文章目录
- NAT技术、内网穿透与打洞:从原理到实际应用
-
- 一、NAT:私网连公网的核心技术
-
- [1.1 NAT技术是什么](#1.1 NAT技术是什么)
- [1.2 关键的NAPT转换表](#1.2 关键的NAPT转换表)
- [1.3 NAT的"硬限制"](#1.3 NAT的“硬限制”)
- 二、内网穿透:给私网设备找个"公网替身"
-
- [2.1 核心逻辑](#2.1 核心逻辑)
- [2.2 典型应用场景](#2.2 典型应用场景)
- 三、内网打洞:让私网设备直接"面对面"通信
-
- [3.1 打洞的核心流程(以两台私网设备A、B为例)](#3.1 打洞的核心流程(以两台私网设备A、B为例))
- [3.2 典型应用场景](#3.2 典型应用场景)
- 四、代理服务器:另一种转发思路
-
- [4.1 正向代理:替客户端"跑腿"](#4.1 正向代理:替客户端“跑腿”)
- [4.2 反向代理:替服务端"接客"](#4.2 反向代理:替服务端“接客”)
NAT技术、内网穿透与打洞:从原理到实际应用
在学习了IP协议后,我们知道,如今的IPV4地址数量不足,成为一个宝贵的资源,因此诞生了NAT地址转换技术,用于解决IP地址不足的问题。本文将详细讲解NAT技术,以及以NAT技术为基础的其他技术。
一、NAT:私网连公网的核心技术
1.1 NAT技术是什么
NAT(网络地址转换)可以认为是路由器的一个核心功能:让多个用私网IP的设备,共享路由器的公网IP访问互联网,以此缓解IPv4地址枯竭的问题。
我们常说的私网IP,都是按RFC1918规范划分的,三类私网IP段如下:
-
A类:<10.0.0.0> ~ <10.255.255.255>(多用于企业、运营商内网)
-
B类:<172.16.0.0> ~ <172.31.255.255>
-
C类:<192.168.0.0> ~ <192.168.255.255>(最常见,家里/小型办公网络基本用这个)
这些IP只在各自私网内有效,公网路由器不会转发指向私网IP的数据包,必须经过NAT转换才能接入公网。因此,在公网中直接访问一台私有IP的设备是访问不到的,必须由路由器这个"接头人"才可以将数据进行转发。而这个"接头人"是如何知道将数据转交给那个设备,这就需要用到NAT技术。
1.2 关键的NAPT转换表
实际场景中用得最多的不是单纯的IP转换,而是NAPT(网络地址端口转换)------既转IP,又转端口。路由器会维护一张NAPT转换表,核心是把内网设备的「私网IP+端口」,映射成路由器的「公网IP+随机端口」。
举个实际例子:

如上图:
你用家里的电脑(192.168.1.100:312)访问百度服务器([80.101.49.12:80),形成数据包1,发送给家用路由器,家用路由器会做两件事:
- 把数据包的源地址替换成自己的公网IP,将源端口替换成一个未被使用的随机端口(10.112.13.2:223),形成数据包2;
- 并把 192.168.1.100 : 312 ↔ 10.112.13.2 : 223 记录到转换表;
- 把数据包从WAN口发出,到达下一级路由器。
下一级路由器收到后,会做同样的事情,假设下级路由器直接为运营商路由器,那么与家用路由器类似
- 把数据包的源地址替换成自己的公网IP,将源端口替换成一个未被使用的随机端口(220.181.50.60 :587),形成数据包3;
- 并把 10.112.13.2 : 223 ↔ 220.181.50.60 :587 记录到转换表;
- 把数据包从WAN口发出,这里直接发送到公网。
此时,该数据包的源IP已经变为一个公网IP,在百度收到该数据包后,可以向该IP回应数据包,这样就不是直接向源主机的私有IP发送数据包了
此时,该数据包经过的路由器都会形成NAPT表,建立起IP映射,如下图:

等百度的响应包回来,目标地址是 220.181.50.60 :587,路由器查转换表,再把目标地址层层转换,最终传到你的电脑上。如下图所示

1.3 NAT的"硬限制"
NAT的核心问题是「单向映射」:必须是内网设备先主动连公网,路由器才会生成映射;如果公网设备想主动连内网设备,路由器里没有对应的映射记录,根本不知道该把数据包转给谁。不同私网的设备之间,也没法直接通信------这也诞生内网穿透、打洞技术这样新的技术。
二、内网穿透:给私网设备找个"公网替身"
2.1 核心逻辑
内网穿透(也叫NAT穿透)的思路很直白:找一台有固定公网IP的服务器当「中转站」。
-
私网设备主动连公网服务器,触发路由器生成NAT映射,服务器记录下这台设备的「公网IP+端口」;
-
其他设备(公网/另一私网)想访问这个私网设备,先把请求发给公网服务器;
-
服务器把请求转发给私网设备,私网设备的响应也按这个路径回传。
说白了,公网服务器就是私网设备在公网的「替身」,所有请求先找替身,再由替身转交。

如上图所示,任何访问替身服务器(180.100.100.100:8088)的数据,都会被替身服务器转发给PC1主机。这样,就相当于私网中的设备可以访问到另一个私网中的设备,前提是被访问的设备一定要提前在网路中建立好NAT转换关系。
2.2 典型应用场景
-
远程访问:在外网连家里的NAS、办公电脑,或访问公司内网的OA系统;
-
开发测试:本地写的接口、网页不用部署到公网服务器,就能让客户/测试人员访问;
-
物联网管理:家里的摄像头、工厂的工控设备,能被云端远程监控和控制;
-
临时共享:比如给客户演示本地开发的小程序、APP后台接口。
三、内网打洞:让私网设备直接"面对面"通信
内网穿透需要服务器全程中转数据,带宽消耗大;而内网打洞(P2P打洞)更高效------服务器只帮忙「传地址信息」,最后两台私网设备能点对点直连,后续通信不用过服务器。
3.1 打洞的核心流程(以两台私网设备A、B为例)
-
A和B都主动连同一台公网「打洞服务器」,触发各自路由器生成NAT映射,服务器记录下A的「公网IP+端口」(记为A')和B的「公网IP+端口」(记为B');
-
服务器把A'发给B,把B'发给A,即两个私网的设备有了对方在公网中的IP和端口,因此可以直接访问:
-
A向B'发起连接,B向A'发起连接------因为两边路由器都有对应的NAT映射,数据包能穿透路由器,最终A和B直连;
-
后续A和B的通信全程点对点,不再经过服务器。
这就像在两边路由器的「出入口」各打了个洞,让对方的数据包能直接穿过去,所以叫「打洞」。
3.2 典型应用场景
-
直播/短视频:主播的视频流直接发给观众,不用服务器中转,大幅降低服务器带宽成本;
-
在线游戏:玩家之间的实时交互(比如走位、技能释放)直连,降低延迟;
-
P2P下载(比如迅雷):下载文件时直接从其他用户的电脑拿数据,不用从服务器下载;
-
远程桌面(高端场景):比如企业内网的两台设备直连,比穿透更流畅。
四、代理服务器:另一种转发思路
代理服务器和NAT、穿透/打洞的核心区别是:代理在「应用层」转发,而NAT在「网络层」转发,适用场景也不同。
4.1 正向代理:替客户端"跑腿"
正向代理是客户端的「代理人」,所有客户端的公网请求都先发给代理服务器,再由代理服务器转发。

核心特点:客户端知道代理服务器的存在,服务器不知道真实客户端(只知道代理);
典型用途:
-
管控上网行为:公司内网或者校园网限制员工访问某些网站,所有请求走代理,代理过滤违规请求;
-
加速访问:代理缓存静态资源(比如图片、视频),同一内网的人再访问时,直接从代理拿,不用连公网;
-
突破地域限制:比如通过海外代理访问外网资源;
4.2 反向代理:替服务端"接客"
反向代理是服务端的「前台」,公网用户的请求先发给代理服务器,代理再转发给内网的真实服务端。
-
核心特点:用户不知道真实服务端的存在(只知道代理),服务端知道代理的存在;
-
典型用途:
-
隐藏内网服务:核心服务部署在内网,不直接暴露给公网,降低被攻击的风险;
-
负载均衡:把用户请求分给多台内网服务器(比如电商网站的订单系统,多台服务器分担压力);
-
动静分离:代理把静态资源请求(图片、JS)转发给CDN,动态请求(接口)转发给应用服务器;
-
