前言
子网掩码是非常基础且重要的网络概念,尤其是在各种网络考试中..
但实际上,在考网工之前,我对它也是不怎么了解的!虽然我曾做过十几年的网吧维护..
子网掩码的作用
简单讲,它就是用来划分网络的。
哪些IP在同一网段,数据可以直接二层转发;哪些IP不在一个网段,需要通过路由转发。。
举个例子:如果我问192.168.1.1和192.168.1.100这两个IP是否在一个网段?
可能很多人会觉得,它们前三段都一样当然在一个网段!
然而并不是,因为这里没有给出子网掩码。
如果子网是255.255.255.0,那它们当然在一个网段,但如果子网是255.255.255.192,那它们就不在一个网段了。可见,判断两个IP是否在一个网段是由子网掩码决定的。
子网掩码的规范
一、子网掩码是一个32位的二进制数,每8位以点分隔
就像这样:11111111.11111111.11111111.00000000
转换成十进制就成了:255.255.255.0
二、子网掩码从左到右,都是连续不断的1,中间不能有0。或者说1前面不能有0
举几个例子:
|-------------------------------------|---------------|
| 11111111.11111111.11111111.00000000 | 正确。从左到右连续不断的1 |
| 01111111.11111111.11111111.00000000 | 错误。1前面不能有0 |
| 11101111.11111111.11111111.00000000 | 错误。中间不能有0 |
| 11111111.11111111.11111111.00000001 | 错误。中间不能有0 |
正因这样的规范,在考试或者网络设备的配置中,常常会看到子网不是写成4组点分的形式,而是写成如24这样的一个整数,这个24就代表子网掩码写成二进制时,前面有多少个1。
所以24位子网写成二进制就是:11111111.11111111.11111111.00000000
三、子网划分遵循最小分配原则
什么意思呢?比如说,一个网络如果50个IP就够用,那么应该使用能够满足,又最接近的子网,那么就是26位子网(也就是255.255.255.192 最大62个可用IP),而不是24位这样更大的子网。
但是注意:这是针对考试等场景。对于现实应用而言,这不是什么必须遵守的规则!
比如家里就几个设备,一般的小公司也只有几台、几十台设备,但大家都习惯性的使用24位的子网!
子网掩码的一些计算
一、一个子网有多少个可用IP?
子网1的部分代表网络位,0的部分代表主机位。主机位也就是IP范围的部分
以24位掩码举个例子:11111111.11111111.11111111.00000000
其中0部分是8位,那么最小值:00000000,最大值是:11111111
写成十进制就是:0-255 总共256个数字,也就代表最大256个IP。
其中第1个IP(0)是网络地址,最后一个IP(255)是广播地址
因此,实际可用IP:256 - 2 = 254
二、子网聚合的计算方法
这在网工考试中是必考的。
举个例子:
|-------------|-------------------------------------|
| IP(十进制) | IP(二进制) |
| 192.168.1.0 | 11000000.10101000.00000001.00000000 |
| 192.168.2.0 | 11000000.10101000.00000010.00000000 |
| 192.168.3.0 | 11000000.10101000.00000011.00000000 |
| 192.168.4.0 | 11000000.10101000.00000100.00000000 |
如上图中所示,四个IP左边完全相同的部分:11000000.10101000.00000 共21位,那么聚合后的子网就是21。注意,这里只是讲方法,没考虑这些IP是否符合聚合规范。
三、通过计算来判断两个IP是否在同一网络
计算方法是用IP和子网进行 "位与" 运算,如果得到的结果一致,则两个IP在同一网络,不一致则属于不同网络。
计算之前,先来了解一下 "位与" 运算:
参与计算的两个数,其对应的位都为1时,结果为1,其中一个为0,则结果为0。
位与计算如图:
|---------|---|---|---|---|---|---|---|---|
| IP(二进制) | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 子网(二进制) | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 与运算结果 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
现在了解了位与运算,下面举几个例子看一下:
计算一:192.168.1.1/24 和 192.168.2.1/24
|---------|----------|----------|----------|----------|
| 192.168.1.1/24 |||||
| IP(二进制) | 11000000 | 10101000 | 00000001 | 00000001 |
| 子网(二进制) | 11111111 | 11111111 | 11111111 | 00000000 |
| 与运算结果: | 11000000 | 10101000 | 00000001 | 00000000 |
| 与运算十进制: | 192 | 168 | 1 | 0 |
| |||||
| 192.168.2.1/24 |||||
| IP(二进制) | 11000000 | 10101000 | 00000010 | 00000001 |
| 子网(二进制) | 11111111 | 11111111 | 11111111 | 00000000 |
| 与运算结果: | 11000000 | 10101000 | 00000010 | 00000000 |
| 与运算十进制: | 192 | 168 | 2 | 0 |
根据上表可知:位与运算的结果不同,因此它们属于不同网络。
如果把子网改成23位呢?我们再来算一下:
计算二:192.168.1.1/23 和 192.168.2.1/23
|---------|----------|----------|----------|----------|
| 192.168.1.1/23 |||||
| IP(二进制) | 11000000 | 10101000 | 00000001 | 00000001 |
| 子网(二进制) | 11111111 | 11111111 | 11111110 | 00000000 |
| 与运算结果: | 11000000 | 10101000 | 00000000 | 00000000 |
| 与运算十进制: | 192 | 168 | 0 | 0 |
| |||||
| 192.168.2.1/23 |||||
| IP(二进制) | 11000000 | 10101000 | 00000010 | 00000001 |
| 子网(二进制) | 11111111 | 11111111 | 11111110 | 00000000 |
| 与运算结果: | 11000000 | 10101000 | 00000010 | 00000000 |
| 与运算十进制: | 192 | 168 | 2 | 0 |
仍然不同。因此,即使是23位的子网,它们仍属不同网络。
如果保持23位掩码,然后把192.168.2.1改成192.168.0.1,又会如何?
计算三:192.168.1.1/23和192.168.0.1/23
|---------|----------|----------|----------|----------|
| 192.168.1.1/23 |||||
| IP(二进制) | 11000000 | 10101000 | 00000001 | 00000001 |
| 子网(二进制) | 11111111 | 11111111 | 11111110 | 00000000 |
| 与运算结果: | 11000000 | 10101000 | 00000000 | 00000000 |
| 与运算十进制: | 192 | 168 | 0 | 0 |
| |||||
| 192.168.0.1/23 |||||
| IP(二进制) | 11000000 | 10101000 | 00000000 | 00000001 |
| 子网(二进制) | 11111111 | 11111111 | 11111110 | 00000000 |
| 与运算结果: | 11000000 | 10101000 | 00000000 | 00000000 |
| 与运算十进制: | 192 | 168 | 0 | 0 |
运算结果相同,因此 192.168.0.1/23 和 192.168.1.1/23 属于相同网络
二进制转换技巧
子网掩码的介绍就先到这里,下面讲讲二进制转换的一点技巧,尤其在网工考试中会比较实用。
吐槽一下我考试时坐旁边的兄弟。。我不知道他在草稿纸上写些什么,一张A4纸居然不够他写,又跟监考老师要了一张!说实话,当时我惊呆了,网工考试真的不需要草稿纸啊~~
后面想想,可能是不懂二进制的转换技巧吧,所以这里讲讲。。
其实真的非常简单,只需要只记住一条规则:从右到左,每往前一位,数值翻倍
这样就能得到下表:
|-----|-----|----|----|----|---|---|---|---|
| #### 进制转换对照表 |||||||||
| 二进制 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 十进制 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
知道了这个,记算就非常简单了,下面举两个例子:
1、写出27位子网掩码的点分十进制
前面已经讲过子网掩码的规则,那么点分二进制就是:11111111.11111111.11111111.11100000
根据上方转换对照表,把每一位1所对应的数值相加:
11111111 = 128+64+32+16+8+4+2+1 = 255
11100000 = 128+64+32 = 224
计算得到:255.255.255.224
2、判断这个子网掩码是否正确:255.255.255.251
根据对照表加一下看:
128+64+32+16+8 = 248
128+64+32+16+8+4 = 252
多一位小了,少一位大了。显然,251这个子网是不对的
当然,方法往往不止一个,多思考会有更多收获,比如这里不从前面加,而从后面计算:
255-1 = 254
255-1-2 = 252
255-1-2-4 = 248
后话
希望这篇文章能够帮助到你!
也祝愿报考网工的朋友,下次能顺利过关!
skyyx2002
2025.12.19