由于前期做别的事加上疫情原因,很长一段时间都没有更新文章,向大家说声抱歉,今天开始,公众号恢复正常,小编会定期更新文章分享给大家,感谢大家的支持!
今天想和大家聊聊通配符掩码、正掩码及反掩码之间的本质区别,很多人在学习网络技术过程中,不管是刚入行的小白还是纵横职场多年的老鸟,对这几个概念常常模糊不清,通过这篇文章,我相信大家一定对这几个概念更加清晰。
在开始之前,先问大家一个问题,请各位先进行思考后写下自己的答案在阅读这篇文章。
问:在动态路由协议(比如ospf)中使用network宣告路由的时候OSPF wild card bits和ACL访问控制列表中的Wildcard of source是否表达同一个含义?
Tips:
首先要纠正一个误区,反掩码和通配符掩码根本不是一个概念,它们有着本质的区别。重要的事前说三遍!!!
反掩码不等于通配符掩码
反掩码不等于通配符掩码
反掩码不等于通配符掩码
正掩码:
正掩码:也就是通常说的掩码中,二进制的1表示精确匹配,0表示任意;这个正掩码指的就是我们的子网掩码,比如255.255.255.0,在正掩码中的二进制1表示精确匹配,0表示任意,1和0永远不交叉;1永远在左边,0永远在右边,也就是1和0必须是连续的(连续的1和连续的0),
比如11111111111111111111111100000000,这就是合法的正掩码,1和0是连续的,没有交叉。而11111111000000001111111100000000,这样的正掩码是不合法的,1和0不是连续的,并且1和0是交叉的。我们在配置网络设备的IP地址以及路由配置的时候,使用的就是正掩码或者掩码。
反掩码:
反掩码:在反掩码中,二进制的0表示精确匹配,1表示任意;在动态路由协议的配置中经常使用反掩码,比如ospf,BGP,ISIS等等,通过network命令进行网段宣告时,就会用反掩码匹配。
比如:
network192.168.1.0 0.0.0.255
area 0
反掩码中的二进制的0和1永远不交叉;0永远在左边,1永远在右边,0和1必须是连续的(连续的0和连续的1),比如00000000000000000000000011111111,这样的反掩码是合法的,0和1是连续的,没有交叉。而11111111000000001111111100000000这样的就是不合法的反掩码,0和1不是连续的,并且0和1是交叉的。
通配符掩码:
通配符掩码:在通配符掩码中,二进制的0表示精确匹配,1表示任意;二进制的0和1的位置,没有任何的固定限制!可以连续,也可以是不连续的,可以交叉,也可以不交叉。没有任何限制,可以根据自己的匹配范围自行定义!在ACL访问控制列表中我们使用的就是通配符掩码(通配符掩码作为ACL中必不可少的重要组件)通配符掩码在ACL访问控制列表中可以进行灵活的运用,根据自己的业务需求,配置不同的通配符掩码来匹配不同的范围,没有任何的限制。
通配符掩码在ACL中的应用:
ACL(Access Control List)访问控制列表的作用想必大家都明白,在通配符掩码中,可以用255.255.255.255(也就是32个二进制1,11111111.11111111.11111111.11111111)表示所有IP地址,因为全为1说明32位中所有位都不需检查,此时可用any替代。而0.0.0.0 (也就是32个二进制0)的通配符掩码则表示32位中所有位都必须要进行匹配,它只表示一个IP地址,可以用host表示。
举例来说:192.168.1.0 0.0.0.255这个例子中,通配符掩码是0.0.0.255,前面24位是0,最后8位是11111111,也就是前面24位必须精确匹配,最后8位是什么都没关系。将这个通配符和前面的IP地址192.168.1.0 结合起来意思就是,匹配从192.168.1.0到192.168.1.255的所有IP地址,这和动态路由协议中的反掩码有点相同,应该迷惑了不少人。
再来一个举例:192.168.0.0 0.0.255.255这个例子匹配的IP地址范围就是192.168.0.0-192.168.255.255。
再来一个有挑战的例子:192.168.16.0 0.0.7.255这个例子中,通配符掩码的第三个八位组是7,IP地址的第三个八位组是16,对他们进行分解转化成二进制就是:
16 = 00010 000
7 = 00000 111
前面说过,通配符掩码中0的部分必须精确匹配,1的部分什么都可以,也就是说16的二进制表示法前面的5位 (00010)必须精确匹配, 最后3位的取值范围可以是任意any (000-111),那么就是:00010000-00010111,转化成十进制就是16-23。
所以这条规则匹配的IP地址范围就是“192.168.16.0-192.168.23.255”。
再看一个特殊的例子:
192.168.1.0 0.0.0.254
这条规则匹配的是192.168.1.0中所有偶数IP地址。对他们的最后一位进行分解转化成二进制就是:
0000 0000=0
1111 1110=254
通配符掩码中0表示严格匹配,1表示不匹配或者任意。
0000 0010=2
0000 0100=4
0000 0110=6
0000 1000=8
….
再来一个奇数的例子:
192.168.1.1 0.0.0.254
这条规则匹配的是192.168.1.0中所有奇数IP地址。对他们的最后一位进行分解转化成二进制就是:
0000 0001=1
1111 1110=254
通配符掩码中0表示严格匹配,1表示不匹配或者任意。
0000 0011=3
0000 0101=5
0000 0111=7
0000 1011=11
…..
至此,掩码、反掩码和通配符掩码的区别就讲完了,文章开头提出的问题你答对了吗?喜欢本编文章,就转发给你身边需要的朋友,大家一起进步!!!