1 概述浏览器
1.1 简介缓存
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,容许一个总体机构以一个公用IP(Internet Protocol)地址出如今Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。所以咱们能够认为,NAT在必定程度上,可以有效的解决公网地址不足的问题。安全
1.2 分类服务器
NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。网络
其中,网络地址端口转换NAPT(Network Address Port Translation)则是把内部地址映射到外部网络的一个IP地址的不一样端口上。它能够将中小型的网络隐藏在一个合法的IP地址后面。NAPT与 动态地址NAT不一样,它将内部链接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。网站
NAPT是使用最广泛的一种转换方式,在HomeGW中也主要使用该方式。它又包含两种转换方式:SNAT和DNAT。spa
(1)源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络以前完成,数据包假装就是一具SNAT的例子。翻译
(2)目的NAT(Destination NAT,DNAT):修改数据包的目的地址。Destination NAT恰好与SNAT相反,它是改变第一个数据懈的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。代理
咱们在没有理解NAT原理前固然理解不了上面所说的功能,咱们先看下NAT的原理。路由
2 原理
2.1 地址转换
NAT的基本工做原理是,当私有网主机和公共网主机通讯的IP包通过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。
以下图所示,NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共 IP,为202.20.65.5;私有网络端口的IP地址是保留地址,为192.168.1.1。私有网中的主机192.168.1.2向公共网中的主机202.20.65.4发送了1个IP包(Dst=202.20.65.4,Src=192.168.1.2)。
当IP包通过NAT网关时,NAT Gateway会将IP包的源IP转换为NAT Gateway的公共IP并转发到公共网,此时IP包(Dst=202.20.65.4,Src=202.20.65.5)中已经不含任何私有网IP的信息。因为IP包的源IP已经被转换成NAT Gateway的公共IP,Web Server发出的响应IP包(Dst= 202.20.65.5,Src=202.20.65.4)将被发送到NAT Gateway。
这时,NAT Gateway会将IP包的目的IP转换成私有网中主机的IP,而后将IP包(Des=192.168.1.2,Src=202.20.65.4)转发到私有网。对于通讯双方而言,这种地址的转换过程是彻底透明的。转换示意图以下。
若是内网主机发出的请求包未通过NAT,那么当Web Server收到请求包,回复的响应包中的目的地址就是私网IP地址,在Internet上没法正确送达,致使链接失败。
2.2 链接跟踪
在上述过程当中,NAT Gateway在收到响应包后,就须要判断将数据包转发给谁。此时若是子网内仅有少许客户机,能够用静态NAT手工指定;但若是内网有多台客户机,而且各自访问不一样网站,这时候就须要链接跟踪(connection track)。以下图所示:
在NAT Gateway收到客户机发来的请求包后,作源地址转换,而且将该链接记录保存下来,当NAT Gateway收到服务器来的响应包后,查找Track Table,肯定转发目标,作目的地址转换,转发给客户机。
2.3 端口转换
以上述客户机访问服务器为例,当仅有一台客户机访问服务器时,NAT Gateway只须更改数据包的源IP或目的IP便可正常通信。可是若是Client A和Client B同时访问Web Server,那么当NAT Gateway收到响应包的时候,就没法判断将数据包转发给哪台客户机,以下图所示。
此时,NAT Gateway会在Connection Track中加入端口信息加以区分。若是两客户机访问同一服务器的源端口不一样,那么在Track Table里加入端口信息便可区分,若是源端口正好相同,那么在执行SNAT和DNAT的同时对源端口也要作相应的转换,以下图所示。(这里的理解灰常重要)
如今就能够理解NAT协议的应用了吧。
3.NAT协议的应用
NAT主要能够实现如下几个功能:数据包假装、平衡负载、端口转发和透明代理。
数据假装: 能够将内网数据包中的地址信息更改为统一的对外地址信息,不让内网主机直接暴露在因特网上,保证内网主机的安全。同时,该功能也经常使用来实现共享上网。
端口转发: 当内网主机对外提供服务时,因为使用的是内部私有IP地址,外网没法直接访问。所以,须要在网关上进行端口转发,将特定服务的数据包转发给内网主机。
负载平衡: 目的地址转换NAT能够重定向一些服务器的链接到其余随机选定的服务器。(不是很明白)
失效终结: 目的地址转换NAT能够用来提供高可靠性的服务。若是一个系统有一台经过路由器访问的关键服务器,一旦路由器检测到该服务器当机,它可使用目的地址转换NAT透明的把链接转移到一个备份服务器上。(如何转移的?)
透明代理: NAT能够把链接到因特网的HTTP链接重定向到一个指定的HTTP代理服务器以缓存数据和过滤请求。一些因特网服务提供商就使用这种技术来减小带宽的使用而不用让他们的客户配置他们的浏览器支持代理链接。(如何重定向的?)