第37篇:路由优先级(Preference)与度量值(Metric)

关键词:路由优先级、Preference、度量值、Metric、路由选路、最优路由


一、引言

路由表中可能同时存在多条到达同一目的网络的路由条目。路由器如何从这些候选路由中选择一条最优路由?这取决于两个关键参数:优先级(Preference)和度量值(Metric)。理解这两个参数的区别和协作关系,是掌握路由选路逻辑的核心。

二、核心概念

2.1 优先级(Preference):协议间的竞争

优先级用于比较不同路由协议(或路由来源)之间的优劣。当多条路由来自不同的协议时,优先级决定哪条优先生效。

路由来源 华为默认优先级 说明
直连路由(Direct) 0 最高优先级,接口 UP 即生效
OSPF(内部路由) 10 OSPF 域内路由
IS-IS 15 IS-IS 协议路由
静态路由(Static) 60 管理员可调整
RIP 100 RIP 协议路由
OSPF(外部路由,ASE/NSSA) 150 从其他协议引入 OSPF 的路由
BGP(IBGP/EBGP) 255 最低优先级,IBGP 与 EBGP 默认相同

华为设备的优先级规则:值越小,优先级越高。这与 Cisco 的 Administrative Distance 概念一致。

2.2 度量值(Metric):协议内部的竞争

度量值用于比较同一协议内部不同路径的优劣。当多条路由来自同一协议时,度量值决定哪条路径更优。

协议 Metric 含义 计算方式 优选方向
RIP 跳数 经过的路由器数量 越小越好
OSPF 成本(Cost) 参考带宽 / 接口带宽 越小越好
IS-IS 度量值 可手动配置 越小越好
BGP 多属性 优先级/本地偏好/AS路径等 综合比较
静态 固定值 默认为 0,可手动设置 越小越好

2.3 路由选择的两个阶段

路由选择遵循先比优先级,再比度量值的顺序:

路由选择的两个阶段 - 图示

2.4 优先级 vs 度量值的类比

概念 类比 作用域
优先级 比较不同交通工具的"等级"(飞机 > 高铁 > 汽车) 跨协议
度量值 比较同一交通工具的"路程"(近路 > 远路) 协议内

三、技术细节

3.1 华为设备的路由优先级完整表

路由协议 默认优先级 可调整范围
Direct 0 不可调(固定)
OSPF-IntraArea 10 1-255
OSPF-InterArea 10 1-255
ISIS-Level1 15 1-255
ISIS-Level2 15 1-255
Static 60 1-255
RIP 100 1-255
OSPF-ASE/NSSA 150 1-255
BGP(IBGP/EBGP) 255 1-255(preference external internal local 分别设置)

华为的默认优先级为:直连 0、OSPF 10、IS-IS 15、静态 60、RIP 100、OSPF ASE/NSSA 150、IBGP/EBGP 255。 除直连路由(Direct)外,各路由协议的优先级都可以通过命令调整,取值范围多为 1-255(0 保留给直连路由);具体以设备命令手册为准。

3.2 调整静态路由优先级

# 默认静态路由优先级为 60
[HUAWEI] ip route-static 10.0.0.0 24 10.1.1.2

# 调整优先级为 80(数值大于 OSPF 的 10,优先级别反而更低)
[HUAWEI] ip route-static 10.0.0.0 24 10.1.1.2 preference 80

# 此时如果 OSPF 也学习到 10.0.0.0/24,OSPF 路由优先生效
# 因为 OSPF 优先级 10 < 静态路由优先级 80

3.3 OSPF Cost 计算

OSPF 的 Cost = 参考带宽 / 接口带宽(取整,最小值为 1)

接口速率 默认参考带宽(100Mbps) Cost
10 Mbps 100/10 10
100 Mbps 100/100 1
1 Gbps 100/1000 → 0.1 1(取整)
10 Gbps 100/10000 → 0.01 1(取整)

问题:100Mbps、1Gbps、10Gbps 的 Cost 都是 1,OSPF 无法区分。需要调整参考带宽。

# 调整 OSPF 参考带宽(单位 Mbps)
[HUAWEI] ospf 1
[HUAWEI-ospf-1] reference-bandwidth 10000    # 10Gbps 基准

# 调整后:
# 100Mbps → 10000/100    = 100
# 1Gbps   → 10000/1000   = 10
# 10Gbps  → 10000/10000  = 1

