因为IP地址随着互联网的发展而逐渐稀缺,难以使得每台主机都拥有一个公网上的IP地址,且并非全部主机都须要一个公网上的地址,因而就有了NAT技术。服务器
NAT(The IP Network Address Translator)网络地址转换,其基本工做原理是:当私有网主机与公共网逐渐通讯的IP通过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。网络
假设NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共IP,为202.204.65.2;私有网络端口的IP地址是保留地址,为192.168.1.1。私有网中的主机 192.168.1.2向公共网中的主机166.111.80.200发送了1个IP包(Des=166.111.80.200,Src=192.168.1.2)。测试
当IP包通过NAT网关时,NAT会将IP包的源IP转换为NAT的公共 IP并转发到公共网,此时IP包(Des=166.111.80.200,Src=202.204.65.2)中已经不含任何私有网IP的信息。因为IP 包的源IP已经被转换成NAT的公共IP,响应的IP包(Des=202.204.65.2,Src=166.111.80.200)将被发送到NAT。 这时,NAT会将IP包的目的IP转换成私有网中主机的IP,而后将IP包(Des=192.168.1.2,Src=166.111.80.200)转 发到私有网。对于通讯双方而言,这种地址的转换过程是彻底透明的。flex
一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将经过 eAddr:ePort 发送。spa
任何外部主机可以经过eAdder:ePort这个地址发送数据包到iAddr:iPortrest
一旦一个内网地址(iAdder:iPort)被映射到一个外部地址(eAddr:ePort),来自iAddr:iPort的任何数据包将经过eAddr:ePort发送。server
仅只有接收到主机(iAddr:iPort)经过eAddr:ePort发送的数据包的外部主机经过该主机的任何端口发送到eAddr:ePort的数据包才可以被正确的转发到iAddr:iPort.也就是说主机有关端口无关blog
相似于address restricted cone NAT, 可是端口号有限制.图片
一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将经过 eAddr:ePort 发送.ip
仅只有接收到主机(iAddr:iPort)经过eAddr:ePort发送的数据包的外部主机经过该主机的相同端口发送到eAddr:ePort的数据包才可以被正确的转发到iAddr:iPort.
来自相同内部ip和port发送到相同目的地ip和port的请求被映射到惟一的外部ip和port地址;若是相同的内部主机采用相同的ip和port地址发送到不一样的目的地,那么从新分配映射地址。
只有先前收到内部主机发送包的外部主机才可以发送返回包到内部主机。
针对前面三种NAT类型,只要通讯双方彼此知道对方的内部地址和外部地址的映射关系,而后经过UDP打洞的方式就能够创建相互链接的通讯;可是第四种也就是Symmetric NAT的话因为每次向不一样目的地发送数据包时采用不一样的外部地址,也就没办法经过直接的方式创建P2P链接。
咱们知道在平常的互联网交互中,全部的信息流必需要经过NAT,通过服务器,而这对服务器的压力可想而知。
这时就有人提出,咱们能不能不从服务器通过,直接对两个端口进行链接。这样不只能减轻服务器压力,也能够节省大量的流量。这时发现,以前帮助端口实现“沟通”的NAT如今成了直接链接的阻力。NAT穿透是实现P2P所需的基础。
NAT穿透目前主要有:ALG、MII3COM、STUN、TURN、ICE和Full Proxy等6种方式,这里主要介绍一下ICE方式:
ICE是一种NAT穿透技术,经过offer/answer模型创建基于UDP的媒介流。ICE是offer/answer模型的扩展,经过在offer和answer的SDP里面包含的IP地址和端口,而后对本地SDP和远程SDP里面的IP地址进行配对,而后经过P2P连通性检查进行连通性测试工做,若是测试经过即代表该传输地址对能够创建链接。其中IP地址和端口有如下几种:本机地址、经过STUN服务器反射后获取的server-reflexive地址(内网地址被NAT映射后的地址)、relayed地址(和TURN转发服务器相对应的地址)及Peer reflexive地址等。
在一般的ICE部署环境中,咱们有两个端想要创建通讯链接,他们能够直接经过signaling服务器(如SIP服务器)执行offer/answer过程来交换SDP消息。
在ICE过程开始的时候,客服端会忽略他们各自的网络拓扑结构,不论是不是在NAT或多个NAT后面,ICE容许客服端发现他们所在网络的拓扑结构的信息,而后找出一个或更多能够创建通讯链接的路径。