掩码的计算方法

先讲一个IPV4的布局

xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx

IP与掩码布局相同,都是四部分,换算成二进制就是每部分由8位二进制数组成的四部分,由1和(或)0组成,8位上每一位代表的值是不一样的

从左到右是128 64 32 16 8 4 2 1 所以总共是255,所以最大是255.255.255.255这个地址,当然这个我们一般不用的,因为网络地址与主机位不可以全是0或1,所以类似于192.168.0.0和192.168.0.255这样的是不能用的,192.168.0.255是广播地址,192.168.0.0是本地地址

我们平时看到的都是十进制的,比如192.168.0.1

1.根据子网数计算

比如有一个B类IP地址168.195.0.0,要划分为27个子网

2^N=27,N=几呢??N=4的话是16,N=5的话是32,所以N只能是5

而B类掩码默认是255.255.0.0,后面两个0 是主机位,前面两个255是网络位,因为我们的子网要占用主机位上的前5位,先把默认掩码换成二进制

255.255.0.0=11111111.11111111.00000000.00000000

于是掩码成了11111111.11111111.11111000.00000000,十进制是255.255.248.0

它就是168.195.0.0这个地址划成27个网段后的子网掩码,也可以写成168.195.0.0/21,因为它的网络位是21位

2.根据主机数计算机

现在我们要把B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台

700的二进制是1010111100或2^N=700,2^9=512,2^10=1024,所以N=10

(当然,其实2^N-2=700才是真正能用的主机数,因为0和255是不能用的,算的时候不用管它)

这样我们就把掩码的主机位从后面开始取10个0就可以了,剩下的全变1或者先把主机位全变1,然后从后面取10位变0

11111111.11111111.11111111.11111111---------11111111.11111111.11111100.00000000

十进制为255.255.252.0

它就是168.195.0.0这个地址每个子网内有700台电脑后的子网掩码,可以知道,它有2^6个子网即64个

-------------------------------------------------------------------------------------------

如何确定一个地址是不是划分了子网?

很简单,如果它不是默认的掩码,就是划分了子网的

A类默认255.0.0.0

B类默认255.255.0.0

C类默认255.255.255.0

如何确定网络地址?

将IP地址和子网掩码全换成二进制,做与运算

 

如何确定广播地址?

将IP地址和子网掩码全换成二进制,做与运算得到网络地址

然后把网络地址的二进制最后的主机位全换成1

就是广播地址

 

如何确定主机地址?这里作用不知道是什么,应该也不叫主机地址,主机地址应该是可用IP的一个范围

将IP地址和子网掩码全换成二进制,然后子网掩码取反,再做与运算

 

确定IP地址范围

每个网段都有自己的默认的私有地址,

A类为10.X.X.X 范围(10.0.0.0---10.255.255.255),127.X.X.X是保留地址,用做循环测试用的,比如127.0.0.1,它也可以写成127.1

B类为172.X.X.X 范围(172.16.0.0---172.31.255.255),169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP,可能你有遇到过这种情况,觉得怎么会分配到这样一个IP!

C类为192.X.X.X 范围(192.168.0.0---192.168.255.255),通常我们都用C类,因为2^8-2=254,它可以有254台电脑,一般中小公司都够用了,更别说自己家里用了!

其它的D,E等类就不说了,我们这等P民们用不到!

ip168.195.0.0/16划4个网段,每个网段IP范围是多少呢?

先确定子网掩码

10101000.11000011.00000000.00000000

4的二进制是00000100,占了主机位的前三位

11111111.11111111.11100000.00000000--------255.255.224.0

即168.195.0.0/19或168.195.0.0 255.255.224.0

可变的就是这主机位的前三位

再确定每个子网能容纳的主机数

2^13=?,?=8192

168.195.0.0------10101000.11000011.00000000.00000000

255.255.224.0---11111111.11111111.11100000.00000000

与运算后是

10101000.11000011.00000000.00000000----168.195.0.0

其实它现在就有8个子网了,一般10101000.11000011.00000000.00000000和10101000.11000011.11100000.00000000这全0子网和全1子网不用

就剩下6个,我们现在要改变的就是168.195.0.0这个地址主机位被占用的前三位

10101000.11000011.001 00000.0000000--------168.195.32.0/19

10101000.11000011.010 00000.0000000--------168.195.64.0/19

10101000.11000011.011 00000.0000000--------168.195.96.0/19

10101000.11000011.100 00000.0000000--------168.195.128.0/19

10101000.11000011.101 00000.0000000--------168.195.160.0/19

10101000.11000011.110 00000.0000000--------168.195.192.0/19

第一个子网:168.195.32.1-168.195.63.254—因为下一个网段是64了

第二个子网:168.195.64.1-168.195.95.254

第三个子网:168.195.96.1-168.195.127.254

第四个子网:168.195.128.1-168.195.159.254

第五个子网:168.195.160.1-168.195.191.254

第六个子网:168.195.192.1-168.195.223.254

