提到 IP 地址分门别类后,除去特殊的 D 、 E 两类,只有 3 种规格,灵活性仍然非常有限:
A 类地址每个网络可以容纳多大 1600 万的主机,但哪个组织会有这么多主机呢?那么,能否将一个 A 类网络,划分成若干个更小的网络,分给更多的组织来使用呢?
以 10.0.0.0
这个网络为例,它是一个 A 类网络:第一个字节是网络号,其余字节是主机号,可以容纳超过 1600 万台主机。由于不可能有这么大的网络,为避免地址浪费,我们需要将它划分更小的子网来使用:
如上图,我们可以将主机号中的前两个字节拎出来作为 子网号 ,从而将其划分为多个子网。子网号长度决定子网个数,16 位的子网号意味着子网数达到 216=65536 个。
子网号 | 子网首地址(主机号全为0) | 子网末地址(主机号全为1) |
---|---|---|
0000000000000000 | 10.0.0.0 | 10.0.0.255 |
0000000000000001 | 10.0.1.0 | 10.0.1.255 |
… | … | … |
1111111111111111 | 10.255.255.0 | 10.255.255.255 |
子网号长度可以根据实际情况,灵活调整。那么,主机和网络设备,怎么知道一个 IP 地址,是否划分了子网呢?怎么知道一个 IP 地址实际的网络号呢?
我们可以用一个掩码,来记录 IP 地址中的网络号部分:
掩码位数与 IP 地址一样,1
表示该位属于网络号,0
表示该位属于主机号。如果你学过 C 语言,应该知道通过按位与操作 &
,掩码可以快速取出一个 IP 地址的网络号。
这就是所谓的 子网掩码 ,它也可以用 点分十进制表示法 来表示,用来描述 IP 地址的网络号部分。因此,子网 10.0.0.x
可以表示成 10.0.0.0/255.255.255.0
;A 类网络 10.x.x.x
可以表示成 10.0.0.0/255.0.0.0
。
实际上,描述网络号还有更简洁的方法:在 IP 地址后面加上斜杆和网络号的位数。例如:
10.0.0.0/255.255.255.0
可以表示成 10.0.0.0/24
;
10.0.0.0/255.0.0.0
可以表示成 10.0.0.0/8
;
第二种表示法其实更容易理解,因此也更为常用。试想,为确定 10.0.0.0/255.255.255.192
的网络号,需要先将子网掩码换算出二进制形式,再数一下 1
的位数,未免太繁琐了:
10.0.0.0/26
则明明白白告诉我们,这个地址网络号长度为 26 位。
192.168.1.138/25
解析1 通过子网掩码与IP地址进行&运算:
192.168.1.128转换为二进制为:
11000000.10101000.00000001.10001010
橙色部分为网络号,黑色部分为主机号
与子网掩码换算
/25 子网掩码转换二进制
11111111.11111111.11111111.10000000
11000000.10101000.00000001.10000000
&运算说明:0&0 = 0 ;0 & 1 = 0 ;1 & 0 = 0 ;1 & 1 = 1
运算结果为:
11000000.10101000.00000001.10000000
转换为十进制:
网络地址 - 192.168.1.128
广播地址 - 192.168.1.255
解析2:通过子网掩码确定网络号部分
192.168.1.128转换为二进制为:
11000000.10101000.00000001.10001010
橙色为网络号部分
将黑色主机号全部0标记得到网络地址 - 11000000.10101000.00000001.10000000
转换十进制得到 网络地址为:192.168.1.128
将黑色主机号全部转换为1得到广播地址 - 11000000.10101000.00000001.11111111
转换为十进制得到广播地址为:192.168.1.255
原理参考:IP/IPv4地址详解-XQLEE'Blog 文中网络地址和广播地址定义部分。
解析:可用主机数量计算
从上面子网掩码可以得到主机号为7位,则根据公式
27- 2 = 128 - 2 = 126 个主机设备IP地址
通过子网掩码,我们既能对大型网络进行划分,也能对若干小型网络进行合并,使其组成更大的网络。
假设我们有两个 C 类网段,192.168.0.0/24
和 192.168.1.0/24
,但我们想组建一个可以容纳 500 台主机的网络,而不是两个只能容纳 250 台主机的网络,该怎么办呢?
网络(合并前) | 网络号长度 | 主机号长度 | 容纳主机数 | 开始地址 | 结束地址 |
---|---|---|---|---|---|
192.168.0.0/24 | 24 | 8 | 254 | 192.168.0.0 | 192.168.0.255 |
192.168.1.0/24 | 24 | 8 | 254 | 192.168.1.0 | 192.168.1.255 |
我们观察这两个网络,网络号的前 23 位都是一样的,只有最后一位不一样。因此,我们可以将网络号的最后一位挪出来,成为新网络主机号的一部分:
新网络的网络号长度少了 1 位;共 23 位;主机号多了 1 位,共 9 位,可以容纳 29−2=510 台主机。
网络(合并后) | 网络号长度 | 主机号长度 | 容纳主机 | 开始地址 | 结束地址 |
---|---|---|---|---|---|
192.168.0.0/23 | 23 | 9 | 510 | 192.168.0.0 | 192.168.1.255 |
你可能已经注意到了,只有前缀相同的网络,才能进一步合并成更大的超网。
根据 IP 地址分类确定网络号长度,是互联网初期的做法,早已不用了。尽管如此,诸如 A 类、B 类、C 类这样的术语,仍沿用至今。我们能理解其中的意思即可。
https://blog.xqlee.com/article/2506171504527362.html