无分类编址 CIDR(构造超网)

无分类域间路由选择 CIDR(Classless Inter-Domain Routing,CIDR 的读音是“sider”)最主要的特点有两个:

  1. CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念。

    CIDR 把 32 位的 IP 地址划分为前后两个部分:

    • 前面部分是“网络前缀 ”(network-prefix)(或简称为“前缀 ”),用来指明网络

    • 后面部分则用来指明主机

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

    • 由于一个 CIDR 地址块中有很多地址,所以在路由表中就利用 CIDR 地址块来查找目的网络。这种地址的聚合常称为路由聚合 (route aggregation),它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由。路由聚合也称为构成超网(supernetting)

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

CIDR 使用“斜线记法 ”(slash notation),或称为 CIDR 记法,即在 IP 地址后面加上斜线 “/”,然后写上网络前缀所占的位数。

最长前缀匹配

在使用 CIDR 时,由于采用了网络前缀这种记法,IP 地址由网络前缀和主机号这两个部分组成,因此在路由表中的项目也要有相应的改变。这时,每个项目由“网络前缀 ”和“下一跳地址 ”组成。但是在查找路由表时可能会得到不止一个匹配结果。

此时,应当从匹配结果中选择具有最长网络前缀的路由。这叫做最长前缀匹配 (longest-prefix matching),这是因为网络前缀越长,其地址块就越小,因而路由就越具体(more specific)

使用二叉线索查找路由表

二叉线索(binary trie) 是一种特殊结构的树。IP 地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。一个 IP 地址存入二叉线索的规则很简单:

  1. 先检查 IP 地址左边的第一位:

    • 如为 0,则第一层的节点就在根节点的左下方;

    • 如为 1,则在右下方。

  2. 然后再检查地址的第二位,构造出第二层的节点。

  3. 依此类推,直到唯一前缀的最后一位。

为了简化二叉线索的结构,可以先找出对应于每一个 IP 地址的唯一前缀(uniqueprefix)。所谓唯一前缀就是在表中所有的 IP 地址中,该前缀是唯一的。这样就可以用这些唯一前缀来构造二叉线索。

在进行查找时,只要能够和唯一前缀相匹配就行了。

要将二叉线索用于路由表中,还必须使二叉线索中的每一个叶节点包含所对应的网络前缀和子网掩码。当搜索到一个叶节点时,就必须将寻找匹配的目的地址和该叶节点的子网掩码进行逐位“与”运算,看结果是否与对应的网络前缀相匹配。若匹配,就按下一跳的接口转发该分组。否则,就丢弃该分组。

Last updated