NAT网络地址转换
一、为什么需要NAT(网络地址转换)
首先需要了解IPV4的地址,IPV4的地址空间是0.0.0.0-255.255.255.255,IPV4包含232IP地址,也就是4294967296,42亿9万千多个IP地址,随着全球网名的增加和网络设备的增加,IPV4地址已经不够用了。因此计算机科学家们必须想出一些办法来,解决这个问题。在这个故事背景下,NAT就产生了,DHCP(动态地址转换)、IPV6也是为了解决这个问题产生的!
顺带提一下IPV6(Version = 0110),IPV6在根本上大大增加了IP的数量,IPV4(Version=0100)的长度是32位,而IPV6的长度是128位,也就是说增加了2128个IP地址,这个数用计算器算一下也就是下图所示那么多:
二、私有空间地址
在学习NAT之前先了解私有地址空间的概念
私有空间地址也就是我们内网(私有空间)中的IP地址,我们拿私有空间地址是不能在互联网上冲浪的,私有空间地址只是在私有空间内可以唯一标识一台机器,内网中机器必须使用网关(路由器)的IP地址才能网上冲浪。
现在有一个问题,内网中的机器如何使用网关的公网IP去上网呢?这就需要NAT技术来支持了。
三、NAT的三种类型
1.静态NAT
将内部本地地址(内网地址)与全局地址(公网地址)进行一对一的明确对应,内网地址和公网地址通过一个映射表来一一对应,它的缺点是如果一个公网地址已经被一个内网地址映射了,即使内网没有使用它去上网,它也不能被提供给其他内网地址上网,也就是说一个公网地址一直都被一个内网地址独占。
顺便提一下上文中所说的术语:
内部本地地址指的就是192.168.1.1,它是请求端的机器的内网IP地址
内部全局地址的是202.101.100.1,它是被访问端的机器的内网IP地址
外部本地地址是请求端的公网IP地址
外部全局地址是56.101.200.1,他是被访问端的外网地址
全局和本地指的就是被访问端和访问端
外部和内部指的就是内网和外网
2.动态NAT
实现动态NAT的前提是先从运营商那里买一个公网IP池,然后再路由器上定义这个池,如20.128.61.0~20.128.61.9,这个IP池中包含了10个公网IP,动态NAT实际上和静态NAT一样,内网地址和外网地址一一对应,尽管内网中可能有20台机器(192.168.1.1~192.168.1.20),但实际上同一时刻只有10台机器能通过与公网IP池进行动态地址转换来上网(数据传输),也就是说假如现在已经有10台机器在上网(数据传输)了,那么第11台需要上网(数据传输)的机器必须等前面10台机器中有人下线了以后(数据传输完,空闲的公网IP又被路由器放进公网IP池中),才能用它空闲出来的公网IP上网。这个我自己的语言描述可能会产生误解,那么来看一段比较专业的文字:
动态地址转换也是内部本地地址与内部全局地址进行一对一的转换,但是是从内部全局地址池中动态地选择一个未使用的地址对内部地址进行转换,该地址是由未被使用的地址组成的地址池中在定义时排在最前面的一个。当数据传输完毕以后,路由器将使用完的内部全局地址放回地址池中,以供其他内部本地地址进行转换。但是在该地址被使用时,不能用改地址再进行一次转换。
3.端口复用(应用最广泛)
端口地址转换(Port Address Translation),是一种动态地址转换,它真正地缓解了IPV4枯竭的问题。通过这个转换,可以使用多个内网地址和一个外网地址进行转换,也就是说,20台机器不用配20个公网地址,也不用路由器定义一个公网IP池了,只需要一个公网IP打开多个端口就行了,理想情况下,一个单一的IP地址,可以使用的端口数是4000个。
举例来说,我们在打开百度输入关键字搜索时,访问的是百度服务器的80端口,而不是整个服务器。