Skip to content

二、网络层:路由转发、分片与聚合(补-06 ~ 补-08) ​

补-06 ​

某路由器路由表如下:

目的网络下一跳
10.0.0.0/8A
10.1.0.0/16B
10.1.2.0/24C
0.0.0.0/0D

现收到目的 IP 地址为 10.1.2.5 的分组,该路由器应将其转发给( )。 A. A B. B C. C D. D

答案:C

① 考点定位:网络层 — 路由转发 — 最长前缀匹配原则。

② 知识精讲

最长前缀匹配(Longest Prefix Match)是 IP 路由转发的核心原则:当路由表中有多条路由匹配目的 IP 时,选择前缀(掩码)最长的那条,因为前缀越长说明越具体。

本题路由表分析:

目的网络下一跳前缀长度
10.0.0.0/8A8
10.1.0.0/16B16
10.1.2.0/24C24
0.0.0.0/0D0(默认路由)

目的 IP = 10.1.2.5 的匹配过程:

  1. 将 10.1.2.5 转为二进制:00001010.00000001.00000010.00000101
  2. 与 10.0.0.0/8 匹配 → 前 8 位 = 00001010 = 10 → ✅ 匹配,前缀长度 8
  3. 与 10.1.0.0/16 匹配 → 前 16 位 = 00001010.00000001 = 10.1 → ✅ 匹配,前缀长度 16
  4. 与 10.1.2.0/24 匹配 → 前 24 位 = 00001010.00000001.00000010 = 10.1.2 → ✅ 匹配,前缀长度 24
  5. 与 0.0.0.0/0 匹配 → 默认路由,前缀长度 0 → ✅ 匹配(但不优先)

四条路由都匹配,按最长前缀匹配原则,选择前缀最长(24 位)的路由 → 下一跳 C。

③ 本题解析

10.1.2.5 同时匹配 10.0.0.0/8(A)、10.1.0.0/16(B)、10.1.2.0/24(C)和 0.0.0.0/0(D),最长前缀为 /24,对应下一跳 C。对应选项 C。

④ 选项逐项辨析

  • A. A ❌:10.0.0.0/8 虽然匹配(前 8 位 10),但前缀长度只有 8,不如 /24 具体。 误解来源:误以为“最先匹配的路由”或“最宽泛的路由”优先。实际上路由查找不是顺序匹配,而是并行匹配后选最长前缀。/8 覆盖范围最大(10.0.0.0~10.255.255.255),但也最不具体。
  • B. B ❌:10.1.0.0/16 虽然匹配(前 16 位 10.1),但前缀长度只有 16,不如 /24 具体。 误解来源:可能误以为“中间粒度的路由”优先,或者以为路由表是按顺序匹配的(第一条匹配就用)。实际上必须选前缀最长的那条。
  • C. C ✅:10.1.2.0/24 匹配且前缀最长(24 位),应转发给 C。
  • D. D ❌:0.0.0.0/0 是默认路由,仅在无其他路由匹配时才使用,前缀长度 0 最低。 误解来源:以为默认路由是“兜底优先”或“特殊优先”。实际上默认路由的前缀长度为 0,是所有路由中最低优先级的,只有当其他路由都不匹配时才会被选中。

⑤ 易混对比

路由类型前缀长度优先级说明示例
主机路由/32最高精确匹配单个主机10.1.2.5/32
子网路由/24~/31高子网级匹配10.1.2.0/24
网络路由/8~/16中网络级匹配10.0.0.0/8
默认路由/0最低兜底路由0.0.0.0/0

最长前缀匹配的本质:前缀越长,网络范围越小,越具体越优先。

相近概念辨析:最长前缀匹配 vs 等价多路径(ECMP)——当两条路由前缀长度相同且都匹配时,路由器可通过 ECMP 在多条路径间负载均衡。最长前缀匹配解决“哪条路由更优先”,ECMP 解决“同优先级时如何分流”。

