IP 地址、子网与 CIDR 记法详解

系统讲清 IP 地址、子网掩码与 CIDR 的关系,覆盖 IPv4、IPv6、VLSM、私有地址范围、主机数计算与实际网络规划方法。

阅读时长: 16 分钟
共 7919字
作者: eimoon.com

IP 地址、子网与 CIDR 记法详解

IP 地址、子网和 CIDR 是服务器配置、云网络规划、防火墙规则编写和路由设计的基础。三者如果拆开看都不复杂,但一旦放到同一个场景里,很多错误都来自边界没分清:哪些位表示网络,哪些位表示主机,哪些地址能分配给机器,哪些只是网络本身或广播用途。

先给出结论:

  • IPv4 地址是一个 32 位数字,通常写成四段十进制,例如 192.168.0.5
  • 子网掩码决定 IP 地址中哪些位属于网络部分,哪些位属于主机部分
  • CIDR 用斜杠加前缀长度表示网络,例如 192.168.1.0/24
  • 对于大多数 IPv4 子网,首地址是网络地址,末地址是广播地址,二者不能分配给主机
  • RFC 1918 规定了三段私有地址空间:10.0.0.0/8172.16.0.0/12192.168.0.0/16
  • VLSM 允许在同一地址空间内使用不同前缀长度,提高地址利用率
  • IPv6 沿用相同的斜杠前缀记法,单个子网通常使用 /64

相关标准中,CIDR 的权威规范见 RFC 4632,私有地址范围见 RFC 1918。/31 点对点链路例外见 RFC 3021。

什么是 IP 地址,为什么要先理解二进制

IP 地址本质上是网络里设备的数值标识。它有两个作用:

  1. 标识主机是谁
  2. 标识主机在网络拓扑里的位置

IPv4 地址到底长什么样

IPv4 地址是 32 位数字,写成四个 8 位段,每段用十进制表示,取值范围是 0255。这四段通常叫 octet,因为每段都是 8 bit。

典型 IPv4 地址:

192.168.0.5

同一个地址写成二进制:

1100 0000 - 1010 1000 - 0000 0000 - 0000 0101

理解这两个表示法对应的是同一个值,是后面理解子网掩码和 CIDR 的前提。因为子网划分不是在十进制层面做的,而是在 bit 层面做的。

只要两台机器位于同一网络,或者中间有路由设备能转发流量,通信时就会以 IP 地址作为目标标识。

NAT 在这里扮演什么角色

当数据包跨越网络边界时,NAT(Network Address Translation)可以改写地址。这样,同一个私有地址可以在多个互相隔离的网络里重复使用,只要出口处有正确的 NAT 配置,这些内部网络仍然能访问外部网络。

这也是私有地址能大规模存在的前提。

传统 IPv4 分类还有没有必要了解

有必要,但只作为历史背景,不应该拿它指导今天的网络设计。

早期 IPv4 曾按 A、B、C、D、E 五类地址划分,依据是地址开头的若干位。

类别 起始位 地址范围 默认掩码 用途
A 0 0.0.0.0127.255.255.255 255.0.0.0 大型网络
B 10 128.0.0.0191.255.255.255 255.255.0.0 中型网络
C 110 192.0.0.0223.255.255.255 255.255.255.0 小型网络
D 1110 224.0.0.0239.255.255.255 N/A 组播
E 1111 240.0.0.0255.255.255.255 N/A 实验/保留

有两个 A 类范围需要单独记住:

  • 0.0.0.0/8:表示“本网络”,常见于主机尚未获得地址时作为源地址使用
  • 127.0.0.0/8:回环地址,用于本机测试网络栈,最常用的是 127.0.0.1

D 类地址保留给组播协议,E 类地址主要保留作实验用途。

今天的实际路由已经不再使用这种 classful addressing。RFC 1519 于 1993 年引入 CIDR,后由 RFC 4632 更新整合。现代网络中,前缀长度不必再对齐到 A/B/C 的边界。A/B/C 类别现在主要只剩历史解释价值,以及默认掩码习惯的背景作用。

