在早期用A类,B类,C类这几类来表示不同规模的网络,但事实上,一个有几千,几万台主机的大规模单一网络几乎是不存在的,像B类ip地址中用16位来表示主机部分,A类ip地址用24位来表示主机部分会造成大量的ip地址浪费的。对于C类地址主机位用8位来表示,在一个C类网络中最多可以拥有256个主机,有时候也是会出现浪费的。
什么意思呢?
也就是说,现在一个ip地址的net-id和host-id不再受限于地址的类别,而是通过一个子网掩码
的识别通过子网网络地址细分出比A类,B类,C类粒度更小的网络
。这样可以充分利用ip地址主机部分来拓展ip地址的网络标识,可以更加自由,灵活的划分网络的大小
这里,我们对子网掩码做一个总结:
子网掩码的作用是用来界定ip地址的网络标识部分(net-id)和主机地址部分(host-id),简单来说,就是用来划分更多,范围更小的网络。
下图中表示的是分类网络的子网掩码的二进制形式与子网掩码的十进制形式。
从图中可知,对于A类地址的子网掩码地址的前8位的值全部为1,其他部分都为0,对于B类地址的子网掩码地址的前16位的值全部为1,其他部分都为0,对于C类地址的子网掩码地址的前24位的值全部为1,其他部分都为0。
如果把子网掩码的二进制形式的32位按每8位为一个字节来分,我们可以得出一个规律: 那就是不管对于A类,还是B类,还是C类地址来说,net-id部分的值全部都为1,对于host-id的值来说全部都为0。
前面我们说过,子网掩码是用来区分ip地址的网络部分和主机部分,那么计算机是如何通过子网掩码来计算自己所在的网络地址呢?
在互联网中,为了寻址方便,需要使用网络地址,而前面我们说过网络地址是通过ip地址和子网掩码计算得出的,也就是将整个32位的ip地址和32位的子网掩码进行“二进制与”运算
,就可以得到一个新的32位地址就是网络地址。
上图中,202.194.36.38是一个C类地址,对于C类地址来说,由于C类地址的子网掩码net-id全部为1,host-id全部为0(参考图1),即前24位值都为1,后面8位值都为0(255.255.255.0),最终通过与运算
计算出来的网络地址的前24位和ip地址的前24位的值是一样的,通过这种方式我们可以立即计算出网络地址为202.194.36.0 。
还有一种表示方法为202.194.36.38/24,“/24”表示网络前缀,用来表示该ip地址的前24位都是网络号。这种记法:202.194.36.38/24,我们称为CIDR记法。
从结果中我们又可以得出一个规律:当子网掩码的位的值为1时,ip地址的位的值会保留下来。
由此可见子网掩码的重要性,如果子网掩码配置错误会导致计算机通信故障,路由寻址错误,例如下图所示。
我的计算机ip地址是192.168.2.106,通过之前的学习可知这是一个C类ip地址,而该地址对应的子网掩码就是255.255.255.0。
计算机之间进行通信时,首先通过ip地址和子网掩码计算出自己所在网络地址,再用目的地址和自己的子网掩码计算得出网络地址,并判断目的地址和自己是否在同一网段,如果不在同一网段,则把数据转发给路由器,由路由器再把数据转发出去;如果相同则直接把数据发给目标地址。