Fat trees are the canonical network topology where
- endpoints (nodes) connect up to leaf (edge) switches
- half the ports of leaf switches connect down to endpoints, and the other half connect up to the next layer of switches
- etc
Non-blocking fat trees
Nonblocking fat trees are a straightforward way to ensure that any two endpoints on a network have full, non-blocking bandwidth between each other.
We’ll describe the properties of these topologies in terms of , the switch radix, which is determined by switch vendors. If Arista talks about a 64-port 800G switch, . If they say you can split each port into links, then .
Two-level
Two-level nonblocking trees are created by connecting every edge switch to every core switch:

It’s pretty straightforward because these trees have
- core switches, with all ports facing down
- edge switches, with half ports facing down, half facing up
- total switches
There are
- endpoints per edge
- endpoints total
Three-level
Three-level nonblocking trees are created by forming pods, whereby
- Endpoints connect up to one of edge switches
- Each edge switch connects up to aggregation switches
- Aggregation switches connect up to a distinct set of switches
For example, here is an example using four-port switches ():

Edge and aggregation switches both use half of their ports to connect down, and the other half to connect up. The core switches use all their ports to connect down to aggregation switches.
These trees have:
- core switches
- aggregation switches
- edge switches
- total switches
There are
- pods
- edges per pod
- endpoints per edge
- endpoints total
Three-level trees are significantly more expensive than two-level trees because the total switch count scales as instead of . This is the reason why tapered trees or alternative topologies like dragonfly are used at large scales.