⑥ 拓展延伸

  • 与主库相关题号:主库第 3 题(路由选择与分组转发)、第 30 题(子网掩码与网络地址)、第 46 题(路由器转发时重新封装)、第 50 题(CIDR)、第 148 题(主机访问外网时的转发过程)与路由转发直接相关。最长前缀匹配是理解这些题目的核心原则。
  • 路由查表实现:现代路由器使用 TCAM(三态内容可寻址存储器)来实现最长前缀匹配的硬件加速查找,可在一个时钟周期内完成查找。
  • 路由聚合与最长前缀的关系:路由聚合(如 CIDR)缩短前缀长度以减少路由表条目;而最长前缀匹配保证了即使有聚合路由,更具体的路由仍然优先。这正是网络层次化路由的基础。
  • 默认路由的作用:0.0.0.0/0 是“兜底”路由,当路由表中没有任何其他路由匹配目的 IP 时,走默认路由。在家庭网络中,默认路由通常指向 ISP 的网关。
  • 完整验算:目的 IP 10.1.2.5 = 00001010.00000001.00000010.00000101
    • vs 10.0.0.0/8:前 8 位 00001010 = 10 → 匹配,前缀 8
    • vs 10.1.0.0/16:前 16 位 00001010.00000001 = 10.1 → 匹配,前缀 16
    • vs 10.1.2.0/24:前 24 位 00001010.00000001.00000010 = 10.1.2 → 匹配,前缀 24
    • vs 0.0.0.0/0:前 0 位 → 恒匹配,前缀 0
    • 最长前缀 = 24 → 选 C ✅
  • 工程场景:网络工程师配置路由时,常用 show ip route 查看路由表。排查“为什么流量没走预期路径”时,第一件事就是检查是否有更长前缀的路由劫持了流量。例如:配置了默认路由指向 ISP,但某条更具体的 /24 路由指向了错误的下一跳,流量就会走错。
  • 常见面试追问:
    1. “路由器是怎么查表的?”——最长前缀匹配,硬件上用 TCAM 实现。
    2. “为什么需要最长前缀匹配?”——CIDR 允许任意长度前缀,同一目的 IP 可能匹配多条路由,需要选最具体的。
    3. “默认路由的前缀长度是多少?”——0(0.0.0.0/0),优先级最低。

⑦ 真题变式

变式题:某路由表中有 172.16.0.0/16(→E1)、172.16.1.0/24(→E2)、172.16.1.128/25(→E3),收到目的 IP 为 172.16.1.200 的分组,应转发给? A. E1 B. E2 C. E3 D. 默认路由

答案:C解析:172.16.1.200 = ...11001000,前 25 位匹配 172.16.1.128/25(因为第 25 位为 1,落在 128~255 范围),前缀 25 最长 → E3。

⑧ 记忆锚点

最长前缀匹配 = 最具体路由优先。四条路由全匹配时,/24 > /16 > /8 > /0。记忆口诀:“前缀越长越优先,默认路由最后选”。

补-07 ​

一个 IP 数据报总长度为 3000 字节(其中首部 20 字节),要经过 MTU = 1500 字节的链路传输。分片后各分片的“片偏移”字段值依次为( )。 A. 0、185、370 B. 0、1480、2960 C. 0、185、360 D. 0、185、375

答案:A

① 考点定位:网络层 — IP 数据报分片 — 分片计算与片偏移字段。

② 知识精讲

IP 分片(Fragmentation):当 IP 数据报总长度超过链路 MTU(最大传输单元)时,路由器需要将其分片。每个分片都是一个独立的 IP 数据报。

分片规则:

  1. 每个分片的数据部分长度必须是 8 的整数倍(因为片偏移以 8 字节为单位)。
  2. 每个分片的总长度 = 分片数据 + IP 首部(20 字节)。
  3. 片偏移字段值 = 该分片数据部分在原始数据报数据部分中的偏移 / 8。

本题计算:

原始数据报:总长度 3000 字节,首部 20 字节 → 数据部分 = 2980 字节。 MTU = 1500 字节 → 每个分片最大数据 = 1500 - 20 = 1480 字节。1480 是 8 的倍数(1480/8 = 185)✅。

  • 分片 1:数据 1480 字节,片偏移 = 0/8 = 0
  • 分片 2:数据 1480 字节,片偏移 = 1480/8 = 185
  • 分片 3:数据 2980 - 1480×2 = 20 字节,片偏移 = 2960/8 = 370

验证:最后一片数据 20 字节,不需要是 8 的倍数——只有非最后一片才要求数据长度为 8 的整数倍(保证片偏移为整数);最后一片可为任意长度,片偏移由起始位置除以 8 得出(2960/8 = 370),实际长度由总长度字段记录。

片偏移值依次为:0、185、370。

③ 本题解析

分片计算如下:数据 2980 字节分成 1480 + 1480 + 20 三片,片偏移 = 起始位置/8 = 0/8、1480/8、2960/8 = 0、185、370。对应选项 A。

