IPv4 与 IPv6 子网划分:从 CIDR 表示法到 VLSM 工程实践

为什么 IP 子网计算是开发者的必修课

每个开发者或多或少都会遇到 IP 子网问题:

  • 给服务器配置内网 IP,如何判断是否在同一子网
  • 写 Nginx / 防火墙规则,如何用 CIDR 表示允许的网段
  • K8s Calico / Cilium 网络策略,如何用 CIDR 限定 pod 通信范围
  • AWS / 阿里云 VPC 子网划分,如何切分 16 位掩码段
  • 数据库存储 IP 时,应该用 INET 类型还是字符串
  • Docker 默认 172.17.0.0/16,容器 IP 如何分配

这些场景的底层都是同一套概念:CIDR 表示法 + 子网掩码 + 网络地址。理解了它们,你就能在 30 秒内回答「192.168.1.100/22192.168.2.200/22 是否在同一子网」这类问题。

配套工具:IP 子网计算器

一、IPv4 与 IPv6 地址基础

IPv4:32 位点分十进制

IPv4 地址是 32 位无符号整数,习惯写作 4 个 0-255 的八位组,用点号分隔:

192.168.1.100
= 11000000.10101000.00000001.01100100
= 3232235876(十进制)

总共 2^32 ≈ 43 亿个地址,2011 年 IANA 主池已耗尽,因此出现 NAT、CGNAT、IPv6 等过渡方案。

IPv6:128 位十六进制

IPv6 地址是 128 位,写作 8 组 4 位十六进制,用冒号分隔:

2001:0db8:0000:0000:0000:0000:0000:0001

可省略前导零,并用 :: 缩略最长连续零段(仅一次):

2001:db8::1

总共 2^128 ≈ 3.4×10^38 个地址,“给地球每粒沙子分配一个 IP”绰绰有余。IPv6 还支持 IPv4-mapped 后缀:::ffff:192.168.1.1 表示 IPv4 地址嵌入 IPv6。

二、CIDR 表示法详解

CIDR(Classless Inter-Domain Routing)用 /数字 表示网络前缀长度,取代了早期的 A/B/C 类别编址:

192.168.1.0/24
└────┬────┘ └┘
   IP 地址   前缀
  • 前 24 位是网络位(必须相同才能在同一子网)
  • 后 8 位是主机位(可分配给具体设备)
  • 该子网共 2^8 = 256 个地址,可用 254 个

常见前缀长度对照:

前缀网络位主机位总地址数可用主机数(IPv4)
/882416,777,21616,777,214
/16161665,53665,534
/24248256254
/282841614
/3030242
/3131122(RFC 3021)
/3232011(单机)

IPv6 前缀含义相同,但前缀通常更长(家用 /64,运营商 /48 或 /56)。

三、子网掩码与通配符掩码

子网掩码是前缀长度对应的二进制表示:前缀位全 1,主机位全 0。

/24 -> 255.255.255.0
/16 -> 255.255.0.0
/30 -> 255.255.255.252

掩码必须为连续 1 后接连续 0,否则非法(如 255.255.0.255 不合法)。

通配符掩码(反掩码)= 子网掩码按位取反:

/24 掩码 255.255.255.0 -> 通配符 0.0.0.255
/16 掩码 255.255.0.0   -> 通配符 0.0.255.255

通配符掩码中 0 表示”必须匹配”、1 表示”任意”,常用于 Cisco ACL 与 OSPF 配置:

access-list 1 permit 192.168.1.0 0.0.0.255
# 允许 192.168.1.0/24 网段所有流量

四、网络地址与广播地址

给定 IP 与前缀,可计算两个特殊地址:

  • 网络地址:主机位全 0(如 192.168.1.0/24 中的 192.168.1.0),标识子网本身
  • 广播地址:主机位全 1(如 192.168.1.255),向子网内所有主机发送
IP:        192.168.1.100
掩码:      255.255.255.0
网络地址 = IP AND 掩码 = 192.168.1.0
广播地址 = IP OR  通配符 = 192.168.1.255

这两个地址不能分配给主机,因此 IPv4 在前缀 ≤ 30 时可用主机数 = 总数 - 2。

IPv6 没有广播地址——RFC 4291 取消了广播,改用多播(ff00::/8)替代。因此 IPv6 的可用主机数 = 总数(不减 2)。

五、私有地址与特殊地址段

RFC 1918 定义了三段 IPv4 私有地址(不在公网路由,需 NAT):

