NAT和NAPT引入原因
IPV4是一个32位的地址,最大容纳为 2 32,就这还包括了广播地址、网络地址等主机不可用的IP地址。也就是40多亿。现在全球电子设备的IP地址已经远远超过了40亿。所以IP地址不是不够用了吗?为什么现在的网络还好好的呢?
这都多亏了NAPT技术。
NAPT
在将NAPT之前,我们先讲下NAT。
我们都知道之前的一个路由器端口对应着一个网络。一个路由器端口连着多个主机,每个主机都和路由器端口处于同一网络,每个主机的IP地址都不一样,并且是全球唯一的。这样的话,IPV4地址肯定是不够用的。
假设一个网络有30个IP地址,如果按照传统的方式,那么最多只能支持30个主机。
而NAPT可以支持30个数量级的主机,是怎么做到的呢?
NAPT 将IP地址分为了私有地址和公网地址。
公网地址: 一个公有地址在全球都是唯一的。 公网地址由IANA 统一管理。如果使用需要申请。
一个路由器端口中有一个公用地址池,里面存放了多个公用地址。对于本例子,也就是30个公用地址。
私有地址: 一个私有地址可以在不同的网络中随便用。
不同公有网络中的私有地址是可以重复的。
对了,私有地址是可以分配给主机的。这样的话,一个私有地址可以被分配给多个主机。
那么其他主机给这些IP地址重复的主机发送数据的时候,要发给哪个主机呢?这不就乱套了吗?
NAPT的全称是 Network Address Port Translation,也就是网址端口转换。
NAPT的高明之处将 多个私有地址共享一个公网地址。
那么对于同一个公网地址怎么区分不同的私有地址呢?
通过端口号,不同的私有地址对应着同一个公网地址的不同端口号。
因为公有地址的端口号很多,可以同时容纳多个私有地址的映射。一个主机往往占用少量的端口。
路由器会将对应的映射关系存起来
NAPT传输数据流程
1、 比如主机A,发送的时候源IP地址为私有地址 192.168.1.10,源端口号为1025。
2、 当经过路由器转发的时候,会根据NAT转换表中的记录替换为对应的公网地址和端口。如果没有对应记录的话,就找到一个可用公网 120.229.175.121和对应的端口号1025,将其分别替换为源IP地址和源端口号。
3、 被替换过的数据包被发送到对应的服务器,然后服务器返回对应的数据包,数据包的目标地址为120.229.175.121,端口号为1025.经过路由转发,数据包回到了NAT路由器。
4、 回到NAT路由器后,路由器由于开启了NAT,所以会将数据包替换为私有地址192.168.1.10和其端口号1025。 然后查询私有地址对应的MAC地址,转发给对应的主机。
NAT
NAT和NAPT的本质是一样的,只不过NAT是一个私有地址对应一个公有地址,达不到节省IP地址的效果,只能起到隐匿内部IP地址的效果。
NAT ALG
ALG 是APPLICATION的简写,也就是应用层的意思。
NAT ALG主要解决了应用层数据中包括IP地址的问题。
比如FTP协议,FTP协议有两个连接,一个control连接用于控制,一个data连接用于传输实际数据。
FTP客户端首先会发起control连接,control数据包中带有data数据连接的IP地址ip1和端口号port1,FTP服务器会将数据发送到IP地址为ip1,端口号为port1的主机上。
这个ip1和port1都是对应的私有地址啊,并且还未通过NAT建立映射啊。FTP服务区无法将数据发送到对应的窗口中啊。
所以引入了NAT ALG机制,NAT ALG会检查数据包,如果是FTP之类的,数据包中带有私有IP地址信息,会将私有IP地址替换为对应的公网IP地址和对应的端口。
NAT穿透
上面的NAT有些问题,公网中的主机无法先发送数据给NAT内部的主机。
因为此时NAT内部的主机还未进行NAT转换。
NAT穿透就是用来解决这一问题的。
NAT穿透需要先引进一个中间服务器。
假如现在主机A和主机B想要通信。
**1、**主机A和主机B会首先将自己映射的公网IP地址和想要通信的主机地址发送给中间服务器。
2、 然后中间服务器将A对应的公网IP地址和A对应的私有IP地址发送给主机B。对主机A同样。
3、 经过中间服务器的这么一插手,主机A和主机B就交换了公网IP地址,就可以进行通信了。
总结
当网络中IP地址不能满足主机需求的时候,可以尝试用NAPT技术来解决这一问题。