④ 选项逐项辨析

  • A. 0、185、370 ✅:片偏移以 8 字节为单位,0、1480、2960 除以 8 得 0、185、370,正确。
  • B. 0、1480、2960 ❌:这些是原始字节偏移量,但片偏移字段以 8 字节为单位,必须除以 8。 误解来源:忘记片偏移字段的单位是 8 字节。IP 首部中片偏移字段只有 13 位,如果以字节为单位,最大只能表示 8191 字节,远不够表示大分组的偏移;以 8 字节为单位则最大可表示 8191×8=65528 字节,覆盖整个 IP 数据报最大长度 65535 字节。
  • C. 0、185、360 ❌:第三个值 360 = 2880/8,但第三片起始位置是 2960 而非 2880(分片 1 和 2 的数据都是 1480 字节,2×1480 = 2960)。 误解来源:计算第三片起始位置时算错了。可能是把每片数据算成了 1440 字节(1440×2=2880),而实际每片数据是 MTU-20=1480 字节。
  • D. 0、185、375 ❌:第三个值 375 = 3000/8,但 3000 是总长度(含首部),片偏移基于数据部分而非总长度。正确应为 2960/8 = 370。 误解来源:把“总长度 3000”当成了“数据部分的偏移基准”。片偏移是从数据部分开始算的,不含首部。总长度 3000 = 首部 20 + 数据 2980,第三片起始位置 = 前两片数据之和 = 2960,不是 3000。

⑤ 易混对比

易混点错误做法正确做法本题验算
片偏移单位直接用字节偏移字节偏移 / 81480/8=185 ✅;1480 ❌
偏移基准从首部算起从数据部分算起2960/8=370 ✅;3000/8=375 ❌
每片数据长度任意值须为 8 的倍数(最后一片除外)1480÷8=185 ✅
MTU 含首部?数据 = MTU数据 = MTU - 20(减去IP首部)1500-20=1480 ✅
分片数计算直接除向上取整⌈2980/1480⌉=3 片 ✅

相近概念辨析:IP 分片 vs TCP 分段——IP 分片是网络层行为,由路由器根据 MTU 进行,重组只在目的主机;TCP 分段是传输层行为,由发送方根据 MSS 进行,目的端 TCP 重组。两者独立工作:TCP 分段后的每个段再作为 IP 数据报传输,若仍超 MTU 则 IP 层再分片。

