← All posts

Bandwidth isn't
the point.

Post 2 in a series on intelligent network routing. Almost every multi-link product assumes you bond connections to go faster. Weavian bonds them so a session survives the loss of a link without anyone noticing. Those are different goals — and optimizing hard for the first one quietly works against the second.

There's a quiet assumption baked into almost every multi-link networking product: that the reason you'd bond two connections together is to go faster. Combine the pipes, add up the bandwidth, enjoy the bigger number. It's the headline on every consumer bonding box and the default mental model for most SD-WAN bonding too.

For a lot of people that assumption is correct. If you're a rural office stitching two slow DSL lines into one usable connection, throughput is exactly what you want. But it's worth noticing that "faster" and "won't drop" are different goals — and that optimizing hard for the first one quietly works against the second. Weavian is built for the second. This post is about why, and what we do instead.

How striping works, and where it breaks

The technique behind throughput bonding is striping. You take your packets and spread them across the available links: packet one over cable, packet two over 5G, packet three over satellite, and around again. Each link carries a share of the load, so the aggregate throughput is roughly the sum of the links. MPTCP does a sophisticated version of this. Speedify does it. Most bonding products do some flavor of it.

Diagram comparing striping and duplication across three WAN links. On the left, striping spreads packets across links so a link failure leaves a gap in the stream. On the right, duplication sends every packet on every path so a copy always arrives.
Figure 1. Two ways to use three links. Striping (left) splits packets across links to add up bandwidth — the model behind throughput bonding and MPTCP. When one link fails, the packets it was carrying are simply lost, leaving a gap in the stream. Duplication (right) sends the same packet on every active path, so loss on any one link is invisible because an identical copy is already arriving on the others.

The problem shows up at the moment you actually need resilience. Because each packet exists on exactly one link, a link failure isn't a slowdown — it's a hole. Whatever packets were riding the link that just dropped are gone. The receiver gets an incomplete stream and has to wait for retransmission, or simply does without. For a bulk file transfer, that's tolerable; TCP will sort it out and you'll never notice. For a live video call, a trading session, a remote-surgery feed, or a tactical radio relay, that gap is the whole problem. It's the stutter, the freeze, the dropped word.

Striping optimizes for the average case — total bytes moved per second. Resilience is about the worst case — what happens in the half-second a link dies mid-session. Those are not the same objective, and a design tuned for one is not automatically good at the other.

What we do instead: duplicate

Weavian doesn't split traffic across links to go faster. For traffic that has to stay alive, it sends the same packet across every active path at once. Cable, 5G, and satellite all carry identical copies of packet one, then packet two, then packet three. At the cloud anchor, the first copy of each packet to arrive is the one that gets used; the duplicates are discarded. When a link degrades or fails outright, nothing is lost, because an identical copy is already on its way over the links that are still healthy. The surviving path is always there. There's no gap to recover from because there was never a gap.

It's the difference between "we recovered from the outage quickly" and "there was no outage to recover from."

This is what lets failover be invisible rather than disruptive. The session doesn't reset, the connection doesn't have to be re-established, and the application on top has no idea anything happened.

The honest trade-off

Duplication is not free, and we don't pretend it is. Sending three copies of every packet uses roughly three links' worth of bandwidth to move one link's worth of data. If your goal is to maximize throughput, that's exactly backwards.

So the right way to think about it isn't "duplication beats striping." It's that they optimize for different things, and the interesting move is choosing per flow. A bulk backup or a software update doesn't need duplication — it needs throughput and doesn't care about a momentary gap, so it can stripe or simply ride the cheapest path. A real-time call needs the opposite. Because Weavian classifies every flow (more on that in the next post), it can apply the redundant, duplicate-everywhere treatment to the sessions that must not break and leave the bulk traffic to use bandwidth efficiently. You're not picking one philosophy for the whole connection. You're spending redundancy where it buys you something and saving it where it doesn't.

That's the part the "bigger number" framing misses. The valuable thing a multi-link fabric can do isn't adding up bandwidth — bandwidth is a commodity you can usually just buy more of. The valuable thing is making a session survive the loss of a link without anyone noticing. That's much harder to buy, and it's what we built for.

Why this is a deliberate choice

It would have been easier to ship a throughput-bonding product. The market understands "faster," the demo is a speed-test needle going up, and the engineering is well-trodden. We went the other way because the customers we care about — clinics, command posts, first responders, anyone whose work stops when the connection stutters — don't have a bandwidth problem. They have a continuity problem. For them, a connection that's 30% slower but never drops mid-session beats a faster one that occasionally does, every single time.

So when you see Weavian described as a bonding fabric, keep the distinction in mind. We bond links — but not to make the pipe bigger. We bond them so that no single link can take a session down, and so the failure of one becomes something your users simply never experience.

This is one piece. There's more to come.

Duplication is the transport story: how the bytes move and why a lost link doesn't mean lost packets. It sits underneath everything else in this series. The next post is about the layer that decides which traffic gets this treatment in the first place — how the edge tells a Zoom call apart from a file sync, in the kernel, in under a millisecond, without ever looking at what's inside your packets.

If your work depends on connectivity that can't drop mid-session,
get in touch.

We'll show you what this looks like in your environment.

Request a demo