不瞒您说,我今天才学会划分子网

众所周知,我是一个程序员,写过不少开源项目。

所以我作为一个程序员了解一些计算机网络相关的知识不过分吧,在几年前我也写过不少 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
  • 第一个可用 IP192.168.0.1
  • 最后一个可用 IP192.168.31.254
  • 总地址数:8192;可用主机数:8190(因保留网络与广播地址所以 -2)