LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

NAT和即时通讯工具的内网穿透原理

admin
2026年4月29日 16:30 本文热度 187

前言

笔者上大学时,毕业设计是研究 P2P 网络的,涉及到跨局域网通信的需求,接触了 NAT,当时也是一知半解。如今,即使不关注 P2P 的概念,在日常使用即时通信工具或者 Web 开发中的 WebRTC 技术时,本质上都需要用到 P2P 通信,这离不开内网穿透技术。

一、内网穿透的背景:IP 地址不够用

IPv4 地址仅有约 43 亿个(2³²),早已无法满足互联网设备联网需求。网络地址转换(Network Address Translation, NAT)应运而生,并迅速成为路由器中的标准组件。NAT 通过允许多个内网设备共享一个公网 IP 地址,缓解了 IPv4 地址快速耗尽的压力。

为何 NAT 迅速普及?

  • 成本低廉:无需申请公网 IP,普通用户通过一个公网 IP 即可让多台设备上网。
  • 部署简单:集成于家用路由器。
  • 附带安全效益:内网设备默认不可被外网访问,形成“隐式防火墙”。

到 2000 年代初,NAT 已成为全球绝大多数家庭和中小企业网络的标配。
然而,这种“共享”机制也带来了一个问题:内网设备对外不可见。当你的个人电脑或服务器位于 NAT 之后时,外部网络无法主动发起连接。

二、NAT:解决了内网访问外网的问题

NAT 最初的设计目标:让私有网络中的设备能够访问公网资源,同时节省公网 IP 地址。通过修改 IP 数据包的源/目的地址和端口号来实现地址复用。
典型的网络结构如下:

  • 路由器拥有一个公网 IP(如 203.0.113.45)
  • 内网设备使用私有 IP(如 192.168.1.2、192.168.1.3)
  • 当内网设备 A(192.168.1.2:50000)访问公网服务器 B(93.184.216.34:80)时,NAT会将数据包的源地址替换为自己的公网 IP 和一个临时端口(如 203.0.113.45:62001)。
  • 这样,从服务器 B 的视角看,请求来自公网 IP 203.0.113.45:62001,而非内网 IP。响应数据包返回到路由器后,NAT 表会根据端口映射关系将其转发回原始内网设备。
  • 而如果其他 IP 向这个临时端口发送数据,则会被 NAT 丢弃,因为在映射表中没有记录这个“其他 IP”。

这一机制完美实现了“内网→外网”的单向通信,却无意中切断了“外网→内网”的反向路径。

三、NAT 原理:地址映射与状态维护

NAT 的核心在于维护一张动态的映射表,记录内网 IP:端口与公网 IP:端口的对应关系。根据映射策略的不同,NAT 主要分为2种类型:

锥型 NAT

锥型 包括全锥型、限制锥型和端口限制锥型等变体。它们的共同特点是:同一个内网 IP:端口组合,在访问任意外部地址时,始终映射到同一个公网 IP:端口
区别仅在于对外部入站流量的放行策略——从允许任意主机访问,到仅允许曾通信过的外部 IP 或 IP:端口访问,安全限制逐级增强。
总体而言,锥型 NAT 在穿透场景下行为可预测,是 UDP 打洞等 P2P 技术能够成功的基础。

对称型 NAT

映射规则:按「协议 + 内网 IP:Port + 外部目标 IP:Port」为维度生成强绑定的独立映射表项,所有访问都建立唯一映射记录。不同内网 IP:Port 访问同一外部目标,或同一内网 IP:Port 访问不同外部目标,均会分配不同公网端口
放行规则:仅允许对应外部目标 IP:Port 的同协议流量,发往其专属的公网端口,才能被转发到对应内网 IP:Port;
特点:最严格的 NAT 类型,外部主机几乎无法预测内网设备的公网端口,极大增加了 NAT 穿透难度。
NAT 设备通常还会设置超时机制(如 TCP 连接空闲 30 分钟、UDP 流 5 分钟),超时后映射条目会被清除,以释放端口资源。

四、单向性并非 NAT 的初衷,而是历史演进的结果

NAT 的单向通信(内网访问公网)特性并非其原始设计目标。早期的 NAT 实现支持双向通信——例如通过静态端口映射(Static Port Forwarding)手动配置规则,将公网 IP 的某个端口永久映射到内网某台设备的特定端口。
然而,随着网络安全意识的提升,人们逐渐发现:NAT 天然具备防火墙功能。由于外部无法主动探测内网设备,恶意攻击者难以直接扫描或入侵内网主机。这种“默认拒绝”的安全模型意外地成为 NAT 被广泛接受的重要原因。
于是,厂商开始强化 NAT 的“隔离”特性,默认关闭所有未授权的入站连接。单向性从“可选能力”转变为“默认行为”,甚至被宣传为一项安全优势。虽提升了安全性,却也彻底阻断了 P2P 通信、远程服务部署等应用场景。

五、UDP vs TCP:穿透难度的本质差异

在尝试实现双向内网穿透时,UDP 协议比 TCP 更容易成功,原因在于两者的状态管理机制不同。

UDP 打洞

UDP 是无连接协议,NAT 设备通常基于“最近通信的对端”来决定是否放行返回包。利用这一特性,两个位于不同 NAT 后的客户端可通过一个公共信令服务器协调打洞:

  • 客户端 A 和 B 分别向服务器 S 注册,S 记录各自的公网 IP:端口(PubA、PubB);
  • S 通知 A 和 B 彼此的公网地址;
  • A 立即向 PubB 发送 UDP 包,B 同时向 PubA 发送;
  • 尽管首次包可能被丢弃,但 NAT 会在本地创建临时映射;
  • 后续包即可直接穿越 NAT,建立 P2P 连接。

此方法在锥型 NAT(非对称型)下成功率较高,但在对称型 NAT 中因端口不可预测而失效。

TCP 打洞的困境

TCP 是面向连接的协议,建立连接需完成三次握手(SYN → SYN-ACK → ACK)。问题在于:
外部主机向内网设备的公网 IP:端口发送 SYN 时,NAT 因无对应映射而丢弃该包;
内网设备无法提前“预热”映射,因为 TCP 连接必须由一方主动发起;
即使双方同时向外发送 SYN(Simultaneous Open),也要求精确的时间同步(毫秒级)和 NAT 行为配合,实践中极难实现。
因此,TCP 内网穿透几乎无法依赖纯打洞技术,必须借助中继或代理。

六、混合解决方案

面对 TCP 协议在 NAT 环境下的穿透困境,业界发展出了多种实用的解决方案。其中最常见的就是混合模式。
混合结合:系统首先尝试通过 UDP 或 TCP 打洞建立直连,以获得低延迟、高带宽的点对点通信;一旦探测到 NAT 类型不支持(如对称型 NAT)或打洞失败,则自动无缝切换至中继服务器中转数据。该策略在保障连接成功率的同时,尽可能优化性能,广泛应用于 WebRTC、即时通讯和实时音视频场景。
P2P 是最常见但隐藏在用户背后的内网穿透方式,除此之外,另一种更简单可靠的内网穿透技术可以参考一文搞懂内网穿透原理——ngrok & 花生壳


作者简介:从事 Web 前后端开发多年。一直相信“技术应该被说人话”,坚持输出实用易懂的干货内容。闲暇写些随笔,记录行业观察与生活感悟。


阅读原文:https://mp.weixin.qq.com/s/zgwzYuGy81RVH9WuUdp2_Q


该文章在 2026/4/29 16:30:12 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-1  粤公网安备44030602007207号