子网(Subnet)和CIDR是每位基础设施工程师或DevOps从业者都必须掌握的两个基础概念——从设计AWS VPC、配置Kubernetes,到简单地理解为什么办公室网络使用192.168.1.x。本文从基础到实践全面讲解这两个概念。
需要企业数据解决方案?
自 2019 年起,AlgoData 为企业提供数据工程、分析与 AI 解决方案。
IP地址:基本结构

IPv4地址是一个32位的数字,通常以四个用点分隔的八位组形式书写。例如:192.168.1.100 = 11000000.10101000.00000001.01100100(二进制)。
每个IP地址分为两部分:
- 网络部分(Network part):标识网络(类似电话的区号)
- 主机部分(Host part):标识该网络中的设备(类似用户号码)
私有IP地址范围(保留用于内部网络,不能直接在互联网上路由):
| 范围 | CIDR | 地址数量 | 常见用途 |
|---|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | 约1670万 | 大型企业网络、云VPC |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 | 约100万 | Docker桥接网络 |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 | 约65K | 家用路由器、小型办公网络 |
什么是子网(Subnet)?
**子网(subnetwork)**是将一个大型IP网络划分为多个较小子网络的过程。每个子网包含:
- 网络地址(Network address):子网的第一个地址(不分配给主机)
- 主机地址(Host addresses):可以分配给设备的地址
- 广播地址(Broadcast address):最后一个地址(不分配给主机)
为什么需要子网?
- 安全性:分隔不同区域(DMZ、内部网络、数据库)
- 性能:减少广播域,减少不必要的流量
- 管理:更容易按子网监控和过滤流量
子网掩码指示有多少位属于网络部分。例如 255.255.255.0:
255=11111111(8个1位 = 8个网络位)- 前三个八位组均为255 → 24个网络位
- 最后一个八位组为0 → 8个主机位
CIDR表示法:/前缀

CIDR(无类别域间路由)通过在斜杠后使用前缀长度(网络位数)来替代旧式的A/B/C类系统。
常用CIDR参考表:
| CIDR | 子网掩码 | 总地址数 | 可用主机数 | 适用场景 |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 16,777,216 | 16,777,214 | 超大型网络 |
| /16 | 255.255.0.0 | 65,536 | 65,534 | VPC、园区网络 |
| /24 | 255.255.255.0 | 256 | 254 | 最常见的子网大小 |
| /28 | 255.255.255.240 | 16 | 14 | 小型子网 |
| /30 | 255.255.255.252 | 4 | 2 | 点对点链路 |
| /32 | 255.255.255.255 | 1 | 1 | 主机路由 |
公式:可用主机数 = 2^(32 - 前缀长度) - 2
子网计算实践
示例1:192.168.1.0/24
网络地址: 192.168.1.0
子网掩码: 255.255.255.0
第一个主机:192.168.1.1
最后一个主机:192.168.1.254
广播地址: 192.168.1.255
主机数量: 254
示例2:10.0.0.0/28(DMZ小型子网)
网络地址: 10.0.0.0
子网掩码: 255.255.255.240
第一个主机:10.0.0.1
最后一个主机:10.0.0.14
广播地址: 10.0.0.15
主机数量: 14
工具:ipcalc
1# 安装ipcalc
2apt-get install ipcalc # Ubuntu/Debian
3brew install ipcalc # macOS
4
5# 计算子网详情
6ipcalc 192.168.1.0/24
7# 输出:
8# Address: 192.168.1.0 11000000.10101000.00000001. 00000000
9# Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
10# Network: 192.168.1.0/24 11000000.10101000.00000001. 00000000
11# HostMin: 192.168.1.1 11000000.10101000.00000001. 00000001
12# HostMax: 192.168.1.254 11000000.10101000.00000001. 11111110
13# Broadcast: 192.168.1.255 11000000.10101000.00000001. 11111111
14# Hosts/Net: 254 Class C, Private Internet
15
16# 查看所有网络接口的IP地址
17ip addr show
18# 或查看特定接口
19ip addr show eth0
20
21# 查看路由表
22ip route show
AWS VPC与子网设计

AWS VPC(Virtual Private Cloud)使用CIDR对云网络进行分段。标准架构如下:
VPC: 10.0.0.0/16(65,536个地址)
├── 公共子网(可用区-a): 10.0.1.0/24 (254台主机)
├── 公共子网(可用区-b): 10.0.2.0/24 (254台主机)
├── 私有子网(可用区-a): 10.0.10.0/24 (254台主机)
├── 私有子网(可用区-b): 10.0.20.0/24 (254台主机)
└── 数据库子网(可用区-a):10.0.100.0/24 (254台主机)
AWS在每个子网中保留5个地址:
.0— 网络地址.1— AWS VPC路由器.2— AWS DNS服务器.3— 未来预留.255— 广播地址(AWS不支持)
→ AWS中的/24子网实际上只有 251个可用地址(256 - 5)
Terraform示例:
1resource "aws_vpc" "main" {
2 cidr_block = "10.0.0.0/16"
3}
4
5resource "aws_subnet" "public_a" {
6 vpc_id = aws_vpc.main.id
7 cidr_block = "10.0.1.0/24"
8 availability_zone = "ap-southeast-1a"
9}
10
11resource "aws_subnet" "private_a" {
12 vpc_id = aws_vpc.main.id
13 cidr_block = "10.0.10.0/24"
14 availability_zone = "ap-southeast-1a"
15}
Kubernetes Pod CIDR
Kubernetes为其Pod网络使用专用CIDR范围,与节点IP地址完全分离:
1# 查看集群的Pod CIDR
2kubectl get nodes -o wide
3# INTERNAL-IP列显示节点IP;POD-CIDR列显示每个节点的Pod CIDR
4
5# 在kubeadm配置中检查Pod CIDR
6kubectl get configmap kubeadm-config -n kube-system -o yaml | grep podSubnet
7
8# 查看所有命名空间中的Pod IP
9kubectl get pods -A -o wide
默认CNI插件及其CIDR:
- Flannel:
10.244.0.0/16— 每个节点获得一个/24(每个节点最多256个Pod) - Calico:
192.168.0.0/16— 灵活,支持BGP路由 - Cilium:
10.0.0.0/8— 使用eBPF,块大小灵活
VLSM:可变长子网掩码
VLSM允许在同一网络中使用不同大小的子网:
父网络:10.0.0.0/8
胡志明市办公室(500名员工):10.1.0.0/23 → 510台主机
河内办公室(200名员工): 10.2.0.0/24 → 254台主机
岘港办公室(50名员工): 10.3.0.0/26 → 62台主机
路由器间WAN链路: 10.4.0.0/30 → 2台主机
环回接口: 10.5.0.1/32 → 1台主机
不使用VLSM:每个子网都必须足够大以容纳最大的办公室——在只需要少量设备的网段上浪费了数百个IP地址。

