划分子网在一定程度上缓解了因特网在发展中遇 到的困难。然而在 1992 年因特网仍然面临三个必 须尽早解决的问题,这就是: B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 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 地址从三级编址(使用子网掩码)又回到了两级编址。

无分类的两级编址的记法是: IP地址 ::= {<网络前缀>, <主机号>}

CIDR 还使用“斜线记法”(slash notation),它又称为CIDR记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。 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 的主机号地址一般不使用。

路由聚合:

一个 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。此掩码可表示为

构成超网:

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

最长前缀匹配  

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

应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。

网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。

最长前缀匹配又称为最长匹配或最佳匹配。

最长前缀匹配举例:

收到的分组的目的地址 D = 206.0.71.128 路由表中的项目:206.0.68.0/22 (ISP) 206.0.71.128/25 (四系)

查找路由表中的第 1 个项目:

第 1 个项目 206.0.68.0/22 的掩码 M 有 22 个连续的 1。

M = 11111111 11111111 11111100 00000000

因此只需把 D 的第 3 个字节转换成二进制

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

D AND (11111111 11111111 11111111 10000000) = 206.0.71.128/25 匹配

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

使用二叉线索查找路由表

当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。 为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)。 IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。 为了提高二叉线索的查找速度,广泛使用了各种压缩技术。

32 位的 IP 地址 唯一前缀

01000110 00000000 00000000 00000000 0100

01010110 00000000 00000000 00000000 0101

01100001 00000000 00000000 00000000 011

10110000 00000010 00000000 00000000 10110

10111011 00001010 00000000 00000000 10111

最新文章

  1. c 二叉树的使用
  2. Rxlifecycle(二):源码解析
  3. WPF中模板选择和DataContext的一些使用
  4. BZOJ1968 [Ahoi2005]COMMON 约数研究
  5. [LeetCode]题解(python):074-Search a 2D Matrix
  6. 百度地图 &gt;&gt; 自定义控件
  7. zxing.dll生成条码
  8. eclipse tomcat内存溢出,加大内存
  9. DependencyProperty
  10. android apk打包之后js调用失效的解决办法
  11. Laravel 数据插入
  12. systemd-journal[825]: Forwarding to syslog missed 99 messages
  13. Oracle中的游标的原理和使用详解
  14. MySQL的存储引擎与日志说明
  15. day16,模块 , 用户管理系统 , 购物车程序 , 分页显示.
  16. Postman代码测试工具如何用?
  17. 定义返回结果 Resultmodel
  18. 控件屏蔽Ctrl+C 复制
  19. Laravel常见问题集锦
  20. Xamarin入门,开发一个简单的练手APP

热门文章

  1. iOS开发——Xcode快捷键
  2. cocos2d-x 跨平台usleep方法
  3. ul中li分列显示
  4. React Native 之 HelloWorld
  5. linux内核设计与实现笔记 进程调度
  6. bootstrap中下拉菜单点击事件 uncaught syntaxerror unexpected end of input异常问题
  7. iOS 准备
  8. 【HDU 5808】 Price List Strike Back (整体二分+动态规划)
  9. 封装 INI 文件读写函数
  10. 我用Cocos2d-x模拟《Love Live!学院偶像祭》的Live场景(一)