目录
前言
一、IP 地址不够使用的解决措施
二、NAT 机制的工作流程
三、NAT 的不足之处
由于 IP 地址只有四个字节,所能表示的数据量只有 42 亿 9 千万,也就是世界上最多可以存在这个数量的 IP 地址,这对于全世界来说,根本不够使用,现如今可以进行网络通信的设备也早已超过这个数字。那么,为何这看起来就明显不够的 IP 地址数量,现如今却能够让全世界都依旧正常上网?这其中便涉及到 NAT 机制所起到的作用。
在 IP 地址刚被发明出来的时候,发明者们也未曾想到互联网的发展速度如此之快,因此导致了只设计为占据 32 位的 IP 地址早早就陷入了不够使用的困境中,伟大的程序猿们也想出了以下几种对策:
1)动态分配 IP 地址
例如:当我们正在上网的时候,美国时间可能正在半夜,因此他们那边的大部分设备在同一时间都不需要上网,也就不需要使用到 IP 地址,此时也就不需要给他们分配 IP 地址。
通俗点来讲就是:世界上的所有设备,其实都不会一直需要上网,我们就只需在设备需要上网的时候分配给它们 IP 地址即可,这便可以缓解 IP 地址不够用的问题。
但是这也只是起到很小的缓解的效果,并不能根治。
2)IPv6
我们现在使用到的 IP 地址大多都是 IPv4,这种 IP 地址只占据 4 个字节。而如果使用 IPv6,就可以彻底根治 IP 地址不够使用的问题。因为 IPv6 是 16 个字节,其能表示的 IP 地址数量足以给地球上的每一粒沙子都分配一个 IP 地址。
但是 IPv6 的并没有得到大力推广使用,这便涉及到一个开销的问题:
由于 IPv4 和 IPv6 不兼容,这就导致了如果想要全面使用 IPv6 ,就需要都更换路由器设备,才能做到正常的网络通信,这笔开销不容小觑。且更换使用 IPv6 并不会带来诸如上网速度更快、上网开销更小等较于 IPv4 更好的优点,实际上这两种 IP 地址使用起来并没有太大的区别,这便使得大力推广变得举步维艰。
3)NAT 机制
相较于前两种,NAT 机制真正地做到了一统天下,真正的全面使用且对于 IP 地址数量不足的问题解决起到了很大的作用。
NAT 翻译为:网络地址转换。不夸张地说,现在的互联网世界就是使用 NAT 机制进行搭建的。这也是我们了解网络结构的重点和关键要点。
NAT 机制下,将 IP 地址分为了两类:内网 IP 和 外网 IP 。
在同一个局域网内的设备,内网 IP 不可重复,但是处于不同局域网的设备,内网 IP 就可以相同。只要带有以下特征的 IP 地址就是一个内网 IP:
1)10.*
2)172.16.* -- 172.31.*
3)192.168.*
内网 IP 只需保证在自己当前所处的局域网内不重复即可,这便大大缓解了 IP 地址的数量问题。
而外网 IP 则是全网不可重复。
区分了内网和外网 IP,对于网络通信会产生什么影响呢?
1)同一局域网内的设备进行通信,则毫无问题,正常通信;
2)处于不同局域网的设备进行直接通信,则被禁止。因为很有可能这两个设备的 IP 地址相同,这是不被允许通信的。因此就需要先访问一个带有外网 IP 的设备来进行中转;
3)局域网内部的设备访问带有外网 IP 的设备。
我们日常使用的电脑和手机等设备,一般都是只带有一个内网 IP,而服务器类设备,就还会带有外网 IP。因而就会涉及到 NAT 的工作流程。
例如:假设我现在想要访问 QQ 服务器,且我现在所处的是一个电信网的环境下:
此处电信的服务器,由于是一个运营商提供的服务器设备,需要其带有外网 IP
当我向 QQ 服务器发送一个请求时,此时的 IP 数据报大致如下所示:
而当该请求经过电信的服务器的时候,就会触发 NAT 机制,将源 IP 替换成它的外网 IP:
此时的效果就相当于电信服务器代替我们发送这条请求给 QQ 服务器。当该请求到达 QQ 服务器的时候,QQ 服务器也无法得知该请求具体是来自哪个,只知道是来自于 10.20.30.40 这个 IP 地址。由此可知,电信服务器的外网 IP 就代表了许许多多个经过它的设备,而不是一个 IP 地址代表一个设备。
而当 QQ 服务器返回响应的时候,又是如何将响应准确返回给一开始的发送方的?
在电信服务器的内部,会维护着一个映射表,上面会记录着 IP 地址替换前后的样子,当响应返回经过电信服务器的时候,就会响应中的源 IP 转化为替换之前的样子,这样就可以准确返回了。
一个 IP 数据报中,除了记录着源 IP 和目的 IP 之外,还记录着源端口和目的端口,因此上述例子中的响应格式大致如下:
而电信服务器中的映射表的部分信息大致如下:
可以看到其中就记录了替换前的 IP 地址和端口号,我们就可以根据替换后的 IP 地址和端口号找到对应的替换前的信息。此时由于我的电脑和电信服务器之间的通信就属于同一局域网内的通信,因此就保证了响应准确返回到我的电脑。
虽然 NAT 机制之下,可以帮助我们大大缓解 IP 地址数量不够用的问题,但是它也存在着许多不足之处:
1)由于发送请求和接收响应都需要 IP 地址进行转化的过程,因此效率不高;
2)实际网络中的转发过程比上述图示要更加复杂,可能是经过宿舍路由器就要会触发一次 NAT 机制,进行 IP 地址的替换,经过电信的光猫时,又进行一次替换……这样一整个流程就会非常繁琐;
3)不方便与局域网外的设备直接进行通信
……
但是由于 NAT 是纯靠软件实现的方案,只需要路由器开发商开发出新版本的软件就行,成本相较于 IPv6 就显得很低。因而 NAT 机制才能被全面推广使用。