公网 IP 和私网 IP 的边界在哪里

公网地址可在互联网全局路由。私有地址只在私有网络内部使用。

RFC 1918 定义了三段私有地址空间:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

它们不会出现在互联网的全局路由表中。也就是说,带着私有目标地址的数据包一旦离开本地网络,公网路由器没有地方可转发,最终会被丢弃。

这直接带来两个结果:

  • 私网主机默认不能从公网直接访问
  • 私网主机要访问公网,通常必须经过 NAT

回环地址 127.0.0.0/8 也不是公网可路由地址。一般只使用 127.0.0.1,但整个 127.0.0.0/8 都是保留给本机回环测试的。

什么是子网,为什么必须划分子网

子网是一个更大 IP 网络的逻辑分段。子网划分的目的不是“把地址分小”,而是解决广播范围、隔离边界和资源分配三个问题。

为什么不应该把所有主机塞进一个大网段

在一个扁平网络里,ARP 请求、DHCP Discover 这类广播会被同一广播域里的所有主机处理。

如果把一个 /16 网络扔给约 6 万台主机使用,整个网段里的每台机器都得处理所有广播。一台异常主机如果持续发广播,影响的是整个网段。把它拆成多个 /24 后,每段大致只有 254 台可用主机,广播风暴会被限制在单个子网内,不会拖垮整个网络。

子网也是安全和策略边界

防火墙规则、路由策略、ACL 都是基于地址范围工作的。

例如:

  • Web 层在 10.10.1.0/24
  • 数据库层在 10.10.2.0/24

那就可以明确写规则,只允许 10.10.1.0/24 访问 10.10.2.0/24 的数据库端口,其他来源一律拒绝。如果没有子网边界,就没有可操作的地址范围。

子网还能按实际规模分配地址

点对点链路通常只需要 2 个地址,可以用 /30 用户接入网段可能需要 200 多个地址,可以用 /24

这比所有地方都机械使用统一大小的网段更合理。后面讲 VLSM 时,这一点会更明显。

一个 IP 地址里,网络部分和主机部分怎么分

每个 IP 地址都可拆成两个逻辑部分:

  • 网络部分:标识它属于哪个子网
  • 主机部分:标识它在这个子网中是哪一台设备

192.168.0.15/24 为例:

  • 网络部分是 192.168.0
  • 主机部分是 15

二进制形式:

1100 0000 - 1010 1000 - 0000 0000 - 0000 1111

因为 /24 表示前 24 位是网络位,所以前三个 octet 属于网络,最后 8 位属于主机。

把 IP 地址和子网掩码做按位与运算,就能得到网络地址:

1100 0000 - 1010 1000 - 0000 0000 - 0000 1111   (192.168.0.15)
AND
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000   (255.255.255.0)
=
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000   (192.168.0.0)

所以:

  • 网络地址是 192.168.0.0
  • 主机标识是 0000 1111,也就是 15

广播地址到底是什么,哪些地址不能分配

在 IPv4 里,大多数子网都有两个特殊地址:

  • 第一个地址:网络地址,主机位全为 0
  • 最后一个地址:广播地址,主机位全为 1

这两个地址都不能分配给单独主机。

需要特别注意的是,这个限制针对的是“该子网里的首尾地址”,不是说最后一个 octet 恰好是 0255 的地址一定不能用。

例如:

  • 10.0.1.0/24

    • 网络地址:10.0.1.0
    • 广播地址:10.0.1.255
  • 10.0.2.128/25

    • 网络地址:10.0.2.128
    • 广播地址:10.0.2.255

所以判断能不能分配地址,必须先看它处在哪个子网里,不能只看最后一段。

子网掩码到底表达了什么

子网掩码是一个 32 位值,用来标记哪些位属于网络,哪些位属于主机:

  • 掩码中为 1 的位表示网络位
  • 掩码中为 0 的位表示主机位

用二进制理解子网掩码最直接

