Ambos são protocolos da camada de Transport, mas fazem trade-offs opostos. O TCP é orientado a conexão e confiável — ele garante que cada byte chegue, em ordem, exatamente uma vez. O UDP é sem conexão e do tipo "atire e esqueça" — ele apenas envia pacotes (datagrams) sem garantias de entrega ou ordenação. Você troca a confiabilidade do TCP pelo baixo overhead e velocidade do UDP.
TCP UDP
┌───────────────────────┐ ┌───────────────────────┐
│ connection (handshake)│ │ no connection │
│ reliable (retransmit) │ │ best-effort (no retry)│
│ ordered delivery │ │ unordered │
│ flow + congestion ctrl│ │ none │
│ higher overhead │ │ minimal overhead │
└───────────────────────┘ └───────────────────────┘