3.4 静态路由的 Cost 调整

# 默认 Cost 为 0
[HUAWEI] ip route-static 0.0.0.0 0 203.0.113.1

# 设置 Cost 为 10
[HUAWEI] ip route-static 0.0.0.0 0 203.0.113.1 cost 10

# 等价负载分担:两条静态路由相同 Cost
[HUAWEI] ip route-static 0.0.0.0 0 203.0.113.1
[HUAWEI] ip route-static 0.0.0.0 0 198.51.100.1
# 两条路由若 protocol/priority/cost 相同,则形成等价负载分担(默认允许)

四、实战配置与故障案例

4.1 案例一:调整优先级使静态路由优先生效

需求:管理员希望静态路由比 OSPF 优先级更高,即使 OSPF 也学到了同一目的网络,也使用静态路由。

# 默认情况:OSPF(10) > 静态(60)
# OSPF 路由优先生效

# 修改静态路由优先级为 5(高于 OSPF 的 10)
[HUAWEI] ip route-static 10.0.0.0 24 10.1.1.2 preference 5

# 验证
<HUAWEI> display ip routing-table 10.0.0.0
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface
10.0.0.0/24         Static  5    0          D    10.1.1.2        GigabitEthernet0/0/1
# 静态(Pre=5)优先;OSPF 也学到了 10.0.0.0/24,但 Pre=10 > 5,不是最优路由,
# display ip routing-table 只显示当前被优选的路由(查看 OSPF 路由:display ip routing-table protocol ospf)

4.2 案例二:等价负载分担

需求:企业有两条 1Gbps 链路到数据中心,希望流量均衡分担。

# 方案1:等价静态路由(相同优先级和 Cost)
[HUAWEI] ip route-static 10.0.0.0 24 10.1.1.2
[HUAWEI] ip route-static 10.0.0.0 24 10.2.2.2

# 验证负载分担
<HUAWEI> display ip routing-table 10.0.0.0
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 2
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface
10.0.0.0/24         Static  60   0          D    10.1.1.2        GigabitEthernet0/0/1
                    Static  60   0          D    10.2.2.2        GigabitEthernet0/0/2
# 两条路由的协议、优先级、Cost 相同,均下发 FIB(Flags=D),构成等价负载分担
# 等价路由的副行不重复显示目的网络,仅列出 Proto/Cost/Flags/NextHop/Interface

# 默认最大等价路径数视产品/版本而定(常见 4/8/16),以设备手册为准
# 调整等价路径数量:在对应协议视图下配置(并不是一条全局命令)
[HUAWEI] rip 1
[HUAWEI-rip-1] maximum load-balancing 4        # RIP 视图
[HUAWEI-rip-1] quit
[HUAWEI] ospf 1
[HUAWEI-ospf-1] maximum load-balancing 4       # OSPF 视图
[HUAWEI-ospf-1] quit
[HUAWEI] bgp 100
[HUAWEI-bgp] ipv4-family unicast
[HUAWEI-bgp-af-ipv4] maximum load-balancing ebgp 4   # BGP:EBGP/IBGP 分别设置
[HUAWEI-bgp-af-ipv4] maximum load-balancing ibgp 4
# 静态路由的等价路由条数由产品 IPv4 等价路由能力决定,调整命令以设备手册为准

4.3 案例三:OSPF Cost 不区分链路带宽

故障描述:目的网络有两条路径:100Mbps 链路 2 段、1Gbps 链路 3 段。OSPF 将流量导向 100Mbps 链路而非 1Gbps 链路,带宽更大的路径闲置,性能不达标。

# 检查 OSPF 路由
<HUAWEI> display ip routing-table protocol ospf
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface
10.0.0.0/24         OSPF    10   2          D    10.1.1.2        GigabitEthernet0/0/1
# 10.0.0.0/24 走 100M 链路所在路径(2 段,Cost=2)
# 1G 链路所在路径(3 段)Cost=3,不是最优,不进常规路由表显示

# 检查接口 Cost
<HUAWEI> display ospf interface GigabitEthernet0/0/1
 OSPF Process 1 with Router ID 10.1.1.1
 Interfaces
  Interface: 10.1.1.1 (GigabitEthernet0/0/1)
   Cost: 1       State: DROther    Type: Broadcast    MTU: 1500
