子网划分划分中的全0 和全 1在不同模式下处理情况不同。分为 classful 和classless,如果你的路由器工作在classful环境下,全0 和全1网段是不能使用的,而classless的掩码任何时候都和IP地址成对地出现。所以说要看题目给的具体情况,
RFC950 page6有这样一句话作为辅助理解
"In certain contexts, it is useful to have fixed addresses with functional significance rather than as identifiers of specific hosts. When such usage is called for, the address zero is to be interpreted as meaning "this", as in "this network". The address of all ones are to be interpreted as meaning "all", as in "all hosts". For example, the address 128.9.255.255 could be interpreted as meaning all hosts on the network 128.9. Or, the address 0.0.0.37 could be interpreted as meaning host 37 on this network." It is useful to preserve and extend the interpretation of these special addresses in subnetted networks. This means the values of all zeros and all ones in the subnet field should not be assigned to actual (physical) subnets. In the example above, the 6-bit wide subnet field may have any value except 0 and 63.
RFC950参考规定:第一个子网(也就是“全0子网”)和最后一个子网(也就是“全1子网”)不可用,为的就是避免全0子网的网络地址和全1子网的广播地址分别与没有划分子网前的网络地址和广播地址相冲突。 但是在后来RFC1878规定中,该项规定已被废止了,现在的设备基本上都普遍支持RFC1878。
后来RFC1878参考规定,划分子网后,可以有n个可用的子网(n表示总的子网数)。
1、如果你有一个CLASS C类的IP地址,比如192.168.10.0,你想把它分成8个网段,每个网段内有30台主机,该如何分?
在完成本题之前我们必须要理解一个概念: 什么是class C类地址?
百度百科上的解释是:宣告网段时携带子网掩码。 用更简洁的语言描述就是:掩码任何时候都和IP地址成对地出现。这个和本次要讨论的 "子网划分中全0和全1该如何处理?"有密切关系。
分析思路:若要分成8个网段,对于C类地址,需要借主机号三位来划分子网。即 2^3 = 8。
192.168.10.0 为C类的网络地址(网络号24bit 主机号:8bit),其子网掩码是255.255.255.0 -> 11111111 11111111 11111111 00000000.广播地址是 192.168.10.255(主机号全1为广播地址)
主机位全为0时表示本网络的网络地址,主机位全为1时表示本网络的广播地址,这是两个特殊地址
借主机号3位后网络地址是: 192.168.10.0/27 ,子网掩码是: 255.255.255.224
IP地址的指派范围见下图:
有了以上知识储备就可以很快的写出答案:
第一个子网
网络地址 : 192.168.10.0 / 27
主机号范围: 192.168.10.1 ~ 192.168.10.30
广播地址: 192.168.10.31
第二个子网
网络地址 : 192.168.10.32/27
主机号范围: 192.168.10.33 ~ 192.168.10.62
广播地址: 192.168.10.63
第三个子网
网络地址 : 192.168.10.64/27
主机号范围: 192.168.10.65 ~ 192.168.10.94
广播地址: 192.168.10.95
第四个子网
网络地址 : 192.168.10.96/27
主机号范围: 192.168.10.97 ~ 192.168.10.126
广播地址: 192.168.10.127
第五个子网
网络地址 : 192.168.10.128/27
主机号范围: 192.168.10.129 ~ 192.168.10.158
广播地址: 192.168.10.159
第六个子网
网络地址 : 192.168.10.160/27
主机号范围: 192.168.10.161 ~ 192.168.10.190
广播地址: 192.168.10.191
第七个子网
网络地址 : 192.168.10.192/27
主机号范围: 192.168.10.193 ~ 192.168.10.222
广播地址: 192.168.10.223
第八个子网
网络地址 : 192.168.10.224/27
主机号范围: 192.168.10.225 ~ 192.168.10.254
广播地址: 192.168.10.255
到这里会出现一个问题?
对于第一个子网的网络地址和主网络的网络地址一样,最后一个子网的广播地址和主网的广播地址是重叠的,如果没有class的分类,这将是混乱的,如果有一个广播消息发往192.168.10.255 是该发给主网还是子网呢?
对于本题并没有明确说明路由器以哪种模式运行,更严谨的做法是不要使用全0 和全1 的子网。此外CIDR采用的是classless,所以采用无分类技术的网络划分全0 和全 1可以划为分子网。
-- update 2022年3月1日17:37:43
举例:一个容易“犯错”的 CIDR
我们来看 16.158.165.91/22 这个 CIDR。求一下这个网络的第一个地址、子网掩码和广播地址。
你要是上来就写 16.158.165.1,那就大错特错了。
/22 不是 8 的整数倍,不好办,只能先变成二进制来看。16.158 的部分不会动,它占了前 16 位。中间的 165,变为二进制为10100101。除了前面的 16 位,还剩 6 位。所以,这 8 位中前 6 位是网络号,16.158.<101001>,而 <01>.91 是机器号。
第一个地址是 16.158.<101001><00>.1,即 16.158.164.1。子网掩码是 255.255.<111111><00>.0,即 255.255.252.0。广播地址为 16.158.<101001><11>.255,即 16.158.167.255。
-- update 2023年6月21日11:21:14
再算一次,回一下过程。第一次竟然算错了,真是粗心大意。
1. 子网掩码: 题中给出的是CIDR,也就是22个1,将ip地址转换成二进制和22个1相与得到的就是子网。 子网为255.255.252.0
2. 子网的第一个地址
知道了子网掩码之后,将子网掩码和ip地址进行相与得到的就是子网的地址。
子网掩码第三个字节有变化,所以主要讲第三个字节转换,和子网掩码的第三个字节相与得到的就是子网。
该子网的第一个地址是 16.158.164.1
广播地址为16.158.167.255
参考: IP地址和子网划分学习笔记之《子网划分详解》_漂洋过海来打你的技术博客_51CTO博客_子网划分详解划分子网的方法