第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 硬件查找:一次并行比较 → 快(纳秒级)
这就是高端路由器能同时处理百万条路由仍能线速转发的原因。
八、思考
- 什么是路由最长匹配原则?为什么需要它?
- 目的 IP = 10.1.1.1,路由表中有 10.0.0.0/8 和 10.1.0.0/16,选哪个?
- 默认路由(0.0.0.0/0)的掩码是 0,它什么时候会被匹配?
- 主机路由(/32)在最长匹配中优先级怎么样?
- 路由汇总和最长匹配有什么关系?举一个利用最长匹配实现流量引导的例子。
- 一个数据包的目的 IP = 192.168.1.100,路由表中有两条匹配的路由:192.168.0.0/16 和 192.168.1.0/24,走哪条?为什么?
下篇预告:第39篇《ACL基础_标准ACL与扩展ACL》——学习ACL(访问控制列表)的基础概念和配置方法。