IP地址和子网划分

本章内容

·IP地址层次结构

·IP地址分类

·公网地址

·私网地址

·保留的IP地址

·等长子网划分

·变长子网划分

·超网本章讲解IP地址的格式、子网掩码的作用、IP地址的分类以及一些特殊的地址,介绍什么是公网地址和私网地址,以及私网地址如何通过NAT访问Internet。

为了避免IP地址的浪费,我们需要根据每个网段的计算机数量分配合理的IP地址块,有可能需要将一个大的网段分成多个子网。本章给大家讲解如何进行等长子网划分和变长子网划分。当然,如果一个网络中的计算机数量非常多,有可能一个网段的地址块容纳不下,也可以将多个网段合并成一个大的网段,这个大的网段就是超网。最后会给大家介绍子网划分和合并网络的规律。

3.1 学习IP地址的预备知识

网络中计算机和网络设备接口的IP地址由32位的二进制数组成,我们后面学习的IP地址和子网划分需要将二进制数转换成十进制数,还需要将十进制数转换成二进制数。因此在学习IP地址和子网划分之前,先补充一下二进制的相关知识,同时要求大家记住下面讲到的二进制和十进制之间的关系。

3.1.1 二进制和十进制

学习子网划分,需要大家看到一个十进制形式的子网掩码时就能很快地判断出该子网掩码写成二进制形式的话有几个1;看到一个二进制形式的子网掩码时,也要能熟练写出该子网掩码对应的十进制形式的子网掩码。二进制是计算技术中广泛采用的一种数制,二进制数是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,当前的计算机系统使用的基本上都是二进制。下面列出二进制和十进制的对应关系,要求最好记住这些对应关系,其实也不用死记硬背,这里有规律可循,如下所示,二进制数中的1向前移1位,对应的十进制数乘以2。

二进制 十进制

1 1

10  2

100  4

1000  8

10000 16

100000 32

1000000 64

10000000  128

下面列出的二进制数和十进制数的对应关系最好也记住,要求给出下面的一个十进制数,立即就能写出对应的二进制数,给出一个二进制数,能立即写出对应的十进制数。后面给出了记忆规律。

二进制 十进制

10000000 128

11000000 192

这样记10000000+100000,

也就是128+64=192

11100000 224 这样记10000000+1000000+100000,也就是128+64+32=224

11110000 240 这样记128+64+32+16=240

11111000 248 这样记128+64+32+16+8=248

11111100 252 这样记128+64+32+16+8+4=252

11111110 254 这样记128+64+32+16+8+4+2=254

11111111 255 这样记128+64+32+16+8+4+2+1=255

可见8位二进制数全是1,最大值写成十进制数就是255。

万一忘记上面的对应关系,可以使用下面的方法,如图3-1所示,只要记住数轴上的几个关键点,对应关系立刻就能想出来。画一条线,左端代表二进制数00000000,右端代表二进制数11111111。

image.png

可以看到,从0到255共计256个数字,中间的数字就是128,对应的二进制数就是10000000,这是一个分界点,128以前的8位二进制数的最高位都是0,128之后的二进制数的最高位都是1。

128到255中间的数,就是192,二进制数就是11000000,这就意味着192以后的二进制数的最前面两位都是1。

192到255中间的数,就是224,二进制数就是11100000,这就意味着224以后的二进制数的最前面3位都是1。

通过这种方式很容易找出0到128之间的数64,它是二进制数01000000对应的十进制数。0到64之间的数32,是二进制数00100000对应的十进制数。

通过这种方式,即便忘记上面的对应关系,只要画一条数轴,按照上面的方法很快就能找到二进制和十进制的对应关系。

3.1.2 二进制数的规律

在后面学习合并网段时,需要判断给出的几个子网是否能够合并成一个网段,这要求大家能够写出一个十进制数转换成二进制数后的后几位。下面就给大家看看二进制数的规律,教大家一种能快速写出一个数的二进制形式的后几位的方法,如图3-2所示。

image.png

通过十进制和二进制的对应关系能找到以下规律:

能够被2整除的数,写成二进制形式,后一位是0。如果余数是1,则最后一位是1。

能够被4整除的数,写成二进制形式,后两位是00。如果余数是2,那就把2写成二进制形式,后两位是10。

能够被8整除的数,写成二进制形式,最后3位是000。如果余数是5,就把5写成二进制形式,后3位是101。

能够被16整除的数,写成二进制形式,最后4位是0000。如果余数是6,就把6写成二进制形式,最后4位是0110。

我们可以得出规律,如果想写出一个十进制数转换成二进制数后的后面n位,可以将该数除以2n,将余数写成n位的二进制数即可。

根据前面的规律,写出十进制数242转换成二进制数后的最后4位。

24是16,242除以16,余2,将余数写成4位的二进制数就是0010。

3.2 理解IP地址