/24 的子网掩码是 255.255.255.0,二进制写法如下:

1111 1111 - 1111 1111 - 1111 1111 - 0000 0000

也就是前 24 位为 1,后 8 位为 0。

常见前缀与掩码对应关系如下:

/8  → 11111111.00000000.00000000.00000000 → 255.0.0.0
/16 → 11111111.11111111.00000000.00000000 → 255.255.0.0
/24 → 11111111.11111111.11111111.00000000 → 255.255.255.0
/25 → 11111111.11111111.11111111.10000000 → 255.255.255.128
/26 → 11111111.11111111.11111111.11000000 → 255.255.255.192
/27 → 11111111.11111111.11111111.11100000 → 255.255.255.224
/28 → 11111111.11111111.11111111.11110000 → 255.255.255.240
/29 → 11111111.11111111.11111111.11111000 → 255.255.255.248
/30 → 11111111.11111111.11111111.11111100 → 255.255.255.252

如何把一个 /24 划成两个子网

如果把 192.168.0.0/24 拆成两个等大的子网,需要从主机位里“借” 1 位给网络位。于是前缀从 /24 变成 /25,掩码变成:

1111 1111 - 1111 1111 - 1111 1111 - 1000 0000

也就是:

255.255.255.128

这里要分清楚:

  • 255.255.255.128 是子网掩码
  • 它不是网络地址

192.168.0.0/24/25 划分后,得到两个子网:

  • 子网 1:网络地址 192.168.0.0,广播 192.168.0.127,可用范围 192.168.0.1192.168.0.126,126 个主机
  • 子网 2:网络地址 192.168.0.128,广播 192.168.0.255,可用范围 192.168.0.129192.168.0.254,126 个主机

每多借 1 位:

  • 子网数量翻倍
  • 每个子网可用主机数减半

这就是子网划分最核心的取舍。

传统默认掩码还有参考价值吗

有,但只是参考,不是约束。

传统分类下默认掩码如下:

类别 默认子网掩码 CIDR 前缀
A 255.0.0.0 /8
B 255.255.0.0 /16
C 255.255.255.0 /24

在 CIDR 体系下,这些默认值只剩说明性质。任意地址都可以配任意合法前缀,不受原始类别限制。IPv4 前缀长度从 /0/32 都有效。

怎么从前缀长度计算可用主机数

IPv4 子网总地址数公式:

2^(32 - prefix)

大多数情况下,可用主机数为:

2^(32 - prefix) - 2

减去的两个地址分别是:

  • 网络地址
  • 广播地址

例如:

  • /242^(32 - 24) = 2^8 = 256,可用 254
  • /262^(32 - 26) = 2^6 = 64,可用 62

两个例外必须记住

  • /31:RFC 3021 规定可用于点对点链路,两端地址都可用,因为不需要传统广播语义
  • /32:表示单个主机路由

从主机数量反推应该用多大前缀

需要主机数 前缀 可用主机数
1 到 2 /30 2
3 到 6 /29 6
7 到 14 /28 14
15 到 30 /27 30
31 到 62 /26 62
63 到 126 /25 126
127 到 254 /24 254

例如某段网络需要 30 台主机:

  • /28 只能给 14 台,不够
  • /27 刚好给 30 台

那就应该选 /27

CIDR 记法为什么取代了分类地址

CIDR 是 Classless Inter-Domain Routing,核心是“无类别路由”。它用 IP/前缀长度 的形式表达一个网络。

例如:

192.168.0.15/24

表示前 24 位是网络位。

CIDR 解决了两个旧问题

  1. 固定类别造成地址浪费
    以前 Class B 一给就是 65534 个主机地址,Class C 又只有 254 个,中间缺少合适粒度。

  2. 路由表膨胀
    提供商为了满足需求,不得不分配大量 Class C 网络,互联网路由表项快速增长。

CIDR 引入后:

  • 地址块可以按任意前缀长度分配
  • 可按需求精细分配地址
  • 可做路由聚合,压缩路由表规模

怎么读一个 CIDR 块

