第38篇:最长匹配原则——路由查表的核心规则

一、写在前面

路由器收到一个数据包后,用目的 IP 去查路由表。如果路由表中有多条路由都能匹配这个 IP,路由器选哪条

答案是:子网掩码最长的那条

这就是最长匹配原则(Longest Prefix Match, LPM)——路由查表的核心规则。


二、为什么需要最长匹配?

2.1 路由表不是精确查找

路由表的每条路由都带一个子网掩码,表示一个地址范围,而不是单个 IP。

路由表中的条目是"网段":
  10.0.0.0/8      → 10.0.0.0 ~ 10.255.255.255
  10.0.1.0/24     → 10.0.1.0 ~ 10.0.1.255
  10.0.1.128/25   → 10.0.1.128 ~ 10.0.1.255

一个目的 IP(如 10.0.1.200)同时属于上面三个网段——这时候需要"最精确"的那个。


二、最长匹配原则的定义

路由器在路由表中选择子网掩码最长(前缀最长)的匹配条目进行转发。

目的 IP = 10.0.1.200

路由表:
  10.0.0.0/8      下一跳 A    ← 掩码 8 位,匹配
  10.0.1.0/24     下一跳 B    ← 掩码 24 位,匹配
  10.0.1.128/25   下一跳 C    ← 掩码 25 位,匹配 → 最长!→ 选 C

三、精确匹配 vs 最长匹配

3.1 精确匹配(32 位掩码)

当路由表中有一条主机路由(/32) 时:

路由表:
  10.0.1.200/32   下一跳 D    ← 掩码 32 位(精确匹配)
  10.0.1.128/25   下一跳 C
  10.0.1.0/24     下一跳 B
  10.0.0.0/8      下一跳 A

目的 IP = 10.0.1.200 → 匹配 /32 → 走 D

主机路由优先级最高。

3.2 默认路由(0.0.0.0/0)

目的 IP = 8.8.8.8

路由表:
  10.0.0.0/8     → 不匹配(8.8.8.8 在 10.0.0.0/8 范围外)
  0.0.0.0/0      → 匹配(掩码 0 匹配任何 IP)

→ 走默认路由

默认路由是最后一个匹配——只有其他路由都不匹配时才走它。


四、查表过程

4.1 路由器收到数据包后

数据包入接口
    │
    ▼
提取目的 IP 地址(如 10.0.1.200)
    │
    ▼
遍历路由表,对每条路由做 AND 运算:
  路由的 网络号 AND 路由的 掩码 == 目的 IP AND 路由的 掩码?
    │
    ├── 相等 → 匹配,记录这条路由
    ├── 不相等 → 跳过
    │
    ▼
在所有匹配的路由中,选择掩码最长的那条
    │
    ▼
找不到任何匹配 → 丢弃,发 ICMP Destination Unreachable

4.2 具体计算过程

路由条目:10.0.1.0/24
目的 IP:10.0.1.200

检查:
  10.0.1.0 AND 255.255.255.0 (24位掩码) = 10.0.1.0
  10.0.1.200 AND 255.255.255.0 = 10.0.1.0
  相等 → 匹配!

路由条目:10.0.0.0/8
  10.0.0.0 AND 255.0.0.0 = 10.0.0.0
  10.0.1.200 AND 255.0.0.0 = 10.0.0.0
  相等 → 也匹配!

两个都匹配,选择掩码更大的 → /24 > /8
→ 走 10.0.1.0/24

五、实际案例

5.1 多出口场景

路由表:
  10.0.0.0/8        下一跳 100.1.1.1    GE0/0/0    → 运营商 A
  10.1.0.0/16       下一跳 200.1.1.1    GE0/0/1    → 运营商 B
  10.1.1.0/24       下一跳 192.168.1.1  GE0/0/2    → 内部专线

目的 IP = 10.1.1.200:
  /8 匹配 → 全 10 开头
  /16 匹配 → 10.1.x.x
  /24 匹配 → 10.1.1.x → 最长!→ 走内部专线

目的 IP = 10.2.3.4:
  /8 匹配 → 10.x.x.x
  /16 不匹配(10.2.x.x 不属于 10.1.0.0/16)
  /24 不匹配
  → 走运营商 A

5.2 VPN 路由覆盖

路由表:
  0.0.0.0/0    下一跳 100.1.1.254    GE0/0/0    → 默认上网
  10.0.0.0/8   下一跳 10.255.255.1   Tunnel0    → VPN 隧道

目的 IP = 10.1.1.1:
  /0 匹配
  /8 匹配 → 最长!→ 走 VPN 隧道
  → 内网流量通过 VPN 到达公司内网
  → 外网流量(如 8.8.8.8)走默认路由上网

六、最长匹配与路由汇总

路由汇总(Route Summarization) 就是利用最长匹配原则——用一条大网段路由汇总多条明细路由,明细路由如果有需要仍然可以单独存在。

路由表:
  10.0.0.0/22   下一跳 A    ← 汇总了 10.0.0.0~10.0.3.0
  10.0.1.0/24   下一跳 B    ← 特别的,走别的路径

目的 IP = 10.0.1.5:
  /22 匹配(10.0.0.0/22 包含 10.0.1.5)
  /24 匹配(10.0.1.0/24 也包含)→ 最长!→ 走 B

目的 IP = 10.0.2.5:
  /22 匹配
  /24 不匹配(只有 10.0.1.0/24,不是 10.0.2.0/24)
  → 走 A(汇总路由)

七、最长匹配的硬件实现

现代路由器使用 TCAM(Ternary Content Addressable Memory) 硬件来加速最长匹配查找:

路由表:10 万条路由
软件查找:遍历全部 → 慢(毫秒级)
TCAM 硬件查找:一次并行比较 → 快(纳秒级)

这就是高端路由器能同时处理百万条路由仍能线速转发的原因。


八、思考

  1. 什么是路由最长匹配原则?为什么需要它?
  2. 目的 IP = 10.1.1.1,路由表中有 10.0.0.0/8 和 10.1.0.0/16,选哪个?
  3. 默认路由(0.0.0.0/0)的掩码是 0,它什么时候会被匹配?
  4. 主机路由(/32)在最长匹配中优先级怎么样?
  5. 路由汇总和最长匹配有什么关系?举一个利用最长匹配实现流量引导的例子。
  6. 一个数据包的目的 IP = 192.168.1.100,路由表中有两条匹配的路由:192.168.0.0/16 和 192.168.1.0/24,走哪条?为什么?

下篇预告:第39篇《ACL基础_标准ACL与扩展ACL》——学习ACL(访问控制列表)的基础概念和配置方法。