通配符掩码和反掩码的区别:
反掩码是IP地址掩码的反码,用于计算子网广播地址等;通配符掩码不连续,灵活匹配IP地址,用于路由选择、ACL等
通配符掩码,英文名wildcard-mask
,反掩码直译成inverse-mask
(这里感谢 蔚蓝湖网友的指正)通配符掩码和反掩码的区别:
反掩码是IP地址掩码的反码,用于计算子网广播地址等;通配符掩码不连续,灵活匹配IP地址,用于路由选择、ACL等
在介绍通配符掩码之前,我们先回顾一下掩码 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
1
0000000.0.0.0
/2 192.0.0.011
000000.0.0.0
/3 224.0.0.0111
00000.0.0.0
/4 240.0.0.01111
0000.0.0.0
/5 248.0.0.011111
000.0.0.0
/6 252.0.0.0111111
00.0.0.0
/7 254.0.0.01111111
0.0.0.0
/8 255.0.0.011111111
.0.0.0/9 255.128.0.0
11111111
.1
0000000.0.0
/10 255.192.0.011111111
.11
000000.0.0
/11 255.224.0.011111111
.111
00000.0.0
/12 255.240.0.011111111
.1111
0000.0.0
/13 255.248.0.011111111
.11111
000.0.0
/14 255.252.0.011111111
.111111
00.0.0
/15 255.254.0.011111111
.1111111
0.0.0
/16 255.255.0.011111111
.11111111
.0.0/17 255.255.128.0
11111111
.11111111
.1
0000000.0
/18 255.255.192.011111111
.11111111
.11
000000.0
/19 255.255.224.011111111
.11111111
.111
00000.0
/20 255.255.240.011111111
.11111111
.1111
0000.0
/21 255.255.248.011111111
.11111111
.11111
000.0
/22 255.255.252.011111111
.11111111
.111111
00.0
/23 255.255.254.011111111
.11111111
.1111111
0.0
/24 255.255.255.011111111
.11111111
.11111111
.0/25 255.255.255.128
11111111
.11111111
.11111111
.1
0000000
/26 255.255.255.19211111111
.11111111
.11111111
.11
000000
/27 255.255.255.22411111111
.11111111
.11111111
.111
00000
/28 255.255.255.24011111111
.11111111
.11111111
.1111
0000
/29 255.255.255.24811111111
.11111111
.11111111
.11111
000
/30 255.255.255.25211111111
.11111111
.11111111
.111111
00
/31 255.255.255.25411111111
.11111111
.11111111
.1111111
0
/32 255.255.255.25511111111
.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.10
和a.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.10
和 a.b.c.14
这两个主机地址了
通过上面的
a.b.c.10
和a.b.c.14
的例子我们可以类比出,
要想将192.168.10
.0和192.168.14
.0放到一个路由条目里,需要使用的子网掩码是/21
即255.255.248.0
(11111111.11111111.11111000.0
)
路由如下:
192.168.10.0 /21
或者192.168.14.0 /21
,
表示 192.168.10.0和192.168.14.0在同一个子网里,
虽然用子网掩码能完成将192.168.10.0
和192.168.14.0
放到一个子网里,
但同时问题也出现了,
就是,192.168.8.0
、192.168.9.0
、192.168.11.0
、192.168.12.0
、192.168.13.0
、192.168.15.0
这6个网段也被包括进来了,
而我们的需求是,一条路由中只有192.168.10.0
和192.168.14.0
这两个网段,没有其他的网段。
那么,这时候就需要通配符掩码登场了,
我们先来观察一下,
192.168.10.0和192.168.14.0 在二进制下是什么样子,不同之处在哪里,
192.168.10.0:11000000.10101000.00001
0
10.00000000
192.168.14.0:11000000.10101000.000011
10.00000000
可见,192.168.10.0和192.168.14.0的二进制表示形式中,只有红色字符所在的位置不同
,其他位置一摸一样,
那么,根据通配符掩码的规则,0表示精确匹配,1表示可以是任意数值,我们现在只保留红色字符的那一位为1,其他位都置为0,就可以生成一个通配符掩码,
00000000.00000000.00000
1
00.00000000
它的点分十进制的表示是:
0.0.
4
.0
为了方便理解,我们给这个通配符掩码变个样子,
00000000.00000000.00000
X
00.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
当x
取0
时,
有
192.168.(1010+0000)₂
.0,
192.168.(1010)₂
.0,
即192.168.10
.0
当x
取1
时,
有
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
当x
取0
时,
有
192.168.(1010+0000)₂
.0,
192.168.(1010)₂
.0,即192.168.
10
.0
当x
取1
时,
有
192.168.(1010+0100)₂
.0,
192.168.(1110)₂
.0,即192.168.
14
.0
它的点分十进制的表示:
0.0.
4
.0
让通配符掩码0.0.4.0
和192.168.10.0
或者192.168.14.0
结合起来,就可以表示192.168.10.0
与192.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.0
与192.168.14.0
这两段网络,而不会出现把其他网段也包括进来的情况了,
因为,通配符掩码 0.0.
4.0
(00000000.00000000.00000
100.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.0
与192.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