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默认只用了带宽和延迟。这是经过深思熟虑的——这两个因素最稳定,最能反映链路质量。
知识体系总览
下面这张图,帮你理清成本度量标准的全貌:
总结一下
选哪种度量,取决于你的网络场景:
| 度量标准 | 适用协议 | 优点 | 缺点 | 我的建议 |
|---|---|---|---|---|
| 跳数 | RIP | 简单、易懂 | 不考虑链路质量 | 小型网络可用 |
| 带宽 | OSPF、EIGRP | 反映链路容量 | 高带宽链路Cost相同 | 调整参考带宽 |
| 延迟 | EIGRP | 对实时应用友好 | 动态变化 | 配合带宽使用 |
| 负载 | EIGRP | 动态调整 | 易导致路由震荡 | 慎用 |
| 可靠性 | EIGRP | 反映链路健康 | 过于敏感 | 无线链路可用 |
| 复合度量 | OSPF、EIGRP | 综合多个因素 | 配置复杂 | 最推荐的方式 |
最后说一句:没有完美的度量,只有适合的度量。理解每个度量的优缺点,结合你的网络需求,才能做出最优的选路决策。
公众号:蓝海资料掘金营,微信deep3321