前言
本篇文章的内容是我通过精心在网络上搜索和整理知识点得来的。我尽力以简洁明了的方式来阐述,目的是为了让那些刚刚开始涉足相关领域的人能够理解子网掩码的概念。文章可能不会探讨过于深入的细节,但足够提供一个清晰的起点。我计划会不定期地更新这些内容以保持其准确性和时效性,并热切欢迎大家指正任何错误或提出宝贵的补充意见。
v1.2 版本
建议看这篇文章之前先了解下什么是IP地址 ↓
什么是子网掩码
在我们之前的文章中,讨论了如何通过A到E的分类来划分IP地址的网络位和主机位,以及由此产生的资源浪费和低效率问题。为了解决这些问题,子网掩码应运而生(值得注意的是,A到E的分类仍然存在)。
IP地址本身不再记录划分信息,而是通过一个独立的数字序列来辅助标记,这就是子网掩码。
这个序列同样由32位二进制组成,例如:
11111111 11111111 11111111 00000000
连续的1代表网络位,连续的0代表主机位。
但在展示时通常转化为十进制形式,例如上面的转化为十进制后:
255.255.255.0
转换后前三组的255,就表示一个IP地址中前三组数是网络号,而最后一组的0表示一个IP地址中后一组是主机号。比如我这里有一个IP地址以及它对应的子网掩码:
// IP:
192.168.33.112
// 子网掩码:
255.255.255.0
说明这个IP地址192.168.33
是网络位,112
是主机位。这就子网掩码的功能之一。
接着来介绍子网掩码的另外一个作用:判断设备是否在同一个子网!
什么是子网
先大致的了解一下什么是子网。
比如两台笔记本电脑连接同一个WIFI,那么他们就在同一个子网中或者说是同一个局域网中,即使路由器断开外网连接,这两台电脑仍能够相互通讯。
如何判断是否在同一个子网
前面提到子网掩码可以判断设备是否在同一个子网,怎么判断呢?
假如我们有一台A笔记本,一台B笔记本,不知道连接的是不是同一个WIFI,可以通过查询我们得知:
A笔记本的信息如下:
// IP:
192.168.33.112
// 子网掩码:
255.255.255.0
B笔记本的信息如下:
// IP:
192.168.33.223
// 子网掩码:
255.255.255.0
通过IP地址的二进制格式与子网掩码的二进制格式进行and运算,如果相等,说明AB笔记本处于同一个子网,同一个WIFI,可以直接通信。
来来来,我们来算下,先算A笔记本:
11000000 10101000 00100001 01110000 // IP
11111111 11111111 11111111 00000000 // 子网掩码
// and运算理解为位相乘就可以了,上下每一位都相乘得
11000000 10101000 00100001 00000000
// 转成十进制为
192.168.33.0
同理B运算完并转成十进制后为:
192.168.33.0
A和B笔记本的运算结果相等,证明在同一个子网。
当然我们不会每次比较两个设备的时候都去这么计算,有子网掩码的分类快速去判断。
子网掩码的分类
首先子网掩码有如下分类:
- A类:
255.0.0.0
- B类:
255.255.0.0
- C类:
255.255.255.0
如果一个IP地址192.172.3.64
配套的子网掩码是255.255.255.0
,那么这个IP就是属于C类,也就是说IP的最后一组是主机位,那么可能在同个子网下所有设备的IP地址范围为192.172.3.0 ~ 192.172.3.255
。
但在这个范围内:
192.172.3.0
是网络地址,用于标识子网本身,不分配给任何设备。192.172.3.255
是广播地址,用于发送到该子网内所有设备的广播消息。- 其余的地址(
192.172.3.1
到192.172.3.254
)可以分配给子网内的设备。
当然,比之前的IP分类灵活的地方在于每一类还可以继续划分子网,被称为可变长子网掩码
可变长子网掩码
比如C类中,我想再划分出子网,可以通过网络位的扩展,占用主机位:
- 255.255.255.128 (/25) - 二进制表示:
11111111.11111111.11111111.10000000
- 255.255.255.192 (/26) - 二进制表示:
11111111.11111111.11111111.11000000
- 255.255.255.224 (/27) - 二进制表示:
11111111.11111111.11111111.11100000
- 255.255.255.240 (/28) - 二进制表示:
11111111.11111111.11111111.11110000
- 255.255.255.248 (/29) - 二进制表示:
11111111.11111111.11111111.11111000
- 255.255.255.252 (/30) - 二进制表示:
11111111.11111111.11111111.11111100
- 255.255.255.254 (/31) - 二进制表示:
11111111.11111111.11111111.11111110
- 255.255.255.255 (/32) - 二进制表示:
11111111.11111111.11111111.11111111
有点懵?我们慢慢来,就拿第二个举例好了,通过二进制表示我们可以看出,原本主机位前两个00变成了11,这是因为网络位扩展了,占用了2个主机位。此时网络位个数为8+8+8+2=26,主机位为8-2=6个。
所以255.255.255.192 (/26) 就表示这个是个可变长子网掩码,且网络位为26。当然真正电脑里展示的子网掩码只会是255.255.255.192。
一般我们写IP地址为了突出子网掩码的信息,可以这么写:192.168.11.30/26
,从后面这个/26
就能够看出是一个C类的可变长子网。
注意了!子网掩码必须是连续的1后面跟着连续的0,在二进制中不能有1和0交错的情况。例如不能是:11111111.11111111.11111111.00111111
那255.255.255.192究竟划分了几个子网呢?只需要看被占用的主机位有多少种组合,例如00,10,01,11
,也就是划分了4个子网。对应到IP地址的最后一组分别为:
- 00情况下的00000000-00111111 转为 0-63
- 01情况下的01000000-01111111 转为 64-127
- 10情况下的10000000-10111111 转为128-191
- 11情况下的11000000-11111111 转为192-255
假设我有个IP地址的主机位是192.163.1,子网的地址范围将是:
- 第一个子网:192.163.1.0 到 192.163.1.63
- 第二个子网:192.163.1.64 到 192.163.1.127
- 第三个子网:192.163.1.128 到 192.163.1.191
- 第四个子网:192.163.1.192 到 192.163.1.255
在每个子网中:
- 第一个地址(如192.163.1.0, 192.163.1.64, 等)是子网的网络地址,用于标识子网,不分配给设备。
- 最后一个地址(如192.163.1.63, 192.163.1.127, 等)是子网的广播地址,用于发送到该子网内所有设备的广播消息。
- 其余的地址(如192.163.1.1到192.163.1.62, 192.163.1.65到192.163.1.126, 等)可以分配给子网内的设备。
练习:
假如有两个设备的IP和子网掩码信息:
// A
192.168.11.30
255.255.255.192
// B
192.168.11.61
255.255.255.192
不用二进制and运算,你知道他们是同一个子网吗?
子网掩码的功能总结
通过以上的讲述,我们知道了子网掩码有两个功能
- 将一个IP地址划分为网络位和主机位
- 判断IP是否在同一个子网以及划分子网
总结
有了子网掩码,IP地址的网络位和主机位的划分变得更加灵活,在有限的IP资源的情况下,提高IP地址的利用率,减少IP地址的浪费。
看完来个赞,年年益寿~