初学者往往搞不清网段划分,更不知道该如何配置子网掩码,今天我来给小白们扫扫盲。
太理论的我今天不想讲,只想结合实例,说明一下,网段的划分。

在阐述正题之前,我们先来说一下10进制,2进制,因为这个问题,要用2进制讲解是最方便的。首先我们知道,
电脑中所有的信息,都是以2进制表示的,IP地址也不例外,IPV4地址是由4个字节的2进制数表示,这4个字节,
在书写时为了表示方便,转换成了10进制,并且用“.”分割,例如:192.168.1.1,表示成2进制就是
1100 0000.1010 1000.0000 0001.0000 0001,同样子网掩码也是这样表示的,比如255.255.255.0,表示成2进制就是
1111 1111.1111 1111.1111 1111.0000 0000,众所周知,1个字节所能表示的无符号10进制整数的范围是0~255,
2进制表示,就是0000 0000~1111 1111,那么4个字节,最大就是255.255.255.255,最小就是0.0.0.0。

接下来,我们还要阐述一下基本的2进制逻辑运算。我们只说本次讲义中要用到的,用不到的我也不讲,有兴趣的童鞋,
可以去插度娘。在这里主要就是用到逻辑“与”与逻辑“非”两种逻辑运算,这没啥好讲的,只要记住下面的运算规则即可,
为了阐述方便,我们用“&”表示与,用“!”表示非(取反),

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

! 0 = 1
! 1 = 0

到此为止,我们已经掌握了与IP地址有关的最基本的2进制常识了,至于2进制与10进制之间如何的转换,
这里就不再赘述了,有兴趣的童鞋可以插插度娘,想偷懒的,Windows自带的计算器,也提供这个功能。

接下来,我们切入正题,讲解一下,IP地址与子网掩码的关系,我们还是用192.168.1.1/255.255.255.0
来举例说明,稍有经验的童鞋都会知道,子网掩码除了上述表示方式外,还有一个用纯数字的表示方式,
上例可以表示为192.168.1.1/24这里的24是怎么来的呢?细心的童鞋会发现,在我们阐述基本2进制常识时,
255.255.255.0这个子网掩码转换为2进制表示后,是由24个连续的1与8个连续的0组成的,因为一个字节是8位2进制数,
刚才我们说了,1个字节最大表示的无符号整数就是255,所以,255表示成2进制,就是8个连续的1,3个255,
就是24个连续的1,这24就是这么来的。同理255.255.254.0的数字表示方式就是23啦,因为254的2进制是1111 1110。

那么子网掩码到底有啥用呢?与IP地址的关系又是什么呢?别急,我们慢慢讲。还是192.168.1.1这个IP,
我们将这个IP地址,与子网掩码255.255.255.0按位做2进制逻辑与运算后,会得到如下结果
1100 0000.1010 1000.0000 0001.0000 0000,转换成10进制就是192.168.1.0,这是啥?没错,这就是网段地址,
同理,将IP地址与取反(非运算)后的子网掩码进行逻辑与运算得到0.0.0.1,这又是啥呢?这个结果,
就是这个IP所表示的主机地址啦!到此为止,我们已经知道,任意一个IP地址,是由“网段地址”+“主机地址”
2部分组成的,当然这里不是简单的“+”连接,而是实实在在的加法运算。192.168.1.0 与 0.0.0.1,
按字节做加法运算得到的结果就是192.168.1.1。由此得知,通过子网掩码与IP地址做简单的2进制逻辑运算,
就可以将1个IP地址,分解为“网段地址”与“主机地址”,而逻辑运算恰恰是计算机最擅长的数据处理方式。

逻辑运算,是x86构架CPU所有运算中除自增与自减运算外,速度第二快的运算,是可以达到纳秒级的处理速度的。
所以,用子网掩码与IP地址配合,就可以在最短的时间内,分解出IP地址的网段地址,以便计算机以最快的速度,
判断数据包是否需要发送给路由器,如果目标IP地址与源IP地址同段,则不需要路由,如果不同段,则需要路由。

最后,我们再讲讲通过子网掩码是如何划分网段的。通过上面的讲解,我们可以看出来,任意一个子网掩码,
其实是由全1的“网段掩码”与全0“主机掩码”2部分组成的,网段掩码中不允许有0,主机掩码中不允许有1,
这就是为啥说255.255.253.0是非法子网掩码,因为转为2进制就是1111 1111.1111 1111.1111 1101.0000 0000。

我们知道,子网掩码是4个字节,也就是32位2进制数,这32位拆分为2组,一组用来做网段掩码,另一组做主机掩码,
2进制数与十进制数一样,都是位数越多,所能表示的数字就越大,反之就越小,因此,主机容量越大,网段容量就越小,
主机容量越小,网段容量就越大,举例来说,255.255.255.0这个子网掩码的子网,可以容纳256个主机地址(注:①),
同时这个子网掩码可以容纳4,294,967,296个网段地址(仅理论,可容纳不代表可使用,实际使用中还有其他规则限制)。
同理255.255.254.0的主机容量是512,网段容量是8,388,608,而255.255.0.0的主机容量与网段容量,都是65,536。

这里用按字节对齐的子网掩码划分网段,是比好理解的初学者也能容易掌握,但是实际应用中,往往会遇到很多子网掩码,
不是按照字节对齐的,下面我们结合实例着重讲解一下这类子网掩码的使用,为了方便我们用数字表示法来表示子网掩码。
显而易见,

129.168.0.1/24,网段地址:129.168.0.0,主机地址:0.0.0.1
129.168.1.1/24,网段地址:129.168.1.0,主机地址:0.0.0.1
129.168.2.1/24,网段地址:129.168.2.0,主机地址:0.0.0.1
129.168.3.1/24,网段地址:129.168.3.0,主机地址:0.0.0.1

这里的子网掩码是按字节对齐的,所以4个IP分别属于4个网段,但是如果我们将子网掩码改成23位(255.255.254.0),
会有啥结果呢?来,我们按照上面讲的方法,计算一下(请童鞋们自行转为2进制计算),便可得到如下结果

129.168.0.1/23,网段地址:129.168.0.0,主机地址:0.0.0.1
129.168.1.1/23,网段地址:129.168.0.0,主机地址:0.0.1.1
129.168.2.1/23,网段地址:129.168.2.0,主机地址:0.0.0.1
129.168.3.1/23,网段地址:129.168.2.0,主机地址:0.0.1.1

当子网掩码改为22位(即255.255.252.0)时

129.168.0.1/22,网段地址:129.168.0.0,主机地址:0.0.0.1
129.168.1.1/22,网段地址:129.168.0.0,主机地址:0.0.1.1
129.168.2.1/22,网段地址:129.168.0.0,主机地址:0.0.2.1
129.168.3.1/22,网段地址:129.168.0.0,主机地址:0.0.3.1

由此我们看出,当子网掩码由24位(255.255.255.0)减少至23位(255.255.254.0)后,原先分属于4个网段的IP地址,
现在变成2个网段了,而进一步降低子网掩码位数至22位后,4个IP合并到1个网段了,这就再次说明,当主机容量增大时,
网段容量是减少的。

到此为止,童鞋们,应该明白IP地址与子网掩码的关系了,也知道子网掩码是如何划分网段的了,今天的课就讲到这里了,
如还有不明白的地方,欢迎留言,上面阐述过程中,如有疏漏或错误,欢迎批评指正。
————————
注:①主机地址为0~255,其中0与255是保留的,地址为0的主机IP(即网段中第一个IP)用来表示网段地址,
地址为255的主机IP(即网段中最后一个IP)用来做广播地址。