IP地址就是给每台连接到Internet的主机分配的一个32位的地址。IP地址用来定位网络中的计算机和网络设备。

3.2.1 MAC地址和IP地址

计算机的网卡有物理层地址(MAC地址),为什么还需要IP地址呢?

如图3-3所示,网络中有3个网段,一台交换机一个网段,使用两台路由器连接这3个网段。图中的MA、MB、MC、MD、ME、MF以及M1、M2、M3和M4,代表计算机和路由器接口的MAC地址。

image.png

计算机A给计算机F发送一个数据包,计算机A在网络层给数据包添加源IP地址(10.0.0.2)和目标IP地址(12.0.0.2)。

该数据包要想到达计算机F,要通过路由器1进行转发,该数据包如何才能让交换机1转到路由器1呢?那就需要给数据包添加MAC地址,源MAC地址为MA,目标MAC地址为M1。

路由器1收到该数据包,需要将该数据包转发到路由器2,这就要求将数据包重新封装成帧,帧的目标MAC地址是M3、源MAC地址是M2,这也要求重新计算帧校验序列。数据包到达路由器2,数据包需要重新封装,目标MAC地址为MF,源MAC地址为M4。交换机3将该帧转发给计算机F。

从图3-3可以看出,数据包的目标IP地址决定了数据包最终到达哪一台计算机,而目标MAC地址决定了数据包的下一跳由哪台设备接收,不一定是终点。

如果全球的计算机网络是一个大的以太网,仅使用MAC地址就可以通信,那就不需要IP地址了。真要是这样的话,大家想想那样将是什么样的场景?一台计算机发出广播帧,全球计算机都能收到,都要处理,整个网络的带宽将会被广播帧大量占用。所以还必须让路由器隔绝广播,让路由器负责在不同网络间转发数据包,这就需要IP地址。

3.2.2 IP地址的组成

在讲解IP地址之前,先介绍一下大家熟知的电话号码,让你们通过电话号码来理解IP地址。

大家都知道,电话号码由区号和本地号码组成。如图3-4所示,石家庄地区的区号是0311,北京市的区号是010,保定地区的区号是0312。同一地区的电话号码有相同的区号。打本地电话不用拨区号,打长途需要拨区号。

image.png

和电话号码一样,计算机的IP地址也由两部分组成,一部分为网络标识,另一部分为主机标识。如图3-5所示,同一网段的计算机网络部分相同,路由器连接的是不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。

image.png

计算机在和其他计算机通信之前,首先要判断目标IP地址和自己的IP地址是否在同一网段,这决定了为数据包添加的目标MAC地址是目标计算机还是路由器接口的MAC地址。

3.2.3 IP地址格式

按照TCP/IP协议规定,IP地址用32位的二进制数来表示,也就是32比特,换算成字节,就是4个字节。例如一个采用二进制形式的IP地址是“10101100000100000001111000111000”,这么长的IP地址,人们处理起来也很费劲。为了方便人们使用,这些IP地址通常被分割为4个部分,每一部分8位二进制数,中间使用符号“.”分开,分成4部分的二进制地址10101100.00010000.00011110.00111000。IP地址经常被写成十进制数的形式,于是,上面的IP地址可以表示为“172.16.30.56”。IP地址的这种表示法叫作“点分十进制表示法”,这显然比1和0容易记忆。

image.png

点分十进制这种IP地址写法,方便我们书写和记忆,通常我们为计算机配置的IP地址就是这种写法。本书为了方便描述,对IP地址的这4部分进行了编号,从左到右,分别称为第1部分、第2部分、第3部分和第4部分,如图3-6所示。

8位的二进制数11111111转换成十进制数就是255。因此点分十进制的每一部分最大不能超过255。大家看到给计算机配置IP地址时,还会配置子网掩码和网关,下面介绍子网掩码的作用。

3.2.4 子网掩码的作用

子网掩码(Subnet Mask)又叫网络掩码、地址掩码,是一种用来指明IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

如图3-7所示,计算机的IP地址是131.107.41.6,子网掩码是255.255.255.0,所在网段是131.107.41.0,主机部分归零,就是该主机所在的网段。该计算机和远程计算机通信,目标IP地址只要前面3部分是131.107.41,就认为和该计算机在同一个网段,比如该计算机的地址和IP地址131.107.41.123在同一个网段,但和IP地址131.107.42.123不在同一个网段,因为网络部分不相同。

image.png

如图3-8所示,计算机的IP地址是131.107.41.6,子网掩码是255.255.0.0,该计算机所在网段是131.107.0.0。该计算机和远程计算机通信,目标IP地址只要前面两部分是131.107,就认为和该计算机在同一个网段,比如该计算机的地址和IP地址131.107.42.123在同一个网段,但和IP地址131.108.42.123不在同一个网段,因为网络部分不同。

