计算机网络(4.11)网络层- 无分类编址CIDR

时间:2024-04-02 12:53:01

1、网络前缀

划分子网在一定程度上缓解了互联网在发展中遇到的困难。然而在1992年互联网仍然面临三个必须尽早解决的问题:

(1) B类地址在1992 年已分配了近一半,眼看就要在1994年3月全部分配完毕!

(2) 互联网主干网上的路由表中的项目数急剧增长 (从几千个增长到几万个)。

(3)整个IPv4的地址空间最终将全部耗尽。

1987 年,RFC 1009就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。

使用变长子网掩码 VLSM (Variable Length Subnet Mask)可进一步提高IP地址资源的利用率。

在 VLSM 的基础上又进一步研究出无分类编址方法, 它的正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。

CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv4的地址空间。CIDR使用各种长度的“网络前缀”(network-prefix) 来代替分类地址中的网络号和子网号。IP 地址从三级编址(使用子网掩码)又回到了两级编址。

 无分类的两级编址的记法是:

      计算机网络(4.11)网络层- 无分类编址CIDR

CIDR 使用“斜线记法”(slash notation),它又称为 CIDR 记法,即在IP地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中1的个数) 。 例如: 220.78.168.0/24 

CIDR把网络前缀都相同的连续的IP地址组成“CIDR 地址块”。

128.14.32.0/20 表示的地址块共有212个地址(因为斜线后面的20是网络前缀的位数,所以这个地址的主机号是12位)。这个地址块的起始地址是128.14.32.0。 在不需要指出地址块的起始地址时,也可将这样的地址 块简称为“/20 地址块”。

128.14.32.0/20 地址块的最小地址:128.14.32.0

128.14.32.0/20 地址块的最大地址:128.14.47.255

全0和全1的主机号地址一般不使用。

路由聚合(route aggregation) 

一个CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。

路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。

路由聚合也称为构成超网(supernetting)。CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。 对于 /20 地址块,它的掩码是20个连续的1。斜线记法中的数字就是掩码中1的个数

10.0.0.0/10 可简写为 10/10,也就是把点分十进制中低位连续的0省略。

10.0.0.0/10 隐含地指出 IP 地址 10.0.0.0 的掩码是 255.192.0.0。此掩码可表示为:

      计算机网络(4.11)网络层- 无分类编址CIDR

网络前缀的后面加一个星号* 的表示方法,如 00001010 00*,在星号* 之前是网络前缀,而星号* 表示IP地址中的主机号,可以是任意值。

常用的CIDR 地址块

计算机网络(4.11)网络层- 无分类编址CIDR

构成超网 

前缀长度不超过23位的CIDR 地址块都包含了多个C 类地址。

这些C 类地址合起来就构成了超网。CIDR 地址块中的地址数一定是2的整数次幂。网络前缀越短,其地址块所包含的地址数就越多。 而在三级结构的IP地址中,划分子网是使网络前缀变长。

CIDR 的一个好处是:可以更加有效地分配IPv4的地址空间,可根据客户的需要分配适当大小的CIDR地址块。

2、最长前缀匹配 

使用CIDR 时,路由表中的每个项目由“网络前缀” 和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。

应当从匹配结果中选择具有最长网络前缀的路由: 最长前缀匹配(longest-prefix matching)。网络前缀越长,其地址块就越小,因而路由就越具 体(morespecific)。最长前缀匹配又称为最长匹配或最佳匹配。

【例】

收到的分组的目的地址:D = 206.0.71.130

路由表中的项目:

  • 206.0.68.0/22       1
  • 206.0.71.128/25   2 
  1. 查找路由表中的第 1 个项目:
  2. 第 1 个项目206.0.68.0/22 的掩码M有22个连续的1。
  3. M = 11111111 11111111 11111100 00000000
  4. 因此只需把D的第3个字节转换成二进制。
  5. M =  11111111 11111111 11111100 00000000
  6. AND   D =206.0.01000111.130
  7. 206.0.01000100.0 与 206.0.68.0/22 匹配! 

 

  1. 查找路由表中的第 2 个项目:
  2. AND      D =206.0.71.10000010
  3. 第 2 个项目
  4. 206.0.71.128/25 的掩码M 有 25 个连续的1。
  5. M = 11111111 11111111 11111100 00000000 
  6. 因此只需把D 的第 4 个字节转换成二进制。 
  7. M =    11111111 11111111 11111111 10000000
  8. AND    D =   206.0.71.10000010
  9. 206.0.71.10000010 与 206.0.71.128/25 匹配!

D AND (11111111 11111111 11111100 00000000) = 206.0.68.0/22            匹配
D AND (11111111 11111111 11111111 10000000) = 206.0.71.128/25         匹配

选择两个匹配的地址中更具体的一个,即选择最长前缀的地址。
 

3、使用二叉线索查找路由表 

当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。

为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索 (binary trie)。

IP 地址中从左到右的比特值决定了从根结点逐层向下 层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。为了提高二叉线索的查找速度,广泛使用了各种压缩技术。