IP子网地址的分配方法

2000年5月29日

一种灵活高效的

IP子网地址分配方法

平顶山市尼龙六六盐公司梁淑范

编者按:使用TCP/IP协议建立网络涉及到IP地址的合理分配,它是计算机网络设计的一个重要环节。本文介绍了一种灵活而高效地划分子网地址、充分利用地址空间的方法。

问题的提出

一个具有相当规模的计算机网络,通常要划分为若干子网。例如一个大型企业,在很多地方都有分支机构或子公司,有的子公司较大,下边又设子公司,即三级公司。这样,该企业的计算机网络就需要划分成很多子网和多级子网。

在子网的划分中,通常采取的办法是同一级别的子网使用同样长度的子网掩码,使得子网的规模都是同样大。随着业务的发展,各个子网规模扩展的程度相差悬殊:有的子网远远没有得到充分利用,造成IP地址空间的严重浪费;有的不够用,还要再申请IP地址空间。

这样就造成了两方面的问题:有些单位IP地址空闲;有些单位因新、老IP地址空间不连续而不能合成一个子网,使得同一单位子网之间的通信出现了问题。

子网的大小是由子网掩码确定的。在理论上,子网掩码中各个“1”可以是不连续的,但是通常都建议将这些“1”连续,而且这些“1”要占据 IP地址“主机”部分中权位高的部分(左边部分)。

相关协议中没有明确规定同一个网络中的不同子网是否可以使用不同掩码。这种二意性导致开发出来的路由协议中有的不支持不同长度掩码(例如RIP协议)。为了能够支持不同长度的掩码,RFC-1009提出了解决方案,后来的路由协议就可以支持不同长度掩码(例如OSPF协议)。据此开发出支持不同掩码的路由器,但这还没有完全解决子网划分的上述问题。网络管理员必须确定每个子网的掩码,要预测每个子网将有多少主机,并据此决定每个子网的规模。预测通常很不准确,因为有的单位IP地址浪费,而有的单位地址紧缺,这样的问题依然存在。

方案选择

子网划分是把IP地址的主机部分分成两段:子网段和主机段。地址分配效率低,主要原因是在设计时为了以后不再重分地址,总把子网规模估计过高。另外,如果使用不支持不同长度子网的路由协议,每个子网都必须与最大子网具有相同的地址空间。

我们可以考虑如下需要改变子网结构的情况:一个网络有三个子网A、B和C,都在同一个B类地址空间中,例如都在160.200.0.0~160.200.255.255。为了简洁,把第3个字节作为子网部分,把第4个字节作为子网中的主机。

为了讨论简洁,以下涉及地址的地方都只谈最后2个字节。假设A子网地址是1.0,B子网地址是2.0,C子网地址是3.0。相应地,在谈论掩码时也只谈最后2个字节。

若子网B中要分配的主机数超过254台,理想情况是可以简单地改变B的子网掩码,而不改变B中的主机地址。如果3.0没被C占用,B的掩码就可以从255.0(ff00)改为254.0(fe00),B子网地址空间扩大1倍。B已经分配的地址仍同新子网掩码符合。但是,由于B上边和下边的子网地址分别被A和C占用了,所以不能这样扩充。

这样,有两种解决方案可供选择:

1.把已有子网分成二个;

2.子网重新编码,使得子网使用较小的掩码(减少1的个数)。

采用1方案有两种方式:一种是在两个子网之间插入一个路由器,这样会使成本提高,速度变慢;另一种是不插入路由器,两个子网号的主机彼此不能辨认,因而需要把报文分组发送到默认路由器上转发过去,而不是直接传递过去。但是这种方式有局限性,不能保证在所有主机上都能正常工作。

如果这两种办法都不满意,只好为B分配新子网号,例如把6.0和7.0都分配给B子网,并且掩码改为254.0,把2.0子网号空出来。可是这样就要为所有主机重新分配地址,修改整个域名系统,还要修改B子网中所有主机与硬件地址有关的其他配置文件。

子网号的灵活分配

如前所述,现在大多数子网都是把地址的主机部分分割成两个部分:子网段和主机段。不同大小的子网,其子网段长度可以不同。

下面需要对这两个段顺序编号。例如,主机编号为1、2、 3,子网编号为1、2、3等。这样,在子网段和主机段中左边的一些位都是0,这些位表示可用于扩充的空间。

假设某个子网中主机数已经增加到能够允许的最大数目,但是这个子网段还有剩余空间可用来分配更多地址,即:

尽管主机数不能再增加了,可是整个地址空间还有增加的余地。问题是可扩充空间所在的位置不灵活,剩余的空间只能提供给子网段进一步扩充。

