之一:理解IPv4地址的含义网络没有地址就不能工作:只要你发送某种东西,你就需要具体说明这个东西要发到哪里和从哪里发出来的。要做一个高效率的网络工程师或者管理员,你需要全面理解IP地址:你需要能够依靠自己思考。如果发生了某些问题,很可能是某些地址分配不正确。迅速查明故障所在位置对于英雄和普通人来说是有很大区别的。普通人需要很长时间才能修复这个问题。在下一篇文章介绍子网之前,我想以最原始的格式全面介绍一下IP地址。这对于理解子网是非常重要的。IPv4地址和32位数字IP地址只是32位二进制数字。但是,它们是重要的二进制数字:你需要知道如何处理这些数字。当处理子网掩码的时候,新的网络管理员一般会混淆他们没有记住的子网掩码。所有这些子网掩码的总和是移动代表一个“网络”的地址部分与代表一台“主机”的部分之间的界限。一旦你适应了这种关于IP地址和子网掩码的思维方式,你就掌握了IP地址的方法。二进制非常简单。在二进制中,数码只有0和1。一个32位数码有32个0和1。我们都适应十进制数码。在十进制中,数码中的每一个位置都可以是0至9之间的任何一个数字。在二进制中,每一个位置或者是一个0,或者是一个1。下面是以二进制表示的255.255.255.0的地址。11111111.11111111.11111111.00000000为了方便,网络工程师一般把IP地址分为4个8位字段,或者称作8位字节。在8位数字中,如果所有的字节都设置为1,那么,这个数码等于255。在上面的地址中,11111111代表255,00000000代表0。二进制发挥作用的方法是以二次方为基础的。每一个字节代表一个不同的二次方。从左手端开始,最有意义的数位,数字以下列方式组成:2的次方232...2726252423222120小数4,294,967,296...1286432168421这个结果是加法。这就是说,如果所有的字节不变,你可以为每一个位置简单地加2的次方值。例如,如果我们有一个8位数11111111,我们可以简单地加:27+26+25+24+23+22+21+20=255现在我们设法理解一个不平凡的例子:11110000我们可以看到,在上述8位数中,有4位数是“固定的”。把这些位置上的2的次方的值加起来,结果是:27+26+25+24=240就是这样简单。如果你能把二进制数字转换为小数形式,你就很容易猜出子网掩码和网络地址。我们将在下一篇文章中介绍这个问题。现在,把重点集中在32位IPv4地址本身,有一些不同的类型需要了解。所有的IP地址都可以在0.0.0.0至255.255.255.255的数字范围内。但是,有些地址有特殊用途。环回地址(loopback):不离开主机的数据包(也就是说,这些数据包不会通过外部网络接口)单播地址:指定向一个IP地址发送的数据包。例如:2.2.2.2多播地址:被路由器复制并且最终由组播路由机制转发的数据包。例如:226.0.0.2有限广播:一个广播数据包,发送给每一台主机,仅限于本地子网。例如:255.255.255.255定向广播:发送到一个具体子网的数据包,然后进行广播。例如,假如我们不在这个子网,使用的地址是:1.1.1.255还有一些IP地址的特殊情况,包括专用和组播地址。在224.0.0.0至239.255.255.255之间的地址范围是为组播保留的。在互联网上,任何低于这个范围的地址都可能成为被攻击的目标,除非为RFC1918保留的地址和为一些其它特殊用途分配的地址。这些1918地址是专用地址,这就意味着互联网路由器不会发送这些地址。这个地址范围包括:•10.0.0.0-10.255.255.255•172.16.0.0-172.31.255.255•192.168.0.0-192.168.255.255这些IP地址能够分配给本地的许多计算机,你愿意分配给多少台计算机都可以。但是,在这些计算机访问互联网之前,这些地址必须翻译成能够全球路由的地址。这个工作通常由网络地址转换(NAT)完成。1918地址并不是惟一保留的地址空间。但是,这些地址的定义为“本地站点”。组播也有一个保留的地址范围。这个地址范围并不是连接到互联网的:224.0.0.0至224.0.0.255是组播“本地连接”的地址。为了提供这个讲座的下一篇文章的必要的背景知识,我们需要确认大家都理解一个本地子网的概念。一旦我们分配给一台计算机一个合法的地址,假如子网掩码设置正确,这台计算机就可以同本地网络对话。子网掩码告诉这个操作系统哪一个IP地址在本地子网上,哪一个IP地址不在本地子网上。我们希望与之对话的IP地址位于本地子网,那么,这个操作系统不用使用路由器就能够直接与它对话。换句话说,操作系统能够使用ARP协议获得目标系统的物理地址并且开始对话。IP地址和子网掩码的设置对于普通的24位网络来说是非常简单的。标准的255.255.255.0子网掩码的意思是前三个八位字节是网络地址,最后的部分是为主机保留的。例如,一台计算机被分配了10.0.0.1的IP地址和255.255.255.0的子网掩码(如果你用二进制书写的话是24位),这台计算机能够同10.0.0.1至10.0.0.255地址范围内的任何人对话。小结•IP地址只是32位数字。子网掩码只是一个能够上下滑动这个IP地址字节的“盖子”,以便创建更大或者更小的网络。•一个IP地址的网络部分告诉主机它的本地子网有多大,本地子网然后告诉主机它可以直接与谁对话。•单向广播数据包发送到一台计算机,广播数据包发送到许多台计算机。之二:理解子网和CIDR我们将学习有关子网和CIDR(无类域间路由)的知识。我们希望能够以比某些图书提供的更容易管理的方式学习这些知识。让我们先搞清楚一件事情:在子网中是没有“类别”的。在以前,网络分为A类、B类和C类。这些网络只能分为相等的几部分,因此现在我们引入了可变长度子网掩码(VLSM)来解决这个问题。老类别的C类网络是一个24位网络地址,B类网络是一个16位网络地址,A类网络是一个8位网络地址(如果你不清楚这个含义,请参阅“理解IP地址”那一讲)。这就是你需要了解的有关网络类别的全部内容。这些网络类别现在已经不存在了。一个IP地址由一个主机部分和一个网络部分组成。与子网掩码配合使用,你可以确定这个地址中哪一个部分是网络部分、这个网络有多大和网络开始的地方在哪里。操作系统需要知道这些信息,以便确定本地子网使用什么IP地址以及哪些地址属于外网并需要一台路由器来访问那些地址。相邻的路由器也需要知道这个子网有多大,以便这些路由器仅向这个方向发送合适的通信。一个网络地址中主机部分与网络部分的划分完全是由子网掩码确定的。CIDR(发音为“cider”的网络地址使用网络/子网掩码的风格。这个IP地址/子网掩码的组合能告诉你很多信息:网络部分/主机部分0000000000000000/0000000000000000上述32位字符串代表一个16位网络,因为这个地址中的16位被掩盖了。在本文中的例子(和现实世界)中,某些子网掩码被反复提及。这些子网掩码本身并不特殊。子网地址就是一个简单的32位字符串,其中有任何位数被掩盖(MASK)。不过,使用一个常用的子网掩码(如24位网络地址)开始研究对于记忆和理解关于子网的概念和划分非常有利。让我们先看一下个标准的子网划分表,这个表中也包括了一些有趣的其它信息:子网掩码位数24位子网数量一个子网的地址数量对主机部分的位挪用/2412560/2521281/264642/278323/2816164/293285/306446/3112827由于是二进制数字,这使一个31位网络有两个可用的IP地址。设想一下这个子网:2.2.2.0/31。如果我们以二进制来表达这个网络地址,这个地址看起来是这样的:00000010.00000010.00000010.00000000(2.2.2.0)11111111.11111111.11111111.11111110(31)子网掩码“掩盖”被网络部分使用的位数。这意味着被掩盖的位数将用于网络地址部分。可供主机地址使用的位数等于1。这个数字可以是一个0或者一个1。这就导致了两个可用的IP地址,就像上面的表格显示的一样。另外,从上面的表格中可以看到,子网掩码(从主机部分挪用的)位数每增加一,子网中可用的地址数量就被削减一半。现在让我们来分析“192.168.0.200/26”的广播地址、网络地址和掩码。这个IP地址的掩码很简单:为255.255.255.192(26位子网掩码的含义是主机用6位,2的6次方等于64,255减去64减1等于192)。你能够在网络上查到子网地址表。这个表还能为你列出所有的信息。但是,我们更感兴趣地是教人们理解这里所发生的事情。这个子网掩码可以告诉你,这个网络地址中惟一需要我们关心的部分是最后一个字节:广播地址和网络地址的开头都是192.168.0。搞清楚这最后一个字节的含义很像是为一个划分一个24位网络。但是,如果这个提示对你没有帮助,你甚至不需要考虑这个问题。每一个26位地址的网络都有64台主机。这个网络的地址范围是从.0至.63、从.64至.127,从.128至.191,以及从.192至.255。我们的地址192.168.0.200/26在.192至.255网段中。因此,这个网络的地址是192.168.0.192/26。这个广播地址就更简单:192用二进制表示是11000000。取最后的6位数(这些字节被掩码“关闭”了),把这些字节“打开”,你得到了什么?192.168.0.255。来看一下你是否已经理解了这一切,现在计算192.168.0.44/26的网络地址和广播地址。(网络地址:192.168.0.0/26;广播地址:192.168.0.63)。一开始这些地址是很难一下子就看出来。这时制作一个表格会很有帮助。如果你计算出你要每一个子网有6台主机(包括不能使用的网络和广播地址是8台主机),你就可以制作下面这个表格。下面是2.2.2.0/29、2.2.2.8/29、2.2.2.16/29以及最后一个子网是2.2.2.249/29。子网编号网络地址第一个IP最后一个IP广播地址12.2.2.02.2.2.12.2.2.62.2.2.722.2.2.82.2.2.92.2.2.142.2.2.1532.2.2.162.2.2.172.2.2.222.2.2.23322.2.2.2492.2.2.2502.2.2.2542.2.2.255实际上,你很可能偶尔发现这样的网络。这种网络划分为三个26位网络地址,并且最后一个26位网络地址分为两个27位网络地址。如果你已经能够制作上述表格将会更容易理解这个问题。这就是你需要知道的全部东西。在16位网络地址和24位网络地址范围内使用更大的子网是比较复杂的。但是,原则是一样的。都是一个32位地址和一个子网掩码。然而,一定要认识到子网的使用是受到某些限制的。我们不能分配以10.1.0.32开头的26位网络地址。如果我们把10.1.0.32/26的IP地址和子网掩码发送给大多数操作系统,操作系统只会认为我们发送的起始地址是10.1.0.0/26。这是因为26位地址空间需要64个地址,而子网划分会从这个位数的自然分界线开始。因些,如果在上述表格中,你把某子网从2.2.2.3/29开始?实际的结果却是2.2.2.0/29。这些复杂的问题确实需要一个简明的例子。请记住,当你从这个网络主机部分提取另一位以便创建一个更大的子网掩码时,IP地址数量在一个子网内是如何被减少一半的。这个原则在相反的情况下也发挥作用。如果我们有一个拥有128台主机的25位网络地址,并且从网络(掩码)部分挪用一位,我们现在就有一个拥有256台主机的24位网络地址。使用搜索引擎Google在网络上搜索“subnettable”(子网表),可以立即看到子网掩码与网络大小的关系。如果一个16位网络地址拥有65535个地址,一个17位网络地址拥有的网络地址将减少一半,一个15位网络地址拥有的网络地