计算机网络 35:数据中心网络为何不同,Clos、ECMP、incast 与尾延迟
一台发送端向一台接收端发送数据时链路并不拥塞,八台发送端同时回复同一台接收端时却可能排队。数据中心网络的特殊之处并非使用了另一套 IP,而是短距离、高带宽、多路径和同步扇入把流量集中到很小的时间窗口。
第 11 篇讨论等价路径,第 19、20 篇讨论拥塞窗口和队列。本篇用两级 Clos 与固定突发模型解释路径多样性、ECMP 冲突、incast 和尾延迟,不给真实设备性能排名。
Clos 提供多条可用路径
两级 leaf-spine 拓扑中,每台 leaf 连接每台 spine。位于不同 leaf 的主机之间可以经任一 spine 转发。在端口速率相等且不存在超额订阅的理想条件下,这种结构能提供规则化的路径容量;实际网络还受上联数量、链路速率、故障和布线约束。
“存在两条等价路径”不代表一条流会同时均匀占用两条。常见 ECMP 实现对报文头字段计算哈希,把一个流放入某个下一跳桶。这样可避免普通流的包在不同延迟路径上频繁乱序,但多个大流可能哈希到同一条链路,另一条链路仍有空闲容量。
RFC 2992 分析的是一种等价多路径哈希算法。具体交换机使用哪些字段、哈希种子和重映射策略属于实现行为,不能由“支持 ECMP”四个字推出。
模式提炼:路径容量要看映射结果
可用路径集合 × 流到路径的映射 × 每条路径负载 = 实际拥塞位置
拓扑图只能说明容量可能存在。判断某次拥塞还需要流键、哈希结果、链路计数和故障时的重映射证据。
incast 把瓶颈推到接收端出口
incast 是多个发送端在短时间内向同一接收端汇聚的流量形态。即使每个发送端入口都不满,最后一跳出口仍需串行发送所有报文。多个回复越同步,交换机越难用空闲时隙消化突发。
同名素材中的模型令每个发送端同时提交 32 个 1500 字节报文,接收端出口固定为 1 Gbit/s。一个报文的理想串行化时间是 12 微秒。一个发送端时,最后一个报文开始服务前等待 372 微秒;八个发送端同时到达时,最后一个报文等待 3060 微秒。
这些数值只由模型输入得到,没有传播时延、交换结构、协议头、ACK、TCP 恢复、调度粒度或发送节奏。它们证明同步输入会扩大共享出口的队列工作量,不是对某款交换机的测量。
尾延迟描述慢请求分布
平均值会掩盖少量很慢的请求。若一次上层操作必须等待多个分片回复,完成时间由最慢分片决定;某一条路径的排队、重传或后端暂停都可能落到整体尾部。
尾延迟必须带百分位、样本集合和时间窗口,例如“固定实验中 1000 次请求完成时间的 p99”。只报告“尾延迟 3 ms”而不说明口径,没有可比性。本文的最后报文等待时间也不是 p99,因为模型没有重复采样形成分布。
RFC 8257 描述 DCTCP 时把数据中心中的浅缓冲、高突发和 incast 作为适用背景,并要求端点与网络支持 ECN 反馈。它不能推出所有数据中心都部署 DCTCP,也不能把 ECN 标记等同于没有排队。
有界拓扑与队列验证
incast_model.py 读取固定拓扑,计算 16 条流在两个 ECMP 桶中的分布,并比较单发送端与八发送端同步突发的最后一包等待时间。
1 | |
素材包括固定拓扑与负载、队列演算脚本、演算输出、资料与运行记录和审阅记录。
条件、限制和反例
Clos 不自动保证无阻塞。leaf 上联超额订阅、故障后的剩余容量、交换芯片内部结构和下行热点都可能成为瓶颈。
ECMP 不自动实现逐流公平。哈希碰撞会使流量倾斜;逐包分担虽能改善某些分布,也可能引入乱序。具体选择必须结合设备能力和传输行为。
多发送端不必然产生 incast。发送时间足够分散、总输入速率低于出口服务率或接收端分片不同时完成时,队列可能保持很短。反过来,单个发送端也能以微突发占满更慢出口。
练习
练习一:四个发送端各同时提交 20 个 1000 字节报文,出口为 2 Gbit/s。忽略全部协议开销,计算最后一包开始服务前的等待时间,并列出模型没有覆盖的因素。
练习二:两条等价上联中一条利用率接近 100%,另一条接近 20%。列出至少三个与 ECMP 映射有关的解释,以及需要保存的反证。
模式速查表
| 现象 | 需要的证据 | 容易误判 |
|---|---|---|
| 拓扑有多条路径 | 路由与下一跳集合 | 单流必然拆到多路 |
| 一条上联拥塞 | 流键、哈希与链路计数 | 整个 fabric 容量不足 |
| 多发送端同时变慢 | 到达时序与共享出口队列 | 每台发送端入口拥塞 |
| p99 升高 | 完整分布、窗口和样本数 | 平均值同步升高 |
| ECN 标记出现 | 阈值、队列与端点响应 | 网络没有丢包风险 |
官方与一手参考资料
- RFC 7424:Mechanisms for Optimizing Link Aggregation Group Usage,IETF,2015-01,访问于 2026-09-24。
- RFC 2992:Analysis of an Equal-Cost Multi-Path Algorithm,IETF,2000-11,访问于 2026-09-24。
- RFC 8257:Data Center TCP (DCTCP),IETF,2017-10,访问于 2026-09-24。
- The Tail at Scale,Google Research / CACM,2013,访问尝试于 2026-09-24;当前环境未取得页面内容,仅保留题名与公开入口,不用作本文唯一证据。
验证边界
已验证:Python 3 标准库对固定 Clos 拓扑执行 ECMP 桶映射,并手算同步突发在单一出口的串行化与最后报文等待时间,验证类型为 HAND_CALC。
NOT_RUN:没有交换机、受控链路、队列遥测、ECN/DCTCP、真实 TCP 流、重复实验或延迟分布。未测量吞吐、p99 或生产网络;补证需在隔离仿真器、专用测试床或获准实验环境中完成。






