原作者: 王玲芳
TCP/IP协议自80年代投入使用以来,经历了ARPANET、NSFNET、商业运营和全球化推广使用等四个阶段,现在IPv4面临被淘汰出局的尴尬处境,本篇文章试图从以下几个方面叙述一个造成今天这种情况的原因。让我们首先分析一下IPv4报头结构,从报头结构我们看到,表示数据包的源和目的的是源地址和目的地址,长度都是32位(以二进制表示的数字长度)。如果地址按平面结构进行分配且做到全球唯一性,即能够表示232个地址,换算成十进制数为4,294,967,296个地址,大约43亿。有一种对IPV4的指责便来源于此,此种看法认为:全球人口大约为60亿,让这60亿人来分43亿的地址,平均为0.717个地址,平均人手不到1个IP地址。如果按照这种思路来看,你有IP地址而我没有,是否是对我个人的不敬,在全球追求平等的大气氛下,确实有失公允。考虑到全球人类的受教育水平,人人拥有一个IP地址,并没有这个必要,即便有这个必要的话,我们也要考察一下申请IP地址的个人是否有将IP这个宝贵资源充分利用的能力,否则便是对资源的无端浪费。从另外一个方面看,IP是Internet的主要协议,是为了解决实际数据通信问题而诞生的,我们没有必要以一个数字去表示自己的身份,这样做是非常荒谬的。
按类进行地址分配所造成的问题
上面我们探讨的是IP地址空间按照平面结构实施分配的情况,在Internet中并没有遵循这样简单思路的习惯。考虑到寻址的效率问题,实际采用的是地址层次化分配,早期的地址分配方案将IP地址分为A类、B类、C类、D类和E类。
A类地址:网络号占8位,主机号占24位,A类IP地址第一比特为0,所能表示的网络数为27-2=126个物理网络,假设每个网络内按照平面结构进行分配,最多容纳224-2=16,777,216,如此A类网络可以利用的IP地址总数为126×16,777,216=2,113,929,216,地址利用效率为2,113,929,216/231=98.4375%。由于早期地址分配的策略问题,分配A类地址是巨大的浪费。最多只能有126个大型网络能够申请到这样的地址。
B类地址:主机号和网络号各占16位,所能表示的网络数为214-2=16,382,假设每个网络内按照平面结构进行分配,最多容纳216-2=65,534,如此B类网络可以利用的IP地址总数为16,382 × 65,534=1,073,577,988,地址利用效率为1,073,577,988/230=99.9845%。B类网络由于规模较小,地址浪费的情况不是很严重。
C类地址:网络号占24位,主机号占8位,所能表示的网络数为221-2=2,097,152,每个网络可以容纳28-2=254个地址,如此C类网络可以利用的IP地址总数为254 × 2,097,152=532,676,608,地址利用效率为532,676,608/229=99.21875%。
D类、E类地址:在表示主机号方面没有任何贡献,地址利用率为0。
综上所述,按照非常理想的地址分配方法,32位地址空间的利用效率为(2,113,929,216+1,073,577,988+532,676,608)/232=86.6173%。
据参考文献[1]第25页的资料,可以计算到97年1月总的主机数为16,146,000,相当于地址利用效率为16,146,000/232=0.376%。可见实际地址利用效率是多么的可怜。
根据RFC1715地址分配效率比例系数H,其中对32位地址空间(IPv4),估计可得到网络中寻址的设备总数为:悲观估计为30,000,乐观估计为2×108,而97年实际主机数为16,146,000,大于悲观估计,但仅是乐观估计的8.07%,可见IPv4的地址空间并不像有人估计的已经枯竭。
从前面IPv4地址分类和地址利用效率的分析,我们得出的结论是:地址分配方案需要改进。这就是CIDR(Classless InterDomain Routing)无类域间路由的根据。
取消IP地址作为身份或地理位置识别的功能
IP地址分配的另一个前提是全球唯一性,这样做的好处是透明性,无论在何时何地,都能确定一台主机的位置和身份,但这是违背安全性原则的。所以说唯一性可以取消,当然对提供通用服务的主机除外。唯一性所带来的另一坏处则是:还要辛辛苦苦地设计防火墙。
关于IPv4的地址分配原则设计建议如下:只对提供服务的主机申请全球唯一性地址,内部主机则使用私有地址,在内部网络和外部网络之间安装NAT(Network Address Translation,网络地址翻译),这样便可以大大地减少对IPv4地址的需求量。下面简单介绍NAT的工作原理。
我们知道,应用程序访问远端服务时通过(远端IP地址,远端服务端口号)来唯一地标识Internet上的一项服务,在实施NAT的机器上维持一个翻译地址表(本机端口号,请求服务机器内部网IP地址,请求服务机器的端口号)。在内部网的机器A申请远端机器B的服务C时,在A的TCP或UDP层要填写四元组(A的内部网IP地址,A应用程序的端口号,B的IP地址,C的端口号),NAT是作为内部网的唯一出口来使用的,相当于路由器的功能。A将数据包封装成IP包之后,发送到NAT。NAT将四元组中A的内部网IP地址更换为NAT的外部IP地址,将A应用程序的端口号更换为NAT中没有使用的端口号D,重新将数据打包,发往远端机器B。同时NAT将(端口号D,A的内部网IP地址,A应用程序的端口号)组成的三元组添加到翻译地址表中。在NAT收到远端机器B的响应后,其响应的目的端口号为D,以D为索引查找翻译表,找到相应项目,以A的内部网IP地址和A应用程序的端口号替换数据包中的目的地址和目的端口,将数据包重新打包发送到A。这样便完成了服务请求和应答的过程。在TCP或UDP中端口号是一个16位的无符号整数,相当于对一个IP地址扩大了216=65536倍,至少可以从一定程度上减少对IP地址的需求。
另外对于没有Internet连网需求的用户可以使用三个私有网区段地址(10/8,172.16/12,192.168/16),如果内部用户有连网需求,可以使用上面提到的NAT技术来实现。
从1、2的讨论,我们可以得出结论,当前IPv4的地址空间利用率并没有达到饱和,问题主要在地址分配的策略上面。地址分配策略主要和路由技术相关,如是可以使用CIDR技术来提高路由效率,这样从另一个方面提高了地址分配策略的效率。即使地址空间利用率达到饱和,仍然可以使用NAT技术将空间扩大65536倍。可以说,IPv4的存活期还很长,虽然已近暮年。但我们不能因为IPv4当前能用,就忽略对IPv6的研究探索,那样我们只能跟在别人的后面,我们仍然受制于人。在其他文章中,我会谈到IPv4向IPv6的过渡问题。
摘自《通讯世界》