ECMP 等价多路径路由是什么?它如何在多条等成本链路上分担流量?
简化版
ECMP 是 Equal-Cost Multi-Path,表示路由器到同一目的网段存在多条代价相同的下一跳时,可以同时使用这些路径转发流量。
它通常不会逐包随机转发,而是根据五元组等信息做哈希,让同一条流尽量走同一路径,避免乱序。
ECMP 能提高带宽利用率和冗余能力,但也可能带来哈希不均、单流无法用满多链路、故障收敛和排障复杂等问题。
详细版
路由表可能有:
10.0.0.0/8 via R1 cost 10
10.0.0.0/8 via R2 cost 10
两条路径代价相同,路由器可以启用 ECMP。
常见哈希输入:
- 源 IP。
- 目的 IP。
- 源端口。
- 目的端口。
- 协议号。
同一 TCP 连接五元组不变,因此通常走同一条路径。
如果逐包分担,可能造成 TCP 包乱序,影响性能。
完整版教学
1. 先定义 ECMP
ECMP 表示等价多路径。
当路由协议计算出多条到同一目的前缀的同成本路径时,设备可以把这些路径都装进转发表。
转发时从多个下一跳中选择一个。
ECMP 是三层网络中常见的负载分担和冗余机制。
2. 为什么不推荐逐包负载
如果包 1 走链路 A,包 2 走链路 B,包 3 又走链路 A。
不同链路延迟可能不同。
接收端看到的包顺序可能变成:
1, 3, 2, 4
TCP 会把乱序当作网络异常信号,触发重复 ACK、重传或拥塞窗口变化。
所以 ECMP 常按流哈希,而不是逐包随机。
3. 五元组哈希
典型哈希字段:
src ip + dst ip + src port + dst port + protocol
同一条 TCP 连接五元组稳定。
因此同一连接通常固定走一条路径。
不同连接可能分散到不同路径。
这能在保持单流有序的同时实现多流分担。
4. ECMP 的优势
| 优势 | 说明 |
|---|---|
| 提高带宽 | 多条链路同时承载流量 |
| 提高冗余 | 某条路径故障后可切到其他路径 |
| 简化扩展 | 增加等价链路即可扩容 |
| 适合数据中心 | Spine-Leaf 架构大量使用 |
数据中心网络常用 ECMP 在多条上行链路间分散东西向流量。
5. ECMP 的局限
ECMP 不是完美负载均衡。
它可能遇到:
- 哈希不均。
- 大流集中到同一路径。
- 单条流无法同时利用多条链路。
- 路径故障时哈希重分布。
- 排查路径变得复杂。
如果只有一个超大 TCP 连接,它通常只能走一条链路。
多路径总带宽不等于单流带宽。
6. 一致性哈希和重分布问题
当 ECMP 下一跳数量变化时,哈希映射可能改变。
大量流被重新映射,可能造成短暂抖动。
一些设备会使用更平滑的哈希或 resilient hashing,减少故障或扩容时受影响的流数量。
这在大规模数据中心里很重要。
7. 常见误区与追问
- 误区:ECMP 会把一个 TCP 连接平均拆到所有链路。 通常按流哈希,单连接一般走一条路径。
- 误区:ECMP 一定完全均匀。 哈希分布受流数量和流大小影响,可能出现大流倾斜。
- 误区:逐包负载更公平所以最好。 逐包可能导致乱序,影响 TCP 性能。
- 追问:ECMP 常用哪些哈希字段? 常见是五元组,也可能根据设备配置调整。
- 追问:为什么数据中心喜欢 ECMP? Spine-Leaf 中多条等价路径多,ECMP 扩展性好。
- 追问:路径故障会怎样? 下一跳集合变化,部分流可能被重新映射到其他路径。
8. 加强记忆
ECMP 记成“多条一样贵的路,按流哈希分车道”。
它分散的是多流,不是把单个连接切成多份乱跑。