192.168.0.0/24 为例:

  • 网络前缀:前 24 位,也就是 192.168.0
  • 主机位:后 8 位,范围 0255
  • 总地址数:256

10.0.0.0/8 为例:

  • 网络前缀:前 8 位,也就是 10
  • 主机位:后 24 位
  • 总地址数:16,777,216

CIDR 不只是划分,也能聚合

CIDR 还可以表示 supernet,也就是把多个连续网段汇总成一个更大的前缀。

例如:

  • 192.168.0.0
  • 192.168.1.0

这两个连续的 C 类网络,在传统分类里要两条路由;在 CIDR 下可以聚合成:

192.168.0.0/23

二进制看得更清楚:

第一个网络:

1100 0000 - 1010 1000 - 0000 0000 - 0000 0000

第二个网络:

1100 0000 - 1010 1000 - 0000 0001 - 0000 0000

/23 掩码:

1111 1111 - 1111 1111 - 1111 1110 - 0000 0000

固定 23 位后,第 24 位可以是 01,因此这两个网段都被同一个 /23 覆盖。对应掩码是 255.255.254.0

这就是路由聚合的基础。

常见 CIDR 示例

CIDR 块 可用主机数 典型用途
10.0.0.0/8 16,777,214 大型企业或云网络
172.16.0.0/16 65,534 中型私有网络
192.168.1.0/24 254 小型办公室或单网段
192.168.1.0/26 62 /24 内部的细分段
10.0.0.112/30 2 点对点 WAN 链路

IPv4 全量 CIDR 对照表应该怎么查

下面这张表列出 /0/32 的前缀、掩码、总地址数和可用主机数。
其中 /0/30 的可用主机数按 2^(32 - prefix) - 2 计算;/31/32 需要按例外处理。

Prefix Subnet Mask Total IPs Usable Hosts
/0 0.0.0.0 4,294,967,296 4,294,967,294
/1 128.0.0.0 2,147,483,648 2,147,483,646
/2 192.0.0.0 1,073,741,824 1,073,741,822
/3 224.0.0.0 536,870,912 536,870,910
/4 240.0.0.0 268,435,456 268,435,454
/5 248.0.0.0 134,217,728 134,217,726
/6 252.0.0.0 67,108,864 67,108,862
/7 254.0.0.0 33,554,432 33,554,430
/8 255.0.0.0 16,777,216 16,777,214
/9 255.128.0.0 8,388,608 8,388,606
/10 255.192.0.0 4,194,304 4,194,302
/11 255.224.0.0 2,097,152 2,097,150
/12 255.240.0.0 1,048,576 1,048,574
/13 255.248.0.0 524,288 524,286
/14 255.252.0.0 262,144 262,142
/15 255.254.0.0 131,072 131,070
/16 255.255.0.0 65,536 65,534
/17 255.255.128.0 32,768 32,766
/18 255.255.192.0 16,384 16,382
/19 255.255.224.0 8,192 8,190
/20 255.255.240.0 4,096 4,094
/21 255.255.248.0 2,048 2,046
/22 255.255.252.0 1,024 1,022
/23 255.255.254.0 512 510
/24 255.255.255.0 256 254
/25 255.255.255.128 128 126
/26 255.255.255.192 64 62
/27 255.255.255.224 32 30
/28 255.255.255.240 16 14
/29 255.255.255.248 8 6
/30 255.255.255.252 4 2
/31 255.255.255.254 2 2(仅点对点,RFC 3021)
/32 255.255.255.255 1 1(主机路由)

子网和主机范围该怎么手算

子网计算并不玄学,步骤固定:

  1. 确定前缀长度
  2. 写出子网掩码
  3. 用地址与掩码做按位与,得到网络地址
  4. 将所有主机位设为 1,得到广播地址
  5. 两者之间就是可用主机范围

示例一:计算 192.168.1.0/24

已知网络:

192.168.1.0/24

可直接得到:

  • 前缀长度:24
  • 子网掩码:255.255.255.0
  • 总地址数:2^8 = 256
  • 可用主机数:254

