前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无分类编址 CIDR(构造超网)

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

作者头像
wsuo
发布2020-07-31 15:54:39
3K0
发布2020-07-31 15:54:39
举报
文章被收录于专栏:技术进阶之路技术进阶之路

它的正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。

网络前缀

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

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

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

例如:

220.78.168.0/24
  • CIDR 把网络前缀都相同的连续的 IP 地址组成 “CIDR 地址块”。
128.14.32.0/20

表示的地址块共有 212 个地址(因为斜线后面的

20

是网络前缀的位数,所以这个地址的主机号是

12

位,因为总共是 32 位)。

  • 这个地址块的起始地址是 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 的主机号地址一般不使用。

128.14.32.0/20 表示的地址( 212 个地址):

路由聚合 (route aggregation)

  • 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
  • 路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
  • 路由聚合也称为构成 超网 (supernetting)。
  • CIDR 虽然不使用子网了,但仍然使用 “掩码” 这一名词(但不叫子网掩码)。
  • 对于
/20

地址块,它的掩码是 20 个连续的 1。 斜线记法中的数字就是掩码中 1 的个数

CIDR 记法的其他形式:

  • 10.0.0.0/10 可简写为 10/10,也就是把点分十进制中低位连续的 0 省略。
  • 10.0.0.0/10 隐含地指出 IP 地址 10.0.0.0 的掩码是 255.192.0.0。此掩码可表示为 ( 10代表掩码中1的个数 ) :
  • 网络前缀的后面加一个星号 * 的表示方法,如 00001010 00*,在星号 * 之前是网络前缀,而星号 * 表示 IP 地址中的主机号,可以是任意值。

常用的 CIDR 地址块:

常用的 CIDR 地址块
常用的 CIDR 地址块
  • 前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。
  • 这些 C 类地址合起来就构成了超网。
  • CIDR 地址块中的地址数一定是 2 的整数次幂。
  • 网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
  • CIDR 的一个好处是:可以更加有效地分配 IPv4 的地址空间,可根据客户的需要分配适当大小的 CIDR 地址块。

来看一个例子:

ISP 首先向互联网申请了一个 CIDR 地址块,然后某大学又向 ISP 申请了一个 CIDR 地址块,现在该大学要向他下面的几个系进行分配 ip ,一系有 400 台主机,二系有 200 台主机,三系和四系各有 100 台主机,要求给出如何分配才能使得 ip 刚好够用又不浪费。

我写的解题过程,可能有点模糊 ?

  • 这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目
206.0.64.0/18

就能找到该 ISP。

其实到这里都是很好理解的,细心看一下就能看懂。

最长前缀匹配

  • 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
  • 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配 (longest-prefix matching)。
  • 网络前缀越长,其地址块就越小,因而路由就越具体 (more specific) 。
  • 最长前缀匹配又称为最长匹配或最佳匹配。

还是举个例子有助于理解:

假设收到的分组的目的地址 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)。
  • IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
  • 为了提高二叉线索的查找速度,广泛使用了各种压缩技术。

如果你稍微懂一点数据结构和算法的话,理解起来会非常轻松。

从二叉线索的根节点自顶向下的深度最多有32层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索的规则很简单。先检查IP地址左边的第一位,如为 0,则第一层的节点就在根节点的左下方;如为 1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 网络前缀
  • 最长前缀匹配
  • 使用二叉线索查找路由表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档