网络层——子网和超网

划分子网

从两级 IP 地址到三级 IP 地址

在 ARPANET 的早期,IP 地址的设计确实不够合理:

  • IP 地址空间的利用率有时很低。
  • 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
  • 两级的 IP 地址不够灵活。

为解决上述问题,在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。这种做法叫做划分子网。

划分子网的基本思路:

  1. 一个拥有很多物理网络的单位,可将所属的物理网络划分为若干个子网(subnet)。划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
  2. 划分子网的方法是从主机号借用若干个位作为子网号subnet-id,而主机号host-id也就相应减少了若干个位。于是两级 IP 地址在本单位内部就变为三级 IP 地址:网络号、子网号和主机号。
    1
    IP地址 ::= {<网络号>, <子网号>, <主机号>}
  1. 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号net-id,先找到连接在本单位网络上的路由器。然后此路由器在收到 IP 数据报后,再按目的网络号net-id和子网号subnet-id找到目的子网。最后就将 IP 数据报直接交付目的主机。

上图表示某单位拥有一个 B 类 IP 地址,网络地址是145.13.0.0。凡目的地址是145.13.x.x的数据报都被送到这个网络上的路由器R1。

假定子网号占用 8 位,在增加了子网后,主机号就只有 8 位。所划分的三个子网分别是:145.13.3.0,145.13.7.0,145.13.21.0。整个网络对外部仍表现为一个网络,其网络地址仍然是145.13.0.0145.13.0.0上的路由器在收到外来的数据报后,再根据数据报的目的地址把它转发到相应的子网。

当没有划分子网时,IP 地址是两级结构。划分子网后 IP 地址就变成了三级结构。划分子网只是把 IP 地址的主机号host-id这部分进行再划分,而不改变 IP 地址原来的网络号net-id

子网掩码

从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。

使用子网掩码(subnet mask)可以找出 IP 地址中的子网部分。

规则:

  • 子网掩码长度 = 32 位
  • 子网掩码左边部分的一连串 1,对应于网络号和子网号
  • 子网掩码右边部分的一连串 0,对应于主机号

默认子网掩码

子网掩码是一个网络或一个子网的重要属性。

路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。

路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。

若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。

子网划分方法

有固定长度子网和变长子网两种子网划分方法。

在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。

虽然根据已成为互联网标准协议的 RFC 950 文档,子网号不能为全 1 或全 0,但随着无分类域间路由选择 CIDR 的广泛使用,现在全 1 和全 0 的子网号也可以使用了,但一定要谨慎使用,确认你的路由器所用的路由选择软件是否支持全 0 或全 1 的子网号这种较新的用法。

划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。

示例

已知 IP 地址是141.14.72.24,子网掩码是255.255.224.0。试求网络地址。

上例中,若子网掩码改为255.255.224.0,试求网络地址,讨论所得结果。

不同的子网掩码得出相同的网络地址。但不同的掩码的效果是不同的。

使用子网时分组的转发

在不划分子网的两级 IP 地址下,从 IP 地址得出网络地址是个很简单的事。但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。因此分组转发的算法也必须做相应的改动。

在划分子网情况下路由器转发分组的算法:

  1. 从收到的分组的首部提取目的 IP 地址 D。
  2. 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行3。
  3. 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行 4。
  4. 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 5。
  5. 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 6。
  6. 报告转发分组出错。

示例

已知互联网和路由器 R1 中的路由表。主机 H1 向 H2 发送分组。试讨论 R1 收到 H1 向 H2 发送的分组后查找路由表的过程。

主机 H1 要发送分组给 H2,要发送的分组的目的 IP 地址:128.30.33.138。因此 H1 首先检查主机128.30.33.138是否连接在本网络上
如果是,则直接交付;否则,就送交路由器 R1,并逐项查找路由表。

主机 H1 首先将本子网的子网掩码255.255.255.128与分组的 IP 地址128.30.33.138逐比特相与”(AND 操作) 。

得出128.30.33.128不等于H1的网络地址。因此 H1 必须把分组传送到路由器 R1 然后逐项查找路由表。

路由器 R1 收到分组后就用路由表中第 1 个项目的子网掩码和128.30.33.138逐比特 AND 操作。

无分类编址 CIDR

网络前缀

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

  • B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完毕!
  • 互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
  • 整个 IPv4 的地址空间最终将全部耗尽。

IP 编址问题的演进

RFC 1009 就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。使用变长子网掩码 VLSM(Variable Length Subnet Mask)可进一步提高 IP 地址资源的利用率。在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR(Classless Inter-Domain Routing)。

CIDR 最主要的特点

1. CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。

CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。

IP 地址从三级编址(使用子网掩码)又回到了两级编址。

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

1
IP地址 ::= {<网络前缀>, <主机号>} 

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

2. 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的个数。

CIDR 记法的其他形式

10.0.0.0/10可简写为10/10,也就是把点分十进制中低位连续的 0 省略。
10.0.0.0/10隐含地指出 IP 地址10.0.0.0的掩码是255.192.0.0。此掩码可表示为:

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

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

这些 C 类地址合起来就构成了超网。

CIDR 地址块中的地址数一定是 2 的整数次幂。

网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。

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

CIDR 地址块划分举例

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

最长前缀匹配

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

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

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

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

最长前缀匹配举例

使用二叉线索查找路由表

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

为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索 (binary trie)。
IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。

为了提高二叉线索的查找速度,广泛使用了各种压缩技术。

用 5 个前缀构成的二叉线索

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

打赏
  • Copyrights © 2017-2023 WSQ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信