如果取网段内一个地址 192.168.1.75 做验证:

1100 0000 - 1010 1000 - 0000 0001 - 0100 1011   (192.168.1.75)
AND
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000   (255.255.255.0)
=
1100 0000 - 1010 1000 - 0000 0001 - 0000 0000   (192.168.1.0)

因此:

  • 网络地址:192.168.1.0
  • 广播地址:192.168.1.255
  • 可用范围:192.168.1.1192.168.1.254

示例二:把 /24 划成四个 /26

/26 表示:

  • 26 位网络位
  • 6 位主机位

每个 /26 子网有:

  • 总地址数:2^6 = 64
  • 可用主机数:62

192.168.1.0/24 划分后得到四个子网:

子网 网络地址 广播地址 可用范围 可用主机数
192.168.1.0/26 192.168.1.0 192.168.1.63 192.168.1.1192.168.1.62 62
192.168.1.64/26 192.168.1.64 192.168.1.127 192.168.1.65192.168.1.126 62
192.168.1.128/26 192.168.1.128 192.168.1.191 192.168.1.129192.168.1.190 62
192.168.1.192/26 192.168.1.192 192.168.1.255 192.168.1.193192.168.1.254 62

边界每隔 64 个地址出现一次,所以网络地址分别是 .0.64.128.192

示例三:如何判断某个地址属于哪个 /26

对于 255.255.255.192,最后一个 octet 的二进制是:

1100 0000

表示最后一个 octet 的前 2 位属于网络位,后 6 位属于主机位。

判断 192.168.1.130 属于哪个子网:

1100 0000 - 1010 1000 - 0000 0001 - 1000 0010   (192.168.1.130)
AND
1111 1111 - 1111 1111 - 1111 1111 - 1100 0000   (255.255.255.192)
=
1100 0000 - 1010 1000 - 0000 0001 - 1000 0000   (192.168.1.128)

结果是 192.168.1.128,所以它属于 192.168.1.128/26 这个子网。

实际环境里怎么验证计算结果

手算必须会,但生产环境最好用工具交叉验证。ipcalc 就很适合做这件事。

安装 ipcalc

在 Ubuntu 和 Debian 上:

sudo apt install ipcalc

验证 /24 网段

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 Internet

二进制中留出的空格位置,就是网络位和主机位的边界。

验证 /26 网段

ipcalc 192.168.1.0/26

输出:

Address:   192.168.1.0          11000000.10101000.00000001.00 000000
Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111
=>
Network:   192.168.1.0/26       11000000.10101000.00000001.00 000000
HostMin:   192.168.1.1          11000000.10101000.00000001.00 000001
HostMax:   192.168.1.62         11000000.10101000.00000001.00 111110
Broadcast: 192.168.1.63         11000000.10101000.00000001.00 111111
Hosts/Net: 62                    Class C, Private Internet

让 ipcalc 帮忙拆分子网

下面这个命令会把父网段 192.168.1.0/24 按每段至少 62 台主机的需求拆分:

ipcalc 192.168.1.0/24 --split 62 62 62 62

得到的四个 /26 子网就是:

子网 HostMin HostMax
192.168.1.0/26 192.168.1.1 192.168.1.62
192.168.1.64/26 192.168.1.65 192.168.1.126
192.168.1.128/26 192.168.1.129 192.168.1.190
192.168.1.192/26 192.168.1.193 192.168.1.254

这对做 VLSM 规划很实用。

Linux 上怎么看接口实际拿到了什么 CIDR

理论计算最终都会落到主机接口配置上。Linux 直接就以 CIDR 形式展示地址。

查看接口地址

ip addr show eth0

输出示例:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9a:1c:3e:7b:0a:11 brd ff:ff:ff:ff:ff:ff
    inet 10.10.1.5/24 brd 10.10.1.255 scope global eth0
       valid_lft forever preferred_lft forever

这里:

  • inet 10.10.1.5/24 是主机地址和前缀
  • brd 10.10.1.255 是广播地址

