NAT 穿透(NAT Traversal)的核心目标是:让位于不同 NAT 后面的设备,能够直接建立点对点(P2P)连接,而不是所有数据都经过服务器中转。
下面从原理 → 常见方案 → 典型流程 → 关键点系统说明。
NAT(网络地址转换)让内网设备可以访问外网,但外网无法直接访问内网设备。
例如:
内网 A (192.168.1.10) → NAT → 公网 IP 1.1.1.1
内网 B (192.168.2.20) → NAT → 公网 IP 2.2.2.2
A 和 B 都只能主动连接别人,无法直接互相连接。
NAT 行为不同,穿透策略也不同:
| NAT 类型 | 是否可穿透 | 说明 |
|---|---|---|
| Full Cone | ✅ 容易 | 映射固定,任何外部主机都可访问 |
| Restricted Cone | ✅ 一般 | 限制来源 IP |
| Port Restricted Cone | ✅ 较难 | 限制来源 IP + 端口 |
| Symmetric NAT | ❌ 很难 | 每次连接映射端口都不同 |
实际网络中 Port Restricted + Symmetric 最常见。
“让双方 NAT 都认为对方是‘已允许的外部主机’”
实现方式主要有 4 种:
原理:
适用:
流程示意:
A ──> STUN 服务器 ──> 得到公网IP:port
B ──> STUN 服务器 ──> 得到公网IP:port
A 和 B 交换地址
A 向 B 发包(打洞)
B 向 A 发包(打洞)
✅ 优点:
❌ 缺点:
原理:
角色:
适用:
✅ 优点:
❌ 缺点:
ICE = STUN + TURN + 候选地址管理
流程:
✅ 用于:
原理:
问题:
关键点:
内网IP:port → 公网IP:port → 目标IP:port
示例:
A 向 B 发 UDP 包(即使失败)
B 向 A 发 UDP 包
A 的 NAT 认为 B 是“合法来源”
⚠️ 顺序很重要,通常需要几乎同时发包。
TCP 穿透难点:
常见方式:
STUN / TURN Server
|
A <---> NAT <--+--> NAT <---> B
| 场景 | 使用方案 |
|---|---|
| WebRTC | ICE + STUN + TURN |
| P2P 下载 | STUN + DHT |
| 游戏联机 | UDP 打洞 |
| 内网穿透工具 | 中继为主 |
NAT 穿透的本质:利用 NAT 的状态记录机制,让双方“先互相敲门”,从而建立直连;不行就中继。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。