数据中心内部网络通信,与广域网之间的网络通信,有什么不同?数据中心网络一个典型的拓扑是什么样的?
数据中心内部网络通信,与广域网之间的网络通信,有什么不同?数据中心网络一个典型的拓扑是什么样的?
下面分两块说:数据中心内网(DCN) vs 广域网(WAN) 的通信差异;以及典型数据中心拓扑长什么样。
现在最主流的是 Leaf-Spine(Clos),核心特点:所有叶子连所有脊,主机只挂在叶子(ToR)上,多路径 ECMP。
Spine1 Spine2 Spine3
| \ | \ | \
| \ | \ | \
Leaf1 Leaf2 Leaf3 Leaf4 ... (ToR/Leaf)
| | | |
Rack1 Rack2 Rack3 Rack4
(servers)(servers)...
当规模更大(很多机架/很多楼层/多机房园区):
SuperSpine1 SuperSpine2
| \ / |
Spine层(多个Pod各自的Spine)
| |
Leaf/ToR Leaf/ToR
| |
Servers Servers
数据中心还会有专门的“出口层”:
如果你愿意把你的关注点再压窄一点(比如:你在学 RoCE/RDMA,还是偏 Kubernetes 微服务、或者是跨地域多活),我可以把“DCN vs WAN 的差异”直接落到你关心的那类流量模型和拥塞/路由细节上。
BGP/IS-IS + ECMP MPLS/SR、专线 MPLS/SR、专线 VXLAN/EVPN IPAM、服务发现、Anycast ToR/Leaf(机架顶交换机)eBGP 这些都是什么?
我在了解RoCEv2相关的内容
下面把你列的术语按“在数据中心里各自负责什么”快速串起来,并且专门补上它们和 RoCEv2 的关系(哪些是底层必备、哪些是常见组合、哪些会影响无损/低时延)。
这一对是数据中心里“把底层 L3 织网(underlay)变成上层大二层/多租户网络(overlay)”的主流组合。
你现在看 RoCEv2,建议把网络拆成 3 层理解:
如果你愿意,我可以按 RoCEv2 的视角,把“一个典型的 DC RoCE 网络”画成文字拓扑,并标出:
你更关心“概念理解”还是“工程配置(比如 Mellanox/NVIDIA + 交换机)”?
为什么RoCEv2 的端口/流特征会影响“是否均匀负载”?
因为 ECMP 的分流通常不是“按字节轮询”,而是对每个包做一个 hash,然后把“同一条流(flow)”固定映射到某一条等价路径上(否则会乱序)。所以“端口/流特征”会直接决定 hash 的输入是否足够多样,从而决定负载能不能均匀摊开。
多数交换机用 5-tuple(或其子集)做 hash:
然后把 hash 结果映射到 N 条上行(N 个下一跳)之一。
同一 5-tuple → 同一路径(保持有序)。
RoCEv2 是 UDP/IP 封装的 IB Transport。在很多实现/场景里,它的外层五元组变化度可能比较低,导致 hash 空间不够“随机”,于是大量流撞到同一条上行。
常见几种原因:
(A) 流的数量少 / “大象流”占主导
如果业务是少数几个超大吞吐的 RDMA 连接(比如存储复制、训练参数同步),就算每条连接都能被均匀分到不同路径,总数也可能不足以把 N 条 spine 上行都吃满;更糟的是若只有 1–2 条“超大流”,它们会被固定在 1–2 条路径上,其他路径闲着。
(B) 外层端口模式不够分散
很多 RoCEv2 流量在外层 UDP 端口上可能呈现:
如果交换机 hash 算法对端口的混合不强(或配置成只用部分字段),就会更容易碰撞。
(C) hash 字段不包含你以为它包含的东西
有些网络里会出现:
这种情况下,如果 RoCE 流量的 src/dst IP 集合本来就小(比如某对端点之间的通信),那 ECMP 就几乎“没法分流”。
(D) RoCE 的“QP/会话”与外层五元组不一定一一对应
你可能有很多 QP 或应用层并行,但如果它们在 UDP/IP 外层被复用成少数几个五元组(例如同一对端点、同一端口组合),从 ECMP 角度看仍然是“少数几条流”。
不展开到厂商命令层,先给方向:
如果你告诉我两个信息,我可以更“对症”:
既然这样,如果还想要让RoCEv2进行负载均衡该怎么做呢?
要让 RoCEv2 既能走多路径(ECMP)又尽量不踩“乱序/热点/无损扩散”坑,核心原则是:
下面给你一套按“安全程度/常见程度”排序的做法。
直觉:ECMP 分的是“流”,那就让你有很多“流”,别只有一个。
RoCEv2 外层一般是 UDP,目的端口通常固定(常见为 4791),所以负载均衡主要靠:
很多情况下,源端口分配是否随机/足够分散会决定 ECMP 均匀程度。
工程上就是:确保你的 RDMA 栈/驱动/中间件在建立会话时不会把大量连接“挤在很窄的端口区间”,并且交换机 ECMP hash 确实包含 L4 端口。
即使你制造了很多 flow,如果交换机 hash 维度不对,也会白做:
对 RoCE 来说,很多团队会选择:RoCE 业务走 underlay(纯 L3),尽量别穿 overlay,就是为了让 ECMP、QoS、ECN/PFC 都“行为确定”。
负载均衡做得越激进,越要配套好 RoCE 的拥塞与无损策略:
如果你告诉我你当前场景更像哪一种,我可以把“该拆多少流/怎么拆”讲得更具体一点:
underlay和overlay是什么?
在数据中心网络里,你可以把 underlay 和 overlay 理解成“两张叠在一起的网”:
Underlay = 物理 Clos(Leaf-Spine)里跑的三层 IP 网络。
典型特征:
它解决的是:
“从这台机器到那台机器,IP 包怎么走得通?”
Overlay = 在 underlay 之上封装隧道,把“虚拟网络”跑起来。
最常见的 overlay 技术是:
Overlay 解决的是:
“我希望一组虚拟机/容器像在同一个二层网里,或者不同租户彼此隔离,且不受物理拓扑限制。”
假设两台 VM(或容器)在不同机架,但你想让它们看起来像在同一个 VLAN 里:
所以:
RoCEv2 是 UDP/IP 上承载 RDMA,理论上它可以跑在 underlay 或 overlay 上,但工程上常见建议是:
如果你愿意,我可以用“RoCE 专用网络 vs RoCE 与业务共网”的两种典型架构,把 underlay/overlay 画成更贴近你正在看的 RoCEv2 部署方式。
EVPN
EVPN(Ethernet VPN)本质上是一个 “二层/多租户网络的控制平面”,最常见的落地是 BGP EVPN + VXLAN:
解释一下逐流负载均衡和逐包负载均衡的概念,为什么要区分出这两种概念?
把网络流量按“流(flow)”为单位分配路径。
这里的“流”通常由 5-tuple 定义:源/目的 IP、源/目的端口、协议(有时再加 VLAN、DSCP 等)。
把负载均衡粒度降到“每个包”。同一条流的相邻两个包可能走不同路径。
因为它们在两个关键指标上权衡完全不同:负载均匀性 vs 有序性(乱序风险)。
多条路径的时延/排队不同(哪怕只差几十微秒),就会导致:
乱序带来的后果(按严重程度):
逐流负载均衡天然避免这些:同一流不跨路径,路径时延稳定,几乎不乱序。
逐流的均匀性依赖于:
当存在少数“大象流”时:
逐包负载均衡在这方面更强:即便只有一条大流,也能把它拆到多条路径上,利用率更接近均匀。
如果你想把这两种概念和你前面提到的“端口/流特征影响均匀性”串起来:我可以用一个简单的 Leaf-Spine + 4 条上行的例子,算给你看“1 条大流 vs 100 条小流”在逐流/逐包下会出现什么现象。
ECMP/逐包喷洒是什么?
ECMP(Equal-Cost Multi-Path) = “等价多路径转发”。
当一台交换机/路由器到某个目的地有多条代价相同的下一跳(比如 Leaf 到对端 Leaf,可以走任意一台 Spine),它可以把流量分摊到这些路径上。
数据中心 Leaf-Spine 里很常见:
最常见是 逐流(per-flow)ECMP:
所以你可以把 ECMP 理解成:
“路由表里有多个等价下一跳时的负载分担机制(通常按流固定映射)”。
逐包喷洒 = 把同一条流的每一个包分散到多条等价路径上。
目的:即使只有 一条大流,也能把带宽摊到多条链路上,利用率更均匀。
它通常被视为一种“比逐流 ECMP 更激进”的负载均衡方式(有时也被叫做 packet-level load balancing / spraying)。
不同路径的时延/排队不同(哪怕只差几十微秒):
乱序对协议/系统的影响:
所以数据中心里默认更常用:
如果你想继续往 RoCEv2 方向钻:我可以把“逐流 ECMP + 多 QP/多连接”为什么比“逐包喷洒”更常见,结合 DCQCN/ECN/PFC 的反馈链路讲清楚。
找出我们对话中的所有概念,对于每个概念,用一句话总结列出
数据中心内部网络通信(DCN):在同机房/园区内的高带宽、低时延、可控拓扑网络通信。
广域网(WAN):跨城市/跨国家的长距离网络通信,时延高且路径与中间设备更不可控。
数据中心拓扑(Leaf-Spine/Clos):一种用 Leaf(接入)与 Spine(骨干)构成的多路径结构,靠水平扩展提升带宽与规模。
Leaf(叶子交换机):连接服务器/机架并上联 Spine 的接入层交换机。
Spine(脊交换机):只连接各个 Leaf、提供骨干转发与多路径的汇聚层交换机。
ToR(Top-of-Rack):机架顶交换机,通常就是该机架的 Leaf/接入交换机。
Border/Edge(出口/边界设备):连接数据中心与外部网络(互联网、专线、其他机房)的路由/安全/策略边界。
BGP:一种路由协议,数据中心常用它在 underlay 或 EVPN 控制面中分发路由/主机可达信息。
IS-IS:一种链路状态路由协议,可用于数据中心 underlay 来计算最短路径并支持 ECMP。
eBGP:BGP 的“外部邻居”模式,数据中心常用 eBGP Clos 让拓扑与故障域更清晰。
iBGP:BGP 的“内部邻居”模式,通常在同一 AS 内分发路由(数据中心也可能用)。
路由可达性(reachability):网络中“能否找到到达目的地的下一跳”的能力,由路由协议提供。
ECMP(等价多路径):当存在多条等价下一跳时,用哈希把流量分摊到多条路径上的转发机制。
5-tuple(五元组):源/目的 IP、源/目的端口、协议等字段组合,常作为 ECMP 哈希的“流标识”。
流(flow):一组共享同一组关键头字段(如五元组)的数据包集合,通常被网络按同一条路径处理。
逐流负载均衡(per-flow LB):把同一条流固定映射到一条路径以避免乱序,但可能出现热点不均匀。
逐包负载均衡/逐包喷洒(per-packet spraying):把同一条流的包分散到多条路径以追求均匀,但更容易乱序。
Flowlet(按流突发切换):在流的突发间隙切换路径以兼顾均匀性与较低乱序风险的折中方案。
乱序(reordering):同一流的数据包因走不同路径时延不同而到达顺序被打乱的现象。
负载偏斜(hash imbalance):ECMP 哈希导致大量流或大象流集中在少数路径上而形成拥塞热点的现象。
尾延迟(tail latency):延迟分布的高分位(如 p99/p999)表现,常由拥塞、排队和重传放大。
MPLS:用标签转发并支持 VPN/流量工程的承载技术,常见于运营商和广域网。
SR(Segment Routing):把路径意图编码成段列表以实现更灵活的流量工程(如 SR-MPLS/SRv6)。
专线:具有明确带宽与 SLA 的专用链路服务,常用于站点/数据中心互联(DCI)。
Underlay(底层网络):物理三层 IP 网络(Leaf-Spine + 路由协议 + ECMP),负责真实转发与可达性。
Overlay(叠加网络):在 underlay 之上用隧道虚拟出的网络,用于多租户隔离与大二层等语义。
VXLAN:把二层帧封装进 UDP/IP 的隧道技术,用 VNI 扩展租户规模。
EVPN:通常基于 BGP 的控制平面,用于分发 MAC/IP/VTEP 等信息来管理 VXLAN。
VTEP:VXLAN 隧道端点,负责对二层帧进行 VXLAN 封装与解封装(常在 Leaf 上)。
MTU:链路能承载的最大帧/包大小,封装(如 VXLAN)会吃掉 MTU 并影响性能与丢包风险。
IPAM:IP 地址规划、分配与回收的管理系统/流程,用于大规模网络避免冲突与混乱。
服务发现(Service Discovery):让客户端找到服务实例地址的机制(如 DNS/Consul/K8s Service)。
Anycast:多个节点共享同一 IP,由路由把流量送到“最近/最优”的节点以实现就近接入与高可用。
QoS:用队列/优先级/整形等手段区分不同业务的服务质量(带宽、时延、丢包)。
DSCP/PCP:IP 层(DSCP)和以太网层(PCP)用于标记业务优先级/服务类别的字段。
RDMA:一种绕过内核并实现低时延高吞吐的远程直接内存访问通信方式。
RoCE:在以太网承载 RDMA 的技术族(RoCEv1 基于二层,RoCEv2 基于 UDP/IP)。
RoCEv2:把 RDMA/IB 传输封装在 UDP/IP 上,从而可在三层网络中路由与 ECMP。
InfiniBand(IB):专为高性能计算设计的网络体系与协议栈,也是 RoCE 复用其传输语义的来源。
iWARP:把 RDMA 承载在 TCP 上的方案,依赖 TCP 的可靠性但时延与实现路径不同于 RoCE。
RC(Reliable Connected):RDMA/IB 的可靠连接型传输语义,提供可靠有序交付但更依赖网络稳定性。
QP(Queue Pair):RDMA 通信端点的核心对象(发送队列+接收队列),承载具体的消息/操作。
post RECV:在 RDMA 中预先在接收队列投递接收缓冲的动作,以便对端发送时能直接放入。
message passing(消息传递):RDMA 的双边通信模式,需要发送端和接收端都参与队列投递与完成通知。
one-sided(单边操作):RDMA 的读/写/原子等操作只需发起端参与,目标端 CPU 通常不在数据面上执行。
two-sided(双边操作):需要收发两端配合的 RDMA 语义(典型是 SEND/RECV)。
内存注册(Memory Registration):把用户态内存登记给 RNIC 并生成可访问的键,以支持 DMA/RDMA 访问。
Pin(页固定):把注册内存页锁定避免换出,确保 RNIC 访问期间物理页稳定。
lkey/rkey:RDMA 访问本地/远端内存的权限与定位凭证,用于访问控制和地址翻译。
QP 超时重传:在可靠传输语义下,若 ACK/响应超时则触发重传以保证可靠交付。
PAUSE 帧(以太网暂停):一种二层流控帧,用于让对端暂时停止发送以避免接收端溢出。
PFC(Priority Flow Control):按优先级(而非全端口)触发暂停的流控机制,常用于 RoCE 的“无损”队列。
ECN(Explicit Congestion Notification):用标记而非丢包来告知拥塞的机制,为端侧拥塞控制提供信号。
DCQCN:RoCE 常用的端侧拥塞控制算法,利用 ECN 标记调节发送速率以降低拥塞与 PFC 触发。
拥塞(congestion):链路/队列负载超过能力导致排队增长、时延上升与可能丢包/标记的状态。
排队(queuing):包在交换机端口队列中等待发送的过程,是时延与抖动的重要来源。
Head-of-Line Blocking(队头阻塞):队列前部的包被阻塞导致后续包也无法前进,从而放大延迟。
拥塞传播(congestion spreading):局部拥塞通过暂停/排队/反馈扩散到更多链路与业务的现象。
死锁风险(deadlock risk):在无损网络(尤其 PFC)中循环等待暂停条件可能形成无法恢复的阻塞环。
广播域(broadcast domain):二层广播能到达的范围,过大时会放大广播/未知单播的影响与故障域。
VLAN:二层逻辑隔离手段,用 VLAN ID 划分广播域与租户/业务隔离。
“RoCE 走 underlay”实践:为了更可控的 ECMP、QoS、ECN/PFC 与 MTU,一般让 RoCE 流量尽量不穿 overlay。
multi-rail(多条物理链路条带):用多 NIC/多端口把 RDMA 流量分摊到多条独立网络路径以获得更稳的负载均衡与容错。
如果你希望我把这些概念按“RoCEv2 数据面一条包从主机发出到对端主机”的顺序重排成一条链(从 QP→UDP/IP→ECMP→队列/ECN/PFC→对端完成),我也可以直接给一版“端到端路径图(文字版)”。