9.IPv4 地址、子网掩码与 CIDR - Katyusha's blog
mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
2280 字
6 分钟
9.IPv4 地址、子网掩码与 CIDR
2026-09-27

IPv4 地址、子网掩码与 CIDR#

目标:理解一个 IPv4 地址如何同时支持“找最终目的地”“判断是否本地直达”与“路由器选路”。

课程主线:AIGC 讲义 R055(1-9 IPv4 addresses,P13—P16);官方交叉核对:R007 第 3—4 页、R028 chunk 1—2。

1. IPv4 地址是什么#

网络中的数据报需要携带目的 IPv4 地址。它表示数据最终要交给哪个网络层端点;它不是当前这一跳要发给的以太网网卡。路由器读取目的 IP 后选择下一跳;每经过一跳,以太网帧和 MAC 地址可以更换,但 IP 目的地址通常保持不变。

IPv4 地址固定为 32 bit,常按四个 8 bit 八位组写成点分十进制:

192.168.0.106
└─192─┘.└168┘.└─0─┘.└106┘ 每段均为 0--255

点分十进制只是 32 位整数的文本表示,不代表四段天然具有不同语义。哪些位是“网络”、哪些位是“主机”,由前缀(掩码)决定。

IP 地址让不同端点共享同一条通信链路;MAC 地址则回答“在当前链路上,把帧交给哪张网卡”。不要把二者混为一谈。[R028, chunk 1]

2. 网络号、主机号与前缀#

以 192.168.0.106/24 为例:

地址: 192.168.0.106
二进制:11000000.10101000.00000000.01101010
前缀: /24
└──── 网络前缀 ────┘└─ 主机部分 ─┘
网络: 192.168.0.0/24
  • 网络号/网络前缀:这台接口属于哪个 IP 子网;用于判断本地直达和匹配路由。
  • 主机号/主机部分:该接口在这个子网内的剩余编号空间。
  • /24:最高 24 位是前缀,低 8 位是主机部分;这一个块共有 2^(32-24) = 256 个数值地址。

“网络号相同”必须连同前缀长度一起说。192.168.0.1/24 与 192.168.0.200/24 同属 192.168.0.0/24;但若配置为 /25,它们分别落在 192.168.0.0/25 与 192.168.0.128/25,不再是同一子网。

IP 子网是三层的逻辑范围,通常对应一个二层广播域(一个 Ethernet/VLAN/Wi-Fi 链路),但不等价于“一根网线”或“一台交换机”。同一子网也不保证一定可达:ARP、链路状态、VLAN 和防火墙仍可能失败。

3. 子网掩码:前缀的点分十进制写法#

子网掩码由高位连续的 1 和低位连续的 0 组成:1 保留网络前缀,0 留给主机部分。

前缀长度子网掩码块中地址数
/24255.255.255.0256
/22255.255.252.01024
/27255.255.255.22432
/16255.255.0.065536

所以,CIDR 前缀与常规子网掩码不是两件不同的机制,而是同一边界的两种写法:

255.255.255.0
= 11111111.11111111.11111111.00000000
= /24

合法 CIDR 掩码必须是“连续的 1 后接连续的 0”。例如 255.0.255.0 虽可参与按位与,却不能写成一个 CIDR /p,不应作为现代常规配置使用。

同一子网怎么判断#

设本机地址为 s、目的地址为 d、掩码为 m:

(s & m) == (d & m) → 同一前缀,尝试在本地链路直接交付
(s & m) != (d & m) → 不同前缀,通常先交给默认网关

这里的 & 是逐位 AND。它不会“检查网络是否真的通”,只决定主机应把下一跳 IP 选为目的主机还是网关。随后系统还要通过 ARP 把下一跳 IP 解析为 MAC 地址。

非整字节前缀最容易出错。例如 /27 = 255.255.255.224,最后一段的步长是 2^(32-27)=32,所以块边界是 .0、.32、.64、.96……;不能只看前三段是否相同。

4. CIDR 为什么取代 A/B/C 类地址#

早期的 classful addressing 把前缀长度锁死为三档:

类别开头标记默认前缀主机位每块理论地址数
A0/8242^24,约 1677 万
B10/16162^16,65536
C110/2482^8,256

这会造成粒度浪费:需要约 500 个地址时,C 类不够而 B 类又大得离谱。

**CIDR(Classless Inter-Domain Routing,无类别域间路由)**允许任意 /p,例如 /20、/22、/27,地址块大小统一为:

N = 2^(32 - p)

前缀越短,固定的高位越少,块越大;/8 比 /10 大 4 倍。如今看到 /24,它表达的是 CIDR 前缀,不是“当前按 C 类地址规则运行”。

CIDR 还允许路由聚合:若一个 /16 被连续切成 256 个 /24,且拓扑允许,对外可只通告一个 /16,减少全球路由表状态。

5. 主机第一跳与路由器转发#

主机的简化决策是:

目的在直连前缀内 → next hop = 目的 IP → ARP 后发给目的 MAC
目的不在直连前缀内 → next hop = 默认网关 IP → ARP 后发给网关 MAC

真实主机可能同时有 Wi-Fi、以太网、VPN、容器网桥和回环接口。此时不要只拿任意一张网卡的掩码下结论,应查询完整路由表。

