反掩码,英文名 wildcard-mask,也直译成inverse-mask

在介绍反掩码之前,我们先回顾一下掩码 mask 的相关知识点
1.掩码
掩码中有1有0,其中连续的1表示网络号,而连续的0表示主机范围,

举例:

255.255.255.0

转成二进制形式:

1111 1111 . 1111 1111 . 1111 1111 . 0000 0000

其中的1有24个,说明这个掩码有24位的网络号,也可以用 /24 表示

/24 是网络位,24个 比特(bit )位,且为连续的24个1,

子网掩码长度一共32个bit,由两部分组成,网络位+主机位,本例中,网络位有24bit,剩下的8个bit就是主机位,用二进制形式表示,其范围是:

0000 0000 ~ 1111 1111

转成十进制形式:

0~255,

主机编号从0到255,共256个

/24 的网段里, 0用来表示本网段,作为网段地址使用,255用于表示网段中的广播地址,所以可用于表示主机的主机地址有254个,

这就是子网掩码的作用,

请注意,子网掩码中的1是连续的,不能出现一堆1里面夹着0的情况,
子网掩码中的0也同理,不能出现一堆0里面夹着1的情况。

比如,1111 1111.1111 0000.1111 1111.0000 1100,这样的子网掩码是不合法的,

请注意,下面的斜线模式指的是连续的1连续的0,1是连续的,0也是连续的,不能出现断开的情况,
比如,/16 指的是连续的16个1再接着16个连续的0,是这样的 11111111.11111111.00000000.00000000 而不能出现类似 11111111.00000000.11111111.00000000,这样的虽然也是16个1和16个0,但是,1不连续了,0也不连续了,所以是错误的子网掩码,

所以子网掩码只能是如下的列表中的一个:

/1 128.0.0.0 10000000.0.0.0
/2 192.0.0.0 11000000.0.0.0
/3 224.0.0.0 11100000.0.0.0
/4 240.0.0.0 11110000.0.0.0
/5 248.0.0.0 11111000.0.0.0
/6 252.0.0.0 11111100.0.0.0
/7 254.0.0.0 11111110.0.0.0
/8 255.0.0.0 11111111.0.0.0

/9 255.128.0.0 11111111.10000000.0.0
/10 255.192.0.0 11111111.11000000.0.0
/11 255.224.0.0 11111111.11100000.0.0
/12 255.240.0.0 11111111.11110000.0.0
/13 255.248.0.0 11111111.11111000.0.0
/14 255.252.0.0 11111111.11111100.0.0
/15 255.254.0.0 11111111.11111110.0.0
/16 255.255.0.0 11111111.11111111.0.0

/17 255.255.128.0 11111111.11111111.10000000.0
/18 255.255.192.0 11111111.11111111.11000000.0
/19 255.255.224.0 11111111.11111111.11100000.0
/20 255.255.240.0 11111111.11111111.11110000.0
/21 255.255.248.0 11111111.11111111.11111000.0
/22 255.255.252.0 11111111.11111111.11111100.0
/23 255.255.254.0 11111111.11111111.11111110.0
/24 255.255.255.0 11111111.11111111.11111111.0

/25 255.255.255.128 11111111.11111111.11111111.10000000
/26 255.255.255.192 11111111.11111111.11111111.11000000
/27 255.255.255.224 11111111.11111111.11111111.11100000
/28 255.255.255.240 11111111.11111111.11111111.11110000
/29 255.255.255.248 11111111.11111111.11111111.11111000
/30 255.255.255.252 11111111.11111111.11111111.11111100
/31 255.255.255.254 11111111.11111111.11111111.11111110
/32 255.255.255.255 11111111.11111111.11111111.11111111

2.反掩码 反掩码也可以用来表示一个网段,比如:0.0.0.255 ,表示这个网段的网络号是 /24 ,从而判断出主机号有256个,
子网掩码 255.255.255.0 表示一个网段的网络号是 255.255.255/24,主机范围是 0~256 即2⁸ (256)个
这么看来,反掩码 0.0.0.255 =255.255.255.0
作用相同,为啥又弄出一个反掩码捏,多此一举?!

看个例子:
要创建一个acl,只允许两个网段通过,
1.192.168.10.0/24
2.192.168.14.0/24

先来试试用子网掩码来解决这个问题,

因为10和14是不连续的,所以无论我们怎么掩,都会把11、12、13放进来, 10到14有5个数,
为了便于说明和理解,咱们先看2台主机,a.b.c.10a.b.c.14 因为 10 和14 是不连续的,相差了3个数(11、12、13),
要想把这两个ip放到同一个网段中,就需要至少能容纳8台主机的子网掩码(用容纳4台主机的子网掩码/30是不行的,不能同时装下10和14,所以只能选用/29的子网掩码),255.255.255.248/29
这样的子网掩码下,a.b.c.10 和 a.b.c.14就能在同一个网段了,
网段的范围是: a.b.c.8 、a.b.c.9 、a.b.c.10 、a.b.c.11、a.b.c.12 、a.b.c.13 、a.b.c.14 、a.b.c.15

