← 返回题目列表

路由表为什么按最长前缀匹配?默认路由和精确路由怎么选?

高频 中等 第 3 / 26 题 更新于 2026/07/31
路由表最长前缀匹配默认路由CIDR网络层

简化版

路由器转发 IP 包时,会在路由表中查找能匹配目的 IP 的路由项,并选择前缀最长的一条,这叫最长前缀匹配。前缀越长,表示匹配范围越小、规则越具体。例如目的 IP 同时匹配 10.0.0.0/810.1.0.0/1610.1.2.0/24,会选择 /24。默认路由 0.0.0.0/0 匹配所有 IPv4 地址,但前缀最短,只有没有更具体路由时才使用。

详细版

最长前缀匹配让路由既能聚合,又能例外覆盖。

路由项匹配范围优先级
10.1.2.0/2410.1.2.x更具体
10.1.0.0/1610.1.x.x中等
10.0.0.0/810.x.x.x更泛化
0.0.0.0/0所有 IPv4默认兜底

目的地址 10.1.2.3 会选 /24,目的地址 10.1.9.8 会选 /16,目的地址 8.8.8.8 如果没有其他匹配,会走默认路由。若最长前缀一样,还会比较路由优先级、metric、管理距离等策略。

完整版教学

一、路由表不是从上往下随便匹配

路由器收到 IP 包后,核心动作是:

读取目的 IP -> 查路由表 -> 找下一跳/出接口 -> 重新封装二层帧转发

如果路由表里有多条规则都能匹配同一个目的 IP,必须有明确选择规则。最长前缀匹配就是最基础的选择规则:选择最具体的网段。

二、为什么前缀越长越具体

CIDR 中 /n 表示前 n 位固定。n 越大,固定的网络位越多,可匹配的地址越少。

10.0.0.0/8     -> 10.*.*.*       范围很大
10.1.0.0/16    -> 10.1.*.*       更具体
10.1.2.0/24    -> 10.1.2.*       更具体
10.1.2.3/32    -> 单个主机       最具体

所以最长前缀不是字符串最长,而是网络前缀位数最长。

三、一个具体例子

路由表如下:

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

目的 IP 是 10.1.2.3

匹配 10.0.0.0/8
匹配 10.1.0.0/16
匹配 10.1.2.0/24
匹配 0.0.0.0/0
选择最长前缀 /24 -> 下一跳 C

目的 IP 是 10.1.9.8

匹配 /8 和 /16,不匹配 /24
选择 /16 -> 下一跳 B

四、默认路由为什么是兜底

默认路由写作:

0.0.0.0/0

/0 表示没有任何固定网络位,所以它能匹配所有 IPv4 地址。但它也是最不具体的规则,因此只有没有更具体路由时才被选中。

默认路由不是优先级最高的路由,而是匹配范围最大、前缀最短的兜底路由。

五、最长前缀相同时还要看什么

如果多条路由前缀长度一样,设备还会继续比较其他属性:

  • 路由来源优先级或管理距离;
  • metric 或 cost;
  • ECMP 等价多路径;
  • 策略路由规则;
  • 出接口状态。

例如两条 10.1.2.0/24 路由都存在,可能选择 metric 更小的,也可能做等价负载分担。

六、工程中为什么需要泛化和例外

最长前缀匹配让网络规划很灵活:

  • 用大网段聚合路由,减少路由表规模;
  • 用小网段做例外流量转发;
  • 默认路由兜底访问互联网;
  • 专线或 VPN 网段用更具体路由覆盖默认出口。

例如公司默认所有公网流量走互联网出口,但 10.20.0.0/16 走专线。只要专线路由前缀比默认路由更长,就会优先命中专线。

七、常见误区与追问

  • 误区:路由器选择最先配置的匹配路由。 通常先按最长前缀匹配选择最具体路由。
  • 误区:默认路由优先级最高。 默认路由 /0 前缀最短,是没有更具体匹配时的兜底。
  • 误区:/8 比 /24 更精确。 /24 固定更多网络位,匹配范围更小,更精确。
  • 误区:最长前缀相同就随机选。 还会看 metric、管理距离、策略路由或 ECMP。
  • 追问:目的 IP 同时匹配 /16 和 /24 选哪个? 选 /24,因为前缀更长、更具体。
  • 追问:0.0.0.0/0 为什么能匹配所有地址? 因为前缀长度为 0,没有任何固定网络位。

八、加强记忆

最长前缀匹配就是“越具体越优先”。/24/16 具体,/32 是单主机最具体,0.0.0.0/0 是兜底默认路由。路由选择先看是否匹配,再选最长前缀;前缀相同再比较 metric、管理距离或策略。面试中用 10.1.2.3 同时匹配 /8/16/24 的例子,基本就能讲清楚。