现在把子网号加1,向右扩展,于是就有了下述情况:

总扩充空间同以前一样,可是主机和子网却都可以扩充。其实,上图还可以改变画法,如下图所示,把子网段和主机段分界线置于可扩充区域中间。

1.技术说明

为了说明子网地址分配的这种新方法和使用的步骤,特引入并定义如下概念:

●主机分配位(h位):右起的连续位,可作为主机地址,不同子网可以有不同h位数。

●子网分配位(s位):左起的连续位,它不同于h位,不同子网的s位段值也不同,而且不同子网可以有不同的s位数。

●扩充位(g位):在h位和s位之间的“全0”。

●S掩码:对应所有s位的位都是1,而对应所有g位和 h位的位都是0。

●G掩码:对应所有s位和g位的位都是1,对应所有h 位的位都是0。

●子网段:子网掩码中为1的位,包含所有s位,可包含 g位的部分或全部。

●主机段:子网掩码中为0的位,包含所有h位,可包含 g位的部分或全部。例如,地址ssgg ghhh的子网掩码是1111 0000,s 掩码是1100 0000, g掩码是1111 1000,子网段是ssgg,主机段是ghhh,主机分配位是hhh,子网分配位是 ss,扩充位是gg g。

●镜像位图计数:正规的二进制计数,即右边加1,向左进位。这种计数用于主机值分配。子网地址分配是左边加1,向右进位。这种计数位图是正常计数位图的镜像。

2.应用举例

为了简洁,只考虑8位地址,以及3个子网A、B和C。

子网地址掩码

A 10gg ghhh 1111 0000

B 01gg ghhh 1111 0000

C 110g ghhh 1111 0000

现在考虑添加第四个子网D,而且再加上6个主机,于是:

子网地址掩码

A 10gg ghhh 1111 0000

B 01gg ghhh 1111 0000

C 110g ghhh 1111 0000

D 001g ghhh 1111 0000

如此增加D子网后,并不需要改变原来各个子网的地址位状态,这是因为D的子网号同其他子网号都不相同,彼此不冲突,因而轻易添加了子网D。

现在考虑再添加第五个子网E:

子网地址掩码

A 100g ghhh 1111 0000

B 01gg ghhh 1111 0000

C 110g ghhh 1111 0000

D 001g ghhh 1111 0000

E 101g ghhh 1111 0000

注意,强制A把它最左边的g位(位5)改变成s位,以便把子网A和子网E分开。把A的位5变成s位就可以避免向A中增加主机,最终达到位5变为1。否则,A中的地址码就同E中的地址相同,这是不允许的。还要注意,如果A和B的s掩码原来都设置成1100 0000,那么加上E就将使A的s掩码变成1110 0000。

现在考虑在A和C子网上再各添加8台主机,使每个子网主机总数达到14台。这就必须把A和C子网中每个主机g位中的最右边的g位变成一个h位,即:

A 100g hhhh 1111 0000

B 01gg ghhh 1111 0000

C 110g hhhh 1111 0000

D 001g ghhh 1111 0000

E 101g ghhh 1111 0000

掩码都不需要改变。如果A、B和C子网原来的掩码都设置成1111 1000,那么这些掩码就得改变。

下面向B子网添加足够多的主机,使得剩余的g位都变成 h位。

A 100g hhhh 1111 0000

B 01hh hhhh 1100 0000

C 110g hhhh 1111 0000

D 001g ghhh 1111 0000

E 101g ghhh 1111 0000

注意,子网B的掩码已经改变,以便提供足够的h位。如果有人为B分配主机地址,而这个人又不是分配网络号的人,那么就必须把B的最后g 位变成一个h位,从而正确地分配其他子网号,就像下边增加子网F步骤那样。

A 100g hhhh 1111 0000

B 01hh hhhh 1100 0000

C 110g hhhh 1111 0000

D 001g ghhh 1111 0000

E 101g ghhh 1111 0000

F 1110 ghhh 1111 0000

这里,F接受子网号1110而不是子网号011。其原因有两点:一是011不能区别使用B掩码的B子网地址;二是由于位5已经分配给B的主机,所以不能通过增加B掩码的办法把它们区别开来。实际上,在B子网中,位7和6为01 的状况已经没有子网号可再分配了(除非B去掉一些主机)。

结论

本文介绍的方法不需要估计子网规模。其要点是主机位从最低位开始分配,向最高位扩展;而子网位从高位开始分配,向低位扩展。当子网扩大时就分配更多的主机位。随着子网数目的增加,就可以分

配更多子网位。这个方法有时候要使用新的子网掩码,却从不需要改变主机地址。RFC-1219中规定了实现这种方法的函数和步骤。

相关文档
最新文档