产生背景
目前IP地址格式: *.*.*.* (*的取值为0~255),32位,那么该格式所能表示的IP地址的最大数量是多少呐? ——255*255*255*255,约为40亿个。
对比一下世界人口数量:据统计,2016年世界人口总数约为73亿,我大中国人口总数为14亿。
如果每台上网的机器分配一个全球唯一的IP的话,显然,IP数量可能不够了。
So,IP地址短缺问题并不是一个只有在将来某个时候才可能发生的理论问题。现在,此时此地,这个问题就来了。
对于整个Internet 而言,根本的解决方案是迁移到IPv6,它有128位地址。这个迁移过程正在进行,但是进展非常缓慢,可能需要很多年才能完成。因此,诞生了我们的短时期内有效的快速修补方案——NAT( Network Address Translation,网络地址转换)。
基本思想
为每个公司分配一个IP地址(公有IP),用来传输Internet流量。
在公司内部,每台计算机有唯一的IP地址(私有IP),用来传输内部流量。
然而,当一个分组离开公司的网络(内网),由于私有IP地址是无法直接访问公网资源的,所以该分组需要通过NAT来执行一个地址转换,把内网地址(私有地址)转换成合法的公网IP地址,以便内网地址访问公网。
这样,内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。
工作过程
1)当内网主机需要与Internet建立连接时,首先将请求发送到NAT服务器。
2)NAT服务器接收到请求后,根据接收到的数据包,检查NAT映射表。如果还没有为该内网主机建立地址转换映射项,则NAT服务器会创建一个会话,并给该会话分配一个端口(该端口是一个索引值,该索引值指向NAT地址转换表中的一个表项,该表项包含了该内网主机的IP地址和端口号)。之后将该内网主机发送的IP包的源地址及端口改为企业公网IP地址及刚刚分配的端口,发送数据包到Internet主机上。
3)Internet主机接收到信息后,将应答信息返回给NAT服务器。
4)当NAT服务器接收到应答信息后,从TCP头中提取出源端口,用它作为索引值,从NAT映射表中找到对应的表项。如果NAT表存在匹配的映射项,则将目标地址及端口转换为对应的内网IP及端口,将数据包转发给内网主机。如果不存在匹配映射项,就将数据包丢弃。
举例
例如,内网主机PC1(IP地址为192.168.50.51/24),需要使用端口4321访问公网上的web服务器209.131.136.158(端口为80)。如图1所示,访问过程如下:
①. 内网主机PC1将请求数据包传送给NAT服务器,数据包如下:
源IP 192.168.50.51
源端口 4321
目标IP 209.131.136.158
目标端口 80
②. NAT服务器收到数据包后,将数据源地址改为NAT服务器的公网IP地址,并将端口改为一个未使用的端口号,比如3698,数据包如下:
源IP 61.152.194.122
源端口 3698
目标IP 209.131.136.158
目标端口 80
同时,NAT服务器建立一个NAT表,记录数据包包头信息的变更情况,如下表:
源IP 192.168.50.51
源端口 4321
目标IP 61.152.194.122
目标端口 3698
③. Web服务器收到数据包后,根据源IP和端口将返回内容传送给NAT服务器,数据包如下:
源IP 209.131.136.158
源端口 80
目标IP 61.152.194.122
目标端口 3698
④. NAT服务器接收到web服务器发过来的数据包后,根据之前建立的NAT表,变更IP数据包信息,如下表:
源IP 61.152.194.122
源端口 3698
目标IP 192.168.50.51
目标端口 4321
经过上述步骤,内网主机与外部服务器间数据交互完成。