两个看起来很近的地址,为什么还要经过网关?
上一章讲到,发送以太网帧之前,主机要先决定下一跳,再通过 ARP 获取所需 MAC。下一跳怎样选,却不能只看 IP 地址的外观。
设想 A 的地址是 192.0.2.70/26,B 是 192.0.2.130/26。两者前三段相同,但在这个配置中属于不同子网。若把前缀都改成 /24,主机又会认为它们属于同一个子网。
同一个 IP,配上不同掩码,会得到不同的网络范围。 掩码不是地址后面可有可无的备注,它参与主机与路由器的路径判断。不过,修改掩码只改变配置,不能自动把原本隔离的链路连接起来。
IPv4 的 32 位,哪些用于表示网络?
IPv4 地址有 32 位,通常写成四个十进制数,每段对应 8 位。地址 192.0.2.70 可以写成四段二进制:
11000000 . 00000000 . 00000010 . 01000110CIDR(Classless Inter-Domain Routing,无类别域间路由)采用显式前缀长度,例如 /26 表示前 26 位属于网络前缀。相应掩码的前 26 位为 1,后 6 位为 0,即 255.255.255.192。RFC 4632 §3.1定义了这种前缀记法。
IP 地址与掩码按位与,可以提取网络前缀。前三个字节保持不变,最后一个字节的计算是:
地址的最后 8 位:01000110 (70)
掩码的最后 8 位:11000000 (192)
按位与的结果: 01000000 (64)所以 192.0.2.70/26 所在子网的网络地址是 192.0.2.64。主机地址写 /26 是接口配置,192.0.2.64/26 则是规范化的网络前缀;不要把这两个用途混在一起。
早期的 A、B、C 类单播地址分别采用 /8、/16、/24 的默认网络划分;CIDR 使用显式前缀,不再仅由地址第一段推断掩码。面试中可以解释分类地址的历史,但实际算题应以题目给出的前缀为准。
算出范围,才能判断两个地址是否在同一个子网
/26 留下 6 位主机部分,共有 2^6 = 64 个地址组合。对于常见的 IPv4 多访问子网,主机部分全 0 表示网络地址,全 1 表示子网广播地址;本例的范围如下:
| 项目 | 192.0.2.64/26 的结果 |
|---|---|
| 网络地址 | 192.0.2.64 |
| 子网广播地址 | 192.0.2.127 |
| 通常可分配的主机地址 | 192.0.2.65—192.0.2.126 |
| 地址总数 | 64 |
| 通常可分配的主机地址数 | 62 |
对 B 的最后一段 130 做同样运算:10000010 AND 11000000 = 10000000,得到网络地址 192.0.2.128。它属于 192.0.2.128/26,因此和 A 所在的 /26 子网不同。
若两台设备都使用 /24,掩码是 255.255.255.0,网络地址都变成 192.0.2.0。这个算例说明判断依赖掩码,也说明双方配置应当一致:若 A 用 /24、B 用 /26,双方可能对“是否直接发送”作出不同判断,通信就会出现难解释的单向现象。
还要区分“配置上属于同一个 IP 子网”和“确实处于可达的链路范围”。两台设备即使算出了相同网络前缀,若被放在不同 VLAN 且缺少相应转发安排,ARP 请求也未必到得了对方。
动手改变两端的掩码
两个 IP 保持不变,只改变双方前缀。观察按位与的结果和地址组,解释为什么 /24 可以直接交付,而 /26 在本例中需要网关。
固定 A = 192.0.2.70、B = 192.0.2.130,两端使用相同前缀。先猜 /24 与 /26 的结果。
掩码 255.255.255.192 · 每组 64 个地址
每个格子是一组子网,按地址顺序排列;A、B 标记所在组,不表示物理位置。
网络:192.0.2.64/26
广播:192.0.2.127
通常主机:.65—.126
网络:192.0.2.128/26
广播:192.0.2.191
通常主机:.129—.190
A 的直连路由不覆盖 B。在只有直连与可用默认路由的本例中,A 选择网关,再解析网关的 MAC;IP 目的地址仍是 B。
教学设定:普通多访问子网,两端前缀一致,无更具体路由或策略;默认网关在各自子网内可达。这里只演示配置判断,修改掩码不会自动连通 VLAN 或修复回程;/31、/32 的特殊语义不在此实验范围内。
“可用地址数减 2”为什么有例外?
面试常见公式是 2^(32 − 前缀长度) − 2。它适用于这里讨论的普通 IPv4 子网,但不能对所有前缀照搬。
在点到点链路上,/31 可以将两个地址都用作端点地址,省去传统网络地址和广播地址占用;RFC 3021 §2.1规定了这一用法。它不是让普通以太网里的任意设备都无条件采用 /31。
/32 表示一个精确地址,常用于主机路由等场景,也不能按上面的公式算出“负一个可用地址”。看到特殊前缀时,先明确它描述的是普通接入子网、点到点链路,还是路由匹配项。
把一个 /24 分成四个 /26,会发生什么?
假设要把 192.0.2.0/24 分成四个等大的普通子网。将前缀从 24 位增加到 26 位,相当于再取 2 位区分子网,得到 2^2 = 4 组;每组剩 6 位主机空间。
| 子网 | 总地址范围 | 通常可分配的主机范围 |
|---|---|---|
192.0.2.0/26 | .0—.63 | .1—.62 |
192.0.2.64/26 | .64—.127 | .65—.126 |
192.0.2.128/26 | .128—.191 | .129—.190 |
192.0.2.192/26 | .192—.255 | .193—.254 |
表内省略部分均为 192.0.2。子网必须按前缀边界对齐,不能把 192.0.2.80 当作一个新的 /26 网络起点。若这四个子网每个都按普通规则保留两个地址,合计通常可分配 248 个主机地址;不是仍然拥有原 /24 的 254 个。
地址规划与链路划分还需要一起完成。纸上划出了四组地址,并不等于交换机已经划好了四个 VLAN,更不等于四组之间已经有路由。
路由表怎样把“目的地址”变成“下一跳”?
主机或路由器需要决定往哪个出口发送数据,路由项常包含目的前缀、下一跳和出站接口。直连路由表示目的地址可通过相应链路交付;经网关的路由则把下一跳指向另一个路由设备。
下面是一张教学转发表。假设本机为 192.0.2.10/24,所有网关都在本地可达,表中路由有效;暂不考虑策略路由、等价多路径和选路策略:
| 目的前缀 | 下一跳 | 出站接口 |
|---|---|---|
192.0.2.0/24 | 直接交付 | eth0 |
198.51.100.0/24 | 192.0.2.2 | eth0 |
198.51.100.128/25 | 192.0.2.3 | eth0 |
198.51.100.200/32 | 192.0.2.4 | eth0 |
0.0.0.0/0 | 192.0.2.1 | eth0 |
目的为 198.51.100.200 时,/24、/25、/32 和 /0 都能匹配。基本 IP 转发采用最长前缀匹配,选中 /32,因此交给 192.0.2.4。最长的不是字符串长度,也不是“网关看起来最近”,而是匹配目的地址的网络前缀位数。RFC 1812 §5.2.4.3讨论了路由匹配的这一原则。
换几个目的地址,结果便清楚了:
| 目的地址 | 最具体的匹配 | 本例下一跳 |
|---|---|---|
198.51.100.50 | 198.51.100.0/24 | 192.0.2.2 |
198.51.100.180 | 198.51.100.128/25 | 192.0.2.3 |
198.51.100.200 | 198.51.100.200/32 | 192.0.2.4 |
203.0.113.8 | 0.0.0.0/0 | 192.0.2.1 |
192.0.2.20 | 192.0.2.0/24 | 直接交付 |
默认路由 /0 的前缀长度为 0,任何目的地址都能匹配,但有更具体的有效匹配时,它不会因为叫“默认”就优先胜出。没有匹配路由且没有默认路由时,不能继续凭猜测转发;主机或路由器会报告或处理不可达情况,具体错误反馈还取决于环境。
同长度的候选路由怎样取舍,以及哪些路由被安装进转发表,是另外一层选路问题。管理距离、度量值等不能简单当成“不同长度前缀之间先比指标,再比长度”的规则。
把路由选择接回上一章的 ARP
仍以 198.51.100.200 为目的地。本机选中下一跳 192.0.2.4 后,需要查这个下一跳的邻居映射,必要时发起 ARP,再构造以太网帧:
IPv4 目的地址:198.51.100.200
以太网目的 MAC:192.0.2.4 在本地链路上的 MAC下一跳收到后再做自己的转发决定。普通路由器会处理网络层首部,例如减少 TTL,并为出站链路重新封装;不能把它理解为单纯复制原以太网帧。普通 IP 转发也无需先解析 HTTP 路径。
主机的本地/远端判断和网关选择可参照 RFC 1122 §3.3.1。实际系统可能还有更具体的主机路由、VPN 路由或策略,因此“掩码一算不同就必定走默认网关”也不完整:应先看有效路由选择的结果。
路由器知道下一跳,不代表整条路径必然成功。后续路由错误、过滤、链路断开或回程无路由,都可能让端到端通信失败。去程与回程也不要求经过同一组设备。
为什么要聚合前缀,什么时候不能随便聚合?
若连续、对齐的四个 /26 子网确实都能由同一方向到达,对外可以用 192.0.2.0/24 概括这片地址范围,而不必逐一发布四条前缀。这是路由聚合的基本用途:减少需要传播和维护的路由项。
但地址范围能合并,不代表转发条件一定允许合并。如果某个子网实际上不属于这个出口,粗略发布整个 /24 可能吸引本不应进入这里的流量。聚合之后仍可保留更具体路由;匹配到具体前缀时,转发依据仍是最长前缀规则。
CIDR 让地址分配与路由聚合更灵活,并没有给 IPv4 增加位数。32 位地址空间的规模不因 /26 或聚合写法改变。
看起来像网络故障,实际可能是配置不一致
| 症状 | 应检查的证据 | 常见误判 |
|---|---|---|
| ARP 一直寻找本不在本地的目标 | 本机掩码、直连路由与实际 VLAN | 只怀疑交换机坏了 |
| 默认网关正确,某个地址却绕路 | 是否存在更具体的路由、VPN 或策略 | 认为默认路由支配所有流量 |
| 去程能到,响应回不来 | 对端的掩码、网关与回程路由 | 只检查发送端 |
| 分配了地址却无法正常通信 | 地址是否落在当前子网主机范围、是否冲突 | 认为 .0 与 .255 在任何前缀下都不可用 |
最后一条要结合前缀判断。广播地址由主机位全 1 得到,并非永远是最后一段 255;比如 192.0.2.64/26 的广播是 .127。同样,某个以 .0 结尾的地址,在不同的更大前缀里可能属于主机地址,不能只看末尾数字。
面试口述与追问
30—60 秒参考回答
IPv4 地址有 32 位,CIDR 前缀长度说明多少位用于网络前缀,掩码与地址按位与可以提取网络地址。判断同网段时要结合掩码,但配置相同不保证链路真正可达。普通子网可用地址常减去网络与广播地址,点到点 /31 和主机路由 /32 要另看用途。发送数据时先查有效路由,用最长前缀匹配确定出口与下一跳;默认 /0 只是最宽泛的匹配。再按出站链路解析下一跳 MAC。路由只负责逐跳决定,端到端成功还需要正确的回程和实际可达条件。
四个追问及解析
192.0.2.70/26的网络与广播地址是什么? 网络为192.0.2.64,广播为192.0.2.127,普通主机范围为.65—.126。- 默认路由与
/32都匹配时选哪个? 在本章的基本转发表模型中选有效的/32,它匹配更具体;默认路由并不具有天然最高优先级。 - 两个 IP 前三段相同,就一定同网段吗? 不一定。
/26、/24会得到不同范围,还要核对双方配置和实际链路。 - 路由器每转发一跳,就把目的 IP 改成下一跳 IP 吗? 普通转发不会这样改目的地址;下一跳用于选择交付对象。NAT 等特殊处理要另行讨论。
两个易错说法
- “所有子网可用主机数都等于总数减 2。”普通子网公式不能直接套到点到点
/31和/32。 - “知道对端与本机掩码,就能保证双方通信。”这只提供配置判断,还需要链路、路由、策略及回程证据。
现在可以把 IP 与链路层的动作连起来:路由选下一跳,ARP 准备本跳交付,交换机转发帧。但地址、掩码和默认网关又是谁交给电脑的?家中多台设备还如何共同使用一个公网出口?
资料与核验日期
核验于 2026-10-08。地址、接口名与路由表均为教学设定,不是实测网络配置;本文围绕 IPv4 的基本寻址与转发,特殊策略明确区分。
- RFC 4632:CIDR,§3.1、§4、§5:前缀记法、地址分配与聚合、转发相关原则。
- RFC 1812:Requirements for IP Version 4 Routers,§5.2.4:IPv4 路由选择与转发。
- RFC 3021:Using 31-Bit Prefixes on IPv4 Point-to-Point Links,§2.1:点到点
/31的地址语义。 - RFC 1122:Requirements for Internet Hosts,§3.3.1:主机的本地/远端与网关选择。