当前位置: 首页 > news >正文

NAT 类型及 P2P 穿透

在当今互联网环境中,网络地址转换(NAT, Network Address Translation)技术已成为连接私有网络与公共互联网的核心桥梁。然而,NAT的广泛应用也为P2P通信带来了挑战。在P2P通信中,NAT穿透技术是实现设备间直接连接的关键。由于NAT屏蔽了外部网络的直接访问,P2P应用程序需要通过巧妙的技术手段绕过这一障碍,以建立高效的通信通道。本文深入探讨不同类型 NAT 的特性,分析NAT类型的探测方法及其原理,阐述NAT穿透的实现机制。

1. NAT类型

网络地址转换(NAT)类型根据其映射和过滤规则的不同,可分为以下四种主要类型,每种类型在地址端口映射和外部连接限制方面具有独特特性,影响P2P通信和NAT穿透的效果。这些NAT类型的不同特性直接影响P2P通信的可行性和效率,理解其工作原理是实现有效NAT穿透的基础。

1.1. 完全锥型(Full Cone)

内部主机的IP和端口映射到固定的外部IP和端口,任何外部设备都可以通过该外部地址向内部主机发起连接。特点是映射关系固定且开放,穿透性最强,但安全性较低。

如下图所示,Client B 和 Client C 都可以与 Client A 无阻碍双向通信。

1.2. 地址受限锥型(Address Restricted Cone)

内部主机的IP和端口映射到固定的外部IP和端口,但只有内部主机主动联系过的外部设备才能通过该映射发起连接。相比全锥形NAT,增加了来源IP限制,安全性更高,但穿透复杂性增加。

如下图所示,Client A 必须先向 Client B 发送报文,Client B 才能够向 Client A 发送报文;否则,Client C 直接向 Client A 发送的报文,会被 NAT 丢弃。

1.3. 端口受限锥型(Port Restricted Cone)

类似受限锥形NAT,但进一步限制外部设备必须使用内部主机曾联系过的IP和端口进行通信。端口限制提高了安全性,但对P2P连接的实现要求更高。

如下图所示,不仅 Client C 发送的报文会被丢弃,Client B 通过不同端口(IP地址不变)发送的报文也会被 NAT 丢弃。

1.4. 对称型(Symmetric)

每次内部主机与不同外部设备通信时,NAT分配不同的外部端口映射,且仅允许对应的外部设备通过该映射回连。映射的高度动态性和严格限制使对称NAT穿透难度最大。

如下图所示,Client A 向 Client B 和 Client C 发送报文,会在 NAT 上生成两个不同的映射表项,外部报文的 IP 地址和端口在表项中查找不到,都会被丢弃。

2. NAT类型探测

NAT类型探测是识别网络地址转换设备行为的关键过程,通过发送特定的请求并分析响应,确定NAT的类型及其对通信的限制。探测过程通常利用UDP数据包,通过与外部服务器交互,测试NAT的映射和过滤规则。核心原理在于观察内部IP和端口映射到外部地址的模式,以及外部请求是否能够成功接收。探测开始时,内部主机发送请求到不同外部IP和端口,服务器使用不同的IP和端口返回响应,基于是否收到响应及映射地址的稳定性,逐步判断NAT类型。包括检查UDP是否被防火墙阻止、是否分配公共IP,以及映射是否对所有外部请求开放或受地址/端口限制。

上图展示了NAT类型探测的技术原理,接下来我们将对其探测原理和流程进行深入分析。

2.1. UDP Blocked

内部主机向外部服务器发送探测报文。如果未收到服务器的响应,则表明网络存在UDP阻塞,可能由防火墙或NAT配置限制所致

2.2. Firewall

当内部主机收到服务器的首次响应并从响应中确认分配了公网IP后,探测流程继续进行。接下来,内部主机再次向服务器发送探测报文。此时,服务器将使用不同的IP地址和端口进行响应,以进一步测试网络环境的限制。如果第二次响应未能成功接收,表明可能存在防火墙对特定IP或端口的额外过滤,从而中断了通信。

2.3. Open Internet

