4. 成本度量标准:路由决策的“天平”

路由协议选路,说白了就是在做一道选择题。

从A点到B点,可能有十条路。哪条最好?

这就需要一把“尺子”去量。这把尺子,就是成本度量标准(Metric)

我刚开始接触网络时,以为跳数少就是好。后来被现实狠狠教育了一回——跳数少,但链路是64kbps的卫星线路,延迟高得离谱。从那以后,我明白了:选路不能只看表面

4.1 跳数(Hop Count)—— 最朴素的度量

跳数,就是数据包经过路由器的数量。

RIP协议就用这个。简单粗暴:经过的路由器越少,路径越好。

核心逻辑: 每经过一台路由器,跳数+1。最大跳数限制为15跳(RIP),16跳视为不可达。

你想想看,跳数少就一定快吗?

不一定。我见过一个网络,A到B只有2跳,但中间是56kbps的拨号线路。另一条路有5跳,全是千兆光纤。结果呢?5跳那条路快得多。

所以,跳数度量有个致命缺陷:它不考虑链路质量

避坑指南: 我曾经在一个大型园区网里,看到有人用RIP。结果两条路径跳数一样,RIP就做负载均衡。但一条是万兆光纤,一条是百兆铜缆。流量被平分,百兆链路瞬间打满。嗯,这就是跳数度量的局限性。

4.2 带宽(Bandwidth)—— 管道的粗细

带宽,就是链路能承载的最大数据传输速率。

单位是bps(bit per second)。10Mbps、100Mbps、1Gbps、10Gbps……数字越大,管道越粗。

EIGRP和OSPF都会考虑带宽。但注意,它们不是直接用带宽值,而是用带宽的倒数

// EIGRP的带宽度量计算(简化版)
Metric = (10^7 / 最小带宽) * 256

// 举例:一条10Mbps链路
Metric = (10,000,000 / 10,000,000) * 256 = 256

// 一条100Mbps链路
Metric = (10,000,000 / 100,000,000) * 256 = 25.6 → 取整为26

看到了吗?带宽越大,Metric值越小,路径越优。

我个人习惯在部署OSPF时,手动调整接口的Cost值。因为默认的Cost = 10^8 / 带宽,对于万兆链路,Cost就是1。但万一所有链路都是万兆,Cost都一样,OSPF就不知道选哪条了。

实战技巧: 我建议在核心层和汇聚层之间,手动设置不同的Cost值。比如主链路Cost=10,备份链路Cost=20。这样流量会走主链路,主链路断了自动切到备份。简单又可靠。

4.3 延迟(Latency)—— 时间的度量

延迟,就是数据包从源到目的地花费的时间。

单位通常是微秒(μs)或毫秒(ms)。

EIGRP支持延迟度量。它会把路径上所有接口的延迟累加起来。

// EIGRP延迟度量计算
总延迟 = 路径上所有出接口的延迟之和(单位:10微秒)
Metric = 总延迟 * 256

// 举例:两个接口,延迟分别为1000μs和2000μs
总延迟 = (1000 + 2000) / 10 = 300(单位:10微秒)
Metric = 300 * 256 = 76800

延迟对实时应用特别重要。比如VoIP语音、视频会议。延迟高了,说话就像对讲机,你一句我一句地等。

我记得有一次帮一个跨国企业优化网络。他们抱怨视频会议卡顿。一查,路由选了一条跨太平洋的卫星链路,延迟高达600ms。后来我调整了EIGRP的延迟度量,让流量走海底光缆,延迟降到150ms。问题解决了。

4.4 负载(Load)—— 链路的“繁忙度”

负载,就是链路当前被使用的程度。

范围是0%到100%。0%表示空闲,100%表示满载。

EIGRP支持负载度量。但它默认是关闭的。为什么?

因为负载是动态变化的。如果路由协议频繁根据负载调整路径,会导致路由震荡。今天走A,明天走B,后天又走A。网络不稳定,丢包率反而上升。

