第六章 IP网络的子网划分
6.1 子网划分和子网掩码
到现在为止,我们已经讨论了I P地址的结构,其中包含网络地址和主机地址。I P地址中
保留给网络地址的那部分由网络掩码说明。我们也讨论了,对于每种类的地址,在子网掩码中有一个默认的位数。没有用于网络地址的所有其他位都可以用于说明网络上的特定主机。
现在我们将讨论如何通过借用主机地址位,用它们来表示网络的一部分,而进一步将网络分解为子网。
子网划分的目的
在一个网络上,通信量和主机的数量成比例,而且和每个主机产生的通信量的和成比例。
随着网络的规模越来越大,这种通信量可能达到这样的一种地步,即超出了介质的能力,而且网络性能开始下降。在一个广域网中,减少广域网上不必要的通信量也是一个主要的话题。
在研究这样的问题的过程中会发现,一组主机倾向于互相通信,而且和这个组外的通信
非常少。这些分组可以按照一般的网络资源的用途来说明,或者按照几何距离来划分,它使局域网之间的低速广域网连接成为必要。通过使用子网,我们可以将网络分段,因而隔离各个组之间的通信量。为在这些网段之间通信,必须提供一种方法以从一个段向另一个段传递通信量。
这个问题的一个解决方法是用网桥来隔离这些网段。网桥将学习在它的每一边所驻留的
地址,方法是查看M A C地址,然后仅仅转发需要通过网段的数据包。这是一个快速和相对廉价的解决方法,但是缺乏灵活性。例如,如果网桥发现它可以从任何一边而达到给定的地址,则网桥会感到迷惑。这使得一般不可能用网桥建立多余的路径。网桥也传送广播。
一个更加坚固的解决方法是使用路由器,它指挥网络之间的通信量,方法是使用建立网
络目的地和路由器的特定端口之间的联系的表格。每个这样的端口都连接到源网络目的网络或一些中间网络上,这些中间网络可以通向最终的目的网络。通过使用路由器,我们可以为数据定义多个路径,这增强了网络的故障耐受能力和性能。
在路由网络中进行寻址的方法可能仅仅给每个网段一个不同的网络地址。这在隔离的网
络中可以使用,但是如果网络连接到外部世界,则这种结果并不是我们所期望的。为连接到I n t e r n e t上,必须有一个唯一的网络地址,它必须由规则代理机构指定。这些网络地址的需求量非常大,但是通常很少提供。如果没有通过一个网络地址而具有一个公共的入口点,我们也增加了从公共网络到内部网络的路由数据的复杂性。
为得到单个网络的经济性和简单性,同时也要提供内部段和路由我们的网络的能力,我
们使用子网。从外部路由器的角度来看,我们的网络会作为单个的整体出现。然而,在内部,我们仍然通过子网而提供网段,而且用内部路由器来指挥和隔离子网之间的通信量。下面的
章节将讨论子网掩码在定义子网中的角色。
在默认子网掩码中加入位
我们已经了解,一个I P地址必须在它的子网掩码的环境中解释。子网掩码定义了地址
的网络地址部分。每类地址具有默认的掩码,对于A类为8位,对于B类为1 6位,对于C类为2 4位。如果我们希望在一个网络中建立子网,我们在这个默认的子网掩码中加入一些位,它减少了用于主机地址的位数。我们加入到掩码中的位数决定了我们可以配置的子网。因而,在一个划分了子网的网络中,每个地址包含一个网络地址、一个子网地址和一个主机地址。
子网位来自主机地址的最高的相邻的位,并从一个8位位组边界开始,因为默认掩码总是
在8位位组边界处结束。随着我们加入子网位,我们从左到右计数,并用和它们的位位置相关的值,将它们转换为十进制。
6.2 子网规划
子网规划
子网规划的过程涉及到分析网络上的通信量形式,以确定哪些主机应该分在同一个子网中。我们也需要了解我们需要的子网的整体数目,通常考虑发展的因素,而留下一个空间。我们也需要考虑我们正在处理的网络的地址类和我们预料的在每个子网中必须支持的主机的总数。
选择子网掩码
在选择子网过程中,主要的考虑就是我们需要支持多少个子网。当然,这个挑战是平衡每个子网所具有的最大的主机数量和子网的数量。每个网络、子网和地址的主机部分仅仅可以使用3 2位。如果我们选择了一个子网掩码,它提供的子网多于我们所需要的,则这将减少我们可以支持的潜在的主机数量。
在选择掩码时的其他的考虑就是记住对全部为0或全部为1的子网值的限制已经取消了。
使用零子网
由于“0”子网与网络表现为同样的地址,只是掩码不同。为了避免混淆子网与网络,RFC 791中规定“0”子网是非法的,而且强烈不提倡使用。比如网络166.16.0.0按照255.255.255.0的子网掩码进行子网划分,零子网也表示为166.16.0.0。
虽然全“1”和全“0”子网没有被鼓励使用,但是还是可以使用的,而且不会影响网络的正常运行和互联互通。全“1”子网都是允许使用的,但如果你希望应用所有的子网地址空间,就需要特别配置。
要使用零子网,在全局配置模式中执行以下命令:

