5.2.9 无分类编址和CIDR
前面我们知道,为了更加合理的使用IP地址,采用了子网划分的方法,事实证明子网划分这种网络编址,能够节省IP网络地址,但是到了1993年的时候因特网的增长速度还是让人们感觉到了这些技术它无法阻止地址空间的耗尽,此外因特网还将面临B类网络地址空间的耗尽以及路由信息过量等问题。
- 因缺乏适合于中等大小组织所需要的网络类型而导致B类地址消耗的过快,毕竟我们知道一个C类地址他仅仅能够容纳254台主机。所以说一般单位更愿意申请B类地址。
- 然而很少有单位有六万多台主机,即使采用子网划分的方法,对B类地址也未能得到充分利用
- 随着大量网络前缀的分配,路由器的路由表的大小和增长速率也即将使当时的软件无法进行有效管理
基于以上三个原因就定义了新版本的IP协议,也就是IPv6并且还发明了一种称为一种无分类域间路由选择(Classless Inter-Domain Routing)简称CIDR的一种新技术作为新版本的IPv6在被正式采纳前的一个过渡方案。1993年发布的关于CIDR的RFC文档,是RFC1517~RFC1520,使用CIDR可以更加有效的分配IPv4的地址空间,此外还可以减缓路由表的增长速度和降低对新的IP网络地址需求的增长速度,使得因特网在一定的时期内仍然能够持续增长并且高速的运转,CIDR一直沿用至今。
一、CIDR与传统分类地址比较
-
相同点
采用无分类编址机制与分类编址相同的是仍然将地址分成前缀和后缀两个部分。
CIDR与我们学习的子网编址相类似
- 使用了32比特位的掩码来表示前缀和后缀的边界
- 掩码中连续1的个数:网络前缀的长度
- 掩码中连续0的个数:主机号部分的长度
-
不同点
不同之处在于,网络前缀的长度比较灵活,前缀的长度不仅仅只有A类地址的8个比特,B类地址的16个比特,C类地址的24比特,而是可以从1~32之间取任意值,这样做的好处就在于可以根据用户的需要,选择合适的网络前缀,因而可以更加有效的分配IPv4的地址空间。
CIDR是两级地址结构
子网划分是三级地址结构
CIDR中的网络前缀等同于子网划分中的网络号和子网号
在采用无分类编址的时候把尚未分配的分类的IP地址划分为不同大小的地址块,任何一个单位都可以像Internet服务商(ISP)申请到适合自己需要的地址块。比如一个单位申请到了一个202.119.230.0/24(斜线后面的24是网络前缀的长度),因为前缀的长度是24位,这其实就是一个传统的C类网络,在这个地址块中所有的高24比特位都是一样的如图
只有主机号部分也就是全零一直到全一,所以说该地址块中地址个数也就是 2 8 2^8 28个地址(因为主机号部分的长度是32-24=8位),也就是说每个CIDR地址块的地址个数都是2的整数次幂,只不过主机号部分全0和全1的地址依然作为网络地址和网络内的广播地址一般不分配给主机使用。
例:128.14.32.0/20表示的地址块共有多少个地址?最大和最小的地址分别是什么?
分析,因为是一个/20的地址块,。所以主机号部分就有32-20=12位,所以地址个数就有 2 12 = 4096 2^{12}=4096 212=4096个地址。在这4096个地址块中所有的IP地址前20位都是一样的,后面的12位就表示主机地址,最小地址也就是主机号部分全0,即128.14.32.0最大地址也就是主机号部分全1,即128.14.47.255。这里还需要注意的是在IP地址中在第三组八位中高四位是网络前缀的部分,后四位是主机号部分。
这里我们再次强调,尽管每个地址块中的地址数量是2的整数次幂,但是全零和全1的地址是不分配的,也就是说每个CIDR地址块中可用的IP地址个数是要减去2的。
在实际的应用中,比如地址块58.0.0.0/7被IANA(因特网编号管理局)分配给了亚太地区网络信息中心,由他再把地址块划分为若干个地址块分配给一些大型的Internet服务提供商(ISP),大型的ISP根据用户的需求划分成更小的地址块分配给单位或者小型ISP。到了单位再将拥有的地址块根据需要分成大小相等或者说大小不等的地址块分配个各个物理网络。这里我们思考究竟是如何根据用户需求来分配地址块呢?这里我们通过一个示例来理解这个分配的过程。
例:假设某ISP拥有CIDR地址块202.192.0.0/16.先后有四所大学(ABCD)向该ISP分别申请大小为4000、2000、4000、8000个IP地址的地址块,试为ISP给这四所大学分配地址块。
首先我们这里要明确,四所大学是按照先后顺序来申请地址块的,所以说我们就按照现申请的先分配的原则
分析:
-
A大学: 2 12 = 4096 > 4000 2^{12}=4096>4000 212=4096>4000,所以地址块中主机号部分是12位。所以说A大学申请到的地址块的网络前缀的长度=32-12=20位,该地址块的起始地址就是该ISP拥有的地址块的起始地址,所以A大学分配到的地址块是202.192.0.0/20,起始地址就是202.192.0.0,结束地址是202.192.15.255也就是说该ISP把自己拥有的 2 16 2^{16} 216的IP地址中的最前面的4096个IP地址分配给了A大学。
-
B大学: 2 11 = 2048 > 2000 2^{11}=2048>2000 211=2048>2000,网络前缀的长度=32-11=21位,这里我们要思考的是该大学分配到的地址块的起始地址是什么呢?这里我们要注意**该地址块的21位前缀,肯定是不能和A大学重复,否则会造成一个地址分配给两个单位的情况。**所以我们需要把网络前缀部分转换成二进制,考虑到对前16位没有影响,所以说主要是第17到第21位不能和A大学重复,因为A大学第20位已经将0和1用去,所以说B大学只能使用十九位上的比特位,所以说B大学的起始地址就是202.192.00010000.0/21也就是202.192.16.0/21,结束地址也就是:202.192.00010111.255也就是202.192.23.255。
-
C大学: 2 12 = 4096 > 4000 2^{12}=4096>4000 212=4096>4000,网络前缀长度=32-12=20位,那么C大学的起始地址是多少呢?很多人会想当然的认为因为B大学的结束地址是202.192.23.255,所以C大学的起始地址就应该是202.192.24.0,事实上并非如此因为24=00011000B,也就意味着如果选202.192.24.0作为起始地址的话,网络前缀至少是16+5=21位,主机号部分就只剩下32-21=11位, 2 11 = 2048 < 4000 2^{11}=2048<4000 211=2048<4000,不能满足要求。因此C大学的网络地址块的起始位置不能是202.192.24.0。
同样的它的前20位网络前缀不能和其他两所大学重复,那么第1到16位依然是202.192,第十七到第二十位我们知道A大学是0000,而B大学是0001,所以C大学只能选0010了。所以C大学分配的地址块的起始地址就是202.192.00100000.0/20也就是202.192.32.0/20结束地址就是202.192.00101111.255即202.192.47.255。
-
D大学: 2 13 = 8192 > 8000 2^{13}=8192>8000 213=8192>8000,网络前缀的长度=32-13=19位。前十九位不能和ABC重复,如表所示第17到第十九位000和001都用过了,所以只能是010
A大学 起始地址:202.192.00000000.0/20 202.192.0.0/20 B大学 起始地址:202.192.00010000.0/21 202.192.16.0/21 C大学 起始地址:202.192.00100000.0/20 202.192.32.0/20 D大学 起始地址:202.192.01000000.0/19 202.192.64.0/19 D大学的结束地址也就是主机位部分全1,也就是202.192.01011111.255,也就是202.192.95.255。
这里需要注意的是,在分配地址块的时候,我们最容易犯得错误是认为应该把地址连续分配,中间不能断开。
单位 | 地址块 | 最大地址 |
---|---|---|
A大学 | 202.192.0.0/20 | 202.192.15.255 |
B大学 | 202.192.16.0/21 | 202.192.23.255 |
C大学 | 202.192.32.0/20 | 202.192.47.255 |
D大学 | 202.192.64.0/19 | 202.192.95.255 |
我们从最终分配的表格中可以看出其实B大学和C大学之间是有2048个地址空闲没有被分配的。C大学和D大学之间是有4096个IP地址没有分配,因为连续分的情况下是不能够满足用户需求的。当然如果再有单位申请两千个以内或者四千个地址块时,那对于运营商或者服务提供商SP来说再把这些地址块分配给这些单位就可以了。
以上就是无分类编址的相关内容以及如何分配CIDR地址块。其实采用无分类编址的最大好处就在于构成超网实现路由聚合,这些内容我们在IP分组的转发中学习。