nat是什么?nat打洞是什么意思?有什么作用?为什么需要打洞?
NAT是什么?
NAT (Network Address Translation,网络地址转换) 是一种网络技术,用于将私有IP地址转换为公有IP地址。
NAT的基本工作原理
1 | 内网设备 (192.168.1.100) |
当内网设备访问外网时:
- 出去的包:私有IP → 公网IP
- 返回的包:公网IP → 私有IP
为什么需要NAT?
1. IPv4地址短缺
- 全球IPv4地址不够用
- 大量设备共享少量公网IP
2. 网络安全
- 隐藏内网结构
- 防止外网直接访问内网设备
3. 成本考虑
- 减少公网IP的需求和费用
NAT的问题
主要限制
1 | 外网用户无法主动连接内网设备 |
比如:
- 两个都在NAT后面的用户无法直接连接
- 游戏、视频通话、文件传输受阻
- 服务器部署受限
NAT打洞是什么?
NAT打洞(NAT Traversal/Hole Punching) 是绕过NAT限制,使两个内网设备能够直接通信的技术。
基本原理
- 建立映射:内网设备先向外网发包,在NAT上建立端口映射
- 保持映射:定期发包保持映射不失效
- 直接通信:利用已建立的映射进行P2P通信
NAT打洞的具体过程
UDP打洞示例
1 | 客户端A (NAT_A后) ←→ 服务器S ←→ 客户端B (NAT_B后) |
关键技术
STUN (Session Traversal Utilities for NAT)
1 | # 客户端查询自己的公网地址和端口 |
TURN (Traversal Using Relays around NAT)
- 当直接打洞失败时,通过中继服务器转发
ICE (Interactive Connectivity Establishment)
- 综合多种NAT穿越技术的框架
应用场景
1. 即时通讯
- 微信、QQ语音/视频通话
- Skype、Zoom等
2. 游戏
- P2P联机游戏
- 减少服务器负载
3. 文件传输
- BitTorrent下载
- 局域网文件共享
4. 远程访问
- VPN连接
- 远程桌面
5. WebRTC
- 浏览器实时通信
- 在线会议、直播
实际例子
微信语音通话的过程:
- 你和朋友都在各自家的WiFi(NAT)后面
- 微信服务器作为中介,帮你们交换公网地址信息
- 通过NAT打洞建立直接连接
- 语音数据直接在你们之间传输,不经过微信服务器
这就是为什么有时候微信语音很流畅(打洞成功),有时候质量不好(需要中继转发)的原因。
NAT打洞让本来无法直接通信的内网设备能够建立P2P连接,大大提高了网络应用的效率和用户体验。
原文链接: https://dashen.tech/2025/05/26/NAT及其使用/
版权声明: 转载请注明出处.