关于子网掩码的理解

    我们在查看或者设置网络连接时经常碰到一个名词:子网掩码,其作用是什么呢?是不是可以随便编呢?下面是我对这个概念的理解。    从“子网掩码”这个名字可以看出跟子网有关,整个网络是通过路由把许多不同的子网连接起来形成一个大的网络,IPV4总共有32位二进制数来表示主机的地址,即有2的32次幂个IP地址,同时又为局域网预留了几段地址,规定这些地址段只能用于局域网:
    C类地址:192.168.0.0到192.168.255.255是其中的一段(C类地址),可以组建256个(16位)含256个主机的局域网(其实每个子网有效地址254,第一个为子网地址x.x.x.0,最后一个为广播地址x.x.x.255,不可用),子网掩码是255.255.255.0,前面是3个255(255=2的8次幂,称8位)共24位定义了一个网络,即IP地址的前三部分定义的是网络,如192.168.1;而剩下的8位用于定义主机,所以只能有256个主机;
    B类地址:C类不够用吗?还有一个更大的网段,B类地址:172.16.0.0到172.31.255.255(称为B类地址),大概一百多万个地址;其子网掩码是255.255.0.0,前面16位用于定义网络,而后面16位用于定义主机;由于前面可以是172.16-172.31,所以用B类地址可以定义16个包含65536(2的16次幂)个主机地址的网络,同前面说的道理一样,掐头去尾其实可用的地址是65534个;
    A类地址:B类地址还不够用?还有一个不够用的话包退包换的A类地址:10.0.0.0到10.255.255.255(A类地址),能容纳2的24次幂个IP地址,大概一千6百多万个地址;其子网掩码是255.0.0.0,只有8位定义网络,后面的24位全部用于定义主机,8位也就是IP地址的第一部分:10,所以这1600多万个地址还是属于同一个网络的。

    再说一些特殊的子网掩码:255.255.255.252,用前30位定义了网络,剩下的2位能表示的主机数就是4,同样掐头去尾,可用地址为2个,这个网够小的,通常用于WAN,一个服务器地址,一个客户端地址;对我来说最常用的是OpenVPN,每次OpenVPN客户端拨号成功后都能得到一个IP地址,服务器也会分配到一个IP地址,比如服务器分配到了10.8.0.5,客户端没得挑了,只能是10.8.0.6,因为子网掩码255.255.255.252分出来的这个网段只能有4个IP,下面是分段示意:{0,1,2,3}, {4,5,6,7}, {8,9,10,11}….;每段的第一个都用于标识子网地址,最后一个都是广播地址;

    再说子网掩码能否随意编写,答案是否定的:总共32位1和0,只能是若干个1后面是若干个0,0不会出现在1前面,后面x个0,子网能容纳的主机数量就是x的2次幂减去2。那么子网掩码可用的有(当然有一些无可用IP,是没有意义的):255.255.255.255,255.255.255.254, 255.255.255.252,255.255.255.248, 255.255.255.240, 255.255.255.224, 255.255.255.192, 255.255.255.128, 255.255.255.0依次类推直到255.0.0.0就是A类地址最大掩码了。