如何计算IP地址的VLSM和CIDR
相信很多人在开始学习计算机网络技术课程时都学习过IP地址的计算,比如计算IP地址的网络号,掩码位长度,可用IP数等问题。而且在软考或CCNA,HCNA等认证考试中也是非常的常见,可以说IP地址计算是一个网络工程师必须掌握的基本技能点。很遗憾的是,很多人对IP地址计算问题还是不清不楚,仍然不能按需求计算出正确的IP地址,今天,老钟来教你,只要有脑子都能学废……
如果你觉得看文章还是不能理解的话可以写下面链接来查看视频教学来学习:
https://edu.csdn.net/course/detail/23434
首先,IP地址计算情况大致有如下三种:
- 一个网络划分多个小网络,这种情况叫VLSM
- 多个小网络汇总为一个大网络,这种情况叫CIDR
- 给出一个IP地址及掩码长度,计算出该IP的网络号,广播号等,这种情况我称它为定位
在讲解问题之前,你必须先要学会IP地址的基础知识与计算的相关工具和手段,而且我教你的手段是通过的,在后续的CIDR的定位部分仍旧有用。
首先,IP地址是32位的二进制数0和1组合成的,我们平常见到的IP地址都是将这些01的二进制数转换为十进制数以后的值,比如192.168.100.1这个IP,全部都是十进制的数;其次应当要知道IP地址的十进制与二进制之间的转换,还是192.168.100.1这个IP,你应当学会将它转换为二进制数,这是计算IP地址的必要条件。其实转换十进制与二进制之间的数非常简单,如下表:
权值-> | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
192 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
168 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
100 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
看上表, 十进制数的192对应的二进制数就是1100 0000,168对应的二进制数为1010 1000。怎么来的呢?看上表的第一行标识的数字,这个数字是固定的值,你可以记下这张表,如100,在表中可以看看哪些数字加起来可以凑足100,尽量使用大的数字来加,因此在表中有可以使用64+32+4凑出100的值,然后这些数字对应的位写为1,其他位写成0,这样就可以得到100的二进制数了,你学废了吗?
下面再来学习一个公式:2^n =()
上面这个公式有两种作用,一种是用于计算IP地址数量;另一种是计算掩码位时会使用,这里先介绍第一种作用。在公式中有个n,这个n在第一种用法中它的值是32减去当前IP地址的子网掩码长度得出的值,下面用一个实例来讲述第一种用法。
例:计算IP地址192.168.100.0/24的可用IP地址数及范围。
答:可用IP地址数:254;可用IP地址范围:192.168.100.1~192.168.100.254
这个答案是怎么来的呢,很简单。首先用上面的公式来计算,刚才说了,n的值是32减去当前IP地址的掩码长度,上例IP地址的掩码是24位,因此32-24=8,这个8就是n的值了,因此2^8=256。题中要求的是可用IP地址,在一个IP网段中,有两个IP是不可用的,分别为该IP网段的第一个和最后一个IP,即这个网段的网络号和广播号。因此,256-2=254。从这一例中可知道,2^n计算出来的是一个网段中的所有IP,包含了两个不可给PC分配的IP,即不可用的IP地址。
例:计算IP地址192.168.0.0/21的可用IP地址数及范围
我们使用同样的方法来计算,首先将掩码长度拿出来,用32去减,32-21=11,然后利用公式去代入2^11=2048,2048是IP地址总数,这个网段中同样有网络号和广播号这两个IP不能用的,2048-2=2046个可用IP。那么它的可用IP地址范围是多少呢?这个数字稍微比较大,可用IP地址数是一个超过256的数,因此,它需要借位才能够完成。
什么是借位?
如上例中,可用IP地址数有2048个,从192.168.0.0-192.168.0.255这一段中,IP地址的个数是256个,下一个IP地址为192.168.1.0,注意,是1.0了,不是0.256,你可以简单地认为,在IP地址中,255以后就往前进1,然后192.168.1.0-192.168.1.255这一段是,又有256个IP,以此类推,直到凑足2048个IP时才结束。从这里可以看出,即每借1位,IP地址数量就增加256个,因此,2048/256=8,8即是借的总位数,因些,它的可用IP地址范围就是192.168.0.1-192.168.7.254,注意,这里是可用IP地址范围哦,而且是从0开始算的,再减去头尾两个不能用的IP就得到上面的结果了。你学废没有?
1、VLSM
通过上面两个例子,这下你应该懂得2^n这个公式的第一种用法了吧?下面来说一下第二种用法,用于计算掩码的长度的。还是通过一个实例来介绍:
例:将IP地址192.168.1.0/24分为4个子网,分别写出每个子网的网络号与广播号及可用IP地址范围。
例中要求将一个IP地址分为多个子网,这个典型的VLSM。先分析下公式,2^n这个n现在到底是什么值?这个n在这种类型的题中它是一个被求数,即是我们要计算出来的数。例中说把一个网络分成4个子网,即2^n>=4(个子网),要求分成多少个子网就2^n大于等于多少个子网。这时n的值是2,把这个2加到例中IP地址192.168.1.0/24的掩码长度中去,24+2=26,此时,我们已经求出了192.168.1.0/24划分为4个子网后的IP地址子网掩码长度了,子网掩码是26位,你看懂了吗?然后,再来计算每个子网段中的IP地址。我们刚才已经求出了划分网段后的子网掩码长度为26位了,通过这个信息我们可以得到一个子网段中的IP地址数量是多少个?还是利用2n这个公式,只不过这次是使用了刚才说的第一种用法而已。不用想太多,32-26=6,先计算出n的值出来,2^6=64个IP地址总数,由此可知道,一个子网段中的IP地址数量是64个,然后这首题就解决了,直接可以按照每个子网段的IP地址数量一个一个写了。
答:
第一个子网:192.168.1.0-192.168.1.63,0是网络号,63是广播号;
第二个子网:192.168.1.64-192.168.1.127,64是网络号,127是广播号;
第三个子网:192.168.1.128-192.168.1.191,128是网络号,191是广播号;
第三个子网:192.168.1.192-192.168.1.255,192是网络号,255是广播号。
你学废没有?没有的话再来个实例:
例:某公司现在2个部门,A部门有50台PC,B部门有80台PC,C部门有25台PC,D部门有12台PC,现使用一个网段为 192.168.1.0/24的IP对这些PC进行分配IP地址,将其划分为4个网段。
这个实例看上去好像跟上面讲到的实例一样啊,分为4个网段,这不简单么,上面的答案照招下来就完事了……请注意每个部门的PC数!
分析:上例中,每个部门的PC数量是不一样的,此时,应当按部门的PC数量来进行划分。这样的题一般先划分PC数量多的,即先算有80台PC的部门的,最后算只有12台PC的部门。
我们现在还是在介绍VLSM的部分,因此,公式2^n还得用。来吧,先算80台PC的部门。这个80跟公式有什么关系呢?我们上面介绍了公式的两种用法,这里很明显用第一种用法,计算IP地址数量的用法,2^n>=80,求出n的值为7,需要注意的是这个7可不是IP地址的子网掩码长度哦,应该是32-7=25,这个25才是子网掩码的长度,然后呢,掩码长度也算出来了,IP地址数量好像也得出来了,刚才算出来的n值是7,2^7=128个IP地址数,因此,B部门的IP地址范围和子网掩码可以直接写了,192.168.1.0-192.168.1.127,掩码是25位,0是网络号,127是广播号。你现在是不是觉得这种问题“搜依席”呢?
下面继续介绍A部门的IP,A部门有50台PC,同样使用公式2^n>=50台PC,n的值是6,即2^6=64个IP总数,然后32-6=26位子网掩码。A部门的地址也求出来了,范围是192.168.1.128-192.168.1.191,这里请注意,地址是从128开始了,因为刚才B部门已经用掉了前面的128个IP了,所以应该减掉前面用掉的部分。同理,128是网络号,191是广播号,除去这两个IP就是可用地址范围,掩码长度是26位。用同样的方法,计算其他两个部门。计算C部门的IP地址,C部门中有25台PC,2n>=25,求出n的值是5,32-5=27位子网掩码的长度,第个子网中有2^5=32个IP地址数量。因此C部门的IP地址范围是192.168.1.192-192.168.1.223,192是网络号,223是广播号。最后再计算一下D部门,有12台PC,需要至少12个IP地址,2^n>=12,n=4,D部门的IP地址子网掩码长度是32-4=28位,该子网中的IP地址总数是2^4=16个IP总数,写出D部门的IP地址范围结果是192.168.1.224-192.168.1.239,224是网络ID,239是广播号,除去这两个地址的中间部分就是可用IP地址的范围了。怎么样,你学废没有?
在通过上文中的几个例子的论述,你是否已经掌握VLSM的计算方法了呢?基实不管题目怎么变化,它的计算方法都差不多,公式只有一个,只不过这个公式在用的时候需要分清楚,什么时候该怎么用。这里再对上文中所用到的公式与计算方法用到的数字做个总结:在上例中经常用32-X=XX,这个32是子网掩码的长度值,因为子网掩码也是32位长的,它的主要作用就是用于描述这个IP地址所属的网络。而公式中2^n为什么是2呢,因为IP地址其实是个二进制数,它只有0和1两个数字,n则代表的是掩码的位数,那对于一个192.168.1.0/24的IP地址,在利用公式的时候为什么不是224呢,这是因为掩码还是用于描述IP地址所在的网络范围,24是代表着该IP所在的网络,而32-24=8,这个8位才代表着PC的地址位,我们的公式是用来计算可用IP地址数量的,即计算PC可用的IP地址数量的,因此,在计算一个网络中有多少个IP地址时应当用32去减掉它的子网掩码长度。
2、CIDR
现在我们来学习下CIDR这个技术,CIDR其实就是将多个连续的IP网络汇总成为一个大的IP网络。它的计算方法也非常简单,看下面这个例子:
例:将下列IP网络
202.100.8.0/24,
202.100.9.0/24,
202.100.10.0/24,
202.100.11.0/24网络汇总为一个网络。
拿到这个题的时候先看看IP地址有哪些位是相同哪些位是不同的,将相同的位照写,不同位的部分再转换计算。在上面的4个IP网络中,可以看到都是202.100开头的,这两部分是相同的,只有后面两个部分不同,因此,可以先知道汇总后的IP网络肯定是202.100开头。然后再看不相同的部分,反这些不相同的部分全部转换成二进制数,如下:
权值-> | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
8 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
9 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
10 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
11 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
看上表,将8,9,10,11这四个数字转换成二进制数,这个转换应该没什么问题吧,按权值相加就行,有作用的写1,没作用的写0,如10,就是8+2,好了,不废话了……进入正题,将这些数据转换成二进制数以后,在表中看看这些二进制数中哪些是相同的,在上表中,有底纹的部分即代表着4个数字的二进制部分都是相同的,最后两位才不同,然后将这些相同的部分照写,然后将最后面两位大家都不同的分写成0,最后结果为0000 1000,即在上表中最后一行的二进制数,反这个二进制数再转换为10进制数,它的值是8,这个8即是汇总后的第三位数字了,因此,汇总后的IP网络为202.100.8.0,它的掩码长度是多少呢,这时候需要注意,汇总后的掩码长度不可不再是24位了。那掩码是多长呢?通过结果可以看到,汇总后的IP网络也是202.100开头的,因此呢,这两段的掩码肯定是不变的,这两段的掩码是16位,然后再加上第三段中二进制数的相同位的位数即是最终的掩码长度了。在上面那张表中,我们可以看到,8,9,10,11四个数字的二进制数相同位是前面6位,因此,汇总后的掩码长度是16+6=22位,最后结果是202.100.8.0/22。这16是怎么来的你应该知道吧?
3、定位
在软考或其他网络认证考试中,经常遇到下面这样的题:
下列哪个IP网络与172.16.66.0/18在相同网络?
A.172.16.0.0/18 B.172.16.63.0/18 C.172.16.65.0/18 D.172.16.128.0/18
其实这道题就是在考172.16.66.0/18的网络ID,广播ID的问题。从选项中我们可以得到一点信息,那就是不管哪个选项,与66.0相同网络的也是172.16开头的;而从掩码中也可以看出来,18掩码代表着前面16位一定相同,即172.16这两段一定是相同的。因此,有问题的就是66。把18位掩码写成十进制数,255.255.192.0,这里简单说一下192怎么来的,不是说18位掩码吗,一个段中就有8位,18位即有两段是8位的,还有一段是两位的,那两位写成二进制数就如下表的情况,然后将这两位转换为十进制数就得到192了。只要掩码是255的就不用动,除了前面两部分是255,第三部分就是有题的部分了。现在把66和掩码的192都转换成二进制数,然后两个二进制数作与运算得到结果,如下表:
权值-> | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
192 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
66 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
and | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
在上表中,将两数转换为2进制数,再作与运算。与运算的意思即是两个1才能得到1,其他都是0,因此,从结果中也可以看到,与的结果转换为十进制数后是64。这个64是172.16.66.0/18所在的网段的第一个网段,即172.16.64.0/18。与172.16.66.0/18相同网段的网络一共有64个网络,范围是从172.16.64.0/18-172.16.127.0/18。请严重注意,64个网段不是通过上面的与运算行到的,是通过计算掩码的位数得到的,这个问题可以先放一下,不急。我们现在要先解决的是选项中哪个网络与172.16.66.0/18相同网络。通过上面的与运算,我们得到了64,这个值是66.0网络中的第一个IP网段,在选项中,A,B两个选项肯定不对了,因为第一个网络ID是172.16.64.0/18,而D选项是172.16.128.0/18,这个选项也不对,因为刚才我说了,它的网络范围是从64-127,因此,最后答案是C. 172.16.65.0/18。看到这里,我必须提醒你,上面的与运算必须掌握,而且难度也不高。如果你现在已经掌握了,那现在来讲讲我是如何知道跟66.0相同网段的一共有64个网络的。其实要得到这个数非常简单,只需要用一个公式,没错,又是2^n,这个公式简直“阴魂不散”……那这个公式怎么用呢?我们再看一下上面那张表,我把定复制下来:
权值-> | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
192 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
66 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
and | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
表中的192是子网掩码的转换,18位掩码转换为十进制数是255.255.192.0,这个应该完全没问题。现在对这个192的二进制数做一下运算就能得到与66.0网络相同网段的个数。把上面192的0的部分的位数算一下,有6位,2^6=64个网络。那这个怎么解释呢?首先,掩码是用来表示IP地址所在网络的,意思是只要是有1的部分就代表着网络位置,而0的部分则代表着是范围。用这种方法你可能比较难理解,但如果你用IP地址数量来算的话,我想你就明白了。18位的掩码,算一下这个网络中有多少个IP地址。在VLSM中我们也算过,想要知道这个网络有多少个IP地址,得用32去减,因此32-18=14位,再用公式2^14=16384个IP地址,一个网段内可以放256个IP,需要多少个网段呢?16384/256=64个网段,即172.16.64.0-255,172.16.65.0-255,172.16.66.0-255……一共要写64个段,直到172.16.127.255……这下看懂了吗?
如果你还没有学废,我这里再举一个实例,这次我们把数字做得小一点:求出192.168.1.31/28的网络ID与广播ID。这个数字应该够小了。用相同的方法,首先把28位的掩码先写出来,255.255.255.240,再将240与31写出来。注意,255的部分是不需要写二进制数的。
权值-> | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
240 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
31 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
and | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
同样的,做与运算后得到的结果转换为十进制数,结果是16,现在就可以确定192.168.1.31/28网段的第一个网络是192.168.1.16/28了,然后再计算一下这个网络中有一共有多少个连接的网络,也是就说跟192.168.1.30/28相同网络的IP网络有多少个。用同样的方法,看掩码240的二进制数0的部分,一共有4个位是0的,用公式24=16个网络,192.168.1.16/28是第一个网络,这个网络中一共有16个连续的网络,因此它的范围是192.168.1.16/28-192.168.1.31/28,题中所求的网络ID即是192.168.1.16/28,广播IP是192.168.1.31/28。
怎么样,你学会了吗?如果你还是不懂,那么………………………………………………你可以尝试看我的视频教程,或许对你有点帮助,链接在文章开头部分。