一、关于多个地址块能不能聚合的问题
前言
本人是网络技术小白,此系列文章只是为了记录计算机三级考试过程中遇到的一些问题以及个人理解和做题技巧,与大家交流学习,如果有错误还请大家指正。
一. 什么是“聚合”
个人理解的“聚合”,就是将要使聚合后的IP地址表示的范围与聚合前各个IP地址表示的范围相同,不能变小,也不能变多。
二. 能不能“聚合”
本人考试准备过程中主要使用的参考资料是“未来xx”的电子版题库,这个题库总体来说还算不错,虽然题目有所重复,没有参加过考试,不知道题库完不完整。
直接上例子!
2.1 两个地址聚合
若某大学分配给计算机系的地址块为202.113.16.224/27,分配给自动化系的P地址块为202.113.16.192/27,那么这两个地块经过聚合后的地址为 _____。
①对该十进制IP地址进行二进制展开
为了方便,只展开最后一个字节(8bit)不同的部分:
202.113.16.1110 0000/27
202.113.16.1100 0000/27
为了方便做题,我们将加粗部分(前27位)定义为“不可变部分”,后面的是可变部分,也就是我们用来计算可用地址数的部分。
②找相同的部分
202.113.16.1110 0000/27
202.113.16.1100 0000/27
(这里的加粗表示两个IP地址的相同部分,而不是前面定义的不可变部分)前26bit相同,对其合并,得到202.113.16.1100 0000/26。其中前26位不可变,后6位可变,则聚合后的地址块为202.113.16.192/26
③可用地址数计算
202.113.16.192/26,前面我们定义了可变部分和不可变部分,在该地址块中,前26位为不可变部分,后六位为可变部分,那么聚合后的可用地址数为26-2=62。
关于为什么减二,我看到有的回答是全0和全1不能用,这种说法理解起来比较容易,究竟是因为什么我也没去深究,毕竟做题讲究一个效率。
2.2 三个地址能聚合
59.67.79.128/28、59.67.79.144/28和59.67.79.160/27经聚合后可用地址数为 _____。
①对该十进制IP地址进行二进制展开
59.67.79.1000 0000/28
59.67.79.1001 0000/28
59.67.79.1010 0000/27
同样地,我们将加粗部分定义为不可变部分
②找相同的部分
59.67.79.1000 0000/28
59.67.79.1001 0000/28
59.67.79.1010 0000/27
我们可以看到,前26bit是相同的,假设可以聚合,则聚合后的结果为59.67.79.128/26,即59.67.79.1000 0000/26
接下来对比聚合前后的地址块范围,我的方法是这样的,后四位不看(因为聚合之前最大的后缀**“/28”**的后四位是可变位),然后进行比较
(1)聚合之后的范围(只看最后8bit):
1000 xxxx、1001 xxxx、1010 xxxx、1011 xxxx(前两位不可变,x为0或1)
(2)聚合之前的范围(只看最后8bit):
为了方便我们将
59.67.79.1000 0000/28用A表示,其范围为59.67.79.1000 xxxx/28(x为0或1)
59.67.79.1001 0000/28用B表示,其范围为59.67.79.1001 xxxx/28(x为0或1)
59.67.79.1010 0000/27用C表示,其范围为59.67.79.101x xxxx/27(x为0或1)
其中,加粗位是不可变位
(3)二者进行对比(即遍历):
聚合之后的范围如下(只看最后8bit,前面24bit都一样)
1000 xxxx可以由A表示,1001 xxxx可以由B表示,1010 xxxx可以由C表示,1011 xxxx可以由C表示
所以三个地址块聚合前后表示的范围是相同的,可以聚合
③可用地址数计算
聚合后的地址块为59.67.79.1000 0000/26,,可变位数为6,则可用地址数为26-2=62
2.3 三个地址不能聚合
IP地址块202.111.15.128/28、202.111.15.144/28和202.111.15.160/28经过聚合后可用的地址数为_____。
①对该十进制IP地址进行二进制展开
202.111.15.1000 0000/28
202.111.15.1001 0000/28
202.111.15.1010 0000/28
②找相同的部分
我们可以看到,前26bit是相同的,假设可以聚合,则聚合后的结果为202.111.15.1000 0000/26即202.111.15.128/26
下面对比聚合前后的范围是否相同
(1)聚合之后的范围(只看最后8bit,前面24bit相同且不可变):
1000 xxxx、1001 xxxx、1010 xxxx、1011 xxxx(前两位不可变,x为0或1)
(2)聚合之前的范围(只看最后8bit):
为了方便我们将
202.111.15.1000 0000/28用A表示,其范围为202.111.15.1000 xxxx/28(x为0或1)
202.111.15.1001 0000/28用B表示,其范围为202.111.15.1001 xxxx/28(x为0或1)
202.111.15.1010 0000/28用C表示,其范围为202.111.15.1010 xxxx/28(x为0或1)
其中,加粗位是不可变位
(3)二者进行对比(即遍历):
聚合之后的范围如下(只看最后8bit,前面24bit都一样)
1000 xxxx可以由A表示,1001 xxxx可以由B表示,1010 xxxx可以由C表示,1011 xxxx无法由聚合前的IP地址块表示,因为最后8bit的前4bit是不可变的,所以聚合前后的范围不同,三个地址块不能同时聚合。
接下来的处理方式是,将重合位数最多的两个IP地址块聚合,计算其聚合后的可用地址数,再单独计算剩下那个地址块的可用地址数,相加即可。
在本例中,重合位数最多的是A和B,二者聚合可以得到202.111.15.128/27,其可用地址数是2(32-27)-2=30。C的可用地址数为2(32-28)-2=14,所以聚合后总的可用地址数为30+14=44个
总结
欢迎讨论交流更好的方法