Internet 组织机构定义了五种IP地址,用于主机的有ABC三类地址。其中A类网络有126个,每个A类网络可能有16777214台主机,它们处于同一广播域。而在同一广播域中有这么多结点是不可能的,网络会因为广播通信而饱和,结果造成16777214个地址大部分没有分配出去,形成了浪费。而另一方面,随着互连网应用的不断扩大,IP地址资源越来越少。为了实现更小的广播域并更好地利用主机地址中的每一位,可以把基于类的IP网络进一步分成更小的网络,每个子网由路由器界定并分配一个新的子网网络地址,子网地址是借用基于类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 
1. 子网掩码

RFC 950 定义了子网掩码的使用,子网掩码是一个32位的2进制数,其对应网络地址的所有位都置为1,对应于主机地址的所有位都置为0。由此可知,A类网络的缺省的子网掩码是255.0.0.0B类网络的缺省的子网掩码是255.255.0.0C类网络的缺省的子网掩码是255.255.255.0。将子网掩码和IP地址按位进行逻辑运算,得到IP地址的网络地址,剩下的部分就是主机地址,从而区分出任意IP地址中的网络地址和主机地址。子网掩码常用点分十进制表示,我们还可以用网络前缀法表示子网掩码,即“/<网络地址位数>”。如138.96.0.0/16表示B类网络138.96.0.0的子网掩码为255.255.0.0。子网掩码告知路由器,地址的哪一部分是网络地址,哪一部分是主机地址,使路由器正确判断任意IP地址是否是本网段的,从而正确地进行路由。例如,有两台主机,主机一的IP地址为222.21.160.6,子网掩码为255.255.255.192,主机二的IP地址为222.21.160.73,子网掩码为255.255.255.192。现在主机一要给主机二发送数据,先要判断两个主机是否在同一网段。

主机一

222.21.160.6 即:11011110.00010101.10100000.00000110

255.255.255.192 即:11111111.11111111.11111111.11000000

按位逻辑与运算结果为: 11011110.00010101.10100000.00000000

主机二

222.21.160.73 即:11011110.00010101.10100000.01001001

255.255.255.192 即:11111111.11111111.11111111.11000000

按位逻辑与运算结果为:11011110.00010101.10100000.01000000

两个结果不同,也就是说,两台主机不在同一网络,数据需先发送给默认网关,
然后再发送给主机二所在网络。那么,假如主机二的

子网掩码误设为255.255.255.128,会发生什么情况呢?

让我们将主机二的IP地址与错误的子网掩码相

222.21.160.73 即:11011110.00010101.10100000.01001001

255.255.255.128 即:11111111.11111111.11111111.10000000

结果为 11011110.00010101.10100000.00000000

这个结果与主机的网络地址相同,主机与主机二将被认为处于同一网络中,数据不再发送给默认网关,而是直接在本网内传送。由于两台主机实际并不在同一网络中,数据包将在本子网内循环,直到超时并抛弃。数据不能正确到达目的机,导致网络传输错误。反过来,如果两台主机的子网掩码原来都是255.255.255.128,误将主机二的设为255.255.255.192,主机一向主机二发送数据时,由于IP地址与错误的子网掩码相与,误认两台主机处于不同网络,则会将本来属于同一子网内的机器之间的通信当作是跨网传输,数据包都交给缺省网关处理,这样势必增加缺省网关的负担,造成网络效率下降。所以,子网掩码不能任意设置,子网掩码的设置关系到

子网的划分。

 
2. 子网划分与掩码的设置

子网划分是通过借用IP地址的若干位主机位来充当子网地址从而将原网络划分为若干子网而实现的。划分子网时,随着子网地址借用主机位数的增多,子网的数目随之增加,而每个子网中的可用主机数逐渐减少。以C类网络为例,原有8位主机位,2^8256个主机地址,默认子网掩码255.255.255.0。借用1位主机位,产生2^1个子网,每个子网有2^7个主机地址;借用2位主机位,产生2^2个子网,每个子网有2^6个主机地址……根据子网ID借用的主机位数,我们可以计算出划分的子网数、掩码、每个子网主机数,列表如下:

划分子网数
子网位数
子网掩码(二进制)
子网掩码(十进制)
每个子网主机数

1 2