我曾经踩过的坑: 在一个数据中心里,我开启了EIGRP的负载度量。结果流量一波动,路由就跳变。核心交换机CPU飙升到80%。后来我果断关了,改用带宽+延迟的组合。稳定多了。

所以,我的建议是:负载度量慎用。除非你有非常明确的需求,并且做好了防抖动的机制。

4.5 可靠性(Reliability)—— 链路的“健康度”

可靠性,衡量链路出错或丢包的概率。

范围是0到255。255表示最可靠(100%可靠),0表示完全不可用。

EIGRP支持可靠性度量。它根据接口的错误计数丢包率动态计算。

说实话,我在实际项目中很少用这个度量。原因和负载类似:太动态了。

一条链路偶尔丢一个包,可靠性就下降。路由协议可能因此切换路径。但切换本身也会丢包。这就成了恶性循环。

我的个人习惯: 可靠性度量更适合用在无线链路或卫星链路上。这些链路本身不稳定,需要动态调整。对于有线网络,老老实实用带宽+延迟就够了。

4.6 复合度量(如OSPF的Cost)—— 综合的艺术

前面说的都是单一度量。但现实世界是复杂的。

所以,一些路由协议设计了复合度量。把多个因素加权组合,算出一个综合值。

OSPF的Cost就是典型代表。

// OSPF Cost计算公式
Cost = 参考带宽 / 接口带宽

// 默认参考带宽 = 100 Mbps
// 所以:
// 100Mbps链路:Cost = 100 / 100 = 1
// 10Mbps链路:Cost = 100 / 10 = 10
// 1Gbps链路:Cost = 100 / 1000 = 0.1 → 取整为1

注意,Cost值必须是整数。所以1Gbps和10Gbps的Cost都是1。这就尴尬了。

解决方案: 我建议把参考带宽改大。比如改成10000 Mbps(10Gbps)。这样:

  • 1Gbps链路:Cost = 10000 / 1000 = 10
  • 10Gbps链路:Cost = 10000 / 10000 = 1

这样就能区分不同速率的链路了。

// 在OSPF进程中修改参考带宽
router ospf 1
 auto-cost reference-bandwidth 10000

EIGRP的复合度量更复杂。它默认使用带宽+延迟,但可以加入负载、可靠性、MTU。

// EIGRP复合度量公式(默认K值)
Metric = (K1 * 带宽 + K2 * 带宽/(256 - 负载) + K3 * 延迟) * K5/(可靠性 + K4)

// 默认K值:K1=1, K2=0, K3=1, K4=0, K5=0
// 简化后:Metric = 带宽 + 延迟

你看,EIGRP默认只用了带宽和延迟。这是经过深思熟虑的——这两个因素最稳定,最能反映链路质量

知识体系总览

下面这张图,帮你理清成本度量标准的全貌:

成本度量标准知识体系 成本度量标准 跳数 (Hop Count) RIP协议使用 最大15跳 带宽 (Bandwidth) OSPF、EIGRP使用 管道粗细 延迟 (Latency) EIGRP支持 实时应用关键 负载 (Load) 动态变化 慎用! 可靠性 0-255范围 无线链路适用 复合度量 (OSPF Cost / EIGRP复合) 综合带宽、延迟等因素 最常用的度量方式 核心原则:稳定优先,动态为辅

总结一下

选哪种度量,取决于你的网络场景:

度量标准 适用协议 优点 缺点 我的建议
跳数 RIP 简单、易懂 不考虑链路质量 小型网络可用
带宽 OSPF、EIGRP 反映链路容量 高带宽链路Cost相同 调整参考带宽
延迟 EIGRP 对实时应用友好 动态变化 配合带宽使用
负载 EIGRP 动态调整 易导致路由震荡 慎用
可靠性 EIGRP 反映链路健康 过于敏感 无线链路可用
复合度量 OSPF、EIGRP 综合多个因素 配置复杂 最推荐的方式

最后说一句:没有完美的度量,只有适合的度量。理解每个度量的优缺点,结合你的网络需求,才能做出最优的选路决策。


公众号:蓝海资料掘金营,微信deep3321