⑥ 拓展延伸

  • 与主库相关题号:主库第 42 题(IPv4 数据报首部固定长度 20 字节)、第 44 题(与 IP 分片无关的首部字段)、第 45 题(IP 分片与重组的正确说法)与本题直接相关。第 29~33 题(IP 地址与子网划分)是网络层地址计算的基础。
  • 分片重组:分片在目的主机重组,不在中间路由器重组。重组根据片偏移和标识(Identification)字段完成。
  • DF 标志位:IP 首部中 DF=1 表示“不要分片”(Don't Fragment),当数据报超过 MTU 且 DF=1 时,路由器丢弃该报文并返回 ICMP "Fragmentation Needed and DF Set" 错误消息(用于 PMTUD 路径MTU发现)。
  • MF 标志位:MF=1 表示“还有更多分片”(More Fragments),最后一个分片 MF=0。
  • IPv6 不允许中间路由器分片:IPv6 取消了中间路由器分片功能,分片只在源端进行,源端使用 Path MTU Discovery 来确定合适的包大小。
  • 完整验算:
    • 原始数据报:总长 3000B,首部 20B → 数据 = 2980B
    • MTU=1500 → 每片最大数据 = 1500-20 = 1480B(1480÷8=185,是 8 的倍数 ✅)
    • 分片数 = ⌈2980/1480⌉ = 3
    • 分片1:数据 1480B,偏移 0/8=0,MF=1
    • 分片2:数据 1480B,偏移 1480/8=185,MF=1
    • 分片3:数据 2980-1480×2=20B,偏移 2960/8=370,MF=0
    • 验证:1480+1480+20=2980 ✅;0+1480=1480 ✅;1480+1480=2960 ✅
  • 工程场景:网络工程师排查“大包不通、小包通”的问题时,通常是 MTU 问题。常用 ping -f -l 1472(Windows)或 ping -M do -s 1472(Linux)测试路径 MTU。若 DF=1 且包超 MTU,中间路由器会丢包并返回 ICMP 错误。
  • 常见面试追问:
    1. “IP 分片在哪里重组?”——目的主机,不在中间路由器。
    2. “为什么片偏移以 8 字节为单位?”——13 位片偏移字段 × 8 = 最大 65528 字节,覆盖整个 IP 数据报。
    3. “IPv6 为什么取消中间路由器分片?”——简化路由器处理、提高转发效率;分片由源端通过 PMTUD 完成。
    4. “DF=1 且包超 MTU 会怎样?”——路由器丢包并返回 ICMP "Fragmentation Needed and DF Set"。

⑦ 真题变式

变式题:一个 IP 数据报数据部分 3800 字节,首部 20 字节,经 MTU=1420 的链路传输,分几片?各片偏移为? A. 3片,片偏移 0、175、350 B. 3片,片偏移 0、1400、2800 C. 4片,片偏移 0、175、350、525 D. 3片,片偏移 0、175、350、525

答案:A解析:MTU=1420 → 每片数据 = 1400(是 8 的倍数)。3800/1400 → 1400+1400+1000 = 3片。片偏移 = 0/8、1400/8、2800/8 = 0、175、350。

⑧ 记忆锚点

片偏移三步走:①每片数据 = MTU - 20(且为8的倍数);②各片起始字节位置;③除以8得片偏移值。记忆公式:“片偏移 = 前面所有分片数据长度之和 / 8”。关键陷阱:除以8、从数据部分算、MTU要减首部。

补-08 ​

将 192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24 四个网络聚合为一条路由,聚合后的地址块是( )。 A. 192.168.0.0/23 B. 192.168.0.0/21 C. 192.168.0.0/20 D. 192.168.0.0/22

答案:D

① 考点定位:网络层 — CIDR 路由聚合 — 子网聚合计算。

② 知识精讲

CIDR(无类别域间路由)路由聚合:将多个连续的子网合并为一条路由,缩短前缀长度,减少路由表条目。

聚合方法:将多个子网地址转为二进制,找最长公共前缀,公共前缀长度就是聚合后的前缀长度。

本题计算:

四个网络:

  • 192.168.0.0/24 = 11000000.10101000.00000000.00000000
  • 192.168.1.0/24 = 11000000.10101000.00000001.00000000
  • 192.168.2.0/24 = 11000000.10101000.00000010.00000000
  • 192.168.3.0/24 = 11000000.10101000.00000011.00000000

第三字节:00000000、00000001、00000010、00000011

公共前缀分析:第三字节的前 6 位(000000)完全相同,后 2 位变化(00、01、10、11)。

因此聚合后前缀 = 24 - 2 = 22 位(前两个字节各 8 位共 16,第三字节公共前缀 6 位,合计 16+6 = 22)。

聚合后地址块:192.168.0.0/22。

验证:192.168.0.0/22 覆盖 192.168.0.0 ~ 192.168.3.255(共 1024 个地址,4×256 = 1024 ✅)。

③ 本题解析

四个 /24 子网的第三字节 0~3 的前 6 位相同(000000xx),聚合后前缀 16+6 = 22 位,地址块 192.168.0.0/22。对应选项 D. 192.168.0.0/22。

④ 选项逐项辨析

  • A. 192.168.0.0/23 ❌:/23 只能覆盖 2 个 /24 子网(512 个地址),不够覆盖 4 个子网。 误解来源:把“4 个子网”错误地映射为“前缀缩短 1 位”。实际上 4=2²,前缀应缩短 2 位(24-2=22)。/23 只能覆盖 2 个子网(2¹=2),常见于把“2 的幂次”算错。
  • B. 192.168.0.0/21 ❌:/21 覆盖 8 个 /24 子网(2048 个地址),范围过大,虽然包含了这4个子网但不是最精确的聚合。 误解来源:误以为“聚合越大越好”或“取整到 /21 这种常见前缀”。路由聚合要求恰好覆盖目标子网,不多不少。/21 虽然包含了 0~3 这 4 个子网,但也多包含了 4~7 这 4 个不属于目标的子网,会导致路由不精确。
  • C. 192.168.0.0/20 ❌:/20 覆盖 16 个 /24 子网,范围更大,不是正确聚合。 误解来源:同选项 B,错误地认为“更大的聚合块更安全”。实际上路由聚合的目的是精确匹配,过大或过小都不对。
  • D. 192.168.0.0/22 ✅:/22 覆盖 4 个 /24 子网(1024 个地址),恰好覆盖 192.168.0.0~192.168.3.255,正确。

⑤ 易混对比

前缀子网数地址数覆盖范围本题适用性
/241256192.168.0.0~0.255只覆盖 1 个子网
/232512192.168.0.0~1.255只覆盖 2 个子网
/2241024192.168.0.0~3.255✅ 恰好覆盖 4 个
/2182048192.168.0.0~7.255多覆盖了 4 个子网
/20164096192.168.0.0~15.255多覆盖了 12 个子网

聚合规则:N 个连续 /M 子网聚合 → 新前缀 = M - log₂(N)。本题 4 个 /24 → 24 - log₂(4) = 24 - 2 = 22。

相近概念辨析:路由聚合 vs 子网划分——两者方向相反。子网划分是把一个大网络分成多个小子网(前缀变长);路由聚合是把多个小子网合并成一个大网络(前缀变短)。都基于 CIDR 的“无类别”思想。

⑥ 拓展延伸

  • 与主库相关题号:主库第 30 题(子网掩码与网络地址)、第 32 题(C 类网络划分子网)、第 33 题(根据主机数选择掩码)、第 50 题(CIDR)与本题同属 CIDR 地址计算体系。第 125 题(综合子网划分)和第 126 题(掩码与可用主机数)是子网计算的进阶应用。
  • 聚合的前提条件:路由聚合要求子网地址连续且可以构成一个超网(即地址块的起始地址可以被前缀长度整除)。例如 192.168.0.0/22 合法(0 = 00000000,前 22 位后 2 位为 00),但 192.168.1.0/22 不合法(1 = 00000001,前 22 位后 2 位为 01)。
  • 路由聚合的意义:减少路由表条目、降低路由器内存和 CPU 消耗、减少路由更新报文大小。CIDR 路由聚合是解决 IPv4 地址枯竭和路由表膨胀的重要手段。
  • 聚合与最长前缀的关系:聚合后存在更具体的子网路由时,最长前缀匹配确保更具体路由优先。二者协同工作。
  • 完整验算:
    • 四个 /24 子网的第三字节二进制:00000000、00000001、00000010、00000011
    • 公共前缀:前 6 位相同(000000),后 2 位变化(00/01/10/11)
    • 聚合前缀 = 8(第1字节)+ 8(第2字节)+ 6(第3字节公共位)= 22 位
    • 聚合地址块:192.168.0.0/22
    • 验证覆盖范围:192.168.0.0 ~ 192.168.3.255(第3字节 0~3)
    • 验证地址数:2^(32-22) = 2^10 = 1024 = 4×256 ✅
    • 验证公式:新前缀 = 24 - log₂(4) = 24 - 2 = 22 ✅
  • 工程场景:企业网络中,各分支机构的子网在核心路由器上做路由聚合,可以大幅减少路由表规模。例如一个有 256 个 /24 子网的大型企业,聚合为 /16 后只需 1 条路由。ISP 的 BGP 路由表也是通过路由聚合控制规模的。
  • 常见面试追问:
    1. “路由聚合的前提是什么?”——子网地址必须连续且能构成合法超网(起始地址对齐)。
    2. “聚合后如何保证更具体的路由仍然生效?”——最长前缀匹配保证 /24 比 /22 优先。
    3. “把 192.168.1.0/24 和 192.168.2.0/24 聚合,结果是什么?”——无法精确聚合。第三字节 1 = 00000001、2 = 00000010,两者公共前缀只有 6 位(第 7 位就分叉),所以能同时覆盖它们的最粗前缀是 8+8+6 = /22,即 192.168.0.0/22——它把 .0/24 与 .3/24 也一并覆盖了,属于过覆盖,不是这两条路由的聚合。若想用 /23(“2 个子网缩短 1 位”),前提是两子网号相邻且起始块对齐(.0/.1 一组、.2/.3 一组),.1 与 .2 跨在这两组之间,因此 /23 也不成立。工程写法:要么照发两条 /24 明细,要么在发布 192.168.0.0/22 超网的同时保留两条 /24 明细,由最长前缀匹配保证明细优先。

⑦ 真题变式

变式题:将 172.16.0.0/24~172.16.7.0/24 共 8 个子网聚合,聚合后地址块为? A. 172.16.0.0/22 B. 172.16.0.0/21 C. 172.16.0.0/20 D. 172.16.0.0/19

答案:B解析:8 个 /24 → 24 - log₂(8) = 24 - 3 = 21。172.16.0.0/21 覆盖 172.16.0.0~7.255(2048 地址)。

⑧ 记忆锚点

聚合公式:新前缀 = 原前缀 - log₂(子网数)。4 个 /24 → /22;8 个 /24 → /21;2 个 /24 → /23。关键前提:子网连续且起始地址合法。验证方法:聚合后地址数 = 2^(32-新前缀) = 子网数 × 256。

持续学习,持续积累。