掩码我们学数通的应该都很熟悉,我们刚刚学习IP的时候肯定都学过,这里就不在叙述。

   今天我们要说的是反掩码和通配符掩码,反掩码相信大家也都不陌生,我们配置OSPF的时候都能用的到但是很多网工也就知道配置OSPF就要那么配置,用255.255.255.255减去正掩码就是反掩码,但是反掩码是啥却说不出来。


 

 反掩码

连续的1和0构成,用来区分网络部分和主机部分,1对应网络位,0代表主机位。

java将反掩码地址拆成一段一段的range地址 反掩码 0_OSPF

而反掩码正好相反,由连续的0和1组成,0必须匹配,1无需匹配,一般用在路由协议中,比如我们最熟悉的OSPF宣告网段时

java将反掩码地址拆成一段一段的range地址 反掩码 0_IP_02

‘’

这就表示宣告了一个掩码前缀为24的网段,用我们的计算公式255.255.255.255-255.255.255.0=0.0.0.255,一般来说大家都是这么配置的,也没什么问题,但是一旦别人问你,特别是你的客户问你什么是反掩码,你总不能说,“不用知道什么是反掩码,只要会用就行了。”这句话的吧,所以我们在会用的同时也要知道它是什么。

java将反掩码地址拆成一段一段的range地址 反掩码 0_OSPF_03

如上面我们在OSPF中宣告的这个网段,按照0必须匹配,1无需匹配的规则,我们可以知道红线左边都是0也就是说192.168.1被0匹配不能改变,而红线右边全为1,意思就是把IP地址写成二进制后,后8位可以为任意的0和1,因为通配符1无需匹配的,它并不关心你对应的IP地址到底是1还是0。也就是说你IP地址是192.168.1.15也行,是192.168.1.200也行都能被0.0.0.255匹配上。

 


通配符

在说通配符之前我们先看几张图

java将反掩码地址拆成一段一段的range地址 反掩码 0_IP_04

java将反掩码地址拆成一段一段的range地址 反掩码 0_OSPF_05

很显然我们在配IP地址的时候,红圈里提示我们的是“IP ADDRESS MASK”IP地址的掩码

而我们在配ACL的时候,红圈里显示的是WILDCARD,就是通配符的意思。

通配符是由任意的0和1组成,一般用于ACL中,和反掩码一样也是按照0必需匹配,1无需匹配的原则来进行匹配的。

这个任意的0和1组成是什么意思?我们来通过几条ACL语句来感受一下:

通配符我可以这样写:

java将反掩码地址拆成一段一段的range地址 反掩码 0_IP_06

也可以这样写

java将反掩码地址拆成一段一段的range地址 反掩码 0_OSPF_07

还能这么写

java将反掩码地址拆成一段一段的range地址 反掩码 0_路由协议_08

如果说前面的你都能理解的话,那还有更花里胡哨的,我还能这么写:

java将反掩码地址拆成一段一段的range地址 反掩码 0_路由协议_09

这下就不好理解了吧,通配符难就难在这个地方。

我们来看下ACL 2001里的配置

java将反掩码地址拆成一段一段的range地址 反掩码 0_OSPF_10

大家此时会发现我们写的ACL语句到了ACL配置里就变了,怎么回事呢,我们把它们化成2进制就能看清楚了。

拿rule permit source 2.2.2.2 1.2.3.4这条语句为例;

java将反掩码地址拆成一段一段的range地址 反掩码 0_IP_11

由0必须匹配,1无需匹配的原则,我们可以看出把2.2.2.2化成二进制后首尾8位有个1被匹配了也就是说这个值不能改变,所以这条ACL匹配的对应IP地址可以为2.0.0.2也可以为3.0.0.2,也可以是3.2.3.6。

 

如何匹配192.168.10.0/24这个网段里所有的奇数主机?

根据上面所叙述的,0必须匹配1无须匹配的原则,我们只要保证把地址化成八位二进制后最后一位固定为1就行了

java将反掩码地址拆成一段一段的range地址 反掩码 0_路由协议_12

写成ACL的话就是 rule per so 192.168.0.1 0.0.0.254


总结

java将反掩码地址拆成一段一段的range地址 反掩码 0_OSPF_13