子网掩码、子网号和主机地址

来源:互联网 发布:淘宝家具沙发 编辑:程序博客网 时间:2024/05/01 09:54

空间文章地址:http://hlyin.space/Computer-Networks/subnetmask.html

     先回顾IP地址,IP地址是分层的,包括网络主机两个部分,按网络部分和主机部分的不同长度主要分为A、B、C三类(还有多播组的D类和不再使用的E类),但每一类的网络部分和主机部分的总长度相等,均为32位,如下图:

Drawing

A类:最前面1位为0,7位标识网络号,24位标识主机号,则第一段取值为1~126,对于A类IP,最多有2^7 - 2 = 126个(可用)A类网络 (减2是因为要去掉全0的主机地址和全1的广播地址),每个A类网路中,最多可有2^24 - 2 = 16777214 台(可用)主机
地址:1.0.0.0 ~ 126.0.0.0
0.0.0.0 和 127.0.0.0保留

B类:最前面2位为10,14位标识网络号,16位标识主机号,则第一段取值为128~191,对于B类IP,有2^14 - 2 = 16382个B类网络,每个B类网路中,最多可有2^16 - 2 =65534 台主机
地址:128.1.0.0 ~ 191.254.0.0
128.0.0.0 和 191.255.0.0保留

C类:最前面3位为110,21位标识网络号,8位标识主机号,则第一段取值为192~223,对于C类IP,有2^21 - 2 = 2097150个C类网络,每个B类网路中,最多可有2^8 - 2 =254 台主机
地址:192.0.1.0 ~ 223.255.254.0
192.0.0.0 和 223.255.255.0保留

     为了提高地址分配的效率和减少分配网络号总数,采取划分子网的策略,在多个网络中共享一个网络号的机制涉及使用子网掩码,子网掩码的作用就是用来判断任意两个或多个IP地址是否属于同一个子网。

     子网划分的实现是基于网络位占用主机位的,以21位网络位和8位主机位的C类地址为例,若将一个C类网络划分成2个子网,则网络位需要占用1位主机位,即现在是22位网络位和7位主机位,通过占用的这1位的值来区分划分成的2个子网,同理,若划分成3个或4个子网则占用2个主机位…

     但是现在,一个外部的网络,并不知道连接的这个C类网络是否划分了子网,所以需要子网掩码,当未划分时,A类地址的缺省子网掩码为255.0.0.0,B类为255.255.0.0,C类为255.255.255.0,仍以C类网络为例,划分成2个子网(占1位主机位)后子网掩码为255.255.255.128(128个主机,126个可用主机),划分成4个子网(占位主机位)后子网掩码为255.255.255.192,如下表:

占用主机位位数 划分子网数 子网掩码 主机数 可用主机数 0 不划分 255.255.255.0 256 254 1 2 255.255.255.128 128 126 2 4 255.255.255.192 64 62 3 8 255.255.255.224 32 30 4 16 255.255.255.240 16 14 5 32 255.255.255.248 8 6 6 64 255.255.255.252 4 2

     ifconfig(win为ipconfig) 查看当前计算机的ip地址及子网掩码,当前ip为192.168.1.105,即C类网络,子网掩码0xffffff00,即255.255.255.0,未划分。

Drawing


     子网掩码是一个IPv4地址,在一个给定的子网中,所有主机都配置相同的掩码,即每个子网只有一个掩码,但需要注意,并不是子网掩码相同就是同一子网,看一个《计算机网络系统方法》中的例子,如下图:

     假设H1向H2发数据,首先H1需要判断H2是不是和自己在同一子网中,这一过程为:将H2的IP地址H1的子网掩码进行按位与运算,将结果与H1的子网号相比,若相同,则属于同一子网,否则不是。那么将H2的IP地址128.96.34.139与上H1的子网掩码255.255.255.128后,结果为128.96.34.128,不等于H1的子网号128.96.34.0,因而H1与H2并不在同一子网中,即使这两个子网的子网掩码相同,都为255.255.255.128。而之所以相同的子网掩码却可以有不同的子网号,从计算上看是由于与之相&的IP地址不同,但实质原因是被占用的主机位可以有不同的取值而决定的,比如一个C类IP,划分成2个子网,则主机位被占用1位,而这被占用的1位取0或取1,便形成了2个不同的子网号。

     通过前面的计算,H1可以知道H2与其不在同一子网,因此将分组给它的默认路由器R1由R1负责转发,根据转发表确定转发路径,发送到子网号为128.96.34.128的网络中,这之后需要确定在此网络中的接收主机,因为此网络中可能不止有一台主机H2,比如还有IP地址为128.96.34.140的H4,这时将子网掩码取反后再与H2的IP地址,即用0.0.0.127 & 128.96.34.139,结果0.0.0.11即为主机号,根据主机号在网络中确定具体的接收主机。

结论和归纳:

  • 每个子网只有一个掩码,但需要注意,并不是子网掩码相同就是同一子网
  • 子网号 = IP & 子网掩码
  • 主机号 = IP & 掩码取反


补充(来自知乎):

比较下面的两个IP地址,
A:219.218.44.123
B:219.218.45.34
在子网掩码M1:255.255.254.0下为同一子网,而在M2:255.255.255.0下为不同子网。

分析:

主机 地址 A: 11011011-11011010-00101100-01111011 B: 11011011-11011010-00101101-00100010 子网掩码 地址 M1: 11111111-11111111-11111110-00000000(254) M2: 11111111-11111111-11111111-00000000(255)

通过做and运算,可以看出来
A&M1:11011011-11011010-00101100-00000000
B&M1:11011011-11011010-00101100-00000000

A&M2:11011011-11011010-00101100-00000000
B&M2:11011011-11011010-00101101-00000000

假设还有如下IP
C:219.218.45.200
可以得出在子网M2:255.255.255.0下跟B同子网,而在子网M3:255.255.255.128下为不同子网。

参考:

[1] Larry L.peterson, Bruce S.Davie. 计算机网络系统方法[M].四川: 机械工业出版社, 2015: 113-119
[1] 恒思凝. 子网掩码判断两个ip是否在同一子网如何保证准确. http://www.zhihu.com/question/36296884/answer/68366061
[2] 计算机网络地址,主机地址,子网掩码,网段,子网划分的理解. http://blog.csdn.net/hzhsan/article/details/12783193
[3] 计算机网络子网掩码. http://blog.csdn.net/oklizy/article/details/6805836

0 0
原创粉丝点击