NAT、NAPT(PAT)的基本概念和工作原理及区别
转自:http://blog.sina.com.cn/s/blog_5d302bd20100gprv.html
近年来,随着 Internet 的迅猛发展,连入 Internet 的主机数量成倍增长。由于最初设计 Internet 的时候并没有考虑到需要支持这么大的规模,因而 Internet 使用的 Ipv4 协议中 IP 地址的长度选择了 32 位,它可以使 IP 包的格式很好地对齐;但是,目前 IP 地址的短缺已经成为 Internet 面临的最大问题之一。
为了解决 IP 地址短缺的问题,人们提出了许多解决方案,Internet 能够支持到新一代 IP 协议 Ipv6 的出台。在众多的解决方案中,网络地址转换 NAT(Network Address Translation)技术提供了一种完全将私有网和公共网隔离的方法,从而得到了广泛的应用。图 1 NAT 工作原理示意图 1 NAT 技术
NAT 技术的基本功能就是,用 1 个或几个 IP 地址来实现 1 个私有网中的所有主机和公共网中主机的 IP 通信。NAT 技术可为 TCP、UDP 以及 ICMP 数据包提供透明转发。
1.1 NAT 工作原理
NAT 的基本工作原理是,当私有网主机和公共网主机通信的 IP 包经过 NAT 网关时,将 IP 包中的源 IP 或目的 IP 在私有 IP 和 NAT 的公共 IP 之间进行转换。
如图 1 所示,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)转发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。
1.2 NAPT 技术
由于 NAT 实现是私有 IP 和 NAT 的公共 IP 之间的转换,那么,私有网中同时与公共网进行通信的主机数量就受到 NAT 的公共 IP 地址数量的限制。为了克服这种限制,NAT 被进一步扩展到在进行 IP 地址转换的同时进行 Port 的转换,这就是网络地址端口转换 NAPT(Network Address Port Translation)技术。
NAPT 与 NAT 的区别在于,NAPT 不仅转换 IP 包中的 IP 地址,还对 IP 包中 TCP 和 UDP 的 Port 进行转换。这使得多台私有网主机利用 1 个 NAT 公共 IP 就可以同时和公共网进行通信。
如图 2 所示,私有网主机 192.168.1.2 要访问公共网中的 Http 服务器 166.111.80.200。首先,要建立 TCP 连接,假设分配的 TCP Port 是 1010,发送了 1 个 IP 包(Des = 166.111.80.200:80, Src = 192.168.1.2:1010), 当 IP 包经过 NAT 网关时,NAT 会将 IP 包的源 IP 转换为 NAT 的公共 IP,同时将源 Port 转换为 NAT 动态分配的 1 个Port。然后,转发到公共网,此时 IP 包(Des = 166.111.80.200:80,Src = 202.204.65.2:2010)已经不含任何私有网 IP 和 Port 的信息。由于 IP包的源 IP 和 Port 已经被转换成 NAT 的公共 IP 和 Port,响应的 IP 包(Des = 202.204.65.2:, Src = 2010166.111.80.200:80)将被发送到 NAT。这时 NAT 会将 IP 包的目的 IP 转换成私有网主机的 IP,同时将目的 Port 转换为私有网主机的 Port,然后将 IP 包(Des = 192.168.1.2:1010,Src = 166.111.80.200:80)转发到私网。对于通信双方而言,这种 IP 地址和 Port 的转换是完全透明的。