不瞒您说,我今天才学会划分子网
众所周知,我是一个程序员,写过不少开源项目。
所以我作为一个程序员了解一些计算机网络相关的知识不过分吧,在几年前我也写过不少 Linux 网络和OVS的教程。
但是,我今天发现自己不会子网划分。
事情还要从明天开始说起,因为明天就要软考了,而我,为了抵扣个税,选择了初级的网络管理员这个科目进行报考。
今天在刷题的时候发现有很多划分子网类型的题目(别问我为什么今天才开始刷,问就是在努力工作),但是我不会,我也不可能去百度一个 CIDR 计算器啊,这是考试。
你先别急着笑话我,你以为你给家里路由器配置一个 “192.168.1.1/24” 就算会了吗?
大错特错!❌
下面请听第一题,已知路由器的CIDR是 “192.168.1.1/24”,请问它的子网掩码是多少?第一个IP地址是多少?最后一个IP地址是多少?有多少个可用的IP地址?
是不是张口就来,子网掩码是 “255.255.255.0”,第一个IP地址是 “192.168.1.1”,最后一个IP地址是 “192.168.1.254”,有 254 个可用的IP地址。
很好,很有精神。
请听第二题,假设路由器的CIDR是 “192.168.31.19/19”,请问它的子网掩码是多少?第一个IP地址是多少?最后一个IP地址是多少?有多少个可用的IP地址?
是不是有些懵逼?
我今天就来把我刚学会的计算方式教给你。
步骤1,计算子网掩码:
首先,你要理解CIDR中的 “/19” 的含义。
“/19” 代表网络前缀的长度是 19位,主机位 = 32 - 19 = 13 位。
子网掩码二进制(32 位)按 8 位块分:
11111111.11111111.11100000.00000000
简单理解就是 19 个 1,13 个 0。
把每八位换成十进制:
- 11111111 = 255
- 11111111 = 255
- 11100000 = 128+64+32 = 224
- 00000000 = 0
子网掩码(换成十进制) = 255.255.224.0
步骤2,计算网络地址
把 192.168.31.19 转换为二进制是 11000000.10101000.00011111.00010011
用它和子网掩码进行位与运算(两个都为1得到1,否则为0),得到:
11000000.10101000.00011111.00010011
11111111.11111111.11100000.00000000
------------------------------------
11000000.10101000.00000000.00000000
把每八位换成十进制:
- 11000000 = 192
- 10101000 = 168
- 00000000 = 0
- 00000000 = 0
网络地址(换成十进制) = 192.168.0.0
步骤3,计算广播地址
主机位有 13 位,将网络地址的主机位全部置为1。
11000000.10101000.00011111.11111111
把每八位换成十进制:
- 11000000 = 192
- 10101000 = 168
- 00011111 = 16 + 8 + 4 + 2 + 1 = 31
- 11111111 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
广播地址(换成十进制) = 192.168.31.255
步骤4,计算第一个IP地址和最后一个IP地址
- 网络地址
192.168.0.0通常不可用(保留为网络标识)。 - 广播地址
192.168.31.255通常不可用(用于广播)。
因此:
- 第一个可用 IP(网络地址 + 1) =
192.168.0.1 - 最后一个可用 IP(广播地址 - 1) =
192.168.31.254
可用主机数:
- 主机位 = 13 → 总地址数 =
2^13= 8192 - 总地址数 = 8192(包含网络地址和广播地址)
- 可用主机数 =
8192 - 2 = 8190
总计
- 子网掩码:
255.255.224.0 - 网络地址:
192.168.0.0 - 广播地址:
192.168.31.255 - 第一个可用 IP:
192.168.0.1 - 最后一个可用 IP:
192.168.31.254 - 总地址数:8192;可用主机数:8190(因保留网络与广播地址所以 -2)