在IPv6出现之前,随着 Internet 的发展和网络应用的增多,有限的IPv 4公有地址已经成为制约网络发展的瓶颈。为解决这个问题,提出了NAT(Network Address Translation,网络地址转换)技术。
它主要用于实现内部网络的主机访问外部网络。一方面NAT缓解了IPV4地址短缺的问题,另一方面NAT技术让外网无法直接与使用私有地址的内网进行通信,提升了内网的安全性。
NAT的技术原理是:在私有网络内部(公司、家庭等LAN环境下)使用私有地址,在私有网络的出口设备(如路由器)上通过 NAT 将数据包的源地址进行转换,转换成特定的公有地址。而对于从外到内的流量,则对数据包的目的地址进行转换。如图:
出口路由器的内部网关是192.168.1.254,所有经过它出到外网的数据包的源地址会被改为路由器的出口网关122.1.2.1。而所有从出口网关进入的数据包的目的地址则会被NAT设备改为对应的私有主机地址。
如果使用了私有地址的私有网络需要访问 Internet ,必须在网络出口设备配置 NAT ,将访问Internet 的 IP 数据报文中的私有网络源地址转换成公有网络源地址。
NAT又可以分为:静态NAT、动态 NAT。
静态NAT(Static NAT)是指每个私有地址都有一个与之对应并且固定的公有地址,即私有地址和公有地址之间的关系是一对一映射 。
于是它的工作过程就是:
私有地址访问Internet经过出口设备 NAT 转换时会被转换成对应的公有地址。 同时外部网络访问内部网络时其报文中携带的公有地址目的地址也会被 NAT 设备转换成对应的私有地址。私有地址与公有地址之间的映射关系由NAT表记录。
这种NAT方式多用于服务器,此时服务器上一般存在很多个公有地址。
静态 NAT 严格地一对一进行地址映射,这就导致即便内网主机长时间离线或者不发送数据时 与之对应的公有地址也处于使用状态。
动态NAT(Dynamic NAT)将所有可用的公有地址组成地址池,采用动态分配的方法映射到内部网络。当内部主机访问外部网络时临时分配一个地址池中未使用的地址并将该地址标记为 In Use
。 当该主机不再访问外部网络时回收分配的地址重新标记为 Not Use
。
如图,当私有主机发送数据到Internet上时,会选择NAT地址池中一个没在使用的地址,并将其变成In Use
写到NAT映射表中。
但是考虑这种情况:当私有主机发送数据到Internet上一段时间不发送数据时,NAT地址池会回收这个地址。此时外部主机再向这个地址发送数据的时候,NAT表无法匹配,则数据包会被丢弃。
无论是静态还是动态NAT,它们的公有地址与私有地址还是1:1的映射关系,这样会导致使用的公有地址数量还是太多。
NAPT(Network Address and Port Translation,网络地址端口转换):从地址池中选择地址进行地址转换时不仅转换IP地址,同时也会对端口号进行转换,从而实现公有地址与私有地址的1:n映射,可以有效提高公有地址利用率。
NAPT借助端口可以实现一个公有地址同时对应多个私有地址。该模式同时对IP地址和传输层端口进行转换,实现不同私有地址(不同的私有地址,不同的源端口)映射到同一个公有地址(相同的公有地址,不同的源端口)。
有了端口号的加入,能够真正意义上的缓解了IPV4地址短缺的问题。
Easy-IP是NAPT的一种特例,不同的是Easy IP可以实现自动根据路由器上WAN接口的公网IP地址实现与私网IP 地址之间的映射,无需创建公网地址池。
适用于不具备固定公网 IP 地址的场景:如通过地址的场景:如通过DHCP、PPPoE拨号获取地址的私有网络出口 可以直接使用获取到的动态地址进行转换 。
NAT-Server是服务器端上的一种NAT实现方法。当外网用户访问内网服务器时,NAT Server通过事先配置好的“公网IP地址+端口号”与“私网IP地址+端口号”间的映射关系,将服务器的“公网IP 地址+端口号”,根据映射关系替换成对应的“私网IP地址+端口号”。
在私有网络内使用私有地址,并在网络出口使用NAT技术,可以有效减少网络所需的IPv4公有地址数目,NAT技术有效地缓解了IPv4公有地址短缺的问题。
动态NAT、NAPT、Easy IP为私网主机访问公网提供源地址转换,NAT Server实现了内网主机对公网提供服务,静态NAT提供了一对一映射,支持双向互访。