← all notes

QUIC, PMTUD and the MTU you forgot about

Every few months a QUIC rollout gets blamed for a problem that turns out to be an MTU black hole somewhere in the path. The pattern is always the same: TCP works, QUIC stalls, and the packet captures show large datagrams leaving but nothing coming back.

Why QUIC notices and TCP hides it

TCP gets segmented by the kernel and can rely on retransmission with a shrinking MSS. QUIC has no such negotiation — it relies on DPLPMTUD, and some middleboxes drop the ICMP "fragmentation needed" messages that would let it converge. The result is a handshake that completes and a transfer that never starts.

What I check first

Path MTU on the tunnel interface, then the clamp on the router. On most Linux boxes a mss clamp plus a sane advmss on the tunnel gets you out of trouble; the important part is testing from the actual client network, not from the datacentre.

Second on the list: any device doing NAT that rewrites the outer header but not the inner one. That one cost me an afternoon.