Appearance
IP 编址(分类/子网/CIDR)
2026 大纲 四(三)2 IPv4 地址与 NAT 的地址部分,以及 四(三)3 子网划分、路由聚集、子网掩码与 CIDR(整条)。NAT 写在《NAT》。
一、地址为什么要分成两截
IP 地址是给接口的,32 位、全网唯一,结构是 {网络号,主机号} 两级。
为什么不干脆用一个 32 位的流水号? 因为转发表会爆掉。如果拿完整的目的地址去查表,表里就得为每一台主机存一行——而互联网上的网络数比主机数小三四个数量级。分成两截以后,路由器只需要按"目的网络"查表,找到目的网络之后再在那个网络上直接交付给目的主机。分层的第一动机是压缩转发表,不是别的。
这个定义还带出一个初看奇怪的推论:不连网的主机没有 IP 地址。因为 IP 地址里包含网络号,而它压根不在任何网络上。
主机号全 0 与全 1:因果方向常被记反
很多人记的是"这两个地址被占了,所以不能分给主机"。因果方向是反的。 IP 层必须有办法写出"这个网络本身"和"这个网络上的所有主机"——全 0 的主机号表示该 IP 地址是"本主机所连接到的单个网络地址",全 1 表示"所有的",于是这两个值被征用了。是先有需求,才占用的地址。
由此得出可用主机数
点对点链路为什么分 /30,这条公式直接就能算:/31 主机位只有 1 位,
特殊地址:真正的分界是"能做源还是做目的"
特殊地址那张表很容易背串,但它其实只有一条主线——这个地址能出现在源地址栏,还是目的地址栏。
广播地址与多播地址只能做目的:发送者不可能是"所有主机"。全 0 网络号只能做源:"本网络"是个相对说法,别人拿它当目的地址无从投递。127 开头的环回地址两者皆可——它压根不出主机,ping 127.0.0.1 通了只说明本机协议栈正常,与网卡、网线、网络都无关。
广播还要再分两种,这两种的差别在路由器转不转:255.255.255.255(整个地址全 1)是受限广播,任何路由器都不转发;主机号全 1(如 192.168.1.255)是直接广播,路由器可以把它转发到目的网络、再在那个网络上广播。
交互可视化
二、分类编址与它垮掉的原因
| 类别 | 首位 | 第一字节 | 网络号/主机号位数 | 可指派网络数 | 每网最大主机数 |
|---|---|---|---|---|---|
| A | 0 | 1~126 | 8 / 24 | ||
| B | 10 | 128~191 | 16 / 16 | ||
| C | 110 | 192~223 | 24 / 8 | ||
| D | 1110 | 224~239 | — | 多播(见 IP 多播) | — |
| E | 1111 | 240~255 | — | 保留 | — |
A 类为什么减 2 而 B、C 类不减。 A 类网络号 8 位但首位固定为 0,只剩 7 位;减掉的是网络号全 0(表示"本网络")与 127(本地软件环回测试)。B、C 类没有这两处占用——早期资料说的 128.0.0.0 与 192.0.0.0 不指派,现在已可指派。
它垮在颗粒度上。 B 类一给就是 65534 个地址,实际可能只用几百个,其余全被锁死;C 类只有 254 个,一个需要 300 台主机的单位就够不上,只能去申请 B 类,又浪费六万多。只有 3 档、档间差 256 倍,绝大多数单位的真实需求都卡在两档之间。
后面两节讲的两件事,正是从两个方向解决同一个问题:子网划分从内部切细,CIDR 干脆取消档位。
三、子网划分:从主机号里借位
在网络号不变的前提下,从主机号的高位借若干位当子网号,两级地址 {网络号,主机号} 就变成三级 {网络号,子网号,主机号}。
以 192.168.1.0/24 借 3 位为例:可划
对账一遍就知道地址是怎么少掉的:地址总数一个没多一个没少(
这条要写成一般式记牢:划成
子网掩码是一串连续的 1 后接一串连续的 0,1 的个数等于网络前缀长度(网络号 + 子网号),唯一用途是 网络地址 = IP 地址 & 子网掩码。借 3 位时掩码末字节为 11100000 = 224,即 /27。
掩码是切割工具,不是地址。 同一个 192.168.1.100:配 /24 属于 192.168.1.0,配 /20 属于 192.168.0.0,配 /26 属于 192.168.1.64——地址一个字节没变,属于哪个网络完全由掩码说了算。这也解释了 CIDR 之后为什么掩码必须显式携带:分类编址时代它能从首字节推出来,CIDR 之后推不出来了。
掩码末字节可以现推:
按位与的手算也有个省事的办法:只处理"有变化的那个字节"——掩码为 255 的字节把 IP 原样抄下来,掩码为 0 的字节写 0,只有中间那个字节需要真的算一次。
最后一条边界:子网划分对外不可见。外部看到的仍然是那一个网络号,分组进了本单位才按子网号往下分。
四、CIDR 与路由聚合
CIDR 抛弃 A/B/C 类,用 IP 地址/前缀长度 表示一个地址块;
它带来两处改进:前缀长度连续可调,颗粒度从"档间差 256 倍"变成"逐位可调、档间差 2 倍";允许把多个连续块合并成一条路由通告。
两个方向别混:向下切细是子网划分(前缀变长),向上合并是路由聚合/构成超网(前缀变短)。
聚合怎么算:求各块网络地址的最长公共前缀。192.168.0.0、192.168.1.0、192.168.2.0、192.168.3.0 这 4 个 /24 前 22 位相同、第 23 位起才分岔 → 聚合为 192.168.0.0/22。
但"能算出公共前缀"不等于"可以聚合"。 真正的判据是一句话:聚出来的那个块里的地址,是不是全都归我。
要满足这个判据得有两个条件:① 这些块连续、中间无空洞;② 总大小是 2 的幂,且起点按这个大小对齐。任一条不满足,公共前缀就会被迫缩短,把不属于自己的地址也罩进来——别人家的流量被引到你这里,而你又交付不了。
反过来还有一条同样要紧:从转发表的一行 X/22,看不出它是由哪几个子块聚成的。所以"某个地址能匹配上这条聚合路由"并不等于"这个地址真的属于通告者"。
五、最长前缀匹配与分组转发
一个目的地址可能同时匹配多条路由,规则是选前缀最长的那一条。
理由可以推:X/24 是 X/22 的子集且更精确;一个地址块之所以会被更细的路由覆盖,只可能是因为那一小块被单独安排了去向。选最长的,就是选那条专为这一小块设置的路由。反过来若选最短,所有细粒度路由都成了摆设。
两条特殊路由:主机路由 a.b.c.d/32 只匹配唯一一个地址,最具体,排在转发表最前面;默认路由 0.0.0.0/0 掩码全 0,与任何目的地址相与都得全 0,因此永远匹配,排在最后。
把主机路由与默认路由单列成两步是教材的写法;它和"一次最长前缀匹配"是同一件事——/32 天然排最前、/0 天然排最后。不存在"先查普通路由、查不到再查一遍默认路由"的两趟流程。
直接交付还是间接交付
主机发分组前也要做一次判断,判据是:用目的 IP 与本机的掩码按位与,看结果是否等于本网络前缀。
相等就是直接交付——目的主机在本网络上,用 ARP 解析目的主机的 MAC,链路层直送。不相等就是间接交付——交给默认网关,用 ARP 解析默认网关的 MAC。
⚠️ 判据里只出现"目的 IP"和"本机掩码"两个量。 常见的错误做法是"源 IP 与目的 IP 各按掩码算一遍再比"——多算一步不影响结果,但一旦题目里两台主机配了不同的掩码,这种算法就会给出错误答案。真正决定行为的永远是发送方自己的掩码。
三套成套算例:VLSM 变长子网划分、判断能否聚合、最长前缀匹配查表(想把地址计算亲手过一遍时展开)
(一)VLSM 变长子网划分。 某单位分到 172.20.0.0/16,下设 4 个部门分别需要 1000、500、200、60 台主机。
第 1 步:把需求换算成主机位数与前缀。 地址块是 2 的幂,要找最小的、满足
| 部门 | 需求 | 主机位 | 可用数 | 前缀 | 块大小 |
|---|---|---|---|---|---|
| 甲 | 1000 | 10 | 1022 | /22 | 1024 |
| 乙 | 500 | 9 | 510 | /23 | 512 |
| 丙 | 200 | 8 | 254 | /24 | 256 |
| 丁 | 60 | 6 | 62 | /26 | 64 |
逐个验"最小":
第 2 步:按块从大到小依次分配。
| 部门 | 网段 | 掩码 | 地址范围 | 可用主机 | 起点对齐 |
|---|---|---|---|---|---|
| 甲 | 172.20.0.0/22 | 255.255.252.0 | 172.20.0.0 ~ 172.20.3.255 | 1022 | 偏移 0 是 1024 的倍数 ✓ |
| 乙 | 172.20.4.0/23 | 255.255.254.0 | 172.20.4.0 ~ 172.20.5.255 | 510 | 偏移 1024 是 512 的倍数 ✓ |
| 丙 | 172.20.6.0/24 | 255.255.255.0 | 172.20.6.0 ~ 172.20.6.255 | 254 | 偏移 1536 是 256 的倍数 ✓ |
| 丁 | 172.20.7.0/26 | 255.255.255.192 | 172.20.7.0 ~ 172.20.7.63 | 62 | 偏移 1792 是 64 的倍数 ✓ |
四块首尾相接、不重叠、不留缝,剩余空间从 172.20.7.64 起一直到 172.20.255.255。
第 3 步:反面验算——倒着分会怎样。 按 60 → 200 → 500 → 1000 的顺序(偏移仍相对 172.20.0.0):
| 顺序 | 部门 | 块大小 | 起点必须是几的倍数 | 上一块用到哪 | 实际起点 | 跳过(空洞) |
|---|---|---|---|---|---|---|
| 1 | 丁 /26 | 64 | 64 | — | 偏移 0 | 0 |
| 2 | 丙 /24 | 256 | 256 | 偏移 64 | 偏移 256 | 192 |
| 3 | 乙 /23 | 512 | 512 | 偏移 512 | 偏移 512 | 0 |
| 4 | 甲 /22 | 1024 | 1024 | 偏移 1024 | 偏移 1024 | 0 |
空洞只有一处:172.20.0.64 ~ 172.20.0.255 这 192 个地址被跳了过去。第 3、4 步没有再产生空洞,是因为前面几块加起来恰好凑到了下一块要求的对齐点(
(二)判断能否聚合。 某机构分到 203.0.113.64/26、203.0.113.128/26、203.0.113.192/26,而 203.0.113.0/26 属于另一家单位。
第 1 步:找最长公共前缀。 前 24 位相同,分歧在末字节高位:
64 = 01 000000
128 = 10 000000
192 = 11 000000
↑ 第 25 位就出现了 0 和 1 两种取值公共前缀只有 24 位。
第 2 步:检查强行聚合罩住了什么。 203.0.113.0/24 覆盖 256 个地址,而本机构实际只有 203.0.113.0/26。一旦按 /24 通告,全网发往 203.0.113.0~63 的分组也会被引到本机构来,别人的流量被劫走而本机构又交付不了。
第 3 步:退而求其次,分组聚合。 128 与 192 的公共前缀是 25 位 → 203.0.113.128/25,它覆盖 128~255 共 128 个地址,正好等于两块 /26 之和,一个多余的地址都没有 ✓;而 64 这一块与前两块凑不成 2 的幂对齐的整块,只能单独通告。
答:不能聚成一条;最少通告 2 条——203.0.113.64/26 与 203.0.113.128/25。
第 4 步:反思。 如果那 4 个 /26 都属于本机构,就能聚成 203.0.113.0/24 一条(256 个地址、起点 0 对齐、不多不少)。同一个前缀形式,是否合法完全取决于"块里的地址是不是全都归我"。
(三)最长前缀匹配查表。 转发表为 10.1.41.0/24 → C、10.1.40.0/22 → B、10.1.32.0/20 → A、0.0.0.0/0 → D。
第 1 步:先把覆盖区间算出来(比逐条做按位与省事):
| 路由 | 块大小 | 覆盖区间 |
|---|---|---|
| 10.1.41.0/24 | 256 | 10.1.41.0 ~ 10.1.41.255 |
| 10.1.40.0/22 | 1024 | 10.1.40.0 ~ 10.1.43.255 |
| 10.1.32.0/20 | 4096 | 10.1.32.0 ~ 10.1.47.255 |
| 0.0.0.0/0 | 全部 | 任意 |
第三字节的算法:/22 是 4 个 /24,起点 40 覆盖 40~43;/20 是 16 个 /24,起点 32 覆盖 32~47。
第 2 步:逐个判断落在哪些区间里,取最长。
10.1.41.77:/24 ✓、/22 ✓、/20 ✓、/0 ✓ → 取最长 /24,下一跳 C10.1.44.9:/24 ✗(44 ≠ 41)、/22 ✗(44 ∉ 40~43)、/20 ✓、/0 ✓ → /20,下一跳 A10.1.60.1:前三条全 ✗ → 走默认路由,下一跳 D
第 3 步:这张表说明了什么。 /20 是一张"大网兜底",/22 在里面挖了一块单独安排,/24 又在 /22 里再挖一块。每加一条更长的前缀,就是从上一层里抠出一小块另作安排,最长前缀匹配正是保证这些安排真的生效的机制。
本节小结
- 两级结构的第一动机是压缩转发表;主机号全 0、全 1 被征用是因为 IP 层必须能写出"网络本身"与"该网络的全部主机",故可用主机数
、点对点链路分 /30。特殊地址的真正分界是能做源地址还是目的地址。 - 颗粒度是一条主线:分类编址只有 3 档、档间差 256 倍 → 子网划分从内部切细,代价是可用地址减少
个 → CIDR 取消档位、前缀逐位可调,同时使掩码从"可推出"变成"必须显式携带"。 - 聚合与匹配是同一件事的两面:聚合的判据是"聚出来的块里有没有别人的地址",不是"能不能算出公共前缀";而最长前缀匹配正是让"从大块里抠出小块另作安排"生效的机制。VLSM 从大到小分配则是被"块起点必须按块大小对齐"逼出来的。
考点速记
这是网络层里真题最密的一篇,真题里被考过的形式可以归成六组,但六组共用一套动作:把掩码和地址写成二进制,看清哪几位是网络号。
A 组:定长划分,数子网数、数主机数。
cn-2010-37 给 192.168.5.0/24 和掩码 255.255.255.248,问最大子网个数和每个子网最大可分配地址数。248 = 11111000,即 /29,借了 5 位 →
cn-2017-38 反过来给子网个数:21.3.0.0/16 划成 128 个规模相同的子网,问每个子网可分配的最大 IP 地址数。
cn-2026-39 把"划分"和"定位"合成一问:123.4.4.0/22 划成 32 个均衡子网,问 123.4.5.11 落在哪个子网。
B 组:给 IP 和掩码,反推网络地址、广播地址、地址范围。这组只要老实做一次按位与就不会错。
cn-2022-35 问 183.80.72.48 配 255.255.192.0 的网络地址。只有第三字节需要算:
cn-2012-39 问 180.80.77.55 配 255.255.252.0 时的子网广播地址。
cn-2023-39 问 168.16.84.24/20 所在子网的最小与最大可分配地址。
cn-2011-38 换了个问法:子网 192.168.4.0/30 中,能接收目的地址为 192.168.4.3 的 IP 分组的最大主机数。/30 只有 4 个地址——.0 是网络地址、.1 和 .2 给主机、.3 是广播地址。广播帧本网络所有主机都收,而这里最多只有 2 台主机,答 C:2。选项 D 的 4 是把地址总数当成了主机数。
C 组:变长划分 VLSM。
cn-2019-37 问 101.200.16.0/20 划成 5 个子网时,可能的最小子网的可分配地址数。/20 共 4096 个地址,划 5 块且要让最小的那块尽量大,最优划法是 /21 + /22 + /23 + /24 + /24(
cn-2025-47 的第 (3) 问是同一套动作的综合题版本:10.10.10.0/24 划 3 个子网,已知管理区是 10.10.10.33/26(即 10.10.10.0/26),生活区 ≥ 120 个、作业区 ≥ 60 个。生活区需要 /25(128 个),作业区需要 /26。从大到小、按块对齐往下排:/25 只能起于 0 或 128,而 0~63 已被管理区占用 → 生活区 10.10.10.128/25;作业区 /26 落到剩下的 10.10.10.64/26。
cn-2021-35 是这组里最绕的一道:一个 IP 网络划成 3 个子网,其中一个是 192.168.9.128/26(覆盖 128~191),问哪个不可能是另外两个之一。答 B:192.168.9.0/26。判法是看剩下的空间能不能被另外两块正好填满:若另一块是 192.168.9.0/25(0~127),第三块取 192.168.9.192/26 即可凑齐,A 可行;若另一块是 192.168.9.192/26,第三块取 /25 也行,C 可行;但若另一块是 192.168.9.0/26(0~63),剩下的 64~127 和 192~255 是两段不相邻的区间,一块子网盖不住——凑不出只剩一块的划法,所以 B 不可能。
D 组:路由聚合。cn-2018-38 把 35.230.32.0/21、40.0/21、48.0/21、56.0/21 四条转发接口相同的路由聚合。第三字节写成二进制:
E 组:配置与排错——这组考的不是算术,是"配错了会怎样"。
cn-2022-36 从拓扑反推主机 H 的掩码与默认网关:R2 接交换机那一侧标着 192.168.1.62/27,H 是 192.168.1.60。/27 的掩码是 255.255.255.224,块大小 32,60 和 62 同落在 32~63 这一块 → H 的网关就是同块内的 192.168.1.62,答 D。干扰项 192.168.1.1 是 R1–R2 之间那条 /30 链路上的地址,根本不在 H 所在的子网里。
cn-2016-39 是全组最好的一道题,问"下列现象中可能发生的是"。H1(.2)、H2(.3) 网关配成 192.168.3.1,H3(.251)、H4(.252) 网关配成 192.168.3.254,掩码都是 /25。先分块:/25 把 192.168.3.0/24 切成 0~127 和 128~255 两块,H1、H2 在前一块,H3、H4 在后一块。逐项判:
- A(H1 与 H2 不能通信):同子网,直接 ARP 直送,不经过网关,网关配错不影响 → 不会发生
- B(H2 与 H4 都不能访问 Internet):H2 的网关 192.168.3.1 图中根本不存在,确实上不了网;但 H4 的网关 192.168.3.254 是 R2 的真实接口、且与 H4 同在 128~255 这一块 → H4 能上网,B 说"均不能"故错
- C(H1 与 H3 不能通信):两者在不同的 /25 子网里,必须走网关;H1 的网关不存在 → 通不了,C 成立 ✓
- D(H3 与 H4 不能通信):同子网直送 → 不会发生
答 C。这道题把"默认网关只在跨子网时才用得上"这条规则的两面都考了:同子网时网关错了也没事,跨子网时网关错了就全断。
F 组:综合题里的设备选型与广播。cn-2019-47(9 分)给一张待判断设备类型的拓扑:H1(.2)、H2(.3) 掩码 /26 网关 192.168.1.1;H3(.66)、H4(.67) 掩码 /26 网关 192.168.1.65。
第 (1) 问,先按 /26 算子网:H1、H2 在 192.168.1.0/26,H3、H4 在 192.168.1.64/26。同子网的两台之间只要二层透传 → 设备 2、设备 3 选交换机;两个子网之间必须跨网段 → 设备 1 选路由器。
第 (2) 问,交换机不需要 IP,只有设备 1 要配:接 R 那一侧,R 的接口是 192.168.1.253/30,/30 的四个地址是 252(网络)、253(R)、254(设备 1)、255(广播);另外两个接口就是两个子网的默认网关,即 192.168.1.1 和 192.168.1.65。
第 (3) 问,四台主机都是 192.168.x.x 私有地址,出不了公网,R 必须提供 NAT。
第 (4) 问最值得看:H3 发往 192.168.1.127 的数据报谁会收到。127 的低 6 位是 111111 全 1、高 26 位正是 192.168.1.64/26 —— 它是 H3 所在子网的直接广播地址。子网内交换机泛洪,H4 收得到;但设备 1 是路由器,不转发 IP 广播,H1、H2 收不到。答 只有 H4。
易错:划成
个子网后减少的是 个可用地址,不是每划一次减 2。
易错:"子网数"和"每子网主机数"是两个方向的幂,借
位得 个子网、每个 台。搞反是这类题最集中的失分点。
易错:算网络地址和广播地址时,主机位跨了几个字节就要改几个字节。 /22 的广播地址第三字节也要变,不只是末字节写 255。
易错:同一个 IP,属于哪个网络完全由掩码决定。 掩码是切割工具,不是地址。
易错:聚合的判据是"聚出来的块里的地址是不是全都归我",不是"能不能算出公共前缀"。
易错:聚合后的块起点必须按块大小对齐。
/19的起点必须是 32 的倍数,0 和 32 是两个不同的块。
易错:VLSM 必须从大到小分配。 倒着分会在对齐点前留下再也装不下整块的碎片。
易错:默认网关只在跨子网时才用得上。 同子网直接 ARP 直送,网关配错也照通;跨子网时网关配错就全断。
易错:判断直接交付还是间接交付,只用"目的 IP 与本机掩码"。 两台主机掩码不同时,"两边各算一遍再比"会给出错误答案。
易错:受限广播 255.255.255.255 任何路由器都不转发;主机号全 1 的直接广播路由器可以转发到目的网络。 但路由器不会把广播转进另一个子网——这正是 cn-2019-47 第 (4) 问的判据。
教材出处
- 谢希仁《计算机网络》(第 8 版):IP 地址的两级结构,见印刷版 p123–p124(4.2.2 IP 地址)——"IP 地址 ::= {<网络号>,<主机号>}",且"IP 地址中包含网络号就表明,不连网的主机就没有 IP 地址"。
- 同书 p124:分类地址的可指派数量与全 0 / 全 1 主机号——"A 类地址可指派的网络数是 126 个(即
)",其中扣除的是"网络号为全 0 的 IP 地址……表示'本网络'"与"网络号为 127……保留作为本地软件环回测试本主机的进程之间的通信之用";"全 0 和全 1 的主机号一般不指派。全 0 的主机号表示该 IP 地址是'本主机'所连接到的单个网络地址……全 1 表示'所有的',因此全 1 的主机号字段表示该网络上的所有主机"。同页表 4-2「一般不指派的特殊 IP 地址」按"源地址使用 / 目的地址使用"两列给出五种情形,本篇第一节那几条即依此重排。同页还说明 B 类的 128.0.0.0 与 C 类的 192.0.0.0"现在这两个网络地址都已经可以指派了[RFC 6890]"。 - 同书 p125:分类编址的浪费——"一个 A 类网络地址块的主机号数目超过了 1677 万个……一个 C 类网络地址块可指派的主机号只有 254 个。但不少单位需要有 300 个以上的 IP 地址,那么干脆申请一个 B 类网络地址块……这样就浪费了不少的地址资源";以及子网划分的定位:"在 IP 地址的主机号中,插入一个子网号,把两级的 IP 地址变为三级的 IP 地址"。
- 同书 p127:地址掩码——"地址掩码(常简称为掩码)由一连串 1 和接着的一连串 0 组成,而 1 的个数就是网络前缀的长度……把二进制的 IP 地址和地址掩码进行按位 AND 运算,即可得出网络地址",并以 128.14.35.7/20 → 128.14.32.0/20 为例;同页表 4-3 给出常用 CIDR 地址块与"包含的地址数",并注明"在'包含的地址数'中把全 1 和全 0 的主机号都计算在内了"。
- 同书 p140:分层寻址压缩转发表——"如果用目的地址直接查找转发表,那么这种结构的转发表就会非常庞大,使得查找过程非常之慢……先查找目的网络(网络前缀),在找到了目的网络之后,就把分组在这个网络上直接交付目的主机。由于互联网上的网络数远远小于主机数,这样就可以大大压缩转发表的大小"。
- 同书 p141【例 4-2】:直接交付与间接交付的判据——"主机 H1 先把要发送的分组的目的地址和本网络 N1 的子网掩码按位进行 AND 运算,得出运算结果。如果运算结果等于本网络 N1 的前缀,就表明目的主机连接在本网络上;否则,就必须把分组发送到路由器 R1"。
- 同书 p142–p143(4.3.2 最长前缀匹配):聚合过头的原始论证。教材用公司 A、公司 B 的例子说明,公司 B 把自己的三个 /24 聚合成 128.1.24.0/22 后,"这个前缀和原来的前缀在形式上是一样的,但实际的区别是很大的:在图 4-26 左边的网络前缀中包含地址 128.1.24.1,但公司 B 的聚合后的网络前缀则不包含这个地址",原因是"在转发表中的项目 128.1.24.0/22 并未说明是由哪几个子网聚合而成的"。最长前缀匹配规则的表述是:"如果一个分组在转发表中可以找到多个匹配的前缀,那么就应当选择前缀最长的一个作为匹配的前缀……网络前缀越长,其地址块就越小,因而路由就越具体",并给出按前缀长短排表、"只要检查到匹配的,就不必再继续往下查找"的做法。本篇折叠块里判断能否聚合那道题的数据为自造,论证思路承自该处。
- 同书 p143:主机路由与默认路由——"假定这个特定主机的点分十进制 IP 地址是 a.b.c.d,那么在转发表中对应于主机路由的网络前缀就是 a.b.c.d/32……主机路由在转发表中都放在最前面";"用一个特殊前缀 0.0.0.0/0 来表示默认路由。这个前缀的掩码是全 0……用全 0 的掩码和任何目的地址进行按位 AND 运算,结果一定是全 0,即必然是和转发表中的 0.0.0.0/0 相匹配的"。同书 p144 给出完整的分组转发算法。
相关知识
IPv4 数据报格式|NAT|ARP 地址解析协议|路由器与分组转发