TCP is also deciding to ramp up the amount of boxes you kick over until the post worker gets crushed by boxes, at which point you decide to lower your box-kicking rate by half and try again.
Well yes, internally that's what it does, but from a user perspective it just looks like being handed the package, you never see any of the failed attempts (unless delivery fails completely because the company went out of business). It's sorta more like having a butler who orders it for you and deals with any potential BS that might happen, and then just hands you the package when it finally arrives in one piece.
UDP seems more like a ball fired from canon to me. You may not be prepared for it and you won't know what state it's in when it gets here, but that packet is making it to the gate no matter what. Or, in the rare case it doesn't, it means someone else is having a real bad time.
I mean I've been trying to formally request that ISO change the C API for send() to yeet() for sockets where connection reliability is not required at the network interface level.
Not really a problem with UDP itself, but with some very old protocols like DNS that rely on UDP but can’t be changed because of compatibility. If you’re writing a new service that uses UDP, there’s nothing stopping you from designing it so that it doesn’t provide an opportunity for bandwidth amplification.