最长前缀匹配、管理距离、Metric和策略路由有什么区别?路由选择顺序解释
最长前缀匹配用于在目标地址匹配的多条路由中选择网络范围最具体的一条;管理距离用于比较不同路由来源的可信优先级,是部分路由器平台的控制平面概念;Metric用于同一协议或同类候选路由之间比较路径成本,具体含义由协议或操作系统定义;策略路由则先根据源地址、标记、接口等条件选择要查询的路由表或动作,再在该表内执行路由查找。
本文目录(18 节)
直接答案
最长前缀匹配用于在目标地址匹配的多条路由中选择网络范围最具体的一条;管理距离用于比较不同路由来源的可信优先级,是部分路由器平台的控制平面概念;Metric用于同一协议或同类候选路由之间比较路径成本,具体含义由协议或操作系统定义;策略路由则先根据源地址、标记、接口等条件选择要查询的路由表或动作,再在该表内执行路由查找。
它们不是一个可以混排的单一数字。10.0.1.0/24 metric 500通常仍会比10.0.0.0/8 metric 10更优先匹配目的地址10.0.1.25,因为/24更具体。Linux中的ip rule priority决定规则扫描顺序,和路由条目的metric也不是同一个优先级。
一、四个概念对比
| 概念 | 比较对象 | 主要输入 | 解决的问题 |
|---|---|---|---|
| 最长前缀匹配 | 同一查询中能匹配目标的路由 | 目的IP与前缀长度 | 哪个目标网络最具体 |
| 管理距离 | 不同路由来源提供的同一前缀 | 静态、OSPF、BGP等来源 | 哪个来源更可信 |
| Metric | 同一协议或同表中的可比候选 | 成本、跳数、管理员值等 | 相同前缀走哪条路径 |
| 策略路由 | 规则与路由表 | 源/目的、接口、标记、协议等 | 先查哪个表或执行什么动作 |
准确顺序会随平台实现变化。本文以IP转发通用原则和Linux RPDB为主;Cisco等设备上的Administrative Distance、不同动态路由协议的选路属性,不能机械套到Linux ip route metric。
二、什么是最长前缀匹配
IPv4路由前缀中的/24表示前24位必须匹配,/16只要求前16位匹配。前缀越长,覆盖范围越小,目标越具体。路由器收到数据包后,会在候选条目中优先选择与目的地址匹配且前缀长度最长的路由。
RFC 1812给出的路由查找过程包含基本匹配、最长匹配和最佳Metric等阶段,并明确最长匹配选择route.length最大的候选。默认路由0.0.0.0/0可以匹配任何IPv4目的地址,但它是最不具体的兜底路径。
例如:
default via 192.0.2.1
10.0.0.0/8 via 192.0.2.2
10.0.1.0/24 via 192.0.2.3
10.0.1.25/32 via 192.0.2.4
访问10.0.1.25时,/32主机路由最具体;访问10.0.1.80时,/24胜出;访问10.8.0.1时使用/8;其他目标才回落到/0。
三、Metric为什么不能击败更具体前缀
Metric通常只在前缀长度相同、其他更高层选择条件也相同的候选之间发挥作用。给默认路由设置很低的Metric,不会让它压过一个能匹配目标的/24路由。否则更具体的内网、隧道或黑洞路由将失去意义。
Linux ip-route(8)把metric列为路由属性,并说明较低的preference值优先。但不同协议生成的路由可能先经过各自控制平面的决策,再被安装到内核表中。看到界面上的“Metric”时,必须确认这是静态路由Metric、接口Metric、OSPF Cost、BGP属性,还是内核路由优先值。
四、管理距离是什么
管理距离(Administrative Distance,AD)常见于网络设备操作系统,用于同一个路由器从不同来源学到相同前缀时,判断哪个来源更可信。例如同一/24可能同时来自静态配置和某个动态路由协议,设备先依据来源偏好决定哪条进入路由表。
AD是本地设备的选择属性,不会随IP数据包传输,也不是跨厂商统一的Internet标准。数值默认值和配置方法由平台定义。Linux通用ip route输出通常没有一个与商用路由器AD完全等价的统一字段,不能把proto、metric或ip rule priority直接改名为AD。
五、Metric是什么
Metric表示候选路径的成本或优先程度,但其语义取决于产生路由的组件。静态路由可以由管理员设置数值;RIP常以跳数为核心;OSPF使用链路成本;BGP有自己的多阶段最佳路径属性,不能只用一个通用Metric概括。
在Linux同一表、同前缀的普通路由中,较低Metric通常更受偏好。例如两个默认路由分别从有线和Wi-Fi获得,可以用Metric表达主备倾向。但若策略规则把某个源地址导向另一个表,主表的低Metric默认路由可能根本不会参与该次查询。
六、策略路由是什么
传统目的路由只看数据包要去哪里。策略路由允许同时看源地址、目的地址、入接口、输出接口、ToS、fwmark、UID范围、IP协议或端口等条件,再决定查询哪张表或执行哪种动作。
Linux使用Routing Policy Database(RPDB)。ip-rule(8)说明规则按Priority数值从小到大扫描,数值越小,规则优先级越高。规则的动作可以查询指定路由表,也可以返回blackhole、unreachable或prohibit等结果。
默认Linux RPDB通常包含:
0 lookup local
32766 lookup main
32767 lookup default
自定义规则若插在main之前,就可能让特定流量先查另一张表。这里的规则Priority决定“先查哪条规则”,表内仍要按最长前缀等逻辑选择路由。
七、完整路由选择可以怎样理解
对Linux策略路由,可以把过程简化为两层:
- 按
ip rule的Priority从小到大检查选择器; - 匹配规则后查询它指定的路由表;
- 在该表中按目标地址做最长前缀匹配;
- 若仍有等价候选,再比较Metric、下一跳或多路径属性;
- 查询返回成功、不可达或禁止结果时按相应动作处理;
- 某些查询未得到结果时,继续下一条RPDB规则。
控制平面在此之前还可能根据管理距离和协议自身算法,决定哪些路由被安装。也就是说,用户在最终路由表里看到的只是选路流程的一部分。
八、一个源地址分流示例
假设主表默认走宽带A,希望192.168.50.0/24的设备走宽带B:
ip route add default via 198.51.100.1 dev wan_b table 100
ip rule add priority 1000 from 192.168.50.0/24 lookup 100
来自该网段的数据包先命中Priority 1000规则,再查询表100。即使主表存在Metric更低的默认路由,它也不会先参与,因为规则已经改变了查询表。
这只是说明查表逻辑,不是可直接复制的完整部署。实际还需处理源地址、NAT、回程路由、连接跟踪、接口状态、DNS与持久化配置。变更前必须保存当前规则并准备带外回滚。
九、ip route show与ip route get有什么区别
ip route show列出路由表中存在的条目,但不会完整模拟某个具体数据包的选路。ip route get会按给定的目的地址,并可结合源地址、标记、输入接口、协议和端口执行解析,更接近内核实际为该流量选择的路径。
排障时应同时查看:
ip rule show
ip route show table all
ip route get 203.0.113.8 from 192.168.50.10
如果策略依赖fwmark,还要在ip route get中带上相同Mark,并核对防火墙规则是否实际设置了它。只看主表很容易误判。
十、默认路由为什么偶尔切换
常见原因包括DHCP重新下发路由Metric、NetworkManager或其他网络管理器重建配置、接口上下线、IPv6 Router Advertisement改变默认路由偏好、策略规则顺序冲突,或多条等价路由启用了ECMP。
不要看到两个默认网关就立即删除其中一个。先确认它们是否位于同一地址族、同一表、同一前缀和同一策略规则路径。IPv4 default与IPv6 default不直接竞争;不同表中的默认路由也只有在对应规则被选中时才会参与。
十一、Metric相同会发生什么
同一表中若存在相同前缀、相同优先条件的多个下一跳,系统可能使用ECMP或按实现规则选择。ECMP不等于逐包平均发送;常见实现会按流哈希保持同一连接路径稳定,以避免乱序。
若目标是主备链路,应明确配置优先级和健康检测,而不是依赖相同Metric后的偶然行为。下一跳存在于路由表,也不证明外网真实可用;链路层可达、网关响应和端到端服务健康是不同层级。
十二、回程路径为什么重要
策略路由只改变去程并不一定够。若请求从宽带B出去,响应却根据主表从宽带A回来,NAT状态、防火墙或上游反向路径检查可能丢弃流量。多WAN、VPN和多网卡主机尤其容易出现非对称路由。
排障时应分别验证去程与回程,并查看连接跟踪、源地址选择和rp_filter设置。不要为了绕过问题直接关闭所有反向路径检查;先确认拓扑是否确实需要非对称路由,并按接口和风险设置合适模式。
十三、常见误区
- Metric越低就能覆盖所有路由:更具体的前缀通常先胜出;
ip rule priority就是路由Metric:前者排规则,后者属于路由条目;- Linux
proto就是管理距离:它主要标识路由来源,不是统一AD值; - 默认路由只有一条:不同地址族和不同表可各自存在默认路由;
ip route show能证明实际路径:应使用带源地址和标记的ip route get;- 去程正确就代表连接正常:回程、NAT和防火墙状态同样关键;
- 删除高Metric路由就能修复:它可能是必要的故障切换路径;
- 规则数字越大优先级越高:Linux RPDB是数字越小越先检查。
十四、排障顺序
- 记录目标IP、源IP、接口、地址族和失败时间;
- 用
ip rule show确认规则Priority和查表顺序; - 用
ip route show table all检查所有相关表; - 用
ip route get带入真实源地址、Mark和接口; - 先比较前缀长度,再比较同前缀候选的Metric;
- 核对路由由静态、DHCP、RA还是动态协议安装;
- 检查策略Mark是否在正确Hook和方向生成;
- 抓包确认实际出接口、源地址和回程入口;
- 核对NAT、连接跟踪与反向路径检查;
- 修改一项后重复同一测试并保留回滚记录。
十五、FAQ
/24路由Metric高于/16时会选哪条?
对同时匹配的目的地址,通常先选更具体的/24。Metric主要用于前缀长度相同且其他选择条件相同的候选。
管理距离和Metric哪个先比较?
在使用管理距离的平台上,控制平面通常先比较不同来源对同一前缀的可信度,再由协议或平台比较路径属性。具体顺序必须查设备文档。
ip rule数字越大越优先吗?
不是。Linux RPDB按数值递增扫描,较小的Priority数值先执行,建议为自定义规则设置明确且唯一的值。
策略路由会绕过最长前缀匹配吗?
不会完全绕过。策略规则先决定查询哪个表或执行何种动作;进入具体路由表后,仍按目标前缀选择最具体的路由。
两条相同Metric默认路由会自动主备吗?
不应这样假设。系统可能执行ECMP或按实现选择。主备应明确配置优先级、链路检测和故障恢复策略。
十六、结论
最长前缀匹配回答“目标网络哪条最具体”,管理距离回答“相同前缀来自哪个来源更可信”,Metric回答“可比候选中哪条成本更优”,策略路由回答“这个数据包应该先查哪张表”。排障时先画出规则层与路由表层,再使用真实源地址和标记执行ip route get,比只盯着主表中的Metric更可靠。
核验来源
- RFC Editor,RFC 1812 Requirements for IP Version 4 Routers:https:
/ / www. rfc- editor. org/ rfc/ rfc1812 - Linux iproute2,ip-rule(8):https:
/ / man7. org/ linux/ man- pages/ man8/ ip- rule. 8. html - Linux iproute2,ip-route(8):https:
/ / man7. org/ linux/ man- pages/ man8/ ip- route. 8. html - Linux Kernel Documentation,rt-route Netlink Specification:https:
/ / www. kernel. org/ doc/ html/ latest/ netlink/ specs/ rt- route. html - IETF,RFC 4191 Default Router Preferences and More-Specific Routes:https:
/ / www. rfc- editor. org/ rfc/ rfc4191