把这两个ip放到同一个网段中,就能使用一条路由来表示a.b.c.10a.b.c.14这两个主机地址了

通过上面的a.b.c.10a.b.c.14的例子我们可以类比出,
要想将192.168.10.0和192.168.14.0放到一个路由条目里,需要使用的子网掩码是 /21255.255.248.011111111.11111111.11111000.0
路由如下:

192.168.10.0 /21 或者192.168.14.0 /21
表示 192.168.10.0和192.168.14.0在同一个子网里,

虽然用子网掩码能完成将192.168.10.0192.168.14.0放到一个子网里,
但同时问题也出现了,
就是,192.168.8.0192.168.9.0192.168.11.0192.168.12.0192.168.13.0192.168.15.0 这6个网段也被包括进来了,
而我们的需求是,一条路由中只有192.168.10.0192.168.14.0这两个网段,没有其他的网段。

那么,这时候就需要反掩码登场了,

我们先来观察一下,
192.168.10.0和192.168.14.0 在二进制下是什么样子,不同之处在哪里,

192.168.10.0:11000000.10101000.00001010.00000000
192.168.14.0:11000000.10101000.00001110.00000000

可见,192.168.10.0和192.168.14.0的二进制表示形式中,只有红色字符所在的位置不同,其他位置一摸一样,
那么,根据反掩码的规则,0表示精确匹配,1表示可以是任意数值,我们现在只保留红色字符的那一位为1,其他位都置为0,就可以生成一个反掩码,

00000000.00000000.00000100.00000000

它的点分十进制的表示是:

0.0.4.0

为了方便理解,我们给这个反掩码变个样子,

00000000.00000000.00000X00.00000000

X所在的位置上,可以是任意值,即,可以是0也可以是1

同时,我们知道反掩码是不能单独存在的,反掩码必须跟着一个ip,
所以我们让这个反掩码跟着192.168.10.0,让它们之间相互作用,
当这个反掩码中除了x所在的位置以外,其他的所有位置的值都与192.168.10.0一模一样的时候,
就有:

11000000.10101000.00001`X`10.00000000

192.168.(1010+0x00.0

x0时,


192.168.(1010+0000)₂.0,
192.168.(1010)₂.0,
即192.168.10.0

x1时,


192.168.(1010+0100)₂.0,
192.168.(1110)₂.0,
即192.168.14.0

同理,让这个反掩码跟着192.168.14.0
除了X位之外的其他位置和192.168.14.0一模一样的时候,也有

192.168.(1010+0X00.0

x0时,


192.168.(1010+0000)₂.0,
192.168.(1010)₂.0,

即192.168.10.0

x1时,


192.168.(1010+0100)₂.0,
192.168.(1110)₂.0,

即192.168.14.0

它的点分十进制的表示:

0.0.4.0

让反掩码0.0.4.0192.168.10.0或者192.168.14.0结合起来,就可以表示192.168.10.0192.168.14.0这两个网段了,
表示形式如下:

192.168.10.0 0.0.4.0 或者
192.168.14.0 0.0.4.0

反掩码0.0.4.0可以唯一的标识192.168.10.0192.168.14.0这两段网络,而不会出现把其他网段也包括进来的情况了,
因为,反掩码 0.0.4.000000000.00000000.00000100.00000000)跟着192.168.10.0的时候,只有1的位置是可以变换的,变成0,就是192.168.10.0本身,变成1就是192.168.14.0
所以 0.0.4.0作用于192.168.10.0上的时候, 只能标识两个网段,即192.168.10.0192.168.14.0这两个网段,

这就是反掩码精确匹配的作用,是用子网掩码无法办到的。

一定要明确一个根本点,在反掩码中,有0的位置表示必须精确匹配这一位,1表示不关心这一位(是0是1都行),

还有一个往往容易被忽视的地方,那就是反掩码不能单独存在,反掩码是要跟着一个ip地址的(这个ip地址是一个具体的主机地址也可以是一个网络号,它们是一个整体,
举例:192.168.1.1 0.0.0.0 ,表示我们期待一个ip地址,并且这个ip地址的32个bit必须在每个位置上都与192.168.1.1一致,达到精确匹配的要求,所以,192.168.1.1 0.0.0.0 就表示的是 192.168.1.1 这个主机地址),也就是我们期待的目标是 192.168.1.1 这台主机,
再举例:192.168.1.0 0.0.0.255,表示我们期待一些ip地址,并且这些个ip地址的前24位必须与192.168.1.0这个网络号一致,达到精确匹配的要求,剩余的其他位置是什么都无所谓,我们并不关心,所以最终符合我们要求的ip地址有,192.168.1.0、192.168.1.1、192.168.1.2、192.168.1.3、192.168.1.4、……、191.168.1.254、192.168.1.255,这么多个,用子网掩码的形式来表示就是 ,192.168.1.0/24这个网段里所有的主机,

对反掩码的一切解读,都离不开它所跟随的ip地址,总是以这个ip地址为依据以这个ip地址为参考的,单独拿出一个反掩码来是没有任何意义的,

June the 06th 2022