路由器则对目的地址做最长前缀匹配:所有匹配路由中,选择前缀长度最大的(即范围最具体的)一条。

路由表:0.0.0.0/0 默认路由
10.0.0.0/8
10.1.0.0/16
目的: 10.1.2.3 → 选 /16
目的: 10.2.3.4 → 选 /8
目的: 8.8.8.8 → 选 /0

/0 的掩码全为 0,因此匹配所有地址;它只是最不具体的兜底规则。官方 Checkpoint 6 明确规定:比较目的地址与路由前缀的最高若干位,并在匹配项中选择最大前缀长度;若无匹配则丢弃数据报。[R007, pp. 3—4]

6. 用 ifconfig 读出接口配置#

ifconfig 的每一段描述一张网络接口(物理网卡或虚拟网卡)。典型输出:

eth0: flags=... mtu 1500
inet 192.168.1.10 netmask 255.255.255.0
inet6 fe80::... prefixlen 64
ether aa:bb:cc:dd:ee:ff
RX packets ... TX packets ...
  • eth0:接口名;在 WSL、VPN 或容器中往往是虚拟接口,不必对应物理网卡。
  • inet:该接口的 IPv4 地址;netmask:其前缀的点分写法;broadcast:本子网的 IPv4 广播地址。
  • inet6 / prefixlen:IPv6 地址及其前缀长度;fe80::/10 是链路本地地址,只能在本链路使用。
  • ether:MAC 地址,用于当前以太网链路上的下一跳交付。
  • mtu 1500:通常单个以太网帧可承载的最大 IP 载荷;更大的数据需由协议栈拆分或处理分片。
  • UP:接口已启用;RUNNING:链路可用;RX/TX:收发包及字节计数;errors/dropped:接口级错误或丢包。
  • lo 和 127.0.0.1:回环接口,数据只在当前主机协议栈内绕回,不会发到网线或 Wi-Fi。

ifconfig 展示的是“接口拥有的地址与统计”,不是完整选路结果。要确认某个目的地址会走哪个出口,应查看路由表,例如 Linux 上的 ip route get <目的IP>。

7. IANA 与 ICANN:谁在管理地址空间#

IPv4 地址不是由每台主机直接向全球机构领取,而是分级委派:

IANA(顶层号码登记职能)
→ RIR(区域互联网注册管理机构,如 APNIC、ARIN)
→ 运营商、云厂商或大型组织
→ 企业/家庭网络与终端
  • IANA(Internet Assigned Numbers Authority)维护域名、IP 地址/ASN、协议参数等全球唯一标识符的权威登记表。
  • ICANN(Internet Corporation for Assigned Names and Numbers)负责协调这些全球唯一标识符体系的组织与治理框架。
  • 当前 IANA 职能由 ICANN 的专门关联机构 PTI 提供;IANA 并不直接把某个 IP 发到你的电脑上。

讲义中“顶层 /8 被分完”描述的是 IANA 可自由委派的大块空间耗尽,不等于所有 IPv4 数值都在使用,更不等于任何组织都不能通过库存、转让或区域政策获得地址。部署或申请时必须查询当前 IANA/RIR 官方数据,而非把课程中的历史数字当作实时状态。

8. 容易混淆的结论#

  1. 子网掩码与 CIDR 前缀在常规配置中等价,但前者写成 255.255.255.0,后者写成 /24。
  2. 同一子网表示“应尝试本地直发”,不保证 ARP、二层连通性或远端服务一定成功。
  3. 同一 IP 子网通常映射到一个二层广播域,但不严格等于“同一个以太网”或“同一台交换机”。
  4. 块中地址数是 2^(32-p);“可用主机数 = 块大小 - 2”不是适用于 /31、/32 和所有部署场景的普适公式。
  5. 路由器按“匹配前缀中最长者”选路,不按数值距离选路。
  6. IP 目的地址是最终目标;MAC 地址是本链路的下一跳目标。

9. 自测#

  1. 10.0.1.7/24 与 10.0.2.8/24 是否同网?
    • 否,分别属于 10.0.1.0/24 与 10.0.2.0/24。
  2. 192.168.1.130/26 的规范网络地址是什么?
    • /26 的块大小为 64,130 在 128—191 内,因此是 192.168.1.128/26。
  3. 为什么不能只比较 IP 的前三段判断同网?
    • /22、/27 等前缀可落在一个八位组内部,必须按掩码比较实际保留的位。

来源与核对#

  • R055:AIGC 讲义 1-9 IPv4 addresses,约 00:00—08<05>。本文的 IPv4 位宽、掩码、classful 地址、CIDR 和分级地址管理主线均来自该讲。
  • R007:官方 Checkpoint 6: building an IP router,第 3—4 页。核对路由前缀的含义与最长前缀匹配的转发规则。
  • R028:官方 Datagrams, encapsulation, and multiplexing,chunk 1—2。核对 IP 目的地址作为最终目的地而非下一跳的语义。
  • IANA About 与 ICANN for Beginners:补充 IANA/ICANN 的现行职责关系(访问日期:2026-09-04)。
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

9.IPv4 地址、子网掩码与 CIDR
https://katyusha-blog.com/posts/cs144/notes/9ipv4-addresses/
作者
katyusha
发布于
2026-09-27
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录