IP寻址子网的出现无类域间路由( C I D R )网络互连的一个重要前提条件是要有一个有效的地址结构,并且所有的互联网络用户都应遵守这个地址结构。地址结构可以有许多不同的形式、网络地址总是数字式的,但这些数字可以用二进制表示、十进制表示,甚至用十六进制表示。它们能方便所有的人理解和实现。地址结构能够高度可扩展,或者专门为一小部分用户团体而设计。本章考查由I P协议实现的地址结构。在过去2 0年中,随着I P的重大发展,I P地址结构亦发生了重大变化。本章描述了I P地址结构的演化,解释了一些重要概念,包括分类的I P地址、无类域间路由,子网地址和掩码以及可变长度子网掩码( V L S M )。
4.1 IP寻址I n t e r n e t工程任务组( I E T F )—I n t e r n e t和I P的设计师—选择了适合于机器表示的数值来标识I P网络和主机。因此I n t e r n e t中的每一个网络具有自己独一无二的数值地址—它的网络地址。网络管理人员要确信网络中的每一台主机有与之对应的惟一的主机编号。I P的原始版本I P v 4,使用3 2位的二进制地址,每个地址组织成由点分隔的8位数,每个8位数称为8位位组,二进制数表示对机器很友好,但却不易被用户所理解。因此要提供更直观的使用十进制表示的地址。应该很好地理解二进制与十进制数值系统之间的关系,因为整个I P地址结构是基于二进制和十进制的。二进制与十进制数之间的关系将在4 . 1 . 1节中讨论。3 2位的I P v 4地址意味着I n t e r n e t能支持4 294 967 296个可能的I P v 4地址—这个数量曾经被认为绰绰有余。但是,这些地址被浪费掉许多,包括分配但没被使用的地址、分配不合适第二部分命名和寻址的子网掩码等。其中许多原因及其所带来的影响,会随着读者对I P v 4地址的深入理解而更加清楚。注意IP的新版本即将完成。这个版本是IPv6,它有非常不同的地址结构。IPv6地址有1 2 8位,使用全新的分类,以使地址的使用效率最大化。考虑到I P的新版本广泛使用还需要一些时间,因此本书所举的例子均是I P v 4地址结构,若要获得I P v 6的更多信息可以阅读第10章。
4.1.1 二进制和十进制数以2为基数的数值系统称为二进制数,某一位的1表示的值大小由其位置决定,这非常类似于十进制系统。最右边的数代表1,次右边的数代表1 0,再次右边的数表示1 0 0,依此类推。每一个数位表示的值是其右边数位表示数值的1 0倍。然而,1 0进制数系统提供了1 0个数字表示不同的值( 0~9 ),而二进制数系统仅支持两个有效数字: 0和1。数值所在位置决定了数的大小。最右位置,在1 0进制中表示1,在二进制中亦是如此。次右的数位代表2,下一个位置代表4,再下一个代表8等等。每一个位置上的数表示的值是其右边数位表示数值大小的2倍。一个二进制数对应的十进制数为:把二进制数中为1的位对应的数值相加起来即可获得。从数学上讲,I P v 4地址的每个8位位组(共有4个)能表示的最大值为1 0进制2 5 5,若要一个8位的二进制数等于2 5 5,需要其中的每一位均为1。表4 - 1表示出了二进制与十进制数之间的关系。表4-1 二进制数( 11111111)和十进制数(2 5 5)数字8 7 6 5 4 3 2 1二进制1 1 1 1 1 1 1 1十进制1 2 8 6 4 3 2 1 6 8 4 2 1正如读者所看到的,二进制地址中每位的值均为1。因此计算这个二进制数对应的十进制数可以把各位所表示的数值相加即可,即: 1 2 8 + 6 4 + 3 2 + 1 6 + 8 + 4 + 2 + 1 = 2 5 5。表4 - 2是另一个二进制与十进制数转化的例子。在这个例子中,从右边数第五位上是0,这个位置表示的十进制数为1 6;因此,这个二进制数对应的十进制数应比2 5 5少1 6,即:1 2 8 + 6 4 + 3 2 + 8 + 4 + 2 + 1 = 2 3 9表4-2 二进制数(111 0 1111)和十进制数(2 3 9)数字8 7 6 5 4 3 2 1二进制1 1 1 0 1 1 1 1十进制1 2 8 6 4 3 2 1 6 8 4 2 1二进制与十进制数值之间的这个关系是整个I P地址结构的基石。记住在每个I P v 4地址中有4个二进制8位位组。I P地址结构的其他方面如子网掩码、V L S M以及C I D R均基于这些数值系统。在读者理解各种I P地址实现方式之前,必须明白这些基本的数值系统及其之间的转化。
4.1.2 IPv4地址格式I P v 4地址在1 9 8 1年9月实现标准化。人们考虑到当时的计算情况,尽量使其具有前瞻性。基本的I P地址是分成8位一个单元(称为8位位组)的3 2位二进制数。30使用第二部分命名和寻址下载为了方便人们的使用,对机器友好的二进制地址转变为人们更熟悉的十进制地址。I P地址中的每一个8位位组用0~2 5 5之间的一个十进制数表示。这些数之间用点( . )隔开,这是所谓的点-十进制格式。因此,最小的I P v 4地址值为0 . 0 . 0 . 0,最大的地址值为2 5 5 . 2 5 5 . 2 5 5 . 2 5 5,然而这两个值是保留的,没有分配给私人的端系统。要想知道其中的原因需要考查I E T F实现这个基本地址结构的方式。点-十进制数表示的I P v 4地址分成几类,以适应大型、中型、小型的网络。这些类的不同之处在于用于表示网络的位数与用于表示主机的位数之间的差别。I P地址分成五类,用字母表示:? A类地址? B类地址? C类地址? D类地址? E类地址每一个I P地址包括两部分:网络地址和主机地址,上面五类地址对所支持的网络数和主机数有不同的组合。1. A类地址设计IPv4 A类地址的目的是支持巨型网络,因为对规模巨大网络的需求很小,因此开发了这种结构使主机地址数很大,而严格限制可被定义为A类网络的数量。一个A类I P地址仅使用第一个8位位组表示网络地址。剩下的3个8位位组表示主机地址。A类地址的第一个位总为0 ,这一点在数学上限制了A类地址的范围小于1 2 7 , 1 2 7 是6 4 + 3 2 + 1 6 + 8 + 4 + 2 + 1的和。最左边位表示1 2 8,在这里空缺。因此仅有1 2 7个可能的A类网络。A类地址后面的2 4位( 3个点-十进制数)表示可能的主机地址, A类网络地址的范围从1 . 0 . 0 . 0到1 2 6 . 0 . 0 . 0。注意只有第一个8位位组表示网络地址,剩余的3个8位位组用于表示第一个8位位组所表示网络中惟一的主机地址,当用于描述网络时这些位置为0。注意技术上讲,1 2 7 . 0 . 0 . 0也是一个A类地址,但是它已被保留作闭环(look back)测试之用而不能分配给一个网络。每一个A类地址能支持16 777 214个不同的主机地址,这个数是由2的2 4次方再减去2得到的。减2是必要的,因为I P把全0保留为表示网络而全1表示网络内的广播地址。网络与主机8位位组的比例关系如表4 - 3所示。表4-3 A类地址结构网络部分主机部分8位位组1 2 3 42. B类地址设计B类地址的目的是支持中到大型的网络。B类网络地址范围从1 2 8 . 1 . 0 . 0到1 9 1 . 2 5 4 . 0 . 0。B类地址蕴含的数学逻辑是相当简单的。一个B类I P地址使用两个8位位组表示网络号,另外两个8位位组表示主机号。B类地址的第1个8位位组的前两位总置为1 0,剩下的6位既可以是0也可以是1,这样就限制其范围小于等于1 9 1,由1 2 8 + 3 2 + 1 6 + 8 + 4 + 2 + 1得到。第4章IP网络中的名字和地址使用31下载最后的1 6位( 2个8位位组)标识可能的主机地址。每一个B类地址能支持64 534个惟一的主机地址,这个数由2的1 6次方减2得到。B类网络仅有16 382个。网络与主机8位位组的比例如表4 - 4所示。表4-4 B类地址结构网络部分主机部分8位位组1 2 3 43. C类地址C类地址用于支持大量的小型网络。这类地址可以认为与A类地址正好相反。A类地址使用第一个8位位组表示网络号,剩下的3个表示主机号,而C类地址使用三个8位位组表示网络地址,仅用一个8位位组表示主机号。C类地址的前3位数为11 0,前两位和为1 9 2 ( 1 2 8 + 6 4 ),这形成了C类地址空间的下界。第三位等于十进制数3 2,这一位为0限制了地址空间的上界。不能使用第三位限制了此8位位组的最大值为2 5 5 - 3 2等于2 2 3。因此C类网络地址范围从1 9 2 . 0 . 1 . 0至2 2 3 . 2 5 5 . 2 5 4 . 0。最后一个8位位组用于主机寻址。每一个C类地址理论上可支持最大2 5 6个主机地址( 0~2 5 5 ),但是仅有2 5 4个可用,因为0和2 5 5不是有效的主机地址。可以有2 097 150个不同的C类网络地址。注意在I P地址中,0和2 5 5是保留的主机地址。I P地址中所有的主机地址为0用于标识局域网。同样,全为1表示在此网段中的广播地址。网络和主机8位位组的比例如表4 - 5所示。表4-5 C类地址结构网络部分主机部分8位位组1 2 3 44. D类地址D类地址用于在I P网络中的组播( m u l t i c a s t i n g,又称为多目广播)。D类组播地址机制仅有有限的用处。一个组播地址是一个惟一的网络地址。它能指导报文到达预定义的I P地址组。因此,一台机器可以把数据流同时发送到多个接收端,这比为每个接收端创建一个不同的流有效得多。组播长期以来被认为是I P网络最理想的特性,因为它有效地减小了网络流量。D类地址空间,和其他地址空间一样,有其数学限制, D类地址的前4位恒为111 0,预置前3位为1意味着D类地址开始于1 2 8 + 6 4 + 3 2等于2 2 4。第4位为0意味着D类地址的最大值为1 2 8 + 6 4 + 3 2 + 8 + 4 + 2 + 1为2 3 9,因此D类地址空间的范围从2 2 4 . 0 . 0 . 0到2 3 9 . 2 5 5 . 2 5 5 . 2 5 4。这个范围看起来有些奇怪,因为上界需要4个8位位组确定。通常情况下,这意味着用于表示主机和网络的8位位组用来表示一个网络号。这其中是有原因的!因为D类地址不是用于互联单独的端系统或网络。D类地址用于在一个私有网中传输组播报文至I P地址定义的端系统组中。因此没有必要把地址中的8位位组或地址位分开表示网络和主机。相反,整个地址空间用于识别一个I P地址组( A、B或C类)。现在,提出了许多其他的建议:不需要D类地址空间的复杂性,就可以进行I P组播。32使用第二部分命名和寻址下载网络和主机8位位组的比例如表4 - 6所示。表4-6 D类地址结构主机部分8位位组1 2 3 45. E类地址E类地址虽被定义但却为I E T F所保留作研究之用。因此I n t e r n e t上没有可用的E类地址。E类地址的前4位恒为1,因此有效的地址范围从2 4 0 . 0 . 0 . 0至2 5 5 . 2 5 5 . 2 5 5 . 2 5 5,考虑到E类地址作研究之用且仅在I E T F内部使用,因此,在这里没有必要作进一步讨论了。6. 系统的低效历史上,不同类I P地址之间巨大的差异已经浪费了大量的地址。举例来说,一个中等规模的公司需要3 0 0个I P地址。一个C类地址( 2 5 4个地址)不够用。使用两个C类地址,提供的地址有富余,但是这样一来,一个公司就有两个不同的域,增加了路由表的尺寸—每一个地址空间需要一个路由表项(即使它们属于同一个组织)。另一种选择是, B类地址提供了所有需要的地址,而且在一个域中。但是这样却浪费了65 234个地址,当一个网络有多于2 5 4个主机时就提供一个B类地址,这种情况太常见了。因此,B类地址比其他地址更容易耗尽。或许最浪费的是分配的地址比所需的地址多。任何组织只希望一个地址空间。这些组织不会验证需求量,因此他们会把大部分不用的地址保留,以备将来之用。幸运的是,这种情况不会再发生了。因为大量的I P扩充工作主要用于改进3 2位地址空间的使用效率,三个重要的扩充是:? 子网掩码? 可变长子网掩码? 无类域间路由( C I D R )这三个扩充用于解决不同的问题,是非常不同的机制。子网掩码,无论是固定长度还是可变长度,用于在一个物理网络中分成多个逻辑网络。掩码问题会在本章4 . 2 . 2节讨论。C I D R用于解决原先分类地址策略的低效性。这样可以使路由器更有效地汇聚不同网络地址成单一的路由表项。值得注意的一点是这两种机制不是互斥的;二者可以,也应该结合使用。管理地址空间I n t e r n e t的稳定性和公共使用的网络地址的惟一性直接相关。因此,需要一些机制来保证地址的惟一性。以前这个工作交给I n t e r n e t N I C完成。这个组织现在已失去此功能。由I n t e r n e t编号管理局( I A N A)接替。I A N A后来也已解体,由I C A N N来完成号码和名字分配工作。I C A N N制定了一套富有竞争性的注册机构,允许商业团体互相竞争注册I P名字和号码。最重要的目标是要保证公共使用的地址不能重复。若出现重复会导致I n t e r n e t不稳定,使传送到重复地址的报文能力受到损害。虽然一名网络管理员极有可能选择任意没被注册的地址,但是不应该允许这样做。具有这样地址的计算机只能在其域内正常工作。具有这样地址的互连网络会与第4章IP网络中的名字和地址使用33下载其他合法注册此地址的组织发生冲突。重复的地址会导致路由问题,会破坏I n t e r n e t正确转发报文的能力。
