为什么要有子网掩码
网络上,数据从一个地方传到另外一个地方,是依靠 IP 寻址。
从逻辑上来讲,是两步的。
第一步,从 IP 中找到所属的网络,好比是去找这个人是哪个小区的;
第二布,再从 IP 中找到主机在这个网络中的位置,好比是在小区里面找到这个人。
第一步中的网络,就称之为「子网」(Subnet)。
从逻辑上来讲,一般同一子网(Subnet)是使用相同的网关。就好比,一个小区的入口。
IPv4 的 IP 地址是 32 位的,形式如 xxx.xxx.xxx.xxx,每一个 xxx 取值都是 0 - 255。
到底是前三个 xxx 相同,就代表同一个子网,还是前两个,还是其他?这个并不一定。
就好比小区有大有小,有的小区有上千户人家,有的小区只有区区几个。
所以,就引入「子网掩码」(Subnet Mask)来标识该子网的大小。
我们一般看到的 IP 地址是十进制的编码,所以如果换一个视角,从二进制的角度看,每一个 IP 地址就是 32 位 1 或 0。
子网掩码,就是用来告诉这个子网的覆盖区间。这 32 位中,前多少位是网络段?当然,余下的就是主机段。
举典型的例子:
IP 中前 24 位代表子网号,后 8 位代表主机号。
所以子网掩码就是 24 个 1(代表前 24 位是子网部分),加 8 个 0(后 8 位是主机部分)。
如果沿用 IP 的标识方式,就是 255.255.255.0 。
每一个 255 对应 8 个二进制 1,最后一个 0 对应 8 个二进制 0。
该子网可以容纳最多 256 台主机,也就是主机号从 0 到 255。
当然,实际情况没有这么多,有一些特殊数字有保留用处(广播、网关等)。
子网掩码的作用是划分网段地址与主机地址。他的作用相当于面具,挡住面孔,只露出眼睛;如果把1看成面具,把0看成孔,子网掩码就挡住了网段地址,只露出主机地址(255对应的二进制数是11111111)。如果把子网掩码与IP地址做逻辑与运算,得到的结果恰好就是网段地址。路由器就是这么工作的。这是为什么叫掩码。
子网与网段的关系就相当于切开的扇形饼与没切开大块圆形大饼的关系。这样子网掩码的作用就是掩盖去圆形大饼的属性,露出扇形饼的属性。
子网掩码的两种表示方法
1. 点分十进制。eg:255.255.0.0或者255.255.255.0
2. 在IP地址后加上"/"符号以及1-32的数字,其中1-32的数字表示子网掩码中网络标识位的长度。eg:192.168.1.1/24,表示掩码位为24位,每个点分是8位,点分最大值是2^8 = 256 转化成点分就是 255.255.255.0。
子网IP地址范围和点分掩码的计算
192.168.33.50/29
1. 计算可用IP数
掩码最多32位,(每个点是8位,4*8),那么还剩32 - 29 = 3 位, 3位可以表示 2 ^ 3 = 8个IP地址,除去首尾两个,真正可用的就是 6个。
2. 计算IP范围。
IP末尾是50,上面算出有8个可用的IP地址,50 \ 8 = 6 , 6 * 8 = 48 ,网络地址从192.168.33.48-192.168.33.55 总共8个,去掉首尾两个,刚好6个。
3. 计算点分子网掩码
看最后一位,最多2 ^ 8 = 256个,第一步知道我们表示8个IP,那么256 - 8 = 248,对应的掩码就是 256 - 2 ^ (32 -29) = 248 , 255.255.255.248
更复杂点的:
上面的是简单的c类地址,表示的网络地址有限,那如果想表示更多的呢?
192.168.33.50/22
按照上面的算法 32 - 22 = 10 ,每个点分只有8位,最后一个点分表示不完,那就只能取倒数第二个点分的后 10 -8 =2 位,最后一个点分只能表示256个地址,还不够,所以不用遮掩这个段了,就是0,算倒数第二个点分 第二个点分用2位,那么表示 2 ^ 2 = 4个网络地址,256 - 4 = 252,对应的掩码就是 255.255. 252.0
同理:4个网络地址,倒数第二个点分,33 \ 4 = 8 , 8 * 4 =32, 那么网络地址范围就是:
192.168.32.0 - 192.168. 35. 255。
看看对不对:
192.168.32.0 - 192.168.32.255
192.168.33.0 - 192.168.32.255
192.168.34.0 - 192.168.32.255
192.168.35.0 - 192.168.32.255
256 * 4 = 1024 = 2 ^ 10