一:为什么需要NAT
由于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)转 发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。
二、NAT类型
(一)Full-cone NAT:
一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将通过 eAddr:ePort 发送。
任何外部主机能够通过eAdder:ePort这个地址发送数据包到iAddr:iPort
(二)Address-restricted-cone NAT:
一旦一个内网地址(iAdder:iPort)被映射到一个外部地址(eAddr:ePort),来自iAddr:iPort的任何数据包将通过eAddr:ePort发送。
仅只有接收到主机(iAddr:iPort)通过eAddr:ePort发送的数据包的外部主机通过该主机的任何端口发送到eAddr:ePort的数据包才能够被正确的转发到iAddr:iPort.也就是说主机有关端口无关。
(三)Port-restricted cone NAT
类似于address restricted cone NAT, 但是端口号有限制.
一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将通过 eAddr:ePort 发送.
仅只有接收到主机(iAddr:iPort)通过eAddr:ePort发送的数据包的外部主机通过该主机的相同端口发送到eAddr:ePort的数据包才能够被正确的转发到iAddr:iPort.
(四)Symmetric NAT
来自相同内部ip和port发送到相同目的地ip和port的请求被映射到唯一的外部ip和port地址;如果相同的内部主机采用相同的ip和port地址发送到不同的目的地,那么重新分配映射地址。
只有先前收到内部主机发送包的外部主机才能够发送返回包到内部主机。
针对前面三种NAT类型,只要通信双方彼此知道对方的内部地址和外部地址的映射关系,然后通过UDP打洞的方式就可以建立相互连接的通信;但是第四种也就是Symmetric NAT的话由于每次向不同目的地发送数据包时采用不同的外部地址,也就没办法通过直接的方式建立P2P连接。
三:为什么要做NAT穿透
我们知道在日常的互联网交互中,所有的信息流必须要通过NAT,经过服务器,而这对服务器的压力可想而知。
这时就有人提出,我们能不能不从服务器经过,直接对两个端口进行连接。这样不仅能减轻服务器压力,也可以节省大量的流量。这时发现,之前帮助端口实现“沟通”的NAT现在成了直接连接的阻力。NAT穿透是实现P2P所需的基础。
四:如何做NAT穿透
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允许客服端发现他们所在网络的拓扑结构的信息,然后找出一个或更多可以建立通信连接的路径。
网友评论