命令
作用
Red-Giant(config)#ip subnet-zero
允许使用零子网
Red-Giant(config)#no ip subnet-zero
禁止使用零子网

 
RGNOS缺省情况下已经允许使用零子网。
主机数目的影响
记住,我们用于子网的位数要从指定给主机地址的位数中减去。每个二进制位代表2的幂,所以我们所用掉的每位将使每个子网的潜在主机数目减半。因为地址类定义了主机位数的最大数目,每个地址类都受到了子网的不同影响。
因而,如果给定了一个网络规划,它具有一定数量的子网,每个子网期望支持一定数目的主机和一定的地址类,则我们可能发现,我们不得不用较少的子网,支持较少的主机,或选择不同的地址类来满足我们的需要。对于每类,子网对主机数目的影响总结在确定每个子网的地址范围。一旦我们确定了合适的子网掩码,下一个挑战就是确定每个子网的地址和每个子网上主机地址的允许范围。假设了一个带有子网掩码2 5 5 . 2 5 5 . 2 2 4 . 0的网络地址1 3 5 . 1 2 0 . 0 . 0。
确定子网地址
0 0 0 =0       1 3 5 . 1 2 0 . 0 . 0
0 0 1 =3 2      1 3 5 . 1 2 0 . 3 2 . 0
0 1 0 =6 4      1 3 5 . 1 2 0 . 6 4 . 0
0 11 =9 6       1 3 5 . 1 2 0 . 9 6 . 0
1 0 0 =1 2 8     1 3 5 . 1 2 0 . 1 2 8 . 0
1 0 1= 1 6 0    1 3 5 . 1 2 0 . 1 6 0 . 0
11 0 =1 9 2    1 3 5 . 1 2 0 . 1 9 2 . 0
111= 2 2 4      1 3 5 . 1 2 0 . 2 2 4 . 0
一旦我们确定了每个子网的地址,我们就可以确定每个子网内允许的主机地址范围。下面的例子说明了确定地址范围的原则。
1) 第一个可以使用的主机地址比子网I D高1位。换句话说,如果子网是1 2 0 . 1 0 0 . 1 6 . 0,则第一个主机地址是1 2 0 . 1 0 0 . 1 6 . 1。
2) 假设我们为子网使用4位,则下一个较高的子网地址是1 2 0 . 1 0 0 . 3 2 . 0。如果我们从这个地址中减去一位,我们将得到较低的子网的广播地址。这就是地址1 2 0 . 1 0 0 . 3 1 . 2 5 5。
3) 最大的可用主机地址是比广播地址少1的地址,或者1 2 0 . 1 0 0 . 3 1 . 2 5 4。
现在,需要确定子网的实际边界。如果掩码位于8位位组边界上,则这很容易。所以让我们研究一个不那么简单的例子。
考虑带有子网掩码2 5 5 . 2 5 5 . 2 5 2 . 0的网络1 7 2 . 1 6 . 0 . 0。什么是我们可以使用的合法的子网数字,以及它们中的IP地址范围是多少?
如果有一个8位组数,掩码既不是全为0,也不是全为1,则这里就是你应该注意的地方。在这个例子中,第3个8位组是我们所感兴趣的。计算这个掩码的二进制:2 5 2用二进制表示为111111 0 0。为了找到一个合法的子网数字,需要找到最小的有意义的位,它在我们的子网掩码中为1。在8位组内的那个位的位置的值,用2的幂来表示,就是4。所以我们的第一个合法的子网数字是172.16.4.0。为得到剩下的子网数字,我们只需加4:172.16.8.0, 172.16.12.0,172.16.16.0,172,16,20,0,直至172.16.251.0,这是这个例子中63个合法的子网数字中的最后一个。如果掩码恰好为2 5 5 . 2 5 5 . 2 4 8 . 0,第3个8位组掩码以二进制表示为11111 0 0 0,从1 7 2 . 1 6 . 8 . 0开始作为第一个子网,然后加8,而不是4,因为掩码中为1 的最后一位的值是8。
最后的一件事情就是找到每个子网的主机地址范围。我们不会使用全0或全1,因
为那些已经保留给网络数字和直接广播。所以第一个子网的第一个主机地址为
1 7 2 . 1 6 . 4 . 1,最后的一个为1 7 2 . 1 6 . 7 . 2 5 4。第3个8位组数中的7从哪里来?记住,第3个8位组中的两个最小的有意的位是主机数字的一部分,所以它们需要包含在计算中。下一个子网的主机地址为172.16.8.1到172.16.11.254,172.16.12.1到172.16.15.254等等。
学习子网的最后一个提示:你自己计算一些其他的例子,并且如果你需要,不要
害怕写出二进制数字!
6.3 复杂子网
迄今为止,我们将对子网的讨论限制在使用分类的I P地址的简单例子中。本节将介绍一
些更加复杂的子网问题和练习。我们从考虑穿越8位位组边界的子网掩码开始,因为这经常是产生混淆的地方。我们也考虑长度可变的子网掩码( V L S M ),以作为在子网掩码的使用过程中得到更大的灵活性的手段。最后,我们将考虑一个例子,称为超网,它可以作为建立子网的逆过程,因为我们从默认的子网掩码中删除位,而不是加入位。
子网位穿越8位位组边界
无论何时,我们在子网中使用的位数多于8位,就面临超越8位位组编辑的问题。处理这
些子网掩码的一个挑战就是遵守关于全1和全0的限制。为做到这一点,我们不得不将3 2位地址中的子网位看作是独立的位的集合,而且同时要记住它们的位的位置,以及相关的值。
当子网掩码穿越8位位组边界时,最高的8位,它消耗一个完整的8位位组,将在子网之间
具有1的间隔。这意味着0 ~ 2 5 5之间的任何组合都符合这个8位位组,只要在较低的8位位组加入的子网位不全是1或全是0就可以。同时,低8位位组中的位将按照低8位位组中的最低的有效位而增加它的值。为了解这是如何进行的,它给出了一个使用1 0位子网位(掩码2 5 5 . 2 5 5 . 1 9 2 . 0 )和A类网络( 2 . 0 . 0 . 0 )相关的子网I D的例子。
使用1 0位子网位的子网I D例子
子网I D 子网位值注释
2 . 0 . 0 . 0          0000 0000 00        第一个子网I D
2 . 0 . 6 4 . 0        0000 0000 01        第二个子网I D
2 . 0 . 1 2 8 . 0      0000 0000 10        下一个子网
2 . 0 . 1 9 2 . 0      0000 0000 11        低8位位组全为1
2 . 1 . 0 . 0         0000 0001 00        低8位位组全为0
2 . 2 5 5 . 0 . 0      1111 1111 00        高8位位组全为1
2 . 2 5 5 . 1 92. 0   1111 1111 11        最后的合法的子网
6.4 变长子网掩码
定义子网掩码的时候,我们作出了假设,在整个网络中将一致地使用这个掩码。在许多
情况下,这导致浪费了许多主机地址,因为我们的子网在大小上可能差别很大。这种情况的主要例子就是这样的一种情况,我们有一个子网,它通过串口连接了2个路由器。
在这个子网上仅仅有两个主机,每个端口一个,但是我们已经将整个子网分配给了这两
个接口。如果我们使用其中的一个子网,并进一步将其划分为第2级子网,我们将有效地“建
立子网的子网”,并保留其他的子网,以用于其他的用途。“建立子网的子网”的想法构成了V L S M的基础。
我们已经讨论了具有网络地址部分和主机地址部分的I P地址。利用子网划分技术,我们
也可以具有代表子网I D的地址部分。从总体上说,表示网络和子网I D的掩码位可以称为前缀。路由器可以说在前缀的基础上进行路由。如果存在一种方法,可以用一个地址表达特定的前缀信息,我们可以越过网络范围内的假设,这个假设建立在单一的子网掩码的基础之上。为达到这个目的,我们在每个地址参考中的前缀上加入了前缀信息。用于表示这个前缀(子网掩码)的格式称为位计数格式,它用一个斜杠后面的十进制数来加入到地址中。例如,对B类地址的引用表示为1 3 5 . 1 2 0 . 2 5 . 2 0 / 1 6 。“ / 1 6”定义了1 6个子网位,它等于默认的掩码,2 5 5 . 2 5 5 . 0 . 0 ( 1 6位)。
为使用V L S M,我们通常定义一个基本的子网掩码,它将用于划分第1级子网,然后用第2
级掩码来划分一个或多个主要子网。V L S M仅仅可以由新的路由协议,如RIP V2或O S P F识别。
当使用V L S M时,所有的子网I D,包括全1和全0子网,都是合法的。