它的正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
无分类的两级编址的记法是:
CIDR 使用 “斜线记法” (slash notation),它又称为 CIDR 记法,即在 IP 地址后面加上一个斜线 “/
” ,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。
例如:
表示的地址块共有 212 个地址(因为斜线后面的
是网络前缀的位数,所以这个地址的主机号是
位,因为总共是 32 位)。
128.14.32.0
。/20
地址块”。 地址块的最小地址:128.14.32.0
地址块的最大地址:128.14.47.255
128.14.32.0/20 表示的地址( 212 个地址):
路由聚合 (route aggregation)
地址块,它的掩码是 20 个连续的 1。 斜线记法中的数字就是掩码中 1 的个数
。
CIDR 记法的其他形式:
常用的 CIDR 地址块:
来看一个例子:
ISP 首先向互联网申请了一个 CIDR 地址块,然后某大学又向 ISP 申请了一个 CIDR 地址块,现在该大学要向他下面的几个系进行分配 ip ,一系有 400 台主机,二系有 200 台主机,三系和四系各有 100 台主机,要求给出如何分配才能使得 ip 刚好够用又不浪费。
我写的解题过程,可能有点模糊 ?
就能找到该 ISP。
其实到这里都是很好理解的,细心看一下就能看懂。
最长前缀匹配
(longest-prefix matching)。还是举个例子有助于理解:
假设收到的分组的目的地址 D = 206.0.71.130
路由表中的项目:
地址块 | 接口 |
---|---|
206.0.68.0/22 | 1 |
206.0.71.128/25 | 2 |
现在查找路由表中的第 1 个项目:
发现第 1 个项目 206.0.68.0/22
的掩码 M 有 22 个连续的 1。
M = 11111111 11111111 11111100 00000000
因此只需把 D 的第 3 个字节转换成二进制。
再查找路由表中的第 2 个项目:
第 2 个项目 206.0.71.128/25
的掩码 M 有 25 个连续的 1。
M = 11111111 11111111 11111100 00000000
因此只需把 D 的第 4 个字节转换成二进制。
比较一下二者:
明显第二个地址更具体一点,所以我们选择第二个地址,也称为最长前缀地址。
自上而下
地按层次进行查找。这里最常用的就是二叉线索 (binary trie)。如果你稍微懂一点数据结构和算法的话,理解起来会非常轻松。
从二叉线索的根节点自顶向下的深度最多有32层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索的规则很简单。先检查IP地址左边的第一位,如为 0,则第一层的节点就在根节点的左下方;如为 1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。