CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
1. 原始的IP地址表示方法及其分类(近几年慢慢淘汰)
IP地址是由4字节,32位表示的,为了表示方便,通常用点分十进制表示法,例如大家常见的:192.168.0.52,四个字节,通过点进行分隔,看起来十分清晰。IP地址的32位是由网络号+主机号组成的,也就是说这32位中,左边的某些连续位表示网络号,右边的某些连续位表示主机号,那么我们平常在讨论这一系列问题的时候,会有一个“网络地址”的概念,一般来说网络地址并不等于IP地址,网络地址就是IP地址中的网络号,然后主机号全部取0。IP地址可以表示为:
IP地址 ::= {<网络号>, <主机号>},将主机号置0,就可以得到网络地址。
最初的IP地址是被划分为5类,不过大家经常见到和谈到的只有3类,即A类、B类、C类,如图1所示:
图1 IP地址的分类
从图1中可以看到基本的划分,由于本篇文章主要讲CIDR,所以对于IP地址最初的分类表示法就不过多讲述,在CIDR中已经废弃了IP地址的分类,无分类编址的命名也是由此得来的,所以目前基本已经不再采用所谓的A类、B类、C类的IP地址分类表示法,不过作为比较经典的过去使用的方法,大家了解一下即可。图1中表示得十分清楚,大家从左边看起,搞明白每一类地址的前缀、网络地址、主机地址的位数即可,通过这个位数,大家可以计算出每类网络的可支配网络数以及可连接主机数,对相应的位数求2的幂即可。
图2 IP地址的指派范围和一般不使用的IP地址
从图2中,我们可以清晰地看出来每类网络所指派的网络数和主机数,以及哪些地址一般不使用,这里需要注意一点,就是最大可指派网络数中会减掉2或者1,其实后面的最大主机数大家计算一下会发现都减去了2,这是为什么呢?这是因为A类的前缀是0,所以网络号加上前缀的8位可以出现全0的情况,而且127(01111111)作为环回地址用来测试,所以不指派,故而需要减去2,B类和C类的前缀分别是10和110,所以网络号加上前缀不可能出现全0的情况,不过B类的128.0.0.0和C类的192.0.0.0也是不指派的,所以B类和C类只需要减去这一个不指派的网络地址即可。那么主机数为什么都减去2呢?这是因为主机号分别为全0和全1的情况一般是不分配的,这两个特殊的地址有特殊的用途,所以要减去2。
关于分类的IP地址就介绍到这里,还要强调一下,目前已经不采用分类表示法,所以大家重点关注CIDR表示法。
2. 基本的子网划分方法
在讲述CIDR之前我们先来简单介绍一下基本的子网划分方法。
上面所述的IP地址表示方法可以称之为两级IP地址,即网络号和主机号组成的IP地址。但是由于IP地址空间的利用率有时很低、给每一个物理网络分配一个网络号会使路由表变得太大以及两级IP地址不够灵活等原因,就出现了所谓的子网划分。子网划分实际上就是将原来的两级IP地址转变为三级IP地址,表示如下:
IP地址 ::= {<网络号>, <子网号>, <主机号>}
从上面的表示可以看出,子网划分就是在32位中借了几位用来表示子网号,注意,这里的网络号的位数是不变的,子网号是从主机号中借走的,所以大家想一想就可以明白,子网划分实际上就是减少了主机数,分配到不同的子网,每个子网包含一定的主机数。子网的概念也就可以理解为,将一个大的网络在其内部划分成几个小的子网,但是需要注意的是,对于该网络的外层来看,还是一个大的网络,只有该网络内部才可以看到其进行了子网划分。例如:某个机构给某高校分配了一个大的网络,而该高校内部又进行了子网划分,将不同的子网分配给不同的学院,此时对于该机构来说,该高校还是一个大的网络,在其看来并没有变化,只有该高校自己才知道自己内部又进行了子网划分。
子网划分中有一个十分重要的概念就是子网掩码。 那么什么是子网掩码呢?大家想一想,在传输的过程中,路由器是怎么识别子网划分后的IP地址中的网络地址的?如果不提供任何信息,路由器肯定还是傻傻分不清楚,所以就出现了子网掩码。子网掩码其实很简单,就是将网络号和子网号对应的位全部置1,将主机号对应的位置0,就得到了子网掩码。例如:一个IP地址是145.13.3.10,其是B类地址,假如我们用8位来表示子网号,那么网络号加上子网号一共24位,所以将这24位置1,其余置0,那么子网掩码就是255.255.255.0。紧接着,我们可以看出来,用子网掩码和IP地址逐位进行“与”运算,就可以得到网络地址,所以该IP地址的网络地址就是145.13.3.0,下面我从《计算机网络第5版》谢希仁编著的书中摘取了两个例子,帮助大家理解。
图3 子网划分的例题
从上面的例子中可以看出子网掩码的使用和计算,这两个例子也说明了同样的IP地址和不同的子网掩码可以得出相同的网络地址。但是不同的掩码效果是不同的,因为它们的子网号和主机号的位数是不一样的,从而可划分的子网数和每个子网中的最大主机数都是不一样的。
最后,我们需要注意的是,在之前基本的子网划分中,借走主机号两位,只能划分4-2=2个子网,这是因为全0和全1不使用,一般至少借走两位,其他位数的划分是一样的,都需要减去2,但是CIDR表示法中的子网划分就不用减2,因为其也使用全0和全1。
3. CIDR概述及其地址块计算
CIDR中文全称是无分类域间路由选择,英文全称是Classless Inter-Domain Routing,在平常,大家多称之为无分类编址,它也是构成超网的一种技术实现。CIDR在一定程度上解决了路由表项目过多过大的问题。CIDR之所以称为无分类编址,就是因为CIDR完全放弃了之前的分类IP地址表示法,它真正消除了传统的A类、B类、C类地址以及划分子网的概念,它使用如下的IP地址表示法:
IP地址 ::= {<网络前缀>, <主机号>} / 网络前缀所占位数
CIDR仅将IP地址划分为网络前缀和主机号两个部分,可以说又回到了二级IP地址的表示,不过大家要注意,最后面用“/”斜线分隔,在其后写上了网络前缀所占的位数,这样就不需要告知路由器地址掩码,仅需要通过网络前缀所占的位数就可以得到地址掩码,为了统一,CIDR中的地址掩码依然称为子网掩码。
CIDR表示法给出任何一个IP地址,就相当于给出了一个CIDR地址块,这是由连续的IP地址组成的,所以CIDR表示法构成了超网,实现了路由聚合,即从一个IP地址就可以得知一个CIDR地址块。例如:已知一个IP地址是:128.14.35.7/20,那么这个已知条件告诉大家的并不仅仅是一个IP地址这么简单,我们来分析一下。
128.14.35.7/20 = 10000000 00001110 00100011 00000111
即前20位是网络前缀,后12位是主机号,那么我们通过令主机号分别为全0和全1就可以得到一个CIDR地址块的最小地址和最大地址,即
最小地址是:128.14.32.0 = 10000000 00001110 00100000 00000000
最大地址是:128.14.47.255 = 10000000 00001110 00101111 11111111
子网掩码是:255.255.240.0 = 11111111 11111111 11110000 00000000
因此就可以看出来,这个CIDR地址块可以指派(47-32+1)*256=4096个地址,这里没有把全0和全1除外。
4. CIDR子网划分
在CIDR表示法中也可以进行进一步的子网划分,和前面的子网划分类似,我们只需要从主机号中借走一定的位数即可,这里与前面的基本子网划分不同,借走2位时可以划分成4个子网,不用减2,其他位数类似。下面通过一个例子来讲解CIDR中的子网划分。
例:某个机构拥有一个大的CIDR地址块,即206.0.64.0/18,现在某个高校需要申请一个较大的CIDR地址块以供学校使用,学校内部又分为4个系,由于每个系的人数不一样,所以要给人数较多的系分配较多的IP地址,人数较少的系分配较少的IP地址,现在采用以下的分配方案:
机构分配给该高校一个CIDR地址块:206.0.68.0/22,然后该高校内部的分配方案如下:
一系:206.0.68.0/23,一系内部又分为206.0.68.0/25、206.0.68.128/25、206.0.69.0/25和206.0.69.128/25四个子网。
二系:206.0.70.0/24,二系内部又分为206.0.70.0/26、206.0.70.64/26、206.0.70.128/26和206.0.70.192/26四个子网。
三系:206.0.71.0/25,三系内部又分为206.0.71.0/26和206.0.71.64/26两个子网。
四系:206.0.71.128/25,四系内部又分为206.0.71.128/26和206.0.71.192/26两个子网。
请分析以上方案划分的具体细节。
答:这是一个CIDR子网划分中比较复杂的例子,如果大家能分析透彻这个例子,那么对于CIDR的子网划分的计算就基本不在话下了。
我们一步一步来讨论:
第一,这个机构拥有的地址块是206.0.64.0/18 =206.0.0100 0000.0000 0000/18,网络前缀是18位,所以其
最小地址是:206.0.64.0/18 = 206.0.0100 0000.0000 0000/18
最大地址是:206.0.127.255/18 = 206.0.0111 1111.1111 1111/18
子网掩码是:255.255.192.0/18 = 1111 1111.1111 1111.1100 0000.0000 0000/18
拥有的地址数:(127-64+1)*(255-0+1)=16384
然后,我们来看一下这个机构给该高校分配的CIDR地址块,即206.0.68.0/22,由此可以看出来网络前缀由18增加到了22,所以该机构相当于将其CIDR地址块划分成了16个子块即子网,然后给该高校了第二个子网,即206.0.0100 0100.0/22,黑色加粗的部分是原来的网络前缀,后面红色部分类似于前面介绍的子网号,由于是4位,所以可以从0000~1111,共16个子网,0001自然就是第二个子网。
第二,既然高校拥有了机构的第二个子网的CIDR地址块206.0.68.0/22 = 206.0.0100 0100.0/22,其网络前缀是22位,所以其
最小地址是:206.0.68.0/22 = 206.0.0100 0100.0000 0000/22
最大地址是:206.0.71.255/22 = 206.0.0100 0111.1111 1111/22
子网掩码是:255.255.252.0/22 = 1111 1111.1111 1111.1111 1100.0000 0000/22
拥有的地址数:(71-68+1)*(255-0+1)=1024
然后该高校内部又对这个CIDR地址块进行了划分,进一步得到了高校内部的子网,紧接着我们来看看一系的CIDR地址块是怎么得到的。
第三,一系的CIDR地址块是206.0.68.0/23,可以看出来其网络前缀相对于高校的CIDR地址块来说增加了1位,说明高校首先将其CIDR地址块划分成了2个子网,其中一个给了一系。那么这两个子网分别是:一系的:206.0.68.0/23 = 206.0.0100 0100.0/23和剩余的(记为余1):206.0.70.0/23 =206.0.0100 0110.0/23,注意其中的红色部分就是新增的这一位,用来标志两个子网。
那么,一系的
最小地址是:206.0.68.0/23 = 206.0.0100 0100.0000 0000/23
最大地址是:206.0.69.255/23 = 206.0.0100 0101.1111 1111/23
子网掩码是:255.255.254.0/23 = 1111 1111.1111 1111.1111 1110.0000 0000/23
拥有的地址数:(69-68+1)*(255-0+1)=512
余1的
最小地址是:206.0.70.0/23 = 206.0.0100 0110.0000 0000/23
最大地址是:206.0.71.255/23 = 206.0.0100 0111.1111 1111/23
子网掩码是:255.255.254.0/23 = 1111 1111.1111 1111.1111 1110.0000 0000/23
拥有的地址数:(71-70+1)*(255-0+1)=512
现在,一系的CIDR地址块已经很明确,然后一系内部又进行了划分,即又分为206.0.68.0/25、206.0.68.128/25、206.0.69.0/25和206.0.69.128/25四个子网,网络前缀从23位变成了25位,相当于占用了主机号两位,所以可以划分为4个子网,分别对应00、01、10、11这四个子网,这四个子网的最小地址、最大地址以及子网掩码和拥有的地址数按照上述的方法就可以得到,这个比较简单,建议大家可以自己手动计算一下,正好看看自己掌握了多少,这里就不再给出这四个子网的细节。
第四,一系明确以后,就要考虑其他系的划分,可以看到二系分配到的CIDR地址块是206.0.70.0/24,可以看出来其网络前缀相对于余1的CIDR地址块来说增加了1位,说明余1的CIDR地址块被划分成了2个子网,其中一个给了二系。那么这两个子网分别是:二系的:206.0.70.0/24 = 206.0.0100 0110.0/24和剩余的(记为余2):206.0.71.0/24 =206.0.0100 0111.0/24,注意其中的红色部分就是新增的这一位,用来标志两个子网。
那么,二系的
最小地址是:206.0.70.0/24 = 206.0.0100 0100.0000 0000/24
最大地址是:206.0.70.255/24 = 206.0.0100 0100.1111 1111/24
子网掩码是:255.255.255.0/24 = 1111 1111.1111 1111.1111 1111.0000 0000/24
拥有的地址数:(70-70+1)*(255-0+1)=256
余2的
最小地址是:206.0.71.0/24 = 206.0.0100 0111.0000 0000/24
最大地址是:206.0.71.255/24 = 206.0.0100 0111.1111 1111/24
子网掩码是:255.255.255.0/24 = 1111 1111.1111 1111.1111 1111.0000 0000/24
拥有的地址数:(70-70+1)*(255-0+1)=256
现在,二系的CIDR地址块已经很明确,然后二系内部又进行了划分,即又分为206.0.70.0/26、206.0.70.64/26、206.0.70.128/26和206.0.70.192/26四个子网,网络前缀从24位变成了26位,相当于占用了主机号两位,所以可以划分为4个子网,分别对应00、01、10、11这四个子网,这四个子网的最小地址、最大地址以及子网掩码和拥有的地址数按照上述的方法就可以得到,这个比较简单,建议大家可以自己手动计算一下,正好看看自己掌握了多少,这里就不再给出这四个子网的细节。
第五,二
系明确以后,就要考虑其他系的划分,可以看到三系分配到的CIDR地址块是206.0.71.0/25,而四系分配到的CIDR地址块是206.0.71.128/25,可以看出来其网络前缀相对于余2的CIDR地址块来说增加了1位,说明余2的CIDR地址块被划分成了2个子网,其中一个给了三系,另外一个给了四系。那么这两个子网分别是:
三系的:206.0.71.0/25 = 206.0.71.0000 0000/25
和
四系的:206.0.71.128/25 = 206.0.71.1000 0000/25
,注意其中的红色部分就是新增的这一位,用来标志两个子网。
那么,三系的
最小地址是:206.0.71.0/25 = 206.0.0100 0100.0000 0000/25
最大地址是:206.0.71.127/25 = 206.0.0100 0100.0111 1111/25
子网掩码是:255.255.255.128/25 = 1111 1111.1111 1111.1111 1111.1000 0000/25
拥有的地址数:(71-71+1)*(127-0+1)=128
四系的
最小地址是:206.0.71.128/25 = 206.0.0100 0100.1000 0000/25
最大地址是:206.0.71.255/25 = 206.0.0100 0100.1111 1111/25
子网掩码是:255.255.255.128/25 = 1111 1111.1111 1111.1111 1111.1000 0000/25
拥有的地址数:(71-71+1)*(255-128+1)=128
现在,三系和四系的CIDR地址块已经很明确,到目前为止,该高校已经将所有的CIDR地址块分配给了四个系,一系有512个地址,二系有256个地址,三系和四系各有128个地址。然后三系内部又进行了划分,即又分为206.0.71.0/26和206.0.71.64/26两个子网,网络前缀从25位变成了26位,相当于占用了主机号一位,所以可以划分为2个子网,分别对应0、1这两个子网,同时,四系内部也又进行了划分,即又分为206.0.71.128/26和206.0.71.192/26两个子网,网络前缀从25位变成了26位,相当于占用了主机号一位,所以可以划分为2个子网,分别对应0、1这两个子网,三系和四系各自的两
个子网的最小地址、最大地址以及子网掩码和拥有的地址数按照上述的方法就可以得到,这个比较简单,建议大家可以自己手动计算一下,正好看看自己掌握了多少,这里就不再给出这些子网的细节。
至此,我们已经分析完了本题,上面都是我一位位自己敲上去的,所以大家看完后想要稳固掌握的话建议自己也计算一遍,如果发现我有错误,欢迎大家指正。
最后,我用一副图来展示下这个划分过程。
图4 上述例题的图解
5. 总结
总之,目前已经广泛使用CIDR表示法,之前的分类方法和子网划分已经很少使用,所以大家要重点掌握CIDR表示法及其子网划分,了解以前的基本分类和划分方法即可。
上述内容都是本人一个字一个字敲上去的,那些粗体和红色的标注也是我细心注释的,图4是我按照分析的流程一步步画的,转载请注明出处,欢迎大家指正,谢谢。