代码改变世界

关于子网掩码(Netmask)

2016-02-26 21:21  dream_er  阅读(2696)  评论(0编辑  收藏  举报

关于子网掩码(Netmask)

关于IPv4的基础知识

IPv4简单来说,就是IP的第四个版本,是由32位二进制来表示,但是一般为了方便记忆,用十进制来表示,并每八位之间用“.”隔开,所以:

IP的表示范围:
00000000.00000000.00000000.00000000 - 11111111.11111111.11111111.11111111
换算为十进制:
0.0.0.0 - 255.255.255.255

而IP又可以分为Net_ID(网络号码)和Host_ID(主机号码)两部分,在同一个网段内,Net_ID相同而Host_ID不同,又根据Net_ID和Host_ID的位数长短的不同而将全部IP分为ABCDE五个等级:

二进制表示为:
Class A :
 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>Net_ID的开头为0
|-Net_ID-|---------Host_ID----------| 
Class B :
 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>Net_ID的开头为10
|------Net_ID-----|-----Host_ID-----| 
Class C :
 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>Net_ID的开头为110
|----------Net_ID---------|-Host_ID-|
Class D : 
 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>Net_ID的开头为1110
|---------------Net_ID--------------| 
Class E :
 1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>Net_ID的开头为1111
|---------------Net_ID--------------| 
十进制表示为:
Class A :   0.x.x.x - 127.x.x.x
Class B : 128.x.x.x - 191.x.x.x
Class C : 192.x.x.x - 223.x.x.x
Class D : 224.x.x.x - 239.x.x.x
Class E : 240.x.x.x - 255.x.x.x

IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有Public IP才能直接连接上网络,所以对于那些公司,学校,政府机构等场所,就可以集中使用私有的IP进行管理,而大家可以共用一个IP去连接上公网,这样,就省下了许多宝贵的Public IP

Private IP 网段:
Class A : 10.0.0.0 - 10.255.255.255
Class B : 172.16.0.0 - 172.31.255.255
Class C : 192.168.0.0 - 192.168.255.255

既然叫Private IP那么,在公网上,这些IP就不能使用,而内部网络的Private IP 也就同样不能在公网上使用,使用私有IP的数据包则只能在同一个内部网络上面传输,不能直接通过公网来传输,因为在公网上这些IP并不存在,数据包必然会丢失。

为什么要使用子网掩码?

首先,我们先要想象一个情景:
你在你的办公室或者实验室搭建了一个局域网,假使你使用的是C类地址的私有IP的话,本来你使用的只有 192.168.20.0 - 192.168.20.255 这一段,但是你的硬件只有集线器(Hub)的话,大家都知道,集线器与交换机(Switch)的最大不同是交换机是非共享型,而集线器是共享型,怎么理解呢?局域网内的一台主机要向另一台主机发送数据,如果网内使用的是集线器的话,那么集线器会给网络内部的其他主机都分别发送数据包,主机收到后会通过IP数据包包头判断,属于自己的数据包的话,则接收,否则就丢弃,而交换机则会直接判断出IP数据包属于哪个主机,而直接只给这台主机发送数据包。所以你的网内有集线器的话,那就要给 255x255=65025 个IP发送数据包,然而,可能你的实验室只有不到三十台主机,那如果使用的是A类地址的私有IP呢?,每收到一个IP数据包,则要向 255x255x255=16581375 个IP发送数据包,那么,网络将拥塞成何种样子。因此,为了划分不同的子网,子网掩码应运而生。

怎样计算子网掩码?

你使用 192.168.20.0-192.168.20.255 这一段的话,那么,你只需要最后面的8为变化,而前面的24位都不变,那么,前面24位为Net_ID后面八位为Host_ID,于是,子网掩码就为:11111111.11111111.11111111.00000000,换算成十进制就为:255.255.255.0 这样的话,你的集线器或者路由器就可以判断出你只想要使用192.168.20.0-192.168.20.255之间的 255 个IP,瞬间就将问题缩小了一个量级。那么如果想要更小呢?假如你最多不超过30台主机在此局域网内使用,那么你就只需要最后面的5位(2^5=32)就可以了,那么,网络规划就如下:

二进制:
Network : 192.168.20.00000000 - 192.168.20.00011111
Netmask : 255.255.255.11100000
十进制:
Network : 192.168.20.0 - 192.168.20.32
Netmask : 255.255.255.224