WebRTC源码研究(25)NAT打洞原理
要理解NAT打洞原理,需要先理解NAT的相关知识,关于这块的知识已经在前面的博客中讲述的比较详细,具体可以参考这篇博客:WebRTC源码研究(23)WebRTC网络传输基本知识
这里再简单回顾一下,NAT是什么,有几种类型
这里有些很好的穿透相关的博客:
n2n内网穿透打洞部署全过程 + nginx公网端口映射
如何使用开源SFU构建RTC云服务
内网穿透工具 frp
- 开源项目:
1. NAT
在计算机科学中,NAT穿越(NAT traversal)涉及TCP/IP网络中的一个常见问题,即在处于使用了NAT设备的私有TCP/IP网络中的主机之间创建连接的问题。
会遇到这个问题的通常是那些客户端网络交互应用程序的开发人员,尤其是在对等网络和VoIP领域中。IPsec VPN客户普遍使用NAT-T来达到使ESP包通过NAT的目的。
尽管有许多穿越NAT的技术,但没有一项是完美的,这是因为NAT的行为是非标准化的。这些技术中的大多数都要求有一个公共服务器,而且这个服务器使用的是一个众所周知的、从全球任何地方都能访问得到的IP地址。一些方法仅在创建连接时需要使用这个服务器,而其它的方法则通过这个服务器中继所有的数据——这就引入了带宽开销的问题。
两种常用的NAT穿越技术是:UDP路由验证和STUN。除此之外,还有TURN
、ICE
、ALG
,以及SBC
。
1.1 NAT 简介
- 什么NAT ?
网络地址转换(英语:Network Address Translation,缩写:NAT;又称网络掩蔽、IP掩蔽)在计算机网络中是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问互联网的私有网络中。它是一个方便且得到了广泛应用的技术。当然,NAT也让主机之间的通信变得复杂,导致了通信效率的降低。
更多NAT详解参考这篇博客:P2P技术详解(一):NAT详解——详细原理、P2P简介
我们以传统的邮件作为例子,给大家说明NAT是什么?比如A和B两个人要发信,那B告诉A它在某个楼的某层时,这个时候A 可以给B发消息或者信件吗?这肯定不行,因为它并不知道一个具体的地址是多少?你必须告诉它具体哪个省哪个市哪个区哪个小区哪号楼哪层时,只有这种公共的地址,也就是大家都认识的地址,邮局才能帮你把这封信送达。你说哪号楼哪层这个只有你小区内的人才知道。那这个就和我们的网络是相关的。
那对于网络上的主机,你必须要有个公网的地址,那相互之间才能进行通讯,如果告诉它一个私网(内网)的地址,那它根本 找不到你。那对于我们现实中大部分主机都是在网关之后的,他们之间都是有自己的内网IP地址,并不知道自己的外网是多少。那怎么办呢?实际是有一个映射,在网关上有个NAT功能,它可以使你的内网地址变成外网地址。所以他就是一个资源组,映射之后就将你的内网IP端口映射成外网IP端口。那有了外网的IP端口之后,其他的主机就可以通过内网的IP地址与你通讯了。这就是NAT。
首先是NAT,这张图就表现的非常清楚,这就是一个地址映射,左边的分别 是内网的几台机子,通过内网的IP他们之间是可以相互通信的,但是与互联网之间是不通的,如何访问互联网的资源呢,就必须通过NAT,将我们的内网地址转换成外网地址。
由于每台主机都要映射不同的端口,NAT产生的原因有两种:
- 第一种是IPv4的地址不够,解决IPv4地址不够有两种方案,其中最好的是使用IPv6,IPv6的地址池更多,基本上每台主机都有自己的IP地址。还有一种就是进行NAT穿越,就是内网数万台主机都有自己的IP地址,但是映射到外网只有一个IP地址或者几个IP地址,它通过端口好来区分每一台主机,那就形成了一对几百或者以对几万,大大减少了公网IP地址的使用。
- 第二个是处于网络安全的考虑。
1.1.1 IPv4协议和NAT的由来
2011年2月3日中国农历新年, IANA对外宣布:IPv4地址空间最后5个地址块已经被分配给下属的5个地区委员会。2011年4月15日,亚太区委员会APNIC对外宣布,除了个别保留地址外,本区域所有的IPv4地址基本耗尽。一时之间,IPv4地址作为一种濒危资源身价陡增,各大网络公司出巨资收购剩余的空闲地址。其实,IPv4地址不足问题已不是新问题,早在20年以前,IPv4地址即将耗尽的问题就已经摆在Internet先驱们面前。这不禁让我们想去了解,是什么技术使这一危机延缓了尽20年。
要找到问题的答案,让我们先来简略回顾一下IPv4协议。
IPv4即网际网协议第4版——Internet Protocol Version 4的缩写。IPv4定义一个跨越异种网络互连的超级网,它为每个网际网的节点分配全球唯一IP地址。如果我们把Internet比作一个邮政系统,那么IP地址的作用就等同于包含城市、街区、门牌编号在内的完整地址。IPv4使用32bits整数表达一个地址,地址最大范围就是232 约为43亿。以IP创始时期可被联网的设备来看,这样的一个空间已经很大,很难被短时间用完。然而,事实远远超出人们的设想,计算机网络在此后的几十年里迅速壮大,网络终端数量呈爆炸性增长。
更为糟糕的是,为了路由和管理方便,43亿的地址空间被按照不同前缀长度划分为A,B,C,D类地址网络和保留地址。其中,A类网络地址127段,每段包括主机地址约1678万个。B类网络地址16384段,每段包括65536个主机地址。
IANA向超大型企业/组织分配A类网络地址,一次一段。向中型企业或教育机构分配B类网络地址,一次一段。这样一种分配策略使得IP地址浪费很严重,很多被分配出去的地址没有真实被利用,地址消耗很快。以至于二十世纪90年代初,网络专家们意识到,这样大手大脚下去,IPv4地址很快就要耗光了。于是,人们开始考虑IPv4的替代方案,同时采取一系列的措施来减缓IPv4地址的消耗。正是在这样一个背景之下,本期的主角闪亮登场,它就是网络地址转换——NAT。
NAT是一项神奇的技术,说它神奇在于它的出现几乎使IPv4起死回生。在IPv4已经被认为行将结束历史使命之后近20年时间里,人们几乎忘了IPv4的地址空间即将耗尽这样一个事实——在新技术日新月异的时代,20年可算一段漫长的历史。更不用说,在NAT产生以后,网络终端的数量呈加速上升趋势,对IP地址的需求剧烈增加。此足见NAT技术之成功,影响之深远。
说它神奇,更因为NAT给IP网络模型带来了深远影响,其身影遍布网络每个角落。根据一份最近的研究报告,70%的P2P用户位于NAT网关以内。因为P2P主要运行在终端用户的个人电脑之上,这个数字意味着大多数PC通过NAT网关连接到Internet。如果加上2G和3G方式联网的智能手机等移动终端,在NAT网关之后的用户远远超过这个比例。
然而当我们求本溯源时却发现一个很奇怪的事实:NAT这一意义重大的技术,竟然没有公认的发明者。NAT第一个版本的RFC作者,只是整理归纳了已被广泛采用的技术。
1.1.2 NAT的概念模型
NAT名字很准确,网络地址转换,就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力。那么,什么是内部网络IP地址?
RFC1918规定了三个保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。这三个范围分别处于A,B,C类的地址段,不向特定的用户分配,被IANA作为私有地址保留。这些地址可以在任何组织或企业内部使用,和其他Internet地址的区别就是,仅能在内部使用,不能作为全球路由地址。这就是说,出了组织的管理范围这些地址就不再有意义,无论是作为源地址,还是目的地址。对于一个封闭的组织,如果其网络不连接到Internet,就可以使用这些地址而不用向IANA提出申请,而在内部的路由管理和报文传递方式与其他网络没有差异。
对于有Internet访问需求而内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,通常是出口设备的接口地址。一个对外的访问请求在到达目标以后,表现为由本组织出口设备发起,因此被请求的服务端可将响应由Internet发回出口网关。出口网关再将目的地址替换为私网的源主机地址,发回内部。这样一次由私网主机向公网服务端的请求和响应就在通信两端均无感知的情况下完成了。依据这种模型,数量庞大的内网主机就不再需要公有IP地址了。
虽然实际过程远比这个复杂,但上面的描述概括了NAT处理报文的几个关键特点:
1)网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关;
2)网络访问只能先由私网侧发起,公网无法主动访问私网主机;
3)NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;
4)NAT网关的存在对通信双方是保持透明的;
5)NAT网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。
随着后面对NAT的深入描述,读者会发现,这些特点是鲜明的,但又不是绝对的。其中第二个特点打破了IP协议架构中所有节点在通讯中的对等地位,这是NAT最大的弊端,为对等通讯带来了诸多问题,当然相应的克服手段也应运而生。事实上,第四点是NAT致力于达到的目标,但在很多情况下,NAT并没有做到,因为除了IP首部,上层通信协议经常在内部携带IP地址信息。这些我们稍后解释。
1.2 NAT 网络地址转换
- 基本网络地址转换(Basic NAT)
这一种也可称作NAT或“静态NAT”,在RFC 2663中提供了信息。它在技术上比较简单,仅支持地址转换,不支持端口映射。Basic NAT要求对每一个当前连接都要对应一个公网IP地址,因此要维护一个公网的地址池。宽带(broadband)路由器通常使用这种方式来允许一台指定的设备去管理所有的外部链接,甚至当路由器本身只有一个可用外部IP时也如此,这台路由器有时也被标记为DMZ主机。由于改变了IP源地址,在重新封装数据包时候必须重新计算校验和,网络层以上的只要涉及到IP地址的头部校验和都要重新计算。
Basic NAT要维护一个无端口号NAT表,结构如下。
- 网络地址端口转换(NAPT)
这种方式支持端口的映射,并允许多台主机共享一个公网IP地址。
支持端口转换的NAT又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的IP地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的IP地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。
NAPT维护一个带有IP以及端口号的NAT表,结构如下:
1.3 NAT 的副作用以及解决方案
NAT 的副作用主要有下面几点:
- 对等网络传输需穿透
NAT
:IP协议的定义中,在理论上,具有IP地址的每个站点在协议层面有相当的获取服务和提供服务的能力,不同的IP地址之间没有差异。但NAT工作原理破坏了这个特征,如需实现真正意义上的对等网络传输,则需要穿透NAT。这是本文重点。 - 应用层需保持
UDP
会话连接:由于NAT资源有限,会根据一定规则回收转换出去的资源(即ip/port组合),UDP通信又是无连接的,所以基于UDP的应用层协议在无数据传输、但需要保持连接时需要发包以保持会话不过期,就是通常的heartbeat之类的。 - 基于IP的访问限制策略复杂化
国内移动无线网络运营商在链路上一段时间内没有数据通讯后, 会淘汰NAT表中的对应项, 造成链路中断。
-
NAT带来的第一个副作用:NAT超时:
而国内的运营商一般NAT超时的时间为5分钟,所以通常我们TCP长连接的心跳设置的时间间隔为3-5分钟。** -
NAT带来的第二个副作用就是:NAT墙。
NAT会有一个机制,所有外界对内网的请求,到达NAT的时候,都会被NAT所丢弃,这样如果我们处于一个NAT设备后面,我们将无法得到任何外界的数据。
但是这种机制有一个解决方案:就是如果我们A主动往B发送一条信息,这样A就在自己的NAT上打了一个B的洞。这样A的这条消息到达B的NAT的时候,虽然被丢掉了,但是如果B这个时候在给A发信息,到达A的NAT的时候,就可以从A之前打的那个洞中,发送给到A手上了。
简单来讲,就是如果A和B要进行通信,那么得事先A发一条信息给B,B发一条信息给A。这样提前在各自的NAT上打了对方的洞,这样下一次A和B之间就可以进行通信了。
1.4 四种不同类型的NAT
上面介绍了NAT的来由和优缺点,下面来看看NAT的分类:
实际上NAT分为基础型NAT(静态NAT即Static NAT,动态NAT即Dynamic NAT/Pooled NAT)和NAPT(Network Address Port Translation)两种,但由于基础型NAT已不常用,我们通常提到的NAT就代指NAPT
。NAPT
是指网络地址转换过程中使用了端口复用技术,即PAT
(Port address Translation)。
如下图所示:
1.4.1 完全圆锥型NAT
- 完全圆锥型
NAT(Full cone NAT
),即一对一(one-to-one)NAT
一旦一个内部地址(iAddr:port)
映射到外部地址(eAddr:port)
,所有发自iAddr:port
的包都经由eAddr:port
向外发送。任意外部主机都能通过给eAddr:port
发包到达iAddr:port
(注:port
不需要一样)
更通俗一点讲:什么是完全锥型?
就是当内网中的某一台主机经过NAT映射形成一个外网的IP地址和端口,也就是外网所有的主机,只要知道这个地址都可以向这个地址发送数据,基本上就是没有什么限制,这就是安全性比较低的一种类型,也就是谁都能来。
完全锥型是非常简单的 ,左边是内网的主机,它有自己的内网IP地址和端口 ,通过防火墙之后,它形成一个外网的IP地址,那么外网的三台主机要想与内网的主机进行通信的时候,首先要由内网的主机向外发送一个请求,请求外网中的其中一台主机,这样会形成的结果就是它会在NAT服务上打 一个洞,这样会形成一个外网的IP地址和端口,那么形成了外网的IP地址和端口之后,其他的主机只要获得了这个IP地址和端口它都可以向它发送数据。并且可以顺利的通过防火墙发送给内网的主机。这样就可以进行通讯了,这是完全锥型,也是最好穿越的一种 NAT类型。但是安全性就差很多。
1.4.2 受限圆锥型NAT
受限圆锥型NAT(Address-Restricted cone NAT):
- 内部客户端必须首先发送数据包到对方(
IP=X.X.X.X
),然后才能接收来自X.X.X.X的数据包。在限制方面,唯一的要求是数据包是来自X.X.X.X。 - 内部地址(
iAddr:port1
)映射到外部地址(eAddr:port2
),所有发自iAddr:port1
的包都经由eAddr:port2
向外发送。外部主机(hostAddr:any
)能通过给eAddr:port2
发包到达iAddr:port1
。(注:any
指外部主机源端口不受限制,但是目的端口必须是port2
。只有外部主机数据包的目的IP
为 内部客户端的所映射的外部ip
,且目的端口为port2
时数据包才被放行。)
更通俗一点讲:
什么是受限圆锥型NAT?
受限圆锥型NAT 又称为地址限制锥型NAT:
也就是大家觉得完全锥型安全性问题太大了,那就做一些限制,也就是请求出去的时候会记录一下出去的IP地址,那么当你回来的时候只有这台地址的主机才能给我回消息,对于公网上的其他地址来说,我一检查IP地址不对,就给PASS掉。这种就是地址限制型。只要我没向你发送过请求,你直接向我发数据,这是不允许的。
它的安全性好一些,它会在防火墙上形成一个五元组,就是内网主机的IP地址和端口和映射后的公网IP地址和端口以及我要请求的这个主机IP地址,他们首先有一个公共的步骤,第一步就是要先由内网的主机向外网发送一个请求,在这个防火墙上或者NAT服务上形成一个映射表,那形成之后外网的主机就可以和内网的主机进行通讯了。
如图所示,它首先向P的主机发送请求,那么P就可以通过不同的端口向内网的主机发送消息它都是可以接受到的,但是对于其他主机来说,由于IP地址的限制,它返回来的时候,一看IP地址不对,就会被拦掉。只有P的主机是可以通过的,而且它的各个主机都可以跟它进行通讯。这就是地址限制型,这个地址限制型的打通,首先就是这个内网主机无论跟哪个主机进行打通,首先它都要发送 一个请求,发送请求之后就形成了所谓的映射表在我们的网关上。其他主机就可以给它通讯了。这是地址限制型NAT。
1.4.3 端口受限圆锥型NAT
端口受限圆锥型NAT(Port-Restricted cone NAT):
类似受限制锥形NAT(Restricted cone NAT),但是还有端口限制。
- 一旦一个内部地址(
iAddr:port1
)映射到外部地址(eAddr:port2
),所有发自iAddr:port1
的包都经由eAddr:port2
向外发送。 - 在受限圆锥型NAT基础上增加了外部主机源端口必须是固定的。
更通俗一点讲:
什么是端口受限圆锥型NAT?
端口限制型就是在IP地址的限制基础上又增加了对端口的限制,也就是我发送信息的时候会给主机的某个应用的某个端口发送数据,那么你回来的时候 ,只有这个端口回来的数据才接受,对于同一台主机其他端口发送过来的数据都拒绝接收。更何况 是其他的主机 了,所以它的限制更加严格。
端口限制型就更加严格一些了,不光是对IP地址,还要对端口做限制,那所以在这个防火墙上就形成了六元组,不光有内网的IP地址和端口以及映射后的公网的IP地址和端口,还有你请求的主机的IP地址和端口,那么在在这种情况下P这台主机,它发送消息的时候,如果请求的是P这台主机的这个q这个端口的服务,只有它这个服务才能返来,其他的端口(如:r端口)发送数据就不行了。
那如果内网的主机没有向S这个主机发送请求的话,S主机发送信息到内网的主机是肯定不通的;但是如果内网的主机给M这台主机的n端口已经发送了请求,那么M主机的n端口也是可以打通这个数据防火墙然后与这个内网主机进行通讯的。这就是端口限制锥型NAT。
1.4.4 对称NAT
对称NAT(Symmetric NAT):
- 每一个来自相同内部
IP
与端口,到一个特定目的地地址和端口的请求,都映射到一个独特的外部IP
地址和端口。
同一内部IP
与端口发到不同的目的地和端口的信息包,都使用不同的映射 - 只有曾经收到过内部主机数据的外部主机,才能够把数据包发回
更通俗一点讲:
什么是对称NAT?
当我进行NAT转换的时候,内网的主机出外网的时候形成的映射,并不是形成一个IP地址和端口,它会形成多个,对于访问不同的主机,它会形成不同的IP地址和端口,这就更加严格,想知道IP地址都很困难,比如说你通过这个地址请求A,那么A告诉B通过这个IP地址是可以访问,那B实际上是访问不通的。内网的主机与第三个主机连接的时候,它会新建一个IP地址 和端口,这个就更加复杂,这个对NAT穿越就提出了更高的要求,对于对称型的NAT基本上都是不能穿越的。
对称限制型就更加严格了,以前的类型是在防火墙上形成映射后的公网的IP地址是保持不变的,大家要找还是能找到它的,虽然不 通,但是对于 这个对称型它就不一样了,它就发生了变化,不光是形成了这个一个IP地址和端口,而且还会形成多个,对于每一台主机都会形成一个不同的IP地址和端口对,所以这个 时候当内网主机给Pq发送请求的时候,Pq可以回来信息,其他的都回不来。但是给M主机 n端口发送数据的时候,又形成一个C和d,这个M,n在发数据的时候不会像A,b发送数据,必须向C,d发送数据 才可以过来,这样才能进行互通,这个就是对称型的NAT穿越。这个就是对称型的NAT穿越。
1.5 NAT 的用途
- 负载均衡:目的地址转换NAT可以重定向一些服务器的连接到其他随机选定的服务器。
- 失效终结:目的地址转换NAT可以用来提供高可靠性的服务。如果一个系统有一台通过路由器访问的关键服务器,一旦路由器检测到该服务器宕机,它可以使用目的地址转换NAT透明的把连接转移到一个备份服务器上。
- 透明代理:NAT可以把连接到因特网的HTTP连接重定向到一个指定的HTTP代理服务器以缓存数据和过滤请求。一些因特网服务提供商就使用这种技术来减少带宽的使用而不用让他们的客户配置他们的浏览器支持代理连接。
2. NAT 打洞流程
NAT 穿透方式:
- 应用层网关(ALG):一般都内置在
NAT
装置中,ALG
会随着协议的扩充,不断更新和支持新的协议,但为每个应用协议开发ALG
代码并跟踪最新标准是不可行的,ALG
只能解决用户最常用的需求。此外,出于安全性需要,有些应用类型报文从源端发出就已经加密,这种报文在网络中间无法进行分析,所以ALG
无能为力。
应用层网关(ALG)是解决NAT对应用层协议无感知的一个最常用方法,已经被NAT设备厂商广泛采用,成为NAT设备的一个必需功能。因为NAT不感知应用协议,所以有必要额外为每个应用协议定制协议分析功能,这样NAT网关就能理解并支持特定的协议。
ALG与NAT形成互动关系,在一个NAT网关检测到新的连接请求时,需要判断是否为已知的应用类型,这通常是基于连接的传输层端口信息来识别的。
在识别为已知应用时,再调用相应功能对报文的深层内容进行检查,当发现任何形式表达的IP地址和端口时,将会把这些信息同步转换,并且为这个新连接创建一个附加的转换表项。这样,当报文到达公网侧的目的主机时,应用层协议中携带的信息就是NAT网关提供的地址和端口。一旦公网侧主机开始发送数据或建立连接到此端口,NAT网关就可以根据关联表信息进行转换,再把数据转发到私网侧的主机。
很多应用层协议实现不限于一个初始连接(通常为信令或控制通道)加一个数据连接,可能是一个初始连接对应很多后续的新连接。比较特别的协议,在一次协商中会产生一组相关连接,比如RTP/RTCP协议规定,一个RTP通道建立后占用连续的两个端口,一个服务于数据,另一个服务于控制消息。此时,就需要ALG分配连续的端口为应用服务。
ALG能成功解决大部分协议的NAT穿越需求,但是这个方法也有很大的限制。因为应用协议的数量非常多而且在不断发展变化之中,添加到设备中的ALG功能都是为特定协议的特定规范版本而开发的,协议的创新和演进要求NAT设备制造商必须跟踪这些协议的最近标准,同时兼容旧标准。
尽管有如Linux这种开放平台允许动态加载新的ALG特性,但是管理成本仍然很高,网络维护人员也不能随时了解用户都需要什么应用。因此为每个应用协议开发ALG代码并跟踪最新标准是不可行的,ALG只能解决用户最常用的需求。
此外,出于安全性需要,有些应用类型报文从源端发出就已经加密,这种报文在网络中间无法进行分析,所以ALG无能为力。
- 探针技术——
NAT探测和穿透协议
:NAT
网关无需任何修改,通过协议探测NAT类型,并对不同类型NAT实行穿透,比如STUN/TURN
。当NAT可以直接穿透时,服务器协助完成穿透以及连接的建立,当NAT无法穿透时,TURN服务与STUN绑定,形成“ip-port”对
,将链路中的数据包在TURN
服务器上转发。相对于ALG
方式有一定普遍性。但是TURN中继服务会成为通信瓶颈。而且在客户端中增加探针功能要求每个应用都要增加代码才能支持。
所谓探针技术,是通过在所有参与通信的实体上安装探测插件,以检测网络中是否存在NAT网关,并对不同NAT模型实施不同穿越方法的一种技术。
STUN服务器被部署在公网上,用于接收来自通信实体的探测请求,服务器会记录收到请求的报文地址和端口,并填写到回送的响应报文中。客户端根据接收到的响应消息中记录的地址和端口与本地选择的地址和端口进行比较,就能识别出是否存在NAT网关。如果存在NAT网关,客户端会使用之前的地址和端口向服务器的另外一个IP发起请求,重复前面的探测。然后再比较两次响应返回的结果判断出NAT工作的模式。
由前述的一对多转换模型得知,除对称型NAT以外的模型,NAT网关对内部主机地址端口的映射都是相对固定的,所以比较容易实现NAT穿越。
而对称型NAT为每个连接提供一个映射,使得转换后的公网地址和端口对不可预测。此时TURN可以与STUN绑定提供穿越NAT的服务,即在公网服务器上提供一个“地址端口对”,所有此“地址端口对”接收到的数据会经由探测建立的连接转发到内网主机上。TURN分配的这个映射“地址端口对”会通过STUN响应发给内部主机,后者将此信息放入建立连接的信令中通知通信的对端。
这种探针技术是一种通用方法,不用在NAT设备上为每种应用协议开发功能,相对于ALG方式有一定普遍性。但是TURN中继服务会成为通信瓶颈。而且在客户端中增加探针功能要求每个应用都要增加代码才能支持。
- 中间件技术:开发通用方法解决
NAT
穿越问题的努力。与前者不同之处是,NAT
网关是这一解决方案的参与者。与ALG
的不同在于,客户端会参与