查看内核路由

ip route

输出示例:

default via 10.10.1.1 dev eth0 proto static
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.5

含义很直接:

  • 10.10.1.0/24 是内核依据接口地址自动安装的直连路由
  • default via 10.10.1.1 是默认网关,其他目的地都走这里

RFC 1918 私有地址范围应该怎么选

RFC 1918 定义的三段私有地址如下:

范围 CIDR 地址数量 常见用途
10.0.0.010.255.255.255 10.0.0.0/8 16,777,216 企业网络、云 VPC
172.16.0.0172.31.255.255 172.16.0.0/12 1,048,576 中型私网
192.168.0.0192.168.255.255 192.168.0.0/16 65,536 家庭、小型办公室

什么时候用私网地址,什么时候用公网地址

判断标准很简单:

  • 内部服务器、数据库、内部 API、不需要被公网直接访问的实例:用私网地址
  • 负载均衡器、边缘代理、面向互联网的终端:用公网地址

私网主机访问公网时,需要 NAT 网关把私网源地址替换成公网地址,再在返回流量时反向转换。

VLSM 什么时候值得用

只要不同网段规模差异明显,就应该用 VLSM。
VLSM 是 Variable Length Subnet Masking,即在同一地址空间内使用不同前缀长度的子网。

它不是新协议,而是一种设计方法。前提是 CIDR 已经取消了类别边界限制。

VLSM 解决的是什么问题

如果所有子网都用同一个前缀,浪费会非常明显。

例如:

  • 工程部门需要 50 台主机
  • 市场部门需要 20 台
  • 管理网段需要 10 台
  • 一条点对点链路只需要 2 台

如果都按统一 /26 分,点对点链路会浪费大量地址;如果都按 /30 分,工程部门又不够用。

VLSM 的原则就是:谁需要多大,就给多大。

一个实际的 VLSM 划分例子

10.0.0.0/24 按四类需求划分:

需求主机数 分配子网 可用范围 可用主机数
Engineering 50 10.0.0.0/26 10.0.0.110.0.0.62 62
Marketing 20 10.0.0.64/27 10.0.0.6510.0.0.94 30
Management 10 10.0.0.96/28 10.0.0.9710.0.0.110 14
WAN link 2 10.0.0.112/30 10.0.0.11310.0.0.114 2

验证工程网段:

ipcalc 10.0.0.0/26

输出:

Address:   10.0.0.0             00001010.00000000.00000000.00 000000
Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111
=>
Network:   10.0.0.0/26          00001010.00000000.00000000.00 000000
HostMin:   10.0.0.1             00001010.00000000.00000000.00 000001
HostMax:   10.0.0.62            00001010.00000000.00000000.00 111110
Broadcast: 10.0.0.63            00001010.00000000.00000000.00 111111
Hosts/Net: 62                    Class A, Private Internet

这四段分完后,10.0.0.11610.0.0.255 仍然空闲,可留作后续扩容。

VLSM 和 supernet 是相反方向的操作

  • supernet:把连续小网段向上聚合成大前缀,用于路由汇总
  • VLSM:把一个大网段向下拆成不同大小的小前缀,用于精细分配

两者都依赖 CIDR。

IPv6 里 CIDR 还是同一套思路吗

是。IPv6 沿用相同的斜杠前缀表示法,只是地址空间从 32 位扩展到了 128 位。

IPv6 地址结构和写法

IPv6 地址长度为 128 bit,写成 8 组 4 位十六进制数,用冒号分隔,例如:

1203:8fe0:fe80:b897:8990:8a7c:99bf:323d

十六进制使用 0-9a-f 表示数值 0-15

IPv6 的地址空间大约是 3.4 × 10^38,约为 IPv4 的 7.9 × 10^28 倍以上。IPv4 地址耗尽后,IPv6 才成为长期方案。

IPv6 如何压缩表示

