什么是NAT?NAT类型有哪些?
nat简介
NAT(Network Address Translation,网络地址转换)是一种地址转换技术,它可以将IP数据报文头中的IP地址转换为另一个IP地址,并通过转换端口号达到地址重用的目的。NAT作为一种缓解IPv4公网地址枯竭的过渡技术,由于实现简单,得到了广泛应用。
在大多数网络环境中,我们都需要通过 NAT 来访问 Internet。NAT 是网络地址转换,这是一种协议,它为公共网络上的多台计算机提供了一种共享单个 Internet 连接的方法。
NAT的优缺点
NAT优势
1、企业内网使用私网IP地址,减少了公网IP地址的占用。NAT 一般应用于边界路由器,例如连接到 Internet 的路由器。
通过NAPT技术,企业可以使用公网IP地址从私网访问Internet,节省公网IP地址。
如果不同的企业或学校不需要相互通信,它们的私有地址可以重叠。
如果不同学校或企业的内网通过VPN或专线相互通信,不同学校或企业使用的私网地址不能重叠。
2、更换ISP后,内网地址无需更改,增强了上网的灵活性。
3、私网不能直接在Internet上访问,增强了内网的安全性。
NAT 缺点
1、在路由器上进行NAT或NAPT时,需要修改数据包的网络层和传输层,需要保留端口和地址转换的映射关系并记录在路由器中。路由数据包会造成较大的交换延迟,消耗路由器上的大量资源。
2、使用私有IP地址访问Internet。源 IP 地址被替换为公共 IP 地址。如果某学校的学生在论坛上发帖,论坛只能记录发布者的公网IP地址,无法追踪到内网IP地址。即无法进行端到端的IP追踪。IP追踪。
3、公网不能访问私网,要访问私有网络,您需要执行端口映射。
4、某些应用程序无法在 NAT 网络上运行。例如,IPSec 不允许修改中间数据包。
公共 IP 地址和私有 IP 地址
公网是指Internet,公网IP地址是指Internet上全局规划的IP地址,网段不能重叠,互联网上的路由器可以转发目的地址为公网地址的报文。
在IP地址空间中,A类、B类、C类的一些IP地址被保留为私有IP地址,私网IP地址不能在公网上使用,只能在内网使用,Internet 上的路由器没有到私有地址的路由。
保留A类、B类、C类私有地址的范围如下:
- A类IP地址:
10.0.0.0
-10.255.255.255
。 - B类IP地址:
172.16.0.0
-172.31.255.255
。 - C类IP地址:
192.168.0.0
-192.168.255.255
。
NAT解决了什么问题?
随着网络应用的增多,IPv4地址枯竭的问题越来越严重。尽管IPv6可以从根本上解决IPv4地址空间不足问题,但目前众多网络设备和网络应用大多是基于IPv4的,因此在IPv6广泛应用之前,使用一些过渡技术(如CIDR、私网地址等)是解决这个问题的主要方式,NAT就是这众多过渡技术中的一种。
当私网用户访问公网的报文到达网关设备后,如果网关设备上部署了NAT功能,设备会将收到的IP数据报文头中的IP地址转换为另一个IP地址,端口号转换为另一个端口号之后转发给公网。在这个过程中,设备可以用同一个公网地址来转换多个私网用户发过来的报文,并通过端口号来区分不同的私网用户,从而达到地址复用的目的。
早期的NAT是指Basic NAT,Basic NAT在技术上实现比较简单,只支持地址转换,不支持端口转换。因此,Basic NAT只能解决私网主机访问公网问题,无法解决IPv4地址短缺问题。后期的NAT主要是指网络地址端口转换NAPT(Network Address Port Translation),NAPT既支持地址转换也支持端口转换,允许多台私网主机共享一个公网IP地址访问公网,因此NAPT才可以真正改善IP地址短缺问题。
NAT的类型
根据NAT转换是对报文中的源地址进行转换还是对目的地址进行转换,NAT可以分为源NAT、目的NAT和双向NAT,下面我们分别介绍这三种NAT类型。
静态 NAT、动态 NAT、NAPT和Easy IP使用户可以从私网访问公网。
NAT服务器实现从公网到私网的访问。
源NAT
源NAT在NAT转换时,仅对报文中的源地址进行转换,主要应用于私网用户访问公网的场景。当私网用户主机访问Internet时,私网用户主机发送的报文到达NAT设备后,设备通过源NAT技术将报文中的私网IPv4地址转换成公网IPv4地址,从而使私网用户可以正常访问Internet。
根据转换时是否同时转换源端口号,源NAT可以细分为如下几种类型,详见下图。
源NAT分类
目的NAT
目的NAT在NAT转换时,仅对报文中的目的地址和目的端口号进行转换,主要应用于公网用户访问私网服务的场景。当公网用户主机发送的报文到达NAT设备后,设备通过目的NAT技术将报文中的公网IPv4地址转换成私网IPv4地址,从而使公网用户可以使用公网地址访问私网服务。
根据转换前后的地址是否存在一种固定的映射关系,目的NAT可以细分为如下几种类型,详见下图。
目的NAT分类
双向NAT
双向NAT指的是在转换过程中同时转换报文的源信息和目的信息。双向NAT不是一个单独的功能,而是源NAT和目的NAT的组合。双向NAT是针对同一条流,在其经过设备时同时转换报文的源地址和目的地址。双向NAT主要应用在同时有外网用户访问内部服务器和私网用户访问内部服务器的场景。
STUN中定义的NAT类型
在STUN标准中,根据私网IP地址和端口到NAT出口的公网IP地址和端口的映射方式,把NAT分为如下四种类型,详见下图。
STUN中定义的NAT类型
Full Cone NAT(完全锥型NAT)
所有从同一个私网IP地址和端口(IP1:Port1)发送过来的请求都会被映射成同一个公网IP地址和端口(IP:Port)。并且,任何外部主机通过向映射的公网IP地址和端口发送报文,都可以实现和内部主机进行通信。
这是一种比较宽松的策略,只要建立了私网IP地址和端口与公网IP地址和端口的映射关系,所有的Internet上的主机都可以访问该NAT之后的主机。
Restricted Cone NAT(限制锥型NAT)
所有从同一个私网IP地址和端口(IP1:Port1)发送过来的请求都会被映射成同一个公网IP和端口号(IP:Port)。与完全锥型NAT不同的是,当且仅当内部主机之前已经向公网主机发送过报文,此时公网主机才能向私网主机发送报文。
Port Restricted Cone NAT(端口限制锥型NAT)
与限制锥型NAT很相似,只不过它包括端口号。也就是说,一台公网主机(IP2:Port2)想给私网主机发送报文,必须是这台私网主机先前已经给这个IP地址和端口发送过报文。
Symmetric NAT(对称NAT)
所有从同一个私网IP地址和端口发送到一个特定的目的IP地址和端口的请求,都会被映射到同一个IP地址和端口。如果同一台主机使用相同的源地址和端口号发送报文,但是发往不同的目的地,NAT将会使用不同的映射。此外,只有收到数据的公网主机才可以反过来向私网主机发送报文。
这和端口限制锥型NAT不同,端口限制锥型NAT是所有请求映射到相同的公网IP地址和端口,而对称NAT是不同的请求有不同的映射。
其它分类
静态 NAT
在连接私网和公网的路由器上配置静态 NAT,每个私网地址都有一个固定的公网地址,即私网地址和公网地址是一一对应的,这种NAT不保存公网IP地址。
静态 NAT 支持双向通信:
如上图所示,ISP为企业分配了三个公网地址12.xx1、12.xx2、12.xx3。
可以在企业的边界路由器上配置静态NAT,将PC1的私网地址192.168.1.2映射到公网地址12.xx2。将PC2的私网地址192.168.1.3映射到公网地址12.xx3,然后在路由器上生成静态地址映射表。
PC1 和 PC2 访问 Internet 上的 Web 服务器,当数据包经过路由器时,PC1和PC2的私网IP地址被对应的公网IP地址替换。当从Web Server返回数据包时,数据包也是同样的,数据先发给路由器,然后路由器查找静态地址映射表,将公有地址转换为私有地址,最后发送将数据发送到与私有地址对应的终端设备。
PC3 无法访问 Internet,因为 PC3 上没有配置静态 NAT。
请注意,静态 NAT 以一对一的方式将私有地址映射到公共地址,因此,即使内网主机长时间离线或不发送数据,对应的公网地址仍然在使用。因此,静态 NAT 不保存 IP 地址。
动态 NAT
为避免地址浪费,动态 NAT 提出了地址池,地址池中所有可用的公共地址。
配置动态NAT后,企业的边缘路由器根据可用的公网IP地址生成一个公网IP地址池。企业PC上网时,数据包经过路由器。路由器将PC的私网IP地址替换为空闲的公网IP地址,然后访问Internet。
但是PC1、PC2、PC3上网后,公司的公网IP地址池没有空闲的公网IP地址。在这种情况下,PC4 无法访问 Internet。
使用动态NAT后,公网地址和私网地址仍然是一一对应的,无法提高公网地址的利用率。
请注意,公共地址和私有地址之间的一对一映射是临时建立的。PC通过路由器翻译出来的公网IP地址是公网地址池中一个暂时空闲的公网IP地址。因此,动态NAT只支持单向访问,只能从内网访问公网。
NAPT
从地址池中选择地址时,网络地址和端口转换 (NAPT) 不仅会转换 IP 地址,还会转换端口号。这样就实现了公有地址和私有地址的一对多映射,有效地提高了公有地址的利用率。
如上图所示,开启NAPT后,路由器会生成动态地址和端口映射表。边缘路由器的公网IP地址池只有两个公网IP地址。PC1访问Internet上的Web服务器时,数据包携带源端口、目的端口、源地址和目的地址参数到路由器。然后,路由器进行公共地址转换和源端口转换。另外,转换后的端口号和公网IP地址都记录在动态地址和端口映射表中。最后,PC1 访问 Internet。
当WEB Server返回数据时,数据包也携带这些参数到路由器。然后,路由器查询动态地址和端口映射表,将数据包发送给PC1。
NAPT翻译传输层端口号,区分内网终端,使多个私网IP地址共享一个公网IP地址,从而节省IP地址。
Easy IP
Easy IP的实现原理与NAPT相同,它同时转换 IP 地址和传输层端口。不同的是Easy IP没有地址池的概念,而是将接口地址作为公网IP地址进行NAT。
Easy IP适用于没有固定公网IP地址的场景,例如通过DHCP或PPPoE拨号获取IP地址的网络出口,获取的动态IP地址可直接用于转换。
NAT服务器
NAT 服务器是指端口映射。
当私网服务器需要为公网提供服务时,需要在路由器上配置NAT服务器,并指定【公网IP地址:端口】与【私网IP地址:端口】一一对应] 将内网服务器映射到公网。公网主机通过【公网IP地址:端口】访问内网服务器。
如上图所示,企业内网的Web Server需要被Internet上的计算机访问。为此,您需要在企业的边缘路由器上配置 NAT 服务器。
- 将 Web 服务器的 IP 地址和服务端口号 ( 192.168.0.2:80 ) 映射到边缘路由器的公共 IP 地址和端口号 ( 12.xx8:43333 )。
- 当 Internet 上的计算机访问内网的 Web 服务时,数据包的目的 IP 地址和端口号就是映射到 NAT 服务器上的 IP 地址和端口号( 12.xx8:43333 )。
- 企业边缘路由器收到报文后,查找NAT映射表,将目的IP地址和端口号翻译成Web Server的IP地址和端口号(192.168.0.2:80)。
- 这样就可以通过公网访问私有网络上的服务。
NAT是如何工作的?
根据前面的分类,我们分别从源NAT和目的NAT中各选一种NAT为代表,介绍其工作原理。其他类型的NAT虽然在转换时,转换的内容有细微差别,但是工作原理都相似,不再重复介绍。此外,双向NAT是源NAT和目的NAT的组合,双向NAT的工作原理也不再重复介绍。
NAPT工作原理
NAPT在进行地址转换的同时还进行端口转换,可以实现多个私网用户共同使用一个公网IP地址上网。NAPT根据端口来区分不同用户,真正做到了地址复用。
NAPT工作原理示意图
当Host访问Web Server时,设备的处理过程如下:
设备收到Host发送的报文后查找NAT策略,发现需要对报文进行地址转换。
设备根据源IP Hash算法从NAT地址池中选择一个公网IP地址,替换报文的源IP地址,同时使用新的端口号替换报文的源端口号,并建立会话表,然后将报文发送至Internet。
设备收到Web Server响应Host的报文后,通过查找会话表匹配到步骤2中建立的表项,将报文的目的地址替换为Host的IP地址,将报文的目的端口号替换为原始的端口号,然后将报文发送至Intranet。
NAT Server工作原理
使用NAT Server时,需要先在设备上配置公网地址和私网地址的固定映射关系。配置完成后,设备将会生成Server-Map表项,存放公网地址和私网地址的映射关系。该表项将一直存在除非NAT Server的配置被删除。
NAT Server工作原理示意图
内部Server的私网IPv4地址为192.168.1.2/24,对外的公网IPv4地址为1.1.1.10,端口号都为80,它们之间的映射关系在设备上已提前配置好。当Host访问Server时,设备的处理过程如下:
设备收到Internet上用户访问1.1.1.10的报文的首包后,查找并匹配到Server-Map表项,将报文的目的IP地址转换为192.168.1.2。
设备建立会话表,然后将报文发送至Intranet。
设备收到Server响应Host的报文后,通过查找会话表匹配到步骤2中建立的表项,将报文的源地址替换为1.1.1.10,然后将报文发送至Internet。
后续Host继续发送给Server的报文,设备都会直接根据会话表项的记录对其进行转换,而不会再去查找Server-map表项。
如何使用NAT?
前面已经介绍了,不同的NAT类型适用于不同的应用场景。下面介绍几种典型的NAT应用,帮助用户使用NAT。
私网用户通过NAPT访问Internet
在许多小区、学校和企业的私网规划中,由于公网地址资源有限,通常给私网用户分配私网IPv4地址。此时,可以配置源NAT来实现私网用户访问Internet。用户可以根据自己拥有的公网IPv4地址的个数,选择使用NAPT或者Easy IP。
当用户拥有的公网IP地址个数较多时,配置了NAT设备出接口的IP地址和其他应用之后,还有可用的空闲公网IP地址时,可以选择NAPT。NAPT使用地址池内的IPv4地址作为私网主机转换后的公网IPv4地址。如下图所示,在设备上配置NAPT,实现私网主机访问Internet功能。
私网用户通过NAPT访问Internet
私网用户通过Easy IP访问Internet
当用户拥有的公网IPv4地址个数较少时,配置了NAT设备出接口的IPv4地址和其他应用之后,没有可用的空闲公网IPv4地址时,可以选择Easy IP。Easy IP使用出接口的IPv4地址作为私网主机转换后的公网IPv4地址。如下图所示,在设备上配置Easy IP,实现私网主机访问Internet功能。
私网用户通过Easy IP访问Internet
公网用户通过NAT Server访问私网服务器
在某些场合,私网中有一些服务器需要向公网用户提供服务,比如私网中部署的一些Web服务器、FTP服务器等,NAT支持这样的应用,此时可以配置NAT Server来实现公网用户访问私网服务器。如下图所示,在设备上配置NAT Server,固定“公网IP地址+端口号”与“私网IP地址+端口号”间的映射关系,实现公网主机通过该映射关系访问私网服务器功能。
公网用户通过NAT Server访问私网服务器
如何查询NAT类型
Windows可以使用软件“NatTypeTester3.2.exe”,STUN server填写“stun.stunprotocol.org:3478”,点击test即可。
或者可以通过 EasyN2N 自带的NAT类型测试,
或者可以使用npc的客户端:https://github.com/ehang-io/nps
1 2 3 4 5 6 7 | [root@docker35 ~]# npc nat -stun_addr=stun.stunprotocol.org:3478 nat type: Symmetric NAT public address: 124.89.81.226:2088 D:\npc>npc nat -stun_addr=stun.stunprotocol.org:3478 nat type: Symmetric NAT public address: 124.89.81.226:2089 |
如果p2p双方都是Symmetric Nat,建立p2p肯定不能成功,其他组合都有较大成功率。stun_addr
可以指定stun服务器地址。
当联机的双方NAT类型有一方为Cone NAT时(以下前三种)才 有概率 建立P2P连接,如果双方都是Symmetric NAT,必然无法成功建立P2P连接
几种常见的NAT类型:
1.Full Cone
2.Restricted Cone
3.Port Restricted Cone
4.Symmetric NAT
结合上面的P2P条件,由于家里和公司的NAT类型均为 Symmetric NAT,所以无法建立P2P连接,只能通过N2N服务器中转通信
引用一段恩山论坛大佬总结的:
1.双方中只要有一方是Full Cone,可以直连
2.双方都是Restricted Cone或Port Restricted Cone,这种情况可以打洞,通过N2N服务器握手以后,双方的数据不再经过服务端
3.一方为Restricted Cone,另一方为Symmetric NAT,可以打洞,通过N2N服务器握手以后,双方的数据不再经过服务端
4.一方为端口Port Restricted Cone,另一方为Symmetric NAT,这种情况无法打洞,数据要走N2N服务器中转
5.双方都为Symmetric NAT,这种情况也是无法打洞的,数据要走N2N服务器中转
其它分类
1.1 基础型NAT
仅将内网主机的私有IP地址转换成公网的IP地址,并不将TCP/UDP端口信息进行转换,分为静态NAT和动态NAT。
1.2 NAPT
NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。
1.2.1锥型NAT
- 完全锥型(Full Cone NAT):在不同内网的主机A和B各自连接到服务器C,服务器收到A和B的连接后知道了他们的公网地址和NAT分配给他们的端口号,然后把这些NAT地址和端口号交叉告诉B和A。A和B给服务器所打开的“孔”可以给任何主机使用。如一私网主机地址是192.168.1.100:30000发至公网的所有请求都映射成一个公网地址172.1.20.100:20000,192.168.1.100:30000可以接收任何主机发给172.1.20.100:20000的数据报文。
- 受限制锥型(Restricted cone):主机A和B同样需要各自连接服务器C,同时把A和B的地址告诉B和A,但一般情况下它们只能与服务器通信。要想直接通信需要发送消息给服务器C,如主机A发送一个UDP消息到主机B的公网地址上,与此同时,A又通过服务器C中转发送一个邀请信息给主机B,请求主机B也给主机A发送一个UDP消息到主机A的公网地址上。这时主机A向主机B的公网IP发送的信息导致NAT A打开一个处于主机A的和主机B之间的会话,与此同时,NAT B也打开了一个处于主机B和主机A的会话。一旦这个新的UDP会话各自向对方打开了,主机A和主机B之间才可以直接通信。
- 端口受限锥型(Port-restricted):与受限制锥型类似,与之不同的是还要指定端口号。
1.2.2对称NAT(Symmetric)
对不同的外网IP地址都会分配不同的端口号。
1.2.3 两者区别
对称NAT是一个请求对应一个端口,非对称NAT是多个请求对应一个端口(象锥形,所以叫Cone NAT)。
1.3 安全系数
对称型 > 端口受限锥型 > 受限锥型 > 全锥型
2、网络打洞
2.1 打洞条件
中间服务器保存信息、并能发出建立UDP隧道的命令
网关均要求为Cone NAT类型。Symmetric NAT不适合。
完全圆锥型网关可以无需建立udp隧道,但这种情况非常少,要求双方均为这种类型网关的更少。
- 假如X1网关为Symmetric NAT, Y1为Address Restricted Cone NAT 或Full Cone NAT型网关,各自建立隧道后,A1可通过X1发送数据报给Y1到B1(因为Y1最多只进行IP级别的甄别),但B2发送给X1的将会被丢弃(因为发送来的数据报中端口与X1上存在会话的端口不一致,虽然IP地址一致),所以同样没有什么意义。
- 假如双方均为Symmetric NAT的情形,新开了端口,对方可以在不知道的情况下尝试猜解,也可以达到目的,但这种情形成功率很低,且带来额外的系统开支,不是个好的解决办法。pwnat工具据说可以实现。
- 不同网关型设置的差异在于,对内会采用替换IP的方式、使用不同端口不同会话的方式,使用相同端口不同会话的方式;对外会采用什么都不限制、限制IP地址、限制IP地址及端口。
- 这里还没有考虑同一内网不同用户同时访问同一服务器的情形,如果此时网关采用AddressRestricted Cone NAT 或Full Cone NAT型,有可能导致不同用户客户端可收到别人的数据包,这显然是不合适的。
2.2 打洞流程
不同的网络拓扑NAT打洞的方法和流程有所区别。
2.2.1 同一个NAT设备下
- clinet A与Server S建立UDP连接,公共NAT(155.99.25.11)给client A分配一个公网端口62000;
- client B与Server S建立UDP连接,公共NAT(155.99.25.11)给client A分配一个公网端口62005;
- client A通过Server S发送一个消息要求连接client B,S给A回应B的公网和私网地址,并转发A的公网和私网地址给B;
- A和B根据获取的地址试图直接发送UDP数据报文;是否成功取决于NAT设备是否支持hairpin translation(端口回流)。——打开端口回流相当于与client A的数据经过NAT设备转发后才到达client B,即从外网NAT接口绕了一圈再访问到同一个子网里的client B。(优点是可以防止内部攻击)
2.2.2 不同NAT设备下
1、A使用4321端口与S连接,NAT给回话在NAT分配外网62000端口(155.99.25.11:62000)与S连接;同理B以相同的方式与S连接,分配的外网地址端口是138.76.29.7:31000。
2、A往S注册消息包里包含里A的私有地址10.0.0.1:4321,此时S保存了A的地址;S给A临时分配了一个用于公网的地址(155.99.25.11:62000),同时用于观察外网数据包。
3、同理B往S注册的消息包里也包含里B的地址,NAT同样给B临时分类了一个外网地址(138.76.29.7:31000)。
4、Client A根据以上已知信息通过打洞的方式与B连接UDP通信:
- Client A发送请求消息,寻求连接B;
- S给A回应B的外网和内网地址,通给给B发送A的外网和内网地址;
- A和B开始利用这些地址尝试直接发送UDP报文给彼此,不幸的是,此时A和B都无法接收对应的消息。因为A和B都是在不同的私有网络中,A和B之前都是与S通信回话,并没有与对方建立回话;即A没有为B打开一个洞,B也没有为A打开一个洞。这个过程的第一个报文需要会被拒绝同时打开对应的“洞”,随后才可以直接通信,具体如下:
- A给B公网地址(10.0.0.1:4321 to 138.76.29.7:31000)发送的第一个报文,实际上是在A的NAT私有网络上“打洞”来为新识别的地址(10.0.0.1:4321 138.76.29.7:31000) 建立UDP会话,并经主网地址(155.99.25.11:62000 138.76.29.7:31000)来传送。
- 如果A发送到B的公网地址的消息在B发送到A的第一个消息越过B自己的NAT之前到达B的NAT,那么B的NAT可能会将A的入站消息解释为非请求的传入通信量并丢弃它。
- 同理,B给A公网地址方法的第一个消息也会在B的NAT上“打洞”来为地址(10.1.1.3:4321, 155.99.25.11:62000)建立回话。
- 随后可以正常P2P通信。
2.2.3 多层NAT下
说明:NAT C 是一个大型的工业NAT设备,由ISP(Internet Service Provider,互联网服务提供商)部署,用于将许多客户多路复用到几个公共IP地址上。
Client A和client B无法通道NAT A和NAT A进行P2P通信,因为它们属于NAT C的局域网地址,因此client A和client B只能通道NAT C的hairpin translation进行P2P通信,如果NAT C不支持hairpin translation,则它们很难进行P2P通信。
每个客户机像前面方式一样启动到服务器S的连接,引起NAT A和B各自创建一个单独的公共/私有转化——session A-S(18.181.0.31:1234 10.0.0.1:4321)和session B-S(18.181.0.31:1234 10.1.1.3:4321),并引起NAT C为每个会话建立一个公共/私有翻译——session A-S(18.181.0.31:1234 10.0.1.1:45000)和session B-S(18.181.0.31:1234 10.0.1.2:5500)。
- 首先client A给client B的公网地址(155.99.25.11:62005)发送消息;
- NAT A翻译原数据报文从10.0.0.1:4321带10.0.0.1:45000;
- 数据报现在到达NAT C,它识别出数据报的目标地址是NAT C自己翻译的公共地址之一;
- 如果NAT C是好的,那么其能翻译出数据报文的源地址和目标地址(155.99.25.11:62000和10.0.1.2:55000),同时通过“回环”返回数据包到私有网络;
- NAT B 翻译数据报文得到NAT B私网地址,最终到达client B。
- Client B给client A发送数据报文与上述步骤类似。
2.3 打洞组合
不同的NAT组合打洞的方式也有所不同,有点可以打洞,有的则不能打洞,如两个都是对称型设备则无法实现打洞。不同组合打洞结果如下:
3、关联技术
- ALG:即应用程序级网关技术:传统的NAT技术只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。主要类似与在网关上专门开辟一个通道,用于建立内网与外网的连接,也就是说,这是一种定制的网关。更多只适用于使用他们的应用群体内部之间。
- UpnP:它是让网关设备在进行工作时寻找一个全球共享的可路由IP来作为通道,这样避免端口造成的影响。要求设备支持且开启upnp功能,但大部分时候,这些功能处于安全考虑,是被关闭的。即时开启,实际应用效果还没经过测试。
- STUN(Simple Traversalof UDP Through Network):这种方式即是类似于我们上面举例中服务器C的处理方式。也是目前普遍采用的方式。但具体实现要比我们描述的复杂许多,光是做网关Nat类型判断就由许多工作,RFC3489中详细描述了。
- TURN(Traveral Using Relay NAT):该方式是将所有的数据交换都经由服务器来完成,这样NAT将没有障碍,但服务器的负载、丢包、延迟性就是很大的问题。目前很多游戏均采用该方式避开NAT的问题。这种方式不叫p2p。
- ICE(Interactive Connectivity Establishment):是对上述各种技术的综合,但明显带来了复杂性。
4、其他
4.1 对称NAT设备常用场景
1)使用第三方宽带公司提供的宽带,这类宽带给用户分配的是局域网IP,连接公网的NAT是运营商的,这类运营商一般采用对称NAT。
2)移动互联网,如3G、4G终端设备;
3)大公司路由器一般采用对称NAT;
4.2 影响“打洞”的因素
- 许多对称nat以一种相当可预测的方式为连续的会话分配端口号,而有时分配到的端口刚好被别的应用使用了。
- Client有可能分到多个公网地址,例如:在NAT将公网地址155.99.25.11:62000分配给client A与S的会话之后,NAT可能会将另一个公网地址(如155.99.25.11:62001)分配给A试图发起与B的P2P会话。在这种情况下,依据提供的连接打洞过程将失败,因为后续来自B的传入消息到达NAT A的错误端口号
参考
https://www.wljslmz.cn/1105.html
https://zhuanlan.zhihu.com/p/446503405