1
11111111.11111111.11111111.10000000
255.255.255.128
128

3 4
2
11111111.11111111.11111111.11000000
255.255.255.192
64

5 8
3
11111111.11111111.11111111.11100000
255.255.255.224
32

9 16
4
11111111.11111111.11111111.11110000
255.255.255.240
16

17 32
5
11111111.11111111.11111111.11111000
255.255.255.248
8

33 64
6
11111111.11111111.11111111.11111100
255.255.255.252
4


如上表所示的C类网络中,若子网占用7位主机位时,主机位只剩一位,无论设为0还是1,都意味着主机位是全0或全1。由于主机位全0表示本网络,全1留作广播地址,这时子网实际没有可用主机地址,所以主机位至少应保留2位。从上表可总结出子网划分的步骤或者说子网掩码的计算步骤:

2.1 确定要划分的子网数目以及每个子网的主机数目。

2.2 求出子网数目对应二进制数的位数N及主机数目对应二进制数的位数M

2.3 对该IP地址的原子网掩码,将其主机地址部分的前N位置 1或后M位置0 即得出该IP地址划分子网后的子网掩码。
 
例如,对B类网络135.41.0.0/16需要划分为20个能容纳200台主机的网络。因为162032,即2^4202^5,所以,子网位只须占用5位主机位就可划分成32个子网,可以满足划分成20个子网的要求。B类网络的默认子网掩码是255.255.0.0,转换为二进制为11111111.11111111.00000000.00000000。现在子网又占用了5位主机位,根据子网掩码的定义,划分子网后的子网掩码应该为11111111.11111111.11111000.00000000,转换为十进制应该为255.255.248.0。现在我们再来看一看每个子网的主机数。子网中可用主机位还有11位,2^112048,去掉主机位全0和全1的情况,还有2046个主机ID可以分配,而子网能容纳200台主机就能满足需求,按照上述方式划分子网,每个子网能容纳的子网数目远大于需求的主机数目,造成了IP地址资源的浪费。为了更有效地利用资源,我们也可以根据子网所需主机数来划分子网。还以上例来说,128200256,即2^72002^8,也就是说,在B类网络的16位主机位中,保留8位主机位,其它的1688位当成子网位,可以将B类网络138. 96.0.0划分成256(2^8)个能容纳256111=253台(去掉全01情况和留给路由器的地址)主机的子网。此时的子网掩码为11111111.11111111.11111111.00000000,转换为十进制为255.255.255.0

在上例中,我们分别根据子网数和主机数划分了子网,得到了两种不同的结果,都能满足要求,实际上,子网占用5~8位主机位时所得到的子网都能满足上述要求,那么,在实际工作中,应按照什么原则来决定占用几位主机位呢?在划分子网时,不仅要考虑目前需要,还应了解将来需要多少子网和主机。对子网掩码使用比需要更多的主机位,可以得到更多的子网,节约了IP地址资源,若将来需要更多子网时,不用再重新分配IP地址,但每个子网的主机数量有限;反之,子网掩码使用较少的主机位,每个子网的主机数量允许有更大的增长,但可用子网数量有限。一般来说,一个网络中的节点数太多,网络会因为广播通信而饱和,所以,网络中的主机数量的增长是有限的,也就是说,在条件允许的情况下,会将更多的主机位用于子网位。综上所述,子网掩码的设置关系到子网的划分。子网掩码设置的不同,所得到的子网不同,每个子网能容纳的主机数目不同。若设置错误,可能导致数据传输错误。

子网掩码的计算方法

 
一、利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。
1)
将子网数目转化为二进制来表示
2)
取得该二进制的位数,为 N
3)
取得该IP地址的类子网掩码,将其主机地址部分的的前N位置 1 即得出该IP地址划分子网的子网掩码。
如欲将BIP地址168.195.0.0划分成27个子网:
1)27=11011
2)
该二进制为五位数,N = 5
3)
B类地址的子网掩码255.255.0.0的主机地址前5位置 1,得到
255.255.248.0 ,即为划分成 27个子网的BIP地址 168.195.0.0

子网掩码。