两条规则:

  1. 每组前导零可以省略
    例如:

    ...:00bc:...
    

    可以写成:

    ...:bc:...
    
  2. 一段连续全为 0 的组可以用 :: 替代一次
    例如:

    ...:18bc:0000:0000:0000:00ff:...
    

    可以写成:

    ...:18bc::ff:...
    

:: 在一个地址中只能使用一次,否则无法唯一还原完整地址。

IPv6 中 CIDR 怎么看

IPv6 仍然用前缀长度标识网络部分,例如:

  • 2001:db8::/32:文档示例前缀,RFC 3849 定义,不在公网路由
  • 2001:db8:1::/48:典型站点级分配
  • 2001:db8:1:1::/64:标准单子网前缀

IPv6 中单个子网的标准前缀通常是 /64。这样保留后 64 位给主机地址,单子网可容纳 2^64 个地址。

SLAAC 和很多 DHCPv6 部署都要求 /64,所以在局域网里通常不会像 IPv4 那样为了节省地址继续往下细分。

/48 如何划出多个 /64

如果站点获得:

2001:db8:1::/48

前 48 位固定,接下来第 49 到 64 位可用于子网编号,一共 16 位,所以可划出:

2^16 = 65,536

/64 子网。

例如:

2001:db8:1:0000::/64   first subnet
2001:db8:1:0001::/64   second subnet
2001:db8:1:0002::/64   third subnet
...
2001:db8:1:ffff::/64   last subnet (65,536th)

第四组 hextet,也就是 0000ffff,就是子网 ID。

IPv4 和 IPv6 子网划分的关键差异

维度 IPv4 IPv6
地址长度 32 bit 128 bit
表示法 点分十进制 冒号分隔十六进制
常见单子网前缀 /24 常见 /64 为标准
地址空间 约 43 亿 3.4 × 10^38
私有范围 RFC 1918 三段 ULA fc00::/7,RFC 4193
广播 无,用组播替代
CIDR 支持 同样支持

IPv6 的 ULA(Unique Local Address)范围是 fc00::/7,作用上相当于 IPv4 的私有地址,用于站点或组织内部通信,不做全球路由。

这些概念在实际网络里怎么落地

理论到这里已经完整,下面看三个最常见的落地场景:云 VPC、办公室网络、路由汇总。

云 VPC 规划时,CIDR 应该怎么选

云上的 VPC 本质上就是一个由 CIDR 块定义的私有网络。

例如创建一个 VPC:

doctl vpcs create --name prod-vpc --region nyc1 --ip-range 10.10.0.0/16

VPC 内的主机都会从 10.10.0.0/16 中获得私有地址。

逻辑分层和实际云对象不一定一一对应

一种常见做法是把范围作为逻辑约定:

约定范围 执行方式
Web 10.10.1.0/24 给实例打 web 标签
Data 10.10.2.0/24 给实例打 data 标签
Monitoring 10.10.3.0/24 给实例打 monitor 标签

随后用防火墙按 CIDR 范围限制流量。

例如,只允许 Web 层访问 Data 层 PostgreSQL 端口:

doctl compute firewall create \
  --name data-tier \
  --inbound-rules "protocol:tcp,ports:5432,address:10.10.1.0/24" \
  --tag-names data

这条规则允许来自 10.10.1.0/245432/tcp 访问,其他来源默认被拒绝。实际参数格式应以本地 doctl compute firewall create --help 为准,不同版本可能有差异。

VPC 规划里最容易出事故的是地址重叠

如果两个将来需要互通的网络用了重叠 CIDR,就很难做对等连接或 VPN 互联。

例如:

  • VPC A:10.10.0.0/16
  • VPC B:10.10.0.0/16

这时一台主机无法无歧义判断某个 10.10.x.x 目标到底在哪个网络里,路由自然也无法正确建立。

因此,凡是将来可能互联的网络,都应该预先分配互不重叠的私有地址空间,例如:

  • 一个用 10.10.0.0/16
  • 另一个用 10.20.0.0/16

这是比“当前够不够用”更重要的规划原则。

家庭和办公室网络需要怎么切分