image.png

如图3-9所示,计算机的IP地址是131.107.41.6,子网掩码是255.0.0.0,该计算机所在网段是131.0.0.0。该计算机和远程计算机通信,目标IP地址只要前面一部分是131,就认为和该计算机在同一个网段。比如该计算机的地址和IP地址131.108.42.123在同一个网段,但和IP地址132.108.42.123不在同一个网段,因为网络部分不同。

image.png

计算机如何使用子网掩码计算自己所在的网段呢?

如图3-10所示,如果一台计算机的IP地址配置为131.107.41.6,子网掩码为255.255.255.0。将其IP地址和子网掩码都写成二进制形式,对IP地址和子网掩码对应的二进制位进行“与”运算,两个都是1才得1,否则都得0,即1和1做与运算得1,0和1或1和0做与运算都得0,0和0做与运算得0。这样IP地址和子网掩码做完与运算后,主机位不管是什么值都归零,网络位的值保持不变,由此得到该计算机所处的网段为131.107.41.0。

image.png

子网掩码很重要,配置错误会造成计算机通信故障。计算机和其他计算机进行通信时,首先断定目标地址和自己本身的地址是否在同一个网段,先对自己的子网掩码和IP地址进行与运算,得到自己所在的网段,再对自己的子网掩码和目标地址进行与运算,看看得到的网络部分与自己所在网段是否相同。如果不相同,则不在同一个网段,封装帧时目标MAC地址使用网关的MAC地址,交换机将帧转发给路由器接口;如果相同,则直接使用目标IP地址的MAC地址封装帧,直接把帧发给目标IP地址

如图3-11所示,路由器连接两个网段131.107.41.0255.255.255.0和131.107.42.0 255.255.255.0,同一个网段中计算机的子网掩码相同,计算机的网关就是到其他网段的出口,也就是路由器接口地址。路由器接口使用的地址可以是本网段中的任何一个地址,不过通常会使用该网段的第一个可用地址或最后一个可用地址,这是为了尽可能避免和网络中的计算机产生地址冲突。

image.png

如果计算机不设置网关就直接进行跨网段通信,那就不知道谁是路由器,下一跳给哪台设备。因此计算机要想实现跨网段通信,必须指定网关。

查看图3-12,连接到交换机的计算机A和计算机B的子网掩码设置不一样,都没有设置网关。思考一下,计算机A是否能够和计算机B通信?提示:数据包能去能回,网络才通。

image.png

计算机A和自己的子网掩码做与运算,得到自己所在的网段为131.107.0.0,目标地址131.107.41.28也属于131.107.0.0网段,计算机A把帧直接发送给计算机B。计算机B给计算机A发送返回的数据包,计算机B在131.107.41.0网段,目标地址131.107.41.6碰巧也属于131.107.41.0网段,所以计算机B也能够把数据包直接发送到计算机A,因此计算机A能够和计算机B通信。

查看图3-13,连接到交换机的计算机A和计算机B的子网掩码设置不一样,IP地址如图3-13所示,都没有设置网关。思考一下,计算机A是否能够和计算机B通信?

image.png

计算机A和自己的子网掩码做与运算,得到自己所在的网段131.107.0.0,目标地址131.107.41.28也属于131.107.0.0网段,计算机A把数据包发送给计算机B。计算机B给计算机A发送返回的数据包,计算机B使用自己的子网掩码计算自己所在网段,得到自己所在的网段131.107.41.0,地址131.107.42.6不属于131.107.41.0网段,计算机B没有设置网关,不能把数据包发送到计算机A,因此计算机A能发送数据包给计算机B,但是计算机B不能发送返回的数据包,因此网络不通。

3.3 IP地址分类

最初设计互联网时,Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类~E类。其中A、B、C 3类由InternetNIC在全球范围内统一分配,D、E类为特殊地址。

IPv4地址由32位二进制数组成,分为网络ID和主机ID。对于哪些位是网络ID、哪些位是主机ID,最初是使用IP地址的第1部分进行标识的。也就是说,只要看到IP地址的第1部分,就能知道该IP地址的子网掩码。通过这种方式将IP地址分成了A类、B类、C类、D类和E类。

3.3.1 A类地址

如图3-14所示,网络地址的最高位是0的IP地址为A类地址。网络ID为0不能用,127作为保留网段,因此A类地址的第1部分取值范围为1~126。

image.png

A类网络默认子网掩码为255.0.0.0。主机ID由第2部分、第3部分和第4部分组成,每部分的取值范围为0~255,共256种取值。要是学过排列组合就会知道,A类网络主机的数量是256×256×256=16777216,这里还需要减去2,主机ID全0的地址为网络地址,而主机ID全部为1的地址为广播地址。如果给主机ID全部是1的地址发送数据包,计算机会产生数据链路层广播帧,并发送到本网段的全部计算机。