二、利用主机数来计算
1)
将主机数目转化为二进制来表示
2)
如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为 N,这里肯定 N8,这就是说主机地址将占据不止8位。
3)
使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
如欲将B(c)IP地址168.195.0.0划分成若干子网,每个子网内有主机700(17)
1) 700=1010111100
2)
该二进制为十位数,N = 10(1001)
3)
将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255,然后再从后向前将后10位置0,即为:11111111.11111111.11111100.00000000(100),即255.255.252.0。这就是该欲划分成主机为700台的BIP地址 168.195.0.0的子网掩码。一个很容易算子网掩码的方法。(个人觉得没什么用!!!还是掌握上面的方法好!!!)
大家都应该知道20次方到10次方是多少把?也给大家说一下,分别是:
1 2 4 8 16 32 64 128 256 512 1024
。如果你希望每个子网中只有5ip地址可以给机器用,那么你就最少需要准备给每个子网7ip地址,因为需要加上两头的不可用的网络和广播ip,所以你需要选比7多的最近的那位,也就是8,就是说选每个子网8ip。好,到这一步,你就可以算掩码了,这个方法就是:最后一位掩码就是256减去你每个子网所需要的ip地址的数量,那么这个例子就是256-8=248,那么算出这个,你就可以知道那些ip是不能用的了,看:0-7,8-15,16-23,24-31依此类推,写在上面的0781516232431(依此类推)都是不能用的,你应该用某两个数字之间的IP,那个就是一个子网可用的IP,怎么了?是不是不相信?太简单了。。。
我再试验一下,就拿200台机器分成4个子网来做例子吧。
200
台机器,4个子网,那么就是每个子网50台机器,设定为192.168.10.0C类的IP,大子网掩码应为255.255.255.0,对巴,但是我们要分子网,所以按照上面的,我们用32IP一个子网内不够,应该每个子网用64IP(其中62位可用,足够了吧),然后用我的办法:子网掩码应该是256-64=192,那么总的子网掩码应该为:255.255.255.192。不相信?算算:0-6364-127128-191192-255,这样你就可以把四个区域分别设定到四个子网的机器上了,是不是很简单?不需要软件算了吧。。。呵呵。。希望大家能看懂我写的。。。。
子网的再划分就是这样:比如一个c类地址19216810/24,这个子网中可用主机地址为2552253个,一个网络地址和一个广播地址不可分配给主机用,网络地址是10,广播地址是1255。那么如果我有些机器,ip都是这个子网中的地址,那么他们互ping,可以通,不用经过路由,因为是一个子网内的通信。如果我的规划是这样的:公司每个部门占用一个子网,为了安全性考虑,部门之间不能通信,那么如果一个部门只有2台机器,怎么办?一个c类子网有253个地址,就只让那两台机器给占用了吗?难道就这么浪费?私网地址也就罢了,随便用吧,反正用不完,如果这是公网地址呢?所以出现了子网划分,就是将一个子网,划分称更多的小子网,但是子网数目有规定,就是2n次方,也就是一个子网可以分成248163264128个子网,如果分成2个,那么原先的256个地址除2等于128,就是说每个小子网有128个地址了,而掩码原来是24位的,现在分了一次,变成两个小子网,那么掩码就加1,变长了,变成25了,这就叫vlsm,如果又分了一次,就是说在原来的基础上分成4个子网(也可以把25位的小子网再分一次,就和细胞分裂一样的。),那么2564就是64,也就是一个小子网有64个地址,掩码再次加1,变成26了,同样,再分,再加,每子网32个(掩码27),16个(28),8个(29),4个(30),2个(31),1个(32),31位的子网已经没有可用地址了,只有一个网络地址和一个广播地址了(每个子网开头第一个地址为网络地址,最后一个为广播地址,这是规定),32位的就不叫网了,叫单主机了。如果不用242526,等表示掩码,也可以用256-子网地址数的值来表示(见楼上)。这样,如果给一个有28台主机的部门分一个子网,那么用那个子网好呢?看看来,12481632。。。。。。。。28介于1632之间所以只能分一个比32大的子网给他,为了节约地址,分一个32地址的,所以,掩码为25632224,如果用位数表示,好,256÷328,所以分了8个子网,也就是分了3次,所以24+3=27。地址范围:031326364127128159160191192223224256,分哪一个子网都行,但是掩码一定要带着,否则按照默认的abc类地址掩码算!就像切豆腐一样,一块大的,切成若干小的,小的还可以再分,不过一定要是2n次方。