blog: draft "Paradox: More Hops, Lower Latency" - #124
Conversation
A rant about why subdividing a lossy path with proxies beats FEC: loss recovery costs one RTT of the worst hop, bursty loss is congestion, and answering congestion with parity bytes makes bufferbloat worse. Covers when FEC does make sense (random loss, no place for a proxy, small tolerant payloads), why CDNs put edges in every metro, and why P2P inherits the worst-case topology. Cover image is a placeholder reusing /blog/first-cdn/global.png. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Y8uAFWYzVPZ2e5UGw8DPx
Matches the house structure of the earlier rants, where the "In Defense of X" beat lands second-to-last. Also lets the bufferbloat section hand straight off to the CDN pop quiz, and lets the P2P section ramp into the concession instead of starting it cold. Retitled to "In Defense of Parity" since the previous FEC post already used "In Defense of FEC". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Y8uAFWYzVPZ2e5UGw8DPx
The first draft padded the argument out with a lot of invented voice. This cuts it back to the actual points, in order, at about a third the length. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Y8uAFWYzVPZ2e5UGw8DPx
|
OG text: can you help me make a draft for a new blog post in the usual style? Very similar to never use datagrams Paradox: More Hops, Lower Latency I want to shit on FEC some more. Some robotics teleop companies are peddling it. Also to (partially) explain why P2P is lower quality (or higher latency). The argument is that you want proxy nodes to split a lossy RTT into smaller and smaller segments. If there's packet loss over a 100ms RTT link, it takes at least 100ms to detect the loss and ~50ms for the retransmission to arrive, so you need a jitter buffer size of 150ms. But if you split the link into two 50ms hops, now it's 75ms. Further subdivisions. The reason is that IP/UDP has no retransmission mechanism or way to signal loss. By putting a TCP/QUIC proxy in the middle, you can now retransmit. It might add 1ms of latency because we have to hand each packet off from the router (L2) into the app (L3/L7). It's also going to be more expensive too, hardware routers versus software proxies. A counterargument is FEC. Instead of retransmitting lost packets on demand, you retransmit them opportunistically (parity bits). If a packet is randomly dropped, you can probably reconstruct it, if not fall back to a retransmit. problems:
bufferbloat is the cause of latency you should be worried about. Routers queuing packets for an indeterminate amount of time, dropping them when the queue is full (and latency is maximized). You need to send fewer bytes to drain these queues to the baseline latency, not transmit 50% more as parity. And keep in mind that you end up paying real money for this redundant egress at scale. FEC is a good idea when packet loss is truely random and not due to capacity (ex. signal interference). The lower level protocols (ex. wifi, 5G) do this for you based on the signal characteristics of the interface. FEC is also a good idea when you can't put proxies in the middle, aka in space. If you can't daisy chain but latency is important, then slap on a bunch of parity packets. And finally, FEC can work when your payload is small and tolerates loss. aka audio packets. But it's a terrible fit for video with our current codecs that take delta encoding to the extreme. A quiz: Why do CDN have edge nodes in every metro? Duh it's to make the lossy first/last hop as short as possible to minimize latency. Each L7 hop can deduplicate identical HTTP requests or MoQ subscriptions. This is how my favorite protocols scale; only one copy of the content makes it to each data center that needs it. But even for 1:1 traffic, you still want edge nodes. The CDN can either daisy chain like mentioned above, or it can overprovision the backbone so the relatively long hops are congestion free. I'm the world's biggest FEC hater. I'm in good company because QUIC doesn't support FEC, nor does TCP. The cloud companies hyper optimizing these protocols do it by moving the cloud closer to the users. It's a red flag if a live protocol advertises FEC. Either they don't understand networking the same way I do, or they're running the wrong infrastructure. traceroute the connect IP address and if it's not <20ms, alarm bells. btw pay for MoQ.pro. Unless you're a big boye, it's not economically viable to run your own edges world wide. Pool your money with other customers so you can share a fraction of a global presence. |
Draft blog post at
src/pages/blog/more-hops-lower-latency.mdx, written in the same rant register as Never* use Datagrams and Forward? Error? Correction?.The argument
In section order:
Notes for review
/blog/first-cdn/global.pngso the blog index doesn't render a broken thumbnail. Needs a real image (and apublic/blog/more-hops-lower-latency/directory) before shipping.dateis set to 2026-08-19. Worth noting that perCLAUDE.md, any.mdxundersrc/pages/blog/ships and gets announced on the nextjust deploy live, drafts included — so this shouldn't merge until it's ready to mail.bunx astro build: the post renders and appears in both/blog/andrss.xml.biome checkis clean apart from a pre-existing config-migration info.Commits
🤖 Generated with Claude Code
https://claude.ai/code/session_018Y8uAFWYzVPZ2e5UGw8DPx