范围默认前缀容量
A 类私有10.0.0.0 - 10.255.255.255/81677 万
B 类私有172.16.0.0 - 172.31.255.255/12104 万
C 类私有192.168.0.0 - 192.168.255.255/1665536

其他特殊段:

  • 127.0.0.0/8 环回(loopback)
  • 169.254.0.0/16 链路本地(DHCP 失败时自动分配)
  • 224.0.0.0/4 多播
  • 240.0.0.0/4 保留(E 类)
  • 0.0.0.0/8 未指定 / 默认路由

IPv6 特殊段:

  • ::1/128 环回
  • fe80::/10 链路本地
  • fc00::/7 唯一本地(类似私有)
  • ff00::/8 多播
  • 2001:db8::/32 文档示例专用(RFC 3849,禁止公网使用)

六、子网划分(VLSM)实践

VLSM(Variable Length Subnet Masking)允许在同一网络内使用不同前缀长度,更精细地切分地址空间。

规则:子网数量必须是 2 的幂(2/4/8/16…),每次划分使前缀长度增加 log2(N) 位。

示例:将 192.168.1.0/24 划分为 4 个子网:

原前缀 /24,新增 2 位(log2(4) = 2),新前缀 /26

子网 1: 192.168.1.0/26   范围 .0   - .63   可用 .1   - .62
子网 2: 192.168.1.64/26  范围 .64  - .127  可用 .65  - .126
子网 3: 192.168.1.128/26 范围 .128 - .191  可用 .129 - .190
子网 4: 192.168.1.192/26 范围 .192 - .255  可用 .193 - .254

每个子网 64 个地址,可用 62 个。常见划分场景:

  • 不同业务隔离(生产 / 测试 / 灰度)
  • 不同部门独立子网
  • AWS VPC 多可用区子网
  • K8s 多节点 IP 池

七、IPv4 vs IPv6 关键差异

维度IPv4IPv6
地址长度32 位128 位
表示点分十进制冒号十六进制(可 :: 缩略)
网络位CIDR /0-/32CIDR /0-/128
广播地址有(主机位全 1)无(改用多播)
私有段RFC 1918 三段fc00::/7 唯一本地
环回127.0.0.0/8::1/128
链路本地169.254.0.0/16fe80::/10
DHCP必须SLAAC 自动配置
NAT普遍理论上不需要
默认网段/24/64

生产建议:云上 VPC 双栈部署,对外服务监听 IPv6,内部网络保留 IPv4 以兼容老系统。

八、/31 与 /30 的边界处理

/30 子网

192.168.1.0/30:
  网络地址: 192.168.1.0
  可用主机: 192.168.1.1, 192.168.1.2
  广播地址: 192.168.1.3

共 4 个地址,可用 2 个。传统点对点链路标准。

/31 子网(RFC 3021)

192.168.1.0/31:
  主机 1: 192.168.1.0
  主机 2: 192.168.1.1
  无网络地址,无广播地址

仅 2 个地址,全部可用。RFC 3021 专为点对点链路设计,节省一半地址空间。现代路由器普遍支持。

/32 子网

单机地址,可用 1 个。常见于 loopback 接口、防火墙规则、负载均衡虚拟 IP。

九、工具矩阵联动

IP 子网计算不是孤立的,与多个工具配合使用能覆盖更多场景:

  • IP 子网计算器 × URL 编解码:解析 URL 中的 host 后用 IP 工具判断网段。例如 Nginx allow 192.168.0.0/16 配合 URL 工具理解请求路径
  • IP 子网计算器 × YAML/JSON 互转:K8s NetworkPolicy、Calico IPPool、Terraform 资源配置都是 YAML/JSON 格式,其中包含大量 CIDR 字段
  • IP 子网计算器 × 正则表达式:用正则校验 IPv4 / IPv6 字符串格式。IPv4 正则 ^(\d{1,3}\.){3}\d{1,3}$(粗校)或 ^(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}$(精校)
  • IP 子网计算器 × CRON 解析器:定时任务常需访问特定网段,IP 配置 + cron 表达式共同定义”何时访问哪个网段”
  • IP 子网计算器 × 时间戳转换:日志分析时,IP 与时间戳是两个最常见维度
  • IP 子网计算器 × Hash 计算:配置文件版本管理,IP 段变更后用哈希校验差异

十、扩展阅读

理解 IP 子网不需要背公式,多用 IP 子网计算器 实操几次,CIDR / 网络地址 / 广播地址 / 通配符掩码就会形成直觉。配合 URL 工具 理解请求结构、YAML/JSON 工具 配置 K8s 网络、正则工具 校验 IP 格式,你的网络配置能力会显著提升。