如果内部主机成功接收到服务器使用不同IP地址和端口发送的第二次响应,则表明网络环境没有额外的限制或过滤,属于开放互联网(Open Internet)状态,允许来自不同外部端点的自由通信。

2.4. Full Cone NAT

当内部主机收到服务器的首次响应后,若发现响应中显示的并非公网IP,表明其通信经过NAT映射。接下来,内部主机再次发起探测报文,服务器则使用不同的IP地址和端口进行响应。如果内部主机仍能成功接收到这一第二次响应,说明NAT允许来自任何外部IP和端口的请求通过相同的映射,这符合全锥形NAT(Full Cone NAT)的特性,表明该NAT类型具有较高的开放性。

2.5. Symmetric NAT

如果内部主机未能接收到使用不同IP和端口发送的第二次响应,则进一步进行探测。内部主机随后向另一个外部端点(IP2:Port2)发起第三次探测报文,服务器使用相同地址(IP2:Port2)发送响应。如果内部主机发现外部看到的公网地址与第一次不同,表明NAT为每个不同的外部IP和端口对分配了独特的映射,这一行为特征符合对称NAT(Symmetric NAT)的特性,反映了其严格的动态映射规则。

2.6. Restricted Cone NAT

如果比较发现第一次和第三次探测中服务器返回的公网地址相同,表明NAT的映射在不同外部IP间保持一致。接下来,内部主机发起第四次探测,服务器使用与前次相同的IP但不同端口进行响应。如果内部主机无法收到这一响应,说明NAT限制了来自未主动联系过的端口的连接,符合端口受限锥形NAT(Port Restricted Cone NAT)的特性。反之,如果能够成功接收响应,表明NAT仅对未联系过的IP施加限制,而端口开放,符合地址受限锥形NAT(Address Restricted Cone NAT)的特征。

3. P2P可穿透性

P2P穿透又叫P2P打洞,是指在网络地址转换(NAT)环境下,通过技术手段实现点对点(P2P)通信中两台主机直接建立连接的过程。尽管NAT有效解决了IP地址短缺和网络安全问题,但其对外部连接的限制(如映射和过滤规则)往往阻碍了P2P通信的直接性。影响P2P穿透成功率的因素是多方面的,比如 NAT 设备对标准协议的支持、动态 IP 地址策略、防火墙策略等,这其中,双方NAT类型的组合对P2P穿透成功率影响最大。

上面表格展示了不同NAT类型组合,P2P穿透的理论可行性,接下来我们深入研究其背后机理。

双方通过STUN服务器获取初始公网映射,并通过信令服务器交换这些地址。

3.1. 全锥型<->全锥型

全锥型 NAT 任何外部设备都可以通过该外部地址向内部主机发起连接,只要获取了 NAT 后地址,就可以完全无限制的进行双向通信,谁先向谁发送报文都可以。

3.2. 全锥型<->地址受限锥形

地址受限锥型 NAT,只允许与内部主机主动联系过地址进行通信,这就要求 Client B 要先向 Client A 发送报文,在地址受限锥型 NAT 上建立映射表项并记录地址 IPA',否则 Client A 发往 Client B 的报文会被 NAT 丢弃。

3.3. 全锥型<->端口受限锥型

端口受限锥型比地址受限锥型的限制更严格,只允许与内部主机主动联系过的地址和端口进行通信,这对全锥型 NAT 来说不是问题,因为一般情况,其映射的地址和端口不会变化。P2P打洞逻辑和流程与地址受限锥型一致。

3.4. 全锥型<->对称型

对称型 NAT 为不同外部设备通信分配不同的端口,如果 Client A 先发送报文,报文会被对称型 NAT 丢弃。因此,需要 Client B 向 Client A 发送报文,这样在对称型 NAT 会创建映射表项,分配新的地址和端口,Client A 发送的响应能够送达 Client B。

3.5. 地址受限锥型<->地址受限锥型

两边都是地址受限锥型 NAT,那第一个报文肯定会被对方 NAT 丢弃,如下图所示。但没关系,此时已经在主动发送报文端 Client B 的 NAT 上分配了端口映射,允许 IPA' 的报文通过。紧接着 Client A 发送报文,报文会顺利到达 Client B,双向打洞完成。

