子网掩码 (Subnet Mask)

又称网络掩码 (Netmask),告知主机或路由设备,地址的哪一部分是网络号,包括子网的网络号部分,哪一部分是主机号部分。

子网掩码使用与IP地址相同的编址格式,即32 bit—4个8位组的32位长格式。

在子网掩码中,网络部分和子网络部分对应的位全为“1”,主机部分对应的位全为“0”

网络掩码一般与IP地址结合使用,其中值为1的比特对应IP地址中的网络位;值为0的比特对应IP地址中的主机位,以此来辅助我们识别一个IP地址中的网络位与主机位。即网络掩码中1的个数就是IP地址的网络号的位数,0的个数就是IP地址的主机号的位数。

例如:172.31.128.255/18
其中18就是子网掩码,表示32位中高18位是1,其它位为0。它的二进制形式为11111111.11111111.11000000.000000,转为十进制就是255.255.192.0。
在这里插入图片描述

  • 其中,蓝色部分为网络位,粉色部分为主机位。

为什么要使用子网掩码

使用IP地址优点:

可以根据IP地址的前四位来判别IP地址属于哪个类别。简单明了,选路简单。

使用IP地址缺点:

同⼀⽹络下没有地址层次,⽐如⼀个公司⾥⽤了 B 类地址,但是可能需要根据⽣产环境、测试环境、开发环境来划分地址层次,⽽这种 IP 分类是没有地址层次划分的功能,所以这就缺少地址的灵活性。
A、B、C类有个尴尬处境,就是不能很好的与现实⽹络匹配。
C 类地址能包含的最⼤主机数量实在太少了,只有 254 个,估计⼀个⽹吧都不够⽤。
⽽ B 类地址能包含的最⼤主机数量⼜太多了,6 万多台机器放在⼀个⽹络下⾯,⼀般的企业基本达不到这个规模,闲着的地址就是浪费。这两个缺点,都可以在 CIDR ⽆分类地址解决,因此也引入了子网掩码的概念

CIDR—无分类编址

CIDR中已经废弃了IP地址的分类,无分类编址的命名也是由此得来的,所以目前基本已经不再采用所谓的A类、B类、C类的IP地址分类表示法,引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾;将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;网络号和主机号的划分与这个IP地址是A类、B类还是C类无关。所以新的方式下,IP地址的表示方式为: IP地址 ::= {<网络号>, <子网号>, <主机号>}

根据子网掩码和IP地址可以求得网络号

将IP地址的二进制和子网掩码的二进制进行“&”(and)运算,得到的结果就是网络号。

ip:        10101100.00011111.10000000.11111111  
子网掩码:  11111111.11111111.11000000.00000000
----------------------------------------------------
网络号:     10101100.00011111.10000000.00000000   & 
网络号点分法表示: 172.31.128.0   

根据子网掩码和IP地址可以求得主机号

用IP地址的二进制和(子网掩码的二进制的反码(0变1,1变0))进行“&”运算,得到的结果就是主机号。

ip:           10101100.00011111.10000000.11111111  
子网掩码:     11111111.11111111.11000000.00000000
子网掩码取反:  00000000.00000000.00111111.11111111
----------------------------------------------------
主机号:        00000000.00000000.00000000.11111111   & 
主机号点分法表示: 0.0.0.255 

根据子网掩码和IP地址可以求得广播地址

在得到网络号的基础上,将网络号右边的表示IP地址的主机部分的二进制位全部填上1,再将得到的二进制数转换为十进制数就可以得到广播地址。

例如:子网掩码是11111111.11111111.11000000.00000000, 0有14个,主机位是14,网络号172.31.128.0,转换为二进制是 10101100.00011111.10000000.00000000,从右边数起,将14个0全部替换为1, 即:10101100.00011111.10111111.11111111,这就是这个子网的广播地址的二进制表示法。将这个二进制广播地址转换为十进制就是172.31.191.255。

网络号:     10101100.00011111.10000000.00000000

子网掩码:  11111111.11111111.11000000.00000000
----------------------------------------------------
广播地址:   10101100.00011111.10111111.11111111   网络号从右向左0填为1,个数为掩码中的0
广播地址点分法表示: 172.31.191.255

可用IP地址范围

子网中可用的IP地址范围就是从网络号+1 ~广播地址-1。

子网划分

通过子网掩码划分出网络号和主机号,那实际上子网掩码还有⼀个作⽤,那就是划分子网。

子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址。形式如下:

在这里插入图片描述
假设对 C 类地址进⾏子网划分,⽹络地址 192.168.1.0,使⽤子网掩码 255.255.255.192 对其进⾏子网划分。

C 类地址中前 24 位是网络号,最后 8 位是主机号,根据子网掩码可知从 8 位主机号中借⽤ 2 位作为子网号(对应4个子网)。

C类网络地址:   11000000.10101000.00000001.00000000 
子网掩码:     11111111.11111111.11111111.11000000
----------------------------------------------------
子网划分:      11000000.10101000.00000001.子网地址(2位)子网主机地址(6位)

划分后的4个子网如下:

子网号网络地址主机地址范围广播地址
0192.168.1.0192.168.1.1–192.168.1.62192.168.1.63
1192.168.1.64192.168.1.65–192.168.1.126192.168.1.127
2192.168.1.128192.168.1.129–192.168.1.190192.168.1.191
3192.168.1.192192.168.1.193–192.168.1.254192.168.1.255

子网划分建议按以下步骤和实例计算子网掩码:

  • 将要划分的子网数目转换为2的m次方。如要分8个子网,8=2^3。
  • 取上述要划分子网数的2^ m的幂m。如2^3,即m=3。
  • 将上一步确定的幂m按高序占用主机地址m位后转换为十进制。
    如m为3 则是11100000,转换为十进制为224,即为最终确定的子网掩码。
  • 如果是C类网,则子网掩码为255.255.255.224;如果是B类网,则子网掩码为255.255.224.0;如果是A类网,则子网掩码为255.224.0.0。
参考:IP地址计算—子网掩码确定和子网划分等详解 (附常见相关习题)
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