大家好,又见面了,我是你们的朋友全栈君。
子网掩码,官方的定义是
一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
说白了子网掩码的工作原理就是,它拥有和主机IP地址一样的位数,每一位与对应的ip地址位进行“与”操作,得出的结果就是主机所在的子网,打个比方,192.168.1.1 255.255.255.0这是一个标准的C类网络,子网掩码/24,所以它的网络位也就是所在的子网就是192.168.1.0,计算过程如下:
首先将192.168.1.0 和 255.255.255.0 转换成二进制,然后一位一位的上下进行与操作,很显然我们得出的结果为
1100 0000. 1010 1000.0000 0001.0000 0001:192.168.1.1
1111 1111.1111 1111.1111 1111.0000 0000 :255.255.255.0
1100 0000.1010 1000.0000 0001.0000 0000:192.168.1.0
子网掩码有一个最基本的要求,1和0必须连续,也就是说不能出现1111 1111.1111 0011.0000 0000.0000 0000这种情况。
而根据上面的计算,我们可以看出,子网掩码后面的0的个数就是IP地址主机位的个数,抛去网关使用(1个到3个根据不同的冗余配置),组播(全1),网段(全0)后剩下的就是实际子网中能容纳的主机数(再说细致就是划分子网的知识了,在这里不多赘述)。
综上所述,子网掩码的作用就是让我们知道IP地址所属的网段。我们来实际看一下子网掩码出现的位置:
通配符掩码,很多人认为通配符掩码只是子网掩码的相反,如:192.168.1.1 子网掩码255.255.255.0,它的通配符掩码就是0.0.0.255,其实不是。官方对通配符掩码给的定义是:
路由器使用的通配符掩码与源或目标地址一起来分辨匹配的地址范围,它与子网掩码不同。它不像子网掩码告诉路由器IP地址的哪一位属于网络号一样,通配符掩码告诉路由器为了判断出匹配,它需要检查IP地址中的多少位。
换句话说,子网掩码更像是我们了解的正则表达式,它是将IP地址看成一个二进制字符串,而我们只关心其中几位,它的计算方式与子网掩码也有不同,通配符掩码是0的位置使我们必须要确定相同的,而通配符掩码是1的位置使我们不关心的,如在路由协议中我们想将192.168.1.0网段的所有主机都宣告进入路由协议中,我们使用的语句是:
network 192.168.1.0 0.0.0.255
这里的计算方法是:
1100 0000. 1010 1000.0000 0001.0000 0000:192.168.1.0
0000 0000.0000 0000.0000 0000.1111 1111:0.0.0.255
所以我们关心的只是前几位,只要IP地址是为192.168.1.x格式的就宣告进路由协议。说到这里通配符掩码和子网掩码可能最本质的一点不同就是通配符掩码不需要1和0必须连续,就比如192.168.0.0 通配符掩码是0.0.2.255
我们转换成二进制:
1100 0000. 1010 1000.0000 0000.0000 0000:192.168.0.0
0000 0000.0000 0000.0000 0010.1111 1111:0.0.2.255
注意这里通配符掩码是不连续的,所以这个通配符掩码代表的意思是匹配192.168.1.0/24和192.168.2.0/24两个网段的所有主机。
我们来看一下通配符掩码出现的场合:
这里和前缀列表中的ip prefix-list 1 permit 192.168.1.0/24做一下比较,ACL访问控制列表的意思是我抓取一切IP地址满足192.168.0.x和192.168.1.x格式的无论它的掩码是/24,/25,/30我都感兴趣,但前缀列表中192.168.1.0/24得意思是我只关心192.168.1.0/24网段的路由,所有不属于这个网段的比如IP地址也是192.168.1.x格式但掩码是/25的IP地址我也不感兴趣。
相信经过这么一番解释,大家能对子网掩码和通配符掩码有了写基本的区分。总结一下,就是说,子网掩码是用来区分网络位和主机位,而通配符掩码是IP地址的正则表达式。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161513.html原文链接:https://javaforall.cn