<HUAWEI> display ospf interface GigabitEthernet0/0/2
 OSPF Process 1 with Router ID 10.1.1.1
 Interfaces
  Interface: 10.2.1.1 (GigabitEthernet0/0/2)
   Cost: 1       State: DROther    Type: Broadcast    MTU: 1500
# 两个接口的单段 Cost 都是 1:默认参考带宽 100Mbps 下,100M 与 1G 接口的 Cost 都是 1,
# 路径总 Cost 只由链路段数决定(2 段 vs 3 段),带宽差异完全体现不出来

# 根因:OSPF 参考带宽默认为 100Mbps,1Gbps 接口的 Cost = 100/1000 → 取整为 1,
# 与 100Mbps 接口相同;OSPF 选路只看 Cost,1G 路径段数多 Cost 大

# 解决方案一:调整参考带宽(所有 OSPF 路由器必须一致)
[HUAWEI] ospf 1
[HUAWEI-ospf-1] reference-bandwidth 10000
[HUAWEI-ospf-1] quit

# 调整后:100M 单段 Cost=100,1G 单段 Cost=10
# 100M 路径 = 2×100 = 200,1G 路径 = 3×10 = 30 → OSPF 自动优选 Cost 小的 1G 链路

# 解决方案二:手工配置端口OSPF COST
[HUAWEI] interface GigabitEthernet0/0/1
[HUAWEI-GigabitEthernet0/1/0]ospf cost 10
[HUAWEI-GigabitEthernet0/1/0]quit
[HUAWEI] interface GigabitEthernet0/0/2
[HUAWEI-GigabitEthernet0/1/0]ospf cost 100
[HUAWEI-GigabitEthernet0/1/0]quit
# 其他链路端口参考上面配置

# 调整后:100M 单段 Cost=100,1G 单段 Cost=10

4.4 案例四:优先级配错导致流量走次优路径

故障描述:配置了 OSPF 和 RIP 后,流量走了 RIP 路径而非 OSPF 路径,导致性能下降(RIP 路径经过更多跳数)。

# 检查路由表
<HUAWEI> display ip routing-table 10.0.0.0
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface
10.0.0.0/24         RIP     5    3          D    10.1.1.2        GigabitEthernet0/0/1
# RIP(Pre=5) 生效;OSPF(Pre=10) 优先级更低,未进 RIB 常规显示

# 检查 RIP 配置
<HUAWEI> display current-configuration | include preference
 preference 5

# 根因:管理员之前手动将 RIP 优先级调整为 5(值越小优先级越高)
# RIP(5) > OSPF(10),RIP 路由优先生效
# RIP 路径跳数多、延迟大,属于次优路径

# 解决方案:恢复 RIP 默认优先级(100),让 OSPF 优先
[HUAWEI] rip 1
[HUAWEI-rip-1] preference 100
[HUAWEI-rip-1] quit

# 验证:OSPF 路由生效
<HUAWEI> display ip routing-table 10.0.0.0
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface
10.0.0.0/24         OSPF    10   20         D    10.2.2.1        GigabitEthernet0/0/2
# 恢复 RIP 默认优先级后,OSPF(Pre=10) 优于 RIP(100),OSPF 路由生效;RIP 路由不再进表

五、总结

参数 比较范围 优选规则 可调整
优先级(Preference) 不同协议之间 值越小越优先 是(1-255,直连固定为 0)
度量值(Metric) 同一协议内部 值越小越优先 是
默认优先级排序(从高到低) 对应优先级值
直连(0) > OSPF内部(10) > IS-IS(15) > 静态(60) > RIP(100) > OSPF外部(150) > BGP(255) 值越小优先级越高

记忆口诀:直(0)O(10)I(15)静(60)R(100)B(255),值小优先。

调优场景 方法
静态路由让 OSPF 优先 提高静态优先级(设大值)
OSPF 区分链路带宽 调整 reference-bandwidth
多链路负载分担 相同协议 + 相同 Cost
指定路径优先 手动调整接口 Cost 或优先级

思考

  1. 如果 OSPF 路由优先级设为 200(低于 RIP 的 100),会发生什么?为什么通常不建议这样做?
  2. 等价负载分担是逐包分担还是逐流分担?对业务有什么影响?
  3. OSPF 参考带宽调整后,为什么需要确保所有路由器保持一致?

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