计算机网络 - 彻底理解 CIDR、子网掩码与网段划分

文章目录

  • 引言
  • [一、`10.100.100.100/32` 到底是什么意思](#一、10.100.100.100/32 到底是什么意思)
  • [二、CIDR 是什么,为什么今天大家都在用它](#二、CIDR 是什么,为什么今天大家都在用它)
  • [三、理解 CIDR 的关键,前缀长度到底在说什么](#三、理解 CIDR 的关键,前缀长度到底在说什么)
  • [四、把 IP 写成二进制,你就一下子明白了](#四、把 IP 写成二进制,你就一下子明白了)
  • [五、常见 CIDR 速查表](#五、常见 CIDR 速查表)
  • [六、为什么 `/24` 看起来有 256 个地址,但可用主机数常常不是 256](#六、为什么 /24 看起来有 256 个地址,但可用主机数常常不是 256)
    • [1. 地址总数和可用主机数不是一回事](#1. 地址总数和可用主机数不是一回事)
    • [2. 传统子网里有两个地址通常不能分给主机](#2. 传统子网里有两个地址通常不能分给主机)
    • [3. 但别把这个规则绝对化](#3. 但别把这个规则绝对化)
  • 七、一个例子把网段范围算清楚
  • [八、为什么今天的开发者必须看懂 CIDR](#八、为什么今天的开发者必须看懂 CIDR)
    • [1. 云网络和 VPC](#1. 云网络和 VPC)
    • [2. 安全组、ACL 和白名单](#2. 安全组、ACL 和白名单)
    • [3. Kubernetes 和容器网络](#3. Kubernetes 和容器网络)
    • [4. 路由聚合和跨网络互联](#4. 路由聚合和跨网络互联)
  • [九、CIDR 和子网掩码是什么关系](#九、CIDR 和子网掩码是什么关系)
  • 十、几个最容易犯错的地方
    • [1. 把 `/32` 当成一个很小的网段,而不是单主机](#1. 把 /32 当成一个很小的网段,而不是单主机)
    • [2. 把 `/24` 理解成"255 个主机"](#2. 把 /24 理解成“255 个主机”)
    • [3. 以为 `0.0.0.0/0` 是一个普通网段](#3. 以为 0.0.0.0/0 是一个普通网段)
    • [4. 忽略网段冲突](#4. 忽略网段冲突)
    • [5. 只会背,不会算](#5. 只会背,不会算)
  • 十一、开发和运维里几个高频场景,应该怎么读
  • 十二、如果只记三件事,应该记什么
    • [第一,CIDR 的 `/N` 表示前缀长度,不是地址数量](#第一,CIDR 的 /N 表示前缀长度,不是地址数量)
    • [第二,`/32` 只表示一个 IP](#第二,/32 只表示一个 IP)
    • 第三,前缀越长,网段越小
  • 结语
  • 附,一张简版速查卡

引言

很多人第一次看到 10.100.100.100/32 这种写法时,第一反应都是一样的,这到底是一个 IP,还是一个网段,后面的 /32 又是什么意思?

如果你只是在防火墙白名单、安全组、路由表、Kubernetes 配置或者云厂商 VPC 控制台里偶然碰到它,通常只需要记住一句话就够了:

10.100.100.100/32 表示一个单独的 IP 地址,只包含这一台主机。

但如果只停留在这个结论,你后面很容易继续困惑。

为什么 /32 只表示一个地址?

为什么 /24 经常出现在局域网里?

为什么 192.168.1.0/24 看起来有 256 个地址,但实际可用主机数常常不是 256?

为什么有的地方写 255.255.255.0,有的地方写 /24

为什么云网络、容器网络、路由聚合都在用 CIDR?

这篇文章就从 10.100.100.100/32 这个最小的例子出发,把 CIDR 这套东西一次讲清楚。你不需要有很强的网络基础,只要对 IPv4 地址稍微有一点印象,就可以顺着往下看。


一、10.100.100.100/32 到底是什么意思

先直接给结论。

10.100.100.100/32 是一种 CIDR 表示法,可以拆成两部分来看:

  • 10.100.100.100 是 IPv4 地址
  • /32 表示网络前缀长度是 32 位

IPv4 地址总长度是 32 位。

如果前缀长度也是 32 位,就意味着这 32 位全部被固定住了,没有任何位可以变化。

所以它代表的不是一个地址段,而是:

只匹配 10.100.100.100 这一个 IP

换成传统子网掩码的写法,就是:

text 复制代码
10.100.100.100 255.255.255.255

也就是我们常说的主机路由,或者单 IP 匹配。

这也是为什么在很多系统里你会看到这样的配置:

  • 防火墙白名单允许 10.100.100.100/32
  • 安全组规则仅放行 203.0.113.8/32
  • 某条静态路由目标是一个 /32
  • 某个 VPN 只给一台主机下发精确路由

它们的意图都很明确,不是放一个网段,而是只认这一台机器。


二、CIDR 是什么,为什么今天大家都在用它

CIDR 是 Classless Inter-Domain Routing 的缩写,中文通常叫 无类别域间路由

这个名字看起来有点学术,但它解决的问题其实很实际。

早期 IPv4 地址分配采用 A 类、B 类、C 类这种固定分类方式。比如:

  • A 类网络默认子网掩码是 255.0.0.0
  • B 类网络默认子网掩码是 255.255.0.0
  • C 类网络默认子网掩码是 255.255.255.0

这种划分方式简单,但很浪费。

举个很直观的例子,一个单位如果只需要几百个 IP,给它一个 C 类地址可能不够,给它一个 B 类地址又太大。中间没有细粒度空间。结果就是地址浪费严重,路由表也会迅速膨胀。

CIDR 的核心改进,就是不再死守 A、B、C 类,而是直接用前缀长度来表示网络规模。

于是就有了今天这种写法:

  • 192.168.1.0/24
  • 10.0.0.0/8
  • 172.16.0.0/12
  • 10.100.100.100/32

这种写法有两个巨大好处:

  • 它更灵活,网段可以按实际需要切分
  • 它更适合路由聚合,能降低路由表规模

所以你今天在 Linux、云平台、交换机、路由器、Kubernetes、Service Mesh、VPN、ACL、WAF、安全组里看到的,几乎都是 CIDR 表示法。


三、理解 CIDR 的关键,前缀长度到底在说什么

理解 CIDR,最关键的是理解 /N 里的这个 N

/N 的意思不是"有 N 个地址",而是:

前 N 位是网络位,剩下的位是主机位。

IPv4 总共有 32 位,所以:

  • /8 表示前 8 位固定,后 24 位可变
  • /16 表示前 16 位固定,后 16 位可变
  • /24 表示前 24 位固定,后 8 位可变
  • /32 表示前 32 位固定,后 0 位可变

你可以把它理解成一把尺子。

前缀越短,可变空间越大,网段越大。

前缀越长,可变空间越小,网段越小。

这是 CIDR 最核心的直觉。


四、把 IP 写成二进制,你就一下子明白了

IPv4 地址一共 32 位,通常写成 4 段十进制,每段 8 位,比如:

text 复制代码
10.100.100.100

写成二进制就是:

text 复制代码
10   = 00001010
100  = 01100100
100  = 01100100
100  = 01100100

合起来是:

text 复制代码
00001010 01100100 01100100 01100100

如果后面跟的是 /32,意思就是:

text 复制代码
11111111 11111111 11111111 11111111

前 32 位全部是网络位,也就是全部固定,不能变化。

所以这个网段里只剩一个值,也就是它自己。

如果后面跟的是 /24,意思就是:

text 复制代码
11111111 11111111 11111111 00000000

也就是前三段固定,最后一段可以变化。

这时:

text 复制代码
10.100.100.0/24

表示的就是从:

text 复制代码
10.100.100.0

到:

text 复制代码
10.100.100.255

一整段地址空间。

所以很多人背 /24/16/8 背不住,原因不是 CIDR 难,而是没有把它跟二进制的"固定多少位、还能变多少位"联系起来。

一旦这层关系想通了,CIDR 就不再是死记硬背。


五、常见 CIDR 速查表

下面这张表是最常用的 IPv4 CIDR 速查表,基本足够应付大多数开发和运维场景。

CIDR 子网掩码 地址总数 常见理解
/8 255.0.0.0 16,777,216 很大的网段
/16 255.255.0.0 65,536 中等规模网段
/24 255.255.255.0 256 最常见的小网段
/25 255.255.255.128 128 /24 切成两半
/26 255.255.255.192 64 更小的子网
/27 255.255.255.224 32 小规模分段
/28 255.255.255.240 16 常用于小型网络
/29 255.255.255.248 8 常见于点状分配
/30 255.255.255.252 4 传统点对点链路
/31 255.255.255.254 2 点对点链路特例
/32 255.255.255.255 1 单个主机

如果你只想快速记忆,最实用的是这四条:

  • /8 看第 1 段
  • /16 看前 2 段
  • /24 看前 3 段
  • /32 精确到完整 IP

比如:

  • 192.168.0.0/16,就是 192.168.x.x
  • 192.168.1.0/24,就是 192.168.1.x
  • 203.0.113.8/32,就只是一台主机

六、为什么 /24 看起来有 256 个地址,但可用主机数常常不是 256

这是初学网络时最容易疑惑的地方之一。

1. 地址总数和可用主机数不是一回事

CIDR 计算出来的是地址总数,公式是:

text 复制代码
地址总数 = 2^(32 - 前缀长度)

所以:

  • /242^(32-24) = 256
  • /162^(32-16) = 65536
  • /322^(32-32) = 1

但"总数"不等于"都能分给主机"。

2. 传统子网里有两个地址通常不能分给主机

192.168.1.0/24 为例,它的地址范围是:

text 复制代码
192.168.1.0 - 192.168.1.255

这里通常有两个特殊地址:

  • 192.168.1.0 是网络地址
  • 192.168.1.255 是广播地址

所以传统意义上可分配给主机的地址,是:

text 复制代码
192.168.1.1 - 192.168.1.254

也就是 254 个。

这就是为什么很多人会说:

/24 有 256 个地址,但只有 254 个可用主机地址

3. 但别把这个规则绝对化

在现代网络场景里,这个结论要加前提。

因为有些场景不是"传统二层广播网络",而是点对点链路、隧道接口、主机路由、云厂商虚拟网络,规则会有变化。比如:

  • /31 在点对点链路上可以有效使用两个地址
  • /32 本来就不是拿来分配一个"网段"的,而是表示单主机
  • 某些云平台子网里还会额外保留几个地址,不完全等于传统理论值

所以更准确的说法是:

CIDR 先定义地址空间,实际可用地址数还要结合网络场景来理解。


七、一个例子把网段范围算清楚

假设你看到这样一个网段:

text 复制代码
10.100.100.0/24

它的含义是:

  • 前 24 位固定
  • 最后 8 位可以变化

所以最后一段从二进制 00000000 变化到 11111111,也就是十进制 0255

地址范围就是:

text 复制代码
10.100.100.0 - 10.100.100.255

再看一个:

text 复制代码
10.100.100.128/25

/25 说明最后一段里,前 1 位固定,剩下 7 位可变。

128 的二进制是:

text 复制代码
10000000

于是这个网段的最后一段范围是:

text 复制代码
10000000 - 11111111

也就是十进制:

text 复制代码
128 - 255

所以整个网段范围是:

text 复制代码
10.100.100.128 - 10.100.100.255

同理:

text 复制代码
10.100.100.0/25

就是:

text 复制代码
10.100.100.0 - 10.100.100.127

这就是把一个 /24 切成两个 /25

你会发现,一旦理解了前缀长度和二进制可变位的关系,算网段范围根本不用背模板。


八、为什么今天的开发者必须看懂 CIDR

很多人以为 CIDR 只是网络工程师的基本功,和应用开发关系不大。这个判断放在十几年前还勉强说得过去,但在今天已经不成立了。

原因很简单,现代软件系统越来越依赖网络边界、访问控制和基础设施编排,而这些地方几乎都绕不开 CIDR。

1. 云网络和 VPC

在公有云里创建 VPC 时,第一步通常就是指定网段,比如:

text 复制代码
10.0.0.0/16

然后你再继续切子网:

  • 10.0.1.0/24
  • 10.0.2.0/24
  • 10.0.3.0/24

如果一开始网段规划太小,后面扩容会很难看。

如果一开始规划混乱,和办公网、IDC、其他 VPC、VPN 网段冲突,后面连通性会非常痛苦。

所以 CIDR 不只是"能看懂",还关系到网络设计是否能扩展。

2. 安全组、ACL 和白名单

这是开发者最常遇到的场景之一。

比如:

  • 203.0.113.10/32,只允许你的办公出口 IP
  • 10.10.0.0/16,允许整个内网访问
  • 0.0.0.0/0,允许所有 IPv4 地址访问

这里面最危险同时也最常见的,就是误把网段放大。

原本你想放行一台机器,应该写 /32

结果你写成了 /24,一下就把整个小网段都放进来了。

这类错误在数据库白名单、堡垒机策略、对象存储访问控制、云防火墙里都很常见。

3. Kubernetes 和容器网络

Kubernetes 里经常能看到这些概念:

  • Pod CIDR
  • Service CIDR
  • Node CIDR

比如某个集群配置:

  • Pod CIDR,10.244.0.0/16
  • Service CIDR,10.96.0.0/12

如果你完全看不懂 CIDR,就很难判断:

  • 集群地址空间够不够
  • 是否会和现有 VPC 冲突
  • 多集群互联时是不是会撞网段
  • 为何某些 Pod 无法跨网段访问

容器编排看起来是平台层问题,但排查网络时,CIDR 就是基础语言。

4. 路由聚合和跨网络互联

CIDR 的一个重要价值是路由聚合。

比如你有四个连续的 /24 网段:

  • 192.168.0.0/24
  • 192.168.1.0/24
  • 192.168.2.0/24
  • 192.168.3.0/24

如果它们地址连续且边界对齐,就可以聚合成一个更大的网段:

text 复制代码
192.168.0.0/22

这样做的意义是:

  • 路由表更简洁
  • 网络传播的前缀更少
  • 管理成本更低

这也是 CIDR 诞生时要解决的核心问题之一。今天在 BGP、IDC 互联、云专线、企业 VPN 设计里,这个思想依然非常重要。


九、CIDR 和子网掩码是什么关系

很多资料会把 CIDR 和子网掩码分开讲,结果越讲越绕。其实它们描述的是同一件事,只是写法不同。

比如:

  • /24 等价于 255.255.255.0
  • /16 等价于 255.255.0.0
  • /32 等价于 255.255.255.255

原理就是把前缀长度转换成二进制掩码:

  • 网络位写 1
  • 主机位写 0

例如 /24

text 复制代码
11111111.11111111.11111111.00000000

转成十进制就是:

text 复制代码
255.255.255.0

例如 /26

text 复制代码
11111111.11111111.11111111.11000000

转成十进制就是:

text 复制代码
255.255.255.192

所以当你在不同系统里看到下面两种写法时,不要觉得它们是两套东西:

text 复制代码
192.168.1.0/24
text 复制代码
IP: 192.168.1.10
Mask: 255.255.255.0

本质上表达的是同一个网络范围。


十、几个最容易犯错的地方

1. 把 /32 当成一个很小的网段,而不是单主机

/32 不是"小网段",而是"没有主机位了"。

它表示一个确定的、唯一的地址。

2. 把 /24 理解成"255 个主机"

/24 总地址数是 256。

在传统子网场景下,可用主机常说是 254。

这两个数字不要混淆。

3. 以为 0.0.0.0/0 是一个普通网段

0.0.0.0/0 的意思是前缀长度为 0,也就是不固定任何位。

换句话说:

它匹配所有 IPv4 地址

这也是默认路由和"全网开放"经常出现 /0 的原因。

4. 忽略网段冲突

你在本地实验时随手用了一个 10.0.0.0/8 下的网段,可能没问题。

但一旦接入公司网络、云 VPC、VPN 或多集群环境,就很可能和别人撞地址。

今天的网络设计里,选 CIDR 不只是语法问题,更是规划问题。

5. 只会背,不会算

只背 /24/16/8 没问题,但一旦遇到 /27/22/19 就容易卡住。

真正实用的办法不是死背全部结果,而是记住这两个原则:

  • 前缀越长,网段越小
  • 主机位有多少,就有多少变化空间

十一、开发和运维里几个高频场景,应该怎么读

下面给几个非常常见的实际例子。

场景一,数据库白名单

text 复制代码
203.0.113.5/32

含义很明确,只允许这一台主机访问数据库。

这是最常见也最安全的精确授权方式之一。

场景二,办公内网开放

text 复制代码
10.20.0.0/16

说明允许整个 10.20.x.x 网段访问。

这种配置要确认你是否真的需要放这么大。

场景三,默认路由

text 复制代码
0.0.0.0/0

表示匹配所有目标地址。

路由器遇到更具体的路由时优先走更具体的,兜底才走默认路由。

场景四,Kubernetes Service 网段

text 复制代码
10.96.0.0/12

这通常是集群内部虚拟服务地址空间,不代表所有地址都会真的分配出去,但它定义了服务 IP 的可用范围。

场景五,单机静态路由

text 复制代码
10.100.100.100/32 via 192.168.1.1

表示去往 10.100.100.100 这个目标主机的流量,下一跳走 192.168.1.1

这是非常典型的主机路由。


十二、如果只记三件事,应该记什么

如果你不想一次记太多,至少把下面三件事记住。

第一,CIDR 的 /N 表示前缀长度,不是地址数量

/24 不是 24 个地址,/32 也不是 32 个地址。

它表示的是"前多少位被固定"。

第二,/32 只表示一个 IP

10.100.100.100/32 只匹配 10.100.100.100

这是你在安全组、ACL、白名单里最需要一眼看懂的东西。

第三,前缀越长,网段越小

这个直觉非常重要:

  • /8 很大
  • /16 较大
  • /24 常见
  • /32 最小,只剩一个地址

很多看似复杂的题,最后都能归结到这条直觉上。


结语

10.100.100.100/32 这个写法本身并不复杂,真正让人困惑的,从来不是它的语法,而是它背后的网络思维。

一旦理解了 CIDR 的核心逻辑,很多原本零散的问题都会连起来:

  • 为什么 /32 是单主机
  • 为什么 /24 常见
  • 为什么子网掩码和前缀长度能互相转换
  • 为什么安全组、VPC、Kubernetes、路由聚合都在使用这套表示法
  • 为什么一个错误的前缀长度,可能直接把权限范围放大 256 倍,甚至更多

对今天的开发者来说,CIDR 不是一个只存在于教材里的概念。它已经渗透到云网络、容器平台、访问控制、跨网络互联和故障排查的每一个角落。

你不一定需要成为网络专家,但你至少应该做到一件事:

当你再看到 10.100.100.100/32192.168.1.0/240.0.0.0/0 这种配置时,脑子里能立刻浮现出它究竟代表多大的范围,以及它会影响谁。

这就够用了。


附,一张简版速查卡

写法 含义
x.x.x.x/32 单个 IP
x.x.x.0/24 一个常见小网段
x.x.0.0/16 一个中等网段
x.0.0.0/8 一个很大的网段
0.0.0.0/0 所有 IPv4 地址

如果以后你还想继续往下走,下一步最值得弄懂的两个主题是:

  • 如何快速计算任意 CIDR 的网络地址、广播地址和可用地址范围
  • IPv6 里的 CIDR 为什么更常见,以及为什么 /64 在 IPv6 世界里几乎是默认常识

这两块打通之后,你对现代网络配置的理解会再上一个台阶。

相关推荐
Sagittarius_A*18 小时前
H3CSE 高性能园区网:SNMP 网络管理协议详解
网络·计算机网络·安全·h3cse
似水এ᭄往昔1 天前
【Linux网络编程】--计算机网络基础
linux·网络·计算机网络
梦奇不是胖猫1 天前
[ 计算机网络 | 第四章 ] 网络层 01 概述
网络·网络协议·计算机网络
艾莉丝努力练剑1 天前
【Linux网络】Linux 网络编程:传输层TCP(二)
linux·运维·服务器·网络·tcp/ip·计算机网络
basketball6162 天前
计算机网络 物理层通信计算知识点总结
计算机网络
剑锋所指,所向披靡!2 天前
DNS和DHCP
计算机网络
夜微凉42 天前
五、计算机网络
计算机网络
Java成神之路-2 天前
DNS、DNS 负载均衡、CDN 到底有什么区别?
计算机网络·负载均衡
剑锋所指,所向披靡!2 天前
计算机网络之传输层
计算机网络