ICE,全名叫交互式连接建立(Interactive Connectivity Establishment),一种综合性的NAT穿越技术,它是一种框架,可以整合各种NAT穿越技术如STUN、TURN(Traversal Using Relay NAT 中继NAT实现的穿透)。ICE会先使用STUN,尝试建立一个基于UDP的连接,如果失败了,就会去TCP(先尝试HTTP,然后尝试HTTPS),如果依旧失败ICE就会使用一个中继的TURN服务器。
在实际用途中,ICE会试着找最好的路径来让客户端建立连接,他会尝试所有可能的选项,然后选择最合适的方案,ICE首先尝试P2P连接,如果失败就会通过Turn服务器进行转接.
换一个说法就是:
1,STUN服务器是用来取外网地址的.
2,TURN服务器是在P2P失败时进行转发的.
每个TURN服务器都支持STUN,ICE处理复杂的NAT设置,同时NAT打洞要求不止一个公网IP和端口.
NAT的实现方式有4种,分别如下:
1. Full Cone NAT
完全锥形NAT,所有从同一个内网IP和端口号发送过来的请求都会被映射成同一个外网IP和端口号,并且任何一个外网主机都可以通过这个映射的外网IP和端口号向这台内网主机发送包。
2.Restricted Cone NAT
限制锥形NAT,它也是所有从同一个内网IP和端口号发送过来的请求都会被映射成同一个外网IP和端口号。与完全锥形不同的是,外网主机只能够向先前已经向它发送过数据包的内网主机发送包。
3. Port Restricted Cone NAT
端口限制锥形NAT,与限制锥形NAT很相似,只不过它包括端口号。也就是说,一台IP地址X和端口P的外网主机想给内网主机发送包,必须是这台内网主机先前已经给这个IP地址X和端口P发送过数据包。
4.Symmetric NAT
对称NAT,所有从同一个内网IP和端口号发送到一个特定的目的IP和端口号的请求,都会被映射到同一个IP和端口号。如果同一台主机使用相同的源地址和端口号发送包,但是发往不同的目的地,NAT将会使用不同的映射。此外,只有收到数据的外网主机才可以反过来向内网主机发送包。
STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信。
如果NAT是受限圆锥型或端口受限圆锥型,双方必须一起开始传输。
SIP之类的协议是使用UDP分组在Internet上传输音频和/或视频数据的。这也就是STUN发挥作用的地方。
服务器就会向STUN客户端报告NAT路由的公网IP地址以及NAT为允许传入流量传回内网而开通的端口。
四种主要类型中有三种是可 以使用的:完全圆锥型NAT、受限圆锥型NAT和端口受限圆锥型NAT——但大型公司网络中经常采用的对称型NAT(又称为双向NAT)则不能使用。
简单来说STUN就是用来找出自己对应的外网的ip和端口,并且可以知道自己所处的网络NAT
TURN又称SPAN(Simple Protocol for Augmenting NATs)方式
TURN可以看作时STUN的扩张,TURN与STUN的共同点都是通过修改应用层中的私网地址达到NAT穿透的效用,异同点是TUN采用了两方通讯的“中间人”方式实现穿透,突破了原先STUN协议无法在两台主机不能够点对点直接连接下提供作用的限制。
简单来说就是TURN服务器实现理一个中间人的功能,让两者间的传输数据通过它进行一次转发,达到穿网的目的。
四.SNAT和DNAT
nat主要有snat和dnat两张
SNAT:源的地址转化 用于内部共享ip访问外部,局域网内用户上网,内部主动发起连接
DNAT:目的地址转化 用于外部访问内网服务器,外部主动发起连接