大多数家用路由器默认使用:

  • 192.168.1.0/24
  • 192.168.0.0/24

这通常提供 254 个可用地址,对家庭场景足够了。

小型办公室如果想把员工终端、访客 Wi-Fi 和 IoT 设备分开,可以从一个 /24 中切三个 /26

  • Staff:192.168.1.0/26,62 个可用主机
  • Guest Wi-Fi:192.168.1.64/26,62 个可用主机
  • IoT:192.168.1.128/26,62 个可用主机

剩下的:

  • 192.168.1.192/26

可以留给未来扩展或管理网络。

这类规划的重点不是“家里是否真的有 62 台设备”,而是通过子网边界把安全策略写清楚。

路由器为什么依赖 CIDR 做路由聚合

如果一个运营商拥有 256 个连续的 /24,逐条公告会带来 256 条路由。若这些网段连续,可以聚合成一个更大的前缀,显著减少路由表规模。

例如前面提到的:

192.168.0.0/23

可以覆盖:

  • 192.168.0.0/24
  • 192.168.1.0/24

这种做法叫 route summarization。互联网级路由协议 BGP 正是依赖 CIDR 和最长前缀匹配来决定目的流量走向。没有 CIDR,全球路由表规模会更难控制。

几个最常见的问题,直接给答案

子网掩码和 CIDR 前缀有什么区别

没有本质区别,表达的是同一件事,只是写法不同。

  • 255.255.255.0
  • /24

都表示前 24 位是网络位。

/24 有多少可用主机

总共 256 个地址,可用 254 个。
首地址是网络地址,末地址是广播地址,不能分配。

公网 IP 和私网 IP 最根本的区别是什么

公网可在互联网全局路由。私网仅用于内部网络,不会被公网路由器转发。私网主机要访问公网,通常必须经过 NAT。

CIDR 为什么会出现

为了解决两件事:

  • 分类地址空间分配粗糙,导致严重浪费
  • 路由表增长过快

CIDR 允许任意前缀长度分配,并支持路由聚合。

VLSM 和 CIDR 是什么关系

VLSM 是设计实践,CIDR 是能力基础。
没有 CIDR 去掉类别边界,VLSM 就无从实现。

IPv6 也有 CIDR 吗

有,而且写法完全一致。
例如 2001:db8::/322001:db8:1:1::/64

网络地址和广播地址有什么区别

  • 网络地址:主机位全 0,表示子网本身
  • 广播地址:主机位全 1,表示该子网内所有主机

两者都不能分配给普通主机。注意,这只针对具体子网的首尾地址,不是简单看最后一段是否等于 0255

怎么判断一个 IP 属于哪个子网

把 IP 地址和子网掩码做按位与,结果就是所属子网的网络地址。

例如:

  • IP:192.168.10.75
  • 掩码:255.255.255.0

结果是:

  • 网络地址:192.168.10.0

所以该地址属于 192.168.10.0/24

最后该记住什么

这套知识真正重要的部分只有四条:

  1. IP 地址本质是 bit 序列,子网划分是在 bit 层面完成的
  2. 子网掩码和 CIDR 只是同一件事的两种表示法
  3. IPv4 里大多数网段都有网络地址和广播地址两个保留地址
  4. 网络规划时,地址不重叠和前缀选型,往往比“是否刚好够用”更重要

只要能熟练回答下面几个问题,网络配置就很难再出低级错误:

  • 这个地址块的网络边界在哪里
  • 可用地址范围是什么
  • 需要多少主机时应该选哪个前缀
  • 两个网络未来是否会互通,是否存在 CIDR 重叠
  • 当前规则是在对单主机授权,还是在对子网授权

把这些问题想清楚,CIDR 就不是记号,而是日常运维和网络设计里最基本的工作语言。

关于

关注我获取更多资讯

月球基地博客公众号二维码,扫码关注获取更多 AI 与编程资讯
📢 公众号
月球基地博客作者个人微信二维码,扫码交流 AI 与编程话题
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计