前言
CIDR(Classless Inter-Domain Routing,无类别域间路由)是现代网络中表示 IP 地址范围的标准方法。无论是配置服务器、设置防火墙规则,还是规划网络架构,理解 CIDR 表示法都是网络管理的基础技能。本文将详细介绍 CIDR 语法、子网掩码对照表、可用 IP 计算方法,以及 ipcalc 工具的使用。
1. CIDR 基础概念
1.1 什么是 CIDR
CIDR 是一种用于分配 IP 地址和进行 IP 路由的方法,于 1993 年引入以替代传统的 A/B/C 类网络分类。
CIDR 表示法格式:
IP地址/前缀长度示例:
192.168.1.0/2410.0.0.0/8172.16.0.0/12
1.2 CIDR 表示法结构
192.168.1.0/24
└─────┬─────┘ └┬┘
网络地址 前缀长度- 网络地址:表示网络的起始地址
- 前缀长度:表示网络部分占用的位数(子网掩码中连续 1 的个数)
1.3 为什么需要 CIDR
传统分类网络的问题:
- A 类网络过大(1600 万台主机),浪费严重
- B 类网络也过大(65534 台主机)
- C 类网络过小(254 台主机),不够用
CIDR 的优势:
- 灵活分配 IP 地址
- 减少路由表条目
- 提高 IP 地址利用率
2. 子网掩码详解
2.1 子网掩码的作用
子网掩码用于区分 IP 地址中的网络部分和主机部分。
IP 地址: 192.168.1.100 = 11000000.10101000.00000001.01100100
子网掩码: 255.255.255.0 = 11111111.11111111.11111111.00000000
└──── 网络部分 ┘ └── 主机部分 ┘2.2 二进制与十进制的转换
IP 地址和子网掩码都是 32 位二进制数,每 8 位用一个十进制数表示(点分十进制)。
| 前缀长度 | 子网掩码 | 二进制掩码 |
|---|---|---|
| /8 | 255.0.0.0 | 11111111.00000000.00000000.00000000 |
| /16 | 255.255.0.0 | 11111111.11111111.00000000.00000000 |
| /24 | 255.255.255.0 | 11111111.11111111.11111111.00000000 |
| /32 | 255.255.255.255 | 11111111.11111111.11111111.11111111 |
2.3 完整 CIDR 前缀对照表
| 前缀 | 子网掩码 | 可用主机数 | 说明 |
|---|---|---|---|
| /1 | 128.0.0.0 | 2,147,483,646 | 超大网络 |
| /2 | 192.0.0.0 | 1,073,741,822 | |
| /3 | 224.0.0.0 | 536,870,910 | |
| /4 | 240.0.0.0 | 268,435,454 | |
| /5 | 248.0.0.0 | 134,217,726 | |
| /6 | 252.0.0.0 | 67,108,862 | |
| /7 | 254.0.0.0 | 33,554,430 | |
| /8 | 255.0.0.0 | 16,777,214 | A 类默认 |
| /9 | 255.128.0.0 | 8,388,606 | |
| /10 | 255.192.0.0 | 4,194,302 | |
| /11 | 255.224.0.0 | 2,097,150 | |
| /12 | 255.240.0.0 | 1,048,574 | |
| /13 | 255.248.0.0 | 524,286 | |
| /14 | 255.252.0.0 | 262,142 | |
| /15 | 255.254.0.0 | 131,070 | |
| /16 | 255.255.0.0 | 65,534 | B 类默认 |
| /17 | 255.255.128.0 | 32,766 | |
| /18 | 255.255.192.0 | 16,382 | |
| /19 | 255.255.224.0 | 8,190 | |
| /20 | 255.255.240.0 | 4,094 | |
| /21 | 255.255.248.0 | 2,046 | |
| /22 | 255.255.252.0 | 1,022 | |
| /23 | 255.255.254.0 | 510 | |
| /24 | 255.255.255.0 | 254 | C 类默认 |
| /25 | 255.255.255.128 | 126 | |
| /26 | 255.255.255.192 | 62 | |
| /27 | 255.255.255.224 | 30 | |
| /28 | 255.255.255.240 | 14 | |
| /29 | 255.255.255.248 | 6 | 点对点链路 |
| /30 | 255.255.255.252 | 2 | 点对点链路 |
| /31 | 255.255.255.254 | 0* | 特殊用途 |
| /32 | 255.255.255.255 | 1 | 单个主机 |
*注:/31 在 RFC 3021 中定义,可用于点对点链路(只有 2 个地址,网络地址和广播地址都被用作主机地址)。
3. 可用 IP 地址计算
3.1 计算公式
可用主机数 = 2^(32 - 前缀长度) - 2其中减去的 2 是:
- 网络地址(全 0):
192.168.1.0 - 广播地址(全 1):
192.168.1.255
3.2 计算示例
示例 1:计算 192.168.1.0/24 的可用 IP
前缀长度 = 24
主机位 = 32 - 24 = 8 位
总地址数 = 2^8 = 256
可用主机数 = 256 - 2 = 254
网络地址: 192.168.1.0
广播地址: 192.168.1.255
可用范围: 192.168.1.1 - 192.168.1.254示例 2:计算 10.0.0.0/8 的可用 IP
前缀长度 = 8
主机位 = 32 - 8 = 24 位
总地址数 = 2^24 = 16,777,216
可用主机数 = 16,777,216 - 2 = 16,777,214
网络地址: 10.0.0.0
广播地址: 10.255.255.255
可用范围: 10.0.0.1 - 10.255.255.254示例 3:计算 172.16.0.0/12 的可用 IP
前缀长度 = 12
主机位 = 32 - 12 = 20 位
总地址数 = 2^20 = 1,048,576
可用主机数 = 1,048,576 - 2 = 1,048,574
网络地址: 172.16.0.0
广播地址: 172.31.255.255
可用范围: 172.16.0.1 - 172.31.255.2543.3 手工计算步骤
以 192.168.100.0/26 为例:
步骤 1:确定子网掩码
/26 = 26 个连续 1
11111111.11111111.11111111.11000000
= 255.255.255.192步骤 2:计算块大小(Block Size)
块大小 = 256 - 最后一个非零的掩码字节
= 256 - 192 = 64步骤 3:确定子网
子网: 0, 64, 128, 192
192.168.100.0/26 属于第一个子网步骤 4:确定可用范围
网络地址: 192.168.100.0
广播地址: 192.168.100.63
可用范围: 192.168.100.1 - 192.168.100.62
可用主机数: 624. 特殊 IP 地址范围
4.1 私有 IP 地址(RFC 1918)
| 范围 | CIDR | 说明 |
|---|---|---|
| 10.0.0.0 - 10.255.255.255 | 10.0.0.0/8 | A 类私有地址 |
| 172.16.0.0 - 172.31.255.255 | 172.16.0.0/12 | B 类私有地址 |
| 192.168.0.0 - 192.168.255.255 | 192.168.0.0/16 | C 类私有地址 |
4.2 其他特殊范围
| 范围 | CIDR | 说明 |
|---|---|---|
| 127.0.0.0 - 127.255.255.255 | 127.0.0.0/8 | 回环地址 |
| 169.254.0.0 - 169.254.255.255 | 169.254.0.0/16 | 链路本地地址 |
| 224.0.0.0 - 239.255.255.255 | 224.0.0.0/4 | 组播地址 |
| 240.0.0.0 - 255.255.255.255 | 240.0.0.0/4 | 保留地址 |
5. ipcalc 工具使用
ipcalc 是一个强大的 IP 地址计算工具,可以快速计算 CIDR 网络的详细信息。
5.1 安装 ipcalc
# Ubuntu / Debian
apt install ipcalc
# CentOS / RHEL / Rocky
yum install ipcalc
dnf install ipcalc
# 或使用更强大的 ipcalc-ng
apt install ipcalc-ng # Ubuntu/Debian5.2 基本用法
# 计算单个网络
ipcalc 192.168.1.0/24
# 输出示例:
Address: 192.168.1.0 11000000.10101000.00000001. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.1.0/24 11000000.10101000.00000001. 00000000
HostMin: 192.168.1.1 11000000.10101000.00000001. 00000001
HostMax: 192.168.1.254 11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255 11000000.10101000.00000001. 11111111
Hosts/Net: 254 Class C, Private Internet5.3 实用参数
# 只显示网络地址
ipcalc -n 192.168.1.100/24
# 只显示广播地址
ipcalc -b 192.168.1.100/24
# 只显示子网掩码
ipcalc -m 192.168.1.100/24
# 显示可用主机范围
ipcalc -n -b 192.168.1.0/24
# 检查 IP 是否在某网络内
ipcalc -c 192.168.1.100 192.168.1.0/245.4 批量计算
# 计算多个子网
for prefix in 24 25 26 27 28; do
echo "/$prefix:"
ipcalc 192.168.1.0/$prefix | grep -E "Hosts|Network|HostMin|HostMax"
echo ""
done5.5 使用 Python 计算(无 ipcalc 时)
import ipaddress
# 计算网络信息
network = ipaddress.IPv4Network('192.168.1.0/24', strict=False)
print(f"网络地址: {network.network_address}")
print(f"广播地址: {network.broadcast_address}")
print(f"子网掩码: {network.netmask}")
print(f"可用主机数: {network.num_addresses - 2}")
print(f"可用范围: {list(network.hosts())[0]} - {list(network.hosts())[-1]}")6. CIDR 在实际场景中的应用
6.1 防火墙规则配置
# iptables 允许特定 CIDR
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# firewalld 允许特定 CIDR
firewall-cmd --add-source=192.168.1.0/24 --zone=trusted
# UFW 允许特定 CIDR
ufw allow from 192.168.1.0/246.2 云服务器安全组
主流云服务商都使用 CIDR 表示法配置安全组:
| 场景 | CIDR | 说明 |
|---|---|---|
| 允许所有 | 0.0.0.0/0 | 不建议生产环境使用 |
| 内网访问 | 10.0.0.0/8 | 只允许内网 |
| 特定网段 | 192.168.1.0/24 | 只允许特定子网 |
| 单个 IP | 1.2.3.4/32 | 只允许特定主机 |
6.3 Docker 网络配置
# 创建自定义 Docker 网络
docker network create --subnet=172.18.0.0/16 mynetwork
# docker-compose 中指定网络
networks:
mynet:
ipam:
config:
- subnet: 172.20.0.0/246.4 Kubernetes Pod 网络
# Calico CNI 配置示例
apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
name: default-ipv4-ippool
spec:
cidr: 192.168.0.0/16
ipipMode: Always
natOutgoing: true7. 常见错误和注意事项
7.1 常见错误
# 错误:混淆网络地址和主机地址
# 错误写法
192.168.1.1/24 # 虽然能用,但规范写法是 192.168.1.0/24
# 正确写法
192.168.1.0/247.2 边界计算错误
错误:认为 /24 有 256 个可用 IP
正确:/24 有 254 个可用 IP(减去网络和广播地址)
错误:认为 192.168.1.0/23 的范围是 192.168.1.1-192.168.1.254
正确:192.168.1.0/23 的范围是 192.168.0.1-192.168.1.254(跨越两个 C 段)7.3 超网(Supernetting)和子网(Subnetting)
子网划分:将大网络分成小网络
例如:将 192.168.1.0/24 划分为 4 个子网
- 192.168.1.0/26
- 192.168.1.64/26
- 192.168.1.128/26
- 192.168.1.192/26
超网聚合:将小网络合并成大网络
例如:将以下网络聚合
- 192.168.0.0/24
- 192.168.1.0/24
- 192.168.2.0/24
- 192.168.3.0/24
聚合后:192.168.0.0/228. 快速参考表
8.1 常用 CIDR 速查
| CIDR | 相当于 | 可用主机数 | 典型用途 |
|---|---|---|---|
| /32 | 单个 IP | 1 | 主机路由 |
| /31 | 2 个 IP | 2* | 点对点链路 |
| /30 | 4 个 IP | 2 | 点对点链路 |
| /29 | 8 个 IP | 6 | 小型网络 |
| /28 | 16 个 IP | 14 | 小型网络 |
| /27 | 32 个 IP | 30 | 部门网络 |
| /26 | 64 个 IP | 62 | 部门网络 |
| /24 | 256 个 IP | 254 | 常见局域网 |
| /16 | 65536 个 IP | 65534 | 大企业内网 |
| /8 | 16777216 个 IP | 16777214 | 超大规模 |
8.2 二进制快速转换技巧
记住以下规律可以快速计算:
128 = 2^7
192 = 128 + 64 = 2^7 + 2^6
224 = 128 + 64 + 32 = 2^7 + 2^6 + 2^5
240 = 128 + 64 + 32 + 16
248 = 128 + 64 + 32 + 16 + 8
252 = 128 + 64 + 32 + 16 + 8 + 4
254 = 128 + 64 + 32 + 16 + 8 + 4 + 2
255 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 19. 总结
CIDR 是现代网络管理的基础,本文详细介绍了:
- CIDR 语法:
IP/前缀长度表示法 - 子网掩码:完整的前缀长度对照表
- 可用 IP 计算:
2^(32-前缀) - 2公式及手工计算步骤 - ipcalc 工具:快速计算网络信息的命令行工具
- 实际场景:防火墙、云安全组、Docker、Kubernetes 中的应用
关键要点:
/24是最常用的 CIDR,表示 254 个可用主机- 网络地址和广播地址不可分配给主机
- 使用
ipcalc工具可以快速验证计算结果 - 配置防火墙和安全组时,务必确认 CIDR 范围正确
掌握 CIDR 计算,让你在网络规划、服务器配置、安全防护等方面更加得心应手。