子网掩码详解

前言

在因特网中,计算机与计算机之间的通信都是通过网络来完成的,那么他们直接是如何完成通信的呢?大多数人都知道,计算机通信使用的是当前最流行的Internet分组交换传输协议,即TCP/IP的协议簇或者它的的变种。

在使用TCP/IP进行通信的时候,我们经常会使用到网段和子网掩码,子网掩码用来区分IP地址的网络地址主机地址,相同网络号地址的IP发包情况是不同的。同一个网络发包可以通过相关的协议把数据包直接发送到目标主机,而不同网络的则会通过路由器发包。划分一个合适的子网是重要的,过少的主机数目可能无法满足你的要求,而过多的主机数目无疑会导致局域网访问量过大,频繁,会影响通信效率。

IP网段

通常IP网段分为四种:

  1. A类IP段 0.0.0.0127.255.255.255 即首位为‘0’的IP地址。
  2. B类IP段 128.0.0.0191.255.255.255 即首位为‘10’的IP地址。
  3. C类IP段 192.0.0.0223.255.255.255 即首位为‘110’的IP地址。
  4. D类IP段 224.0.0.0239.255.255.255 即首位为‘1110’的IP地址。

一个A类的默认子网掩码是 255.0.0.0 ,即一个子网最多可以容纳1677万多台电脑,B类是 255.255.0.0,默认最多可以容纳6万台电脑,C类是255.255.255.0,默认最多可以容纳254台电脑。

如何分辨IP的网络和主机号,我们先来看一个IP的例子,192.168.0.1/24,这个IP的网络号和主机号是多少,可以容纳的主机数目怎么计算,接下来我们一起来看一下。

子网掩码计算

通过IP地址(192.168.0.1)换算成二进制为11000000.10101000.00000000.00000001,24表示子网掩码为24位,即二进制为11111111.11111111.11111100.00000000的数字。

网络号通过IP地址与子网掩码的按位与可以得到11000000.10101000.00000000.00000000,即192.168.0.0,显然,IP地址的主机号为00000001,那它可以容纳的主机数目是多少呢?这里有个简便的方法计算,即看子网掩码0的个数,这里是10,即可以容纳的主机数目是2的10次方,也就是最多可以容纳1024台主机。

实际运用

假设现在公司有 530 台电脑,需要组成一个对等局域网,该如何设置子网掩码和 IP 地址?

首先我们用的是一个 B 段的 IP 地址,A 段 IP 地址大多肯定不合适,而 C 段太少(差不多只有只有 254 台),不过有 B 段默认的子网掩码是 255.255.0.0,可以容纳的电脑大约有 6 万台,我们用肯定不合适,根据前面的技巧知道,能容纳最大主机数和子网掩码的 0 的个数有关,所以我们很自然想到子网掩码应该有10个0,因为正好 512 小于 520, 1024大于530,所以我们应该选择子网掩码为 11111111.11111111.11111100.00000000,也就是 255.255.252.0

假设我们拿到的一个 B 类 137.137.x.x 的网段,这样,IP 的已经是确定的,关键是要确定第三段,只要网络标识相同就可以了。我们先来确定网络号。
  255.255.252.0 11111111.11111111.11111100.00000000
137.137.x.x  10001001.10001001.??????.**
  网络标识   10111100.10111100.??????00.00000000

这里的是我们可以直接确定的,就把全置为0吧,所以我们的IP就是 10001001.10001001.000000**.********,也就是说这样的IP选址可以满足我们的需求,再看我们的IP地址的第四段,可以容纳的最大主机数是 254,因为全为 0 和全为 1 的编码有特殊的作用,由530/254=2.086知第三段可以取三个数字,即 00,01,10,这样我们选择的IP地址的范围就是137.137.0.x到137.137.2.y。第三段表示的是主机号,这一段随便你取什么都行,只要在 1~254 的范围内就OK了。

总结

子网掩码主要是用来计算IP地址所属的网络地址和主机地址,一个分配优良的IP地址可以提高我们的局域网工作效率,同时子网掩码还可以用来减少IP地址的衰竭,因为它可以用来构建所属自组织的子网,这样可以大大减少IP地址的分配量,在 21 世纪的今天,明白子网掩码以及 TCP/IP 等底层工作是及其重要的,是每个开发者都应该知道的东西。

参考

  1. 知乎:子网掩码怎么理解?

  2. 维基百科:子网的解释