网站首页 > 开源技术 正文
NAT 穿透技术俗称“打洞技术”。它的目标是使得在 NAT 后的设备能够成功建立直接的 P2P连接,而这通常需要先“打洞”,使得外部设备能够通过 NAT 路由器访问内部设备。
1.锥型 NAT(全锥型、IP 受限锥型、端口受限锥型)与 STUN
- STUN 的工作原理:
- STUN (Session Traversal Utilities for NAT)通过 STUN 服务器帮助内部设备发现其公有 IP 地址和端口,并将其告诉对等方。这种方法允许内部设备与外部设备建立直接的 P2P 连接。
- 为什么 STUN 能处理锥型 NAT:
- 全锥型 NAT: 任何外部设备都可以通过已知的公有 IP 和端口直接联系内部设备。因此,只要内部设备通过 STUN 获取其公有地址并将其发送给对等方,连接就可以顺利建立。
- IP 受限锥型 NAT和端口受限锥型 NAT: 这些类型的 NAT 对外部设备访问有一定的限制,但只要内部设备先发起与对等方的通信,NAT 就会打开相应的端口和地址映射,允许对等方进行回应。因此,STUN 仍然可以有效工作。
2.对称型 NAT 与 TURN
- 对称型 NAT 的工作原理:
- 对称型 NAT 对每个不同的外部目标(IP 和端口)都会分配一个不同的映射(外部 IP 和端口),并且仅允许这个特定映射的连接返回到内部设备。这意味着即使使用 STUN 获得了一个外部 IP 和端口,如果对等方的地址或端口不同,该映射也无效。
- 为什么 STUN 不能处理对称型 NAT:
- 由于对称型 NAT 对每个外部目标地址分配不同的映射,STUN 获得的公有 IP 和端口不能被其他外部设备重用。因此,对等方无法通过 STUN 提供的地址与内部设备建立连接。
- TURN 的作用:
- TURN (Traversal Using Relays around NAT)通过充当中继服务器,接收并转发双方的通信数据。由于所有通信都通过 TURN 服务器中继,外部目标地址不会改变,解决了对称型 NAT 带来的地址映射问题。虽然 TURN 解决了连接问题,但它会增加延迟和带宽消耗。
3.ICE 框架的综合应用
- ICE (Interactive Connectivity Establishment)是一种框架,用于 NAT 穿透和建立 P2P 连接。它结合了 STUN 和 TURN 两种技术来应对不同的 NAT 类型。
- 工作过程:
- ICE 首先尝试使用 STUN 获得候选地址(Candidate),并测试是否能建立直接的 P2P 连接。这对于大多数锥型 NAT 都是有效的。
- 如果 STUN 无法成功建立连接,ICE 框架会退而求其次,使用 TURN 服务器作为中继,以确保即使在对称型 NAT 的环境下也能成功建立连接。
4. NAT穿透的开源工具
以下是一些常见的用于 NAT 穿透的开源工具:
- libnice – The GLib ICE implementation: 一个支持 ICE 框架的库,提供 STUN、TURN 和打洞功能,常用于实时音视频通信中。
- GitHub - pjsip/pjproject: PJSIP project: PJNATH 是 PJPROJECT 的一部分,支持 STUN、TURN 和 ICE 功能,广泛应用于 VoIP 和 P2P 应用中。
- GitHub - jitsi/ice4j: A Java implementation of the ICE protocol: 一个纯 Java 实现的 ICE 库,支持 STUN、TURN 和打洞,适用于 Java 应用。
- GitHub - coturn/coturn: coturn TURN server project: 一个完整的 STUN 和 TURN 服务器实现,支持 NAT 穿透和中继通信,是很多 VoIP 和 WebRTC 应用的首选服务器。
- Stuntman - open source STUN server: 一个开源的 STUN 服务器和客户端实现,主要用于学习和开发 NAT 穿透技术。
总结
- STUN 适用于锥型 NAT,因为它们对外部设备的访问限制较少,能够支持直接的 P2P 连接。
- TURN 必须用于对称型 NAT,因为对称型 NAT 的严格地址映射要求使得 STUN 无法有效工作。
- ICE 框架 结合了 STUN 和 TURN,能够根据实际的网络环境灵活选择最适合的 NAT 穿透技术,以应对各种复杂的 NAT 类型。
猜你喜欢
- 2024-10-17 123456(123456铁路官网下载)
- 2024-10-17 魔兽世界怀旧服黑科技:双子监控打虫子
- 2024-10-17 巫妖王来袭!九职业巫妖王卡组分享
- 2024-10-17 解决芯片互连卡脖子问题:CMOS片上光电互连速度突破2Tb/s
- 2024-10-17 编程语言排名@2022(编程语言排名verilog)
- 2024-10-17 网易云信CTO阙杭宁:如何保障十万不同应用的通讯稳定与实时性
- 2024-10-17 融合通信功能配置示例-1-如何快速批量添加SIP分机
- 2024-10-17 FreePBX实现SIP/WebRTC和PSTN设备对接完整流程
- 2024-10-17 PJSIP集成G729 (vs2022版)(集成块sp7623hp代换)
- 2024-10-17 JFrog 披露PJSIP开源多媒体通信库的五个漏洞
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)