子网掩码这个名字对于接触过网吧网络参数设置的读者并不陌生,但对于不少读者来说,它的意义或许只停留在默认的255.255.255.0上,而对于接触过比较大规模网吧的读者,还可能困惑于为什么大型网吧的子网掩码又往往设为255.255.248.0?我们将在这里为各位读者简要分析子网掩码的工作原理,揭示这些数字背后的秘密。
什么是“子网掩码”?
如果“子网掩码”四个汉字不易理解,那我们看看创造“子网掩码”的美国友人为它取的名字:Subnet Mask。
Subnet从字面可以理解为“整个网络(net)的下属(sub)网络”,也就是说是从整个网络中划分出一个个小网络,即我们中文译作的“子网”,而“mask”(面具)这个词对于大家应该不会陌生,由著名喜剧演员金•凯瑞主演的电影《变相怪杰》英文名便是The Mask,所以Subnet Mask完整的可以理解为“为子网盖上的一层面具”,所以,每个子网之间都有一层“面具”隔开,它们之间看不到对方的真正面目,即各个子网之间是不可见的,这个神奇的“面具”就是子网掩码。
IP地址真的是我们看到的数字吗?
知道了“子网掩码”四个字的含义之后,在进一步对它进行讨论之前,我们先来看看和大家朝夕相处的IP地址,对于IP地址,广大在网吧中摸爬滚打的朋友第一个反应一定是192.168.0.1或者其他以192.168开头的地址。这些数字真的就是我们熟知的IP地址本身吗?我们从计算机工作的原理入手,这个答案就明了了——当然不是,计算机里面的一切运算都是以二进制运行的,所以,一台计算机的IP地址在标示自己或者其他计算机在寻找另一台计算机时,他们都是用IP地址的真正形式——二进制来工作的。
接下来,我们一同揭开192.168.0.1的真面目:
11000000.10101000.00000000.00000001。
读者千万不要被这一串数字吓到了,这还只是我们现在广泛使用的IPv4版本的地址标示方法,我们来看看另外一个IP地址——未来即将成为主流IP地址分配方法的IPv6:
3FFE:FFFF:7654:FEDA:1245:BA98:3210:4562
上面这一串数字便是一个以十六进制表示的IPv6地址,和IPv4不同以“.”进行分割,IPv6是用冒号进行分割的。它转换成二进制后会是什么样子呢?
0011111111111110:1111111111111111:0111011001010100:1111111011011010:0001001001000101:1011101010011000:0011001000010000:0100010101100010
读者可能已经被这些0和1折服了,不过计算机的IP地址的本来面目确实如此。IPv4采用了32位0和1来标示IP地址,每组8位,IPv6为了获得更大的地址空间,采用128位地址,每组16位,同样分为8组。这么长的0和1记忆和输入很不方便,于是聪明的人它们分别以十进制和十六进制面目示人,将二进制转换这种枯燥工作留给了计算机。
IP地址和子网掩码究竟是什么关系?
接下来,我们即将进入本文的核心部分——揭示子网掩码和IP地址的关系。它们的关系可以简单用四个字概括:密不可分。可以说,单独讨论子网掩码或者IP地址都是没有意义的,一个IP地址需要子网掩码才能确定它所属的网络,这样才可以确定这台计算机的网络号和主机号。
那么子网掩码是如何从一个IP地址中确定该地址的网络号和主机号呢?
我们了解到IP地址的本质是一串二进制代码,同样,子网掩码的本质也是一串二进制代码。例如大家熟悉的255.255.255.0,可以很容易的转换为11111111.11111111. 11111111.00000000。为了方便下面的讨论,我们将刚才出现的一个“经典”IP地址192.168.0.1的二进制和255.255.255.0的二进制表示一同列出:
IP地址192.168.0.1:
11000000.10101000.00000000.00000001
子网掩码255.255.255.0:
11111111..11111111.11111111.00000000
计算机会对子网掩码和IP地址进行一个“逻辑与”运算,即只有两个1运算结果才是1,其余的运算结果都为0。所以上面列出的IP地址和子网掩码运算后的结果是
11000000.10101000.00000000.00000000
可以看出,经过运算后,子网掩码0的部分把IP地址中的1“遮盖”了,而1的部分则保留了原有IP地址数值,这就形象的解释了Mask(面具)的意思。这个运算结果保留的IP地址数值部分,就是这个IP地址的所属子网的网络号,被“遮盖”的部分就是IP地址中的主机号。只有网络号相同的两台计算机才能在局域网内进行通信。
大家通常所说的“网段”严格的来说就是指的一个个子网,例如子网掩码为255.255.255.0的IP地址,192.168.0和192.168.1等等就是两个不同的网段(稍后可以看到,进行大网段划分后,它们会变成一个网段),如果没有经过路由,这两个网段内的计算机相互之间是不能进行通信的。
在网吧中该如何划分子网呢?
子网掩码和IP地址的关系已经变得清晰了,那么网吧中该如何划分子网呢?事实上,子网概念的提出是为了能够合理的利用有限的IP地址资源,保证不同网段间的通信不受干扰。子网划分得过大,会造成IP地址资源浪费,今后想把另一批计算机单独再划分一个新子网也不方便了,划分得太小又不够容纳本应在同一个子网的计算机。
下面我们通过例子来说明子网掩码的设置规则。
如果读者的网吧的规模在100-200台机器,那么完全可以用255.255.255.0的子网掩码。为什么呢?我们刚才的分析中提到,该子网掩码所“遮盖”的部分是8位二进制主机号,也就是说这个二进制空间最多可以从00000000一直编号到11111111,但是全0和全1是保留地址不能用于主机号,所以实际上主机号能使用的数值时00000001-11111110,转换成十进制就是1-254,这个数值范围容纳读者网吧的计算机是完全没有问题的。
今后网吧扩容,例如原来使用的192.168.1网段,扩容后使用192.168.2网段,两个网段的内部通信不受干扰,也不会因为一个网段内通信量过大造成交换机拥塞——两个网段的通信可以通过带路由功能的三层交换机实现。
显然,300台以上的大型网吧则不能采用255.255.255.0将所有计算机放进一个网段了。
那么我们如何增加网段容量呢?我们还是来看该子网掩码的二进制形式。
11111111..11111111.11111111.00000000
根据刚才我们的讨论,8位二进制主机号的理论容量是256,9位则增加到512,10位就达到了1024。这些完全可以满足网吧在一个网段内部署所有客户机的需要。
下面我们给出这些划分方法的子网掩码。
9位主机号的子网掩码是
11111111..11111111.11111110.00000000,转换为十进制后为255.255.254.0
这样,192.168.0和192.168.1就是同一个网段了。192.168.2和192.168.3就是另一个子网了等等。
10位主机号的子网掩码是
11111111..11111111.11111100.00000000,转换为十进制后为255.255.252.0
这样划分,192.168.0-192.168.3都是一个网段了,按照上一个例子可以推算该出该子网掩码下的其他子网。
这两个子网掩码看上去有些“非主流”,但它们的确可以在一个网段内提供充足的IP地址资源供计算机使用。
笔者见过的最常用大网段划分的子网掩码为:255.255.248.0,它的一个子网能容纳多少计算机呢?
转化为二进制得11111111..11111111.11111000.00000000,可以看到它有11位的主机号可以使用,理论上的容量为2048。这个子网划分有些浪费了,不过还是成为了广大朋友的“主流”选择,方便了网吧IP地址管理。这个子网掩码可以把192.168.0至192.168.7全部划进一个网段。
好了,我们关于子网掩码的讨论可以告一段落了,虽然讨论的层次比较浅,但希望能够让新手读者在网吧部署中“知其所以然”,为工作带来方便。