第一部分: NAT介绍
各种不同类型的NAT(according to RFC)
Full Cone NAT:
内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,任何外部主机只要知道这个(PublicIP:PublicPort)就可以发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包
Restricted Cone NAT:
内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机IP发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,任何端口)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包
Port Restricted Cone NAT:
内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机(IP,Port)发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,Port)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包
Symmetric NAT:
内网主机建立一个UDP socket(LocalIP,LocalPort),当用这个socket第一次发数据给外部主机1时,NAT为其映射一个(PublicIP-1,Port-1),以后内网主机发送给外部主机1的所有数据都是用这个(PublicIP-1,Port-1),如果内网主机同时用这个socket给外部主机2发送数据,第一次发送时,NAT会为其分配一个(PublicIP-2,Port-2), 以后内网主机发送给外部主机2的所有数据都是用这个(PublicIP-2,Port-2).如果NAT有多于一个公网IP,则PublicIP-1和PublicIP-2可能不同,如果NAT只有一个公网IP,则Port-1和Port-2肯定不同,也就是说一定不能是PublicIP-1等于 PublicIP-2且Port-1等于Port-2。此外,如果任何外部主机想要发送数据给这个内网主机,那么它首先应该收到内网主机发给他的数据,然后才能往回发送,否则即使他知道内网主机的一个(PublicIP,Port)也不能发送数据给内网主机,这种NAT无法实现UDP-P2P通信。
第二部:NAT类型检测
前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。
第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?
客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就不能P2P了(检测停止)。
当客户端能够接收到服务器的回应时,需要把服务器返回的客户端(IP,Port)和这个客户端socket的(LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检测停止)。否则客户端在NAT后要做进一步的NAT类型检测(继续)。
第二步:检测客户端NAT是否是Full Cone NAT?
客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。
第三步:检测客户端NAT是否是Symmetric NAT?
客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。
用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。
比较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止)。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。
第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?
客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP数据包响应客户端, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。
注:以上检测过程中只说明了可否进行UDP-P2P的打洞通信,具体怎么通信一般要借助于Rendezvous Server。另外对于Symmetric NAT不是说完全不能进行UDP-P2P达洞通信,可以进行端口预测打洞,不过不能保证成功
分享到:
相关推荐
标题中的"sort_nat.zip_sort nat_sort_nat"可能是指一个用于整理文件名的程序或脚本,它采用了自然排序(Natural Sort)的方式,使得文件名按照人类阅读习惯进行排序。自然排序不仅考虑字符的顺序,还能理解数字序列...
《专用接口芯片NAT9914及其应用》 在信息技术领域,接口芯片扮演着至关重要的角色,它们是系统间通信的关键桥梁。其中,NAT9914是一款专为通用接口总线(GPIB)设计的高性能接口芯片,广泛应用于测试与测量设备、...
标题中的“UDP穿越Symmetric NAT(对称型NAT)的端口猜测方法”涉及到的是互联网通信中的一个关键问题,即如何在对称型网络地址转换(Symmetric NAT)环境中实现用户数据报协议(UDP)的数据传输。Symmetric NAT是一种...
**NAT类型测试工具——NatTypeTest** 在互联网通信中,NAT(Network Address Translation,网络地址转换)是一种网络技术,用于将私有IP地址转换为公共IP地址,以解决IPv4地址短缺的问题。NAT类型是描述网络连接中...
### 专用接口芯片NAT9914及其应用 #### 概述 随着自动化测量技术的发展,对于带有通用接口总线(GPIB)接口的仪器需求日益增长。为了实现这一目标,通常采用专用的大规模集成电路(IC)来构建GPIB接口。这些专用IC...
### 网络地址转换(NAT)实验详细配置 #### 实验背景及目标 本实验旨在通过实际操作深入理解并掌握网络地址转换(Network Address Translation, NAT)的不同类型及其配置方法,包括静态NAT、动态NAT以及PAT(Port ...
NAT类型通常分为三种:完全锥形NAT、限制锥形NAT和端口限制锥形NAT,这决定了设备对外部网络的可达性和可识别性。本文将详细介绍NAT类型及其检测工具。 **NAT类型详解** 1. **完全锥形NAT (Full Cone NAT)** 在...
NAT64是一种网络地址和协议转换技术,它允许IPv6-only(只有IPv6地址的)客户端能够与IPv4服务器通信。这种技术在RFC6146文档中得到了标准化,它是由IETF(互联网工程任务组)在2011年发布的标准跟踪文档。NAT64是...
NAT(Network Address Translation)是网络地址转换的缩写,是一种网络技术,用于解决公网IP地址短缺的问题。通过NAT,内部网络中的设备可以使用私有IP地址进行通信,而对外界显示统一的公网IP地址,从而有效地节省...
**策略NAT(Policy-Based NAT)**是一种网络地址转换技术,它允许管理员基于特定的源和目的IP地址以及端口来定义NAT规则,与传统的源NAT(PAT)不同,策略NAT不仅可以转换源地址,还可以根据需要转换目的地址。...
NAT(Network Address Translation)是网络地址转换技术,主要用于解决IP地址稀缺问题,它允许内部网络的设备使用私有IP地址,通过一个公共IP地址访问外部网络。在Windows操作系统中,实现NAT功能通常依赖于操作系统...
【NAT配置实验报告_17113501】是关于网络地址转换(NAT)配置的一个实验报告,主要涉及在Windows Server 2003虚拟机和Cisco Packet Tracer仿真环境中实施NAT的过程,以实现内外网的通信。 **NAT(Network Address ...
### Wireshark的NAT分析 #### 一、引言 在现代网络环境中,网络地址转换(Network Address Translation,简称NAT)是一项重要的技术,它允许一个或多个私有IP地址在网络边界路由器上被转换为一个公共IP地址,从而...
本篇文章将深入探讨几种常见的NAT类型,包括静态NAT、动态NAT、NAPT、Easy IP NAT以及NAT Server,并结合华为的ENSPI(Enterprise Network Simulation Platform - Interactive)进行实践操作。 1. 静态NAT:静态NAT...
NAT(Network Address Translation)探测是一项关键的网络技术,它涉及到P2P(对等网络)通信中的内网穿透问题。在P2P网络中,由于很多设备位于NAT之后,它们不能直接与外部网络进行通信,因此需要通过NAT探测来识别...
在处理网络通信时,NAT(Network Address Translation)技术被广泛应用于路由器上,用于将私有IP地址转换为公共IP地址,以便内部网络设备能够与外部网络通信。然而,NAT会阻碍对等(Peer-to-Peer)通信,因为每个设备...
实验:使用静态NAT对外发布公司官网 在IT领域,特别是网络管理中,NAT(Network Address Translation)是一种网络技术,用于将内部网络中的私有IP地址转换为全球唯一的公网IP地址,以便内部网络的设备可以与外部...
### 路由NAT与代理的区别 随着互联网技术的发展,如何高效地连接至互联网成为了一个重要的议题。本文旨在深入探讨路由、网络地址转换(NAT)与代理服务器(Proxy)之间的区别及其应用场景。 #### 一、直接路由 ...
**实验:Jan16公司使用动态NAT访问互联网** **一、实验内容** Jan16公司的网络环境中,内部网络需要通过动态NAT技术访问互联网。动态NAT是一种网络地址转换方式,它允许内部网络的私有IP地址通过共享一组公网IP地址...
多出口NAT策略路由案例·已完成·GNS3 通过配置实现: 宿舍区访问互联网使用电信出口.教学区使用联通出口 任何一条链路故障,能够自动切换 宿舍区和教学区均使用路由器出口地址做PAT 配置思路: 基础拓扑搭建. 划分...