因为下一个网段是10101000.11000011.111 00000.0000000

即168.195.224.0/19了

子网掩码都是255.255.224.0

ip168.195.0.0/16每个网段10000台电脑,每个网段IP范围是多少呢?

2^N-2=10000,N=14

11111111.11111111.11000000.00000000

子网掩码是255.255.192.0

子网数为2^2=?,?=4,但全0和全1的网段不能用,所以只有2个网段

10101000.11000011.01 000000.0000000----168.195.64.0/18

10101000.11000011.10 000000.0000000----168.195.128.0/18

第一个子网: 168.195.64.1-168.195.127.254

第二个子网: 168.195.128.1-168.195.191.254

子网掩码都是255.255.192.0

 

-----------------------------------------------------------------------------------

为什么全0子网和全1子网不能用?

如果你有一个CLASS C的IP地址,比如192.168.10.0,你想把它分成8个网段,每个网段内可以有32台主机,你可以这样分: 
subnetmask是:255.255.255.224 
192.168.10.0 - 31, 网络地址:192.168.10.0,广播地址:192.168.10.31 
192.168.10.32 - 63, 网络地址:192.168.10.32, 广播地址:192.168.10.63 
192.168.10.64 - 95, 网络地址:192.168.10.64,广播地址:192.168.10.95 
192.168.10.96 - 127, 网络地址:192.168.10.96,广播地址:192.168.10.127 
192.168.10.128 - 159, 网络地址:192.168.10.128,广播地址:192.168.10.159 
192.168.10.160 - 191, 网络地址:192.168.10.160,广播地址:192.168.10.191 
192.168.10.192 - 223, 网络地址:192.168.10.192,广播地址:192.168.10.223 
192.168.10.224 - 255, 网络地址:192.168.10.224,广播地址:192.168.10.255

即:每个网段32个IP地址,第一个是网络地址,用来标志这个网络,最后一个是广播地址,用来代表这个网络上的所有主机。这两个IP地址被TCP/IP保留,不可分配给主机使用。

另外,第一个子网192.168.10.0 - 31和最后一个子网192.168.10.224 - 255通常也被保留,不能使用,原因是因为第一个子网的网络地址192.168.10.0和最后一个子网的广播地址192.1.68.10.255具有二意性。 
先看看这个大C的网络地址和广播地址:

192.168.10.0是它的网络地址,192.168.10.255是它的广播地址.显然,它们分别与第一个子网的网络地址和最后一个子网的广播地址相重了。

那么怎样区分192.168.10.0到底是哪个网络的网络地址呢?

答案是:把子网掩码加上去!

192.168.10.0 255.255.255.0 是大C的网络地址,192.168.10.0 255.255.255.224 是第一个子网的网络地址,192.168.10.255 255.255.255.0是大C的广播地址,192.168.10.255 255.255.255.224是最后一个子网的广播地址。带上掩码,它们的二意性就不存在了。

所以,在严格按照TCP/IP ABCD给IP地址分类的环境下,为了避免二意性,全0和全1网段都不让使用。这种环境我们叫作Classful。在这种环境下,子网掩码只在所定义的路由器内有效,掩码信息到不了其它路由器,比如RIP-1,它在做路由广播时根本不带掩码信息,收到路由广播的路由器因为无从知道这个网络的掩码,只好照标准TCP/IP的定义赋予它一个掩码。比如,拿到10.X.X.X,就认为它是A类,掩码是255.0.0.0;拿到一个204.X.X.X,就认为它是C类,掩码是255.255.255.0。

但在Classless的环境下,掩码任何时候都和IP地址成对地出现,这样,前面谈到的二意性就不会存在,是Classful还是Classless取决于你在路由器上运行的路由协议,一个路由器上可同时运行Classful和Classless的路由协议。RIP是 Classful,它在做路由广播时不带掩码信息;OSPF,EIGRP,BGP4是Classless的,它们在做路由广播时带掩码信息,它们可以同时运行在同一台路由器上。

在Cisco路由器上,缺省你可以使用全1网段,但不能使用全0网段。所以,当在Cisco路由器上给端口定义IP地址时,该IP地址不能落在全0网段上。如果你配了,你会得到一条错误信息。使用IP SUBNET-ZERO命令之后,你才能使用全0网段。

要强调的是,使用了IP SUBNET-ZERO命令之后,如果路由协议使用的是Classful的(比如RIP),虽然你的定义成功了,但那个子网掩码还是不会被RIP带到它的路由更新报文中。即,IP SUBNET-ZERO 命令不会左右路由协议的工作。

总之,TCP/IP协议中,全0和全1网段因为具有二意性而不能被使用。Cisco 缺省使全1网段可以被使用,但全0网段只有在配置了IP SUBNET-ZERO后方可被使用

http://hi.baidu.com/ciscoren_/item/c946780868cc5b334bc4a358

本文出自 “清风遇雨” 博客,请务必保留此出处http://mcmvp.blog.51cto.com/5497438/1060480