3.6. 地址受限锥型<->端口受限锥型

由于地址受限锥型建立的映射是固定映射,从 Client A 发送 Client B 报文的端口不会变化,因此,其打通逻辑和流程与 3.5 是一致的。

3.7. 地址受限锥型<->对称型

由于 Client B 的 NAT 是对称型,Client B 向 Client A 发送报文时,会分配新的端口,如果 Client B 发送的报文不能够到达 Client A,则 Client A 无法获取 Client B 在对称型 NAT 上分配的端口。因此,要求 Client A 先向 Client B 发送报文,虽然报文会被对称型 NAT 丢弃,但是会在地址受限锥型 NAT 上创建表项。

假设对称型 NAT 每次分配的IP地址不变,IPB'=IPB''。

3.8. 端口受限锥型<->端口受限锥型

双方都是端口受限锥型,任何一方先发送报文,报文都会被对方 NAT 丢弃,但是会在本端出口 NAT 上创建表项并记录访问的IP和端口,这样后续的报文就可以顺利通过。

3.9. 端口受限锥型<->对称型

对称型 NAT 每次都会分配新的端口,Client A 发往 Client B 的报文会被端口受限锥型 NAT 丢弃,这样 Client A就无法获知 Client B 在对称型 NAT 上的端口。因此,理论上是无法打洞成功的。

3.10. 对称型<->对称型

双方都是对称型 NAT,双方都无法获取对端绑定的端口,理论上无法打洞。

4. 总结

本文简要概述了NAT类型,并深入分析了NAT类型探测与P2P穿透的技术原理。然而,这些分析基于理想化环境,实际网络场景远超本文描述的复杂性,可能面临多层NAT、IP地址动态变化以及打洞窗口时间限制等诸多挑战。针对这些问题,工程实践中需开发针对性的解决方案,以增强系统的可靠性和适应性。本文仅展示了打洞的基本原理,而在实际工程中,为提升打洞效率,通常采用双向同时探测策略,从而优化连接建立的成功率和速度。此外,值得一提的是,对于理论上无法打洞的结论,工程上常通过智能猜测和优化手段,尝试将“不可能”转化为“可能”。

http://www.dtcms.com/a/263036.html

相关文章:

  • 人工智能和云计算对金融未来的影响
  • Docker 入门教程(九):容器网络与通信机制
  • Qt 前端开发
  • (3)pytest的setup/teardown
  • 文心大模型 4.5 系列开源首发:技术深度解析与应用指南
  • Python 数据分析与可视化 Day 12 - 建模前准备与数据集拆分
  • 【C语言 | 字符串处理】sscanf 用法(星号*、集合%[]等)详细介绍、使用例子源码
  • 嵌入式SoC多线程架构迁移多进程架构开发技巧
  • C++ std::list详解:深入理解双向链表容器
  • uniapp小程序蓝牙打印通用版(集成二维码打印)
  • 深度学习04 卷积神经网络CNN
  • 【Python】 Function
  • 计算整数二进制中1的个数
  • 障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
  • day47 注意力热图可视化
  • 展示折线图的后端数据连接
  • leetcode427.建立四叉树
  • 利润才是机器视觉企业的的“稳定器”,机器视觉企业的利润 = (规模经济 + 技术差异化 × 场景价值) - 竞争强度
  • ViT与CLIP:图像×文本 多模态读心术揭秘
  • 大数据系统架构实践(三):Hbase集群部署
  • 嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别
  • EPLAN 中定制 自己的- A3 图框的详细指南(一)
  • 【机器学习深度学习】适合微调的模型选型指南
  • DAOS集群部署-Docker模式
  • CloudBase AI Toolkit 让我用“嘴”开发出的第一款网页游戏
  • 网络安全运维与攻防演练综合实训室解决方案
  • 服务器被入侵的常见迹象有哪些?
  • CentOS服务器SSH远程连接全指南
  • HarmonyOS NEXT应用元服务常见列表操作多类型列表项场景
  • 2025年数字信号、计算机通信与软件工程国际会议(DSCCSE 2025)