O TCP possui bloqueio no cabeçalho da fila, pois garante entrega completa e em ordem; portanto, quando um pacote é perdido em trânsito, ele precisa aguardar uma retransmissão do pacote ausente, enquanto o UDP entrega pacotes ao aplicativo assim que chegam. , incluindo duplicatas e sem qualquer garantia de que um pacote chegue ou em que ordem eles chegam (na verdade é essencialmente IP com números de porta e uma soma de verificação de carga útil (opcional) adicionada), mas isso é bom para telefonia, por exemplo, onde normalmente simplesmente não importa quando faltam alguns milissegundos de áudio, mas o atraso é muito irritante, para que você não se incomode com retransmissões, basta soltar duplicatas e ordenar pacotes reordenados na ordem certa por algumas centenas de milissegundos de buffer de tremulação , e se os pacotes não aparecerem a tempo ou nada, eles são simplesmente ignorados,possível interpolado quando suportado pelo codec.
Além disso, uma parte importante do TCP é o controle de fluxo, para garantir que você obtenha o máximo de througput possível, mas sem sobrecarregar a rede (o que é meio redundante, pois uma rede sobrecarregada descarta seus pacotes, o que significa que você deve fazer retransmite, o que prejudica a produtividade), o UDP não possui nada disso - o que faz sentido para aplicativos como telefonia, pois a telefonia com um determinado codec precisa de uma certa quantidade de largura de banda, você não pode "desacelerar", e largura de banda adicional também não torna a chamada mais rápida.
Além dos aplicativos em tempo real / baixa latência, o UDP faz sentido para transações realmente pequenas, como pesquisas de DNS, simplesmente porque não possui o estabelecimento da conexão TCP e a sobrecarga de desmontagem, tanto em termos de latência quanto em termos de uso da largura de banda. Se sua solicitação for menor que uma MTU típica e a repsonse provavelmente também for, você poderá fazer isso em uma ida e volta, sem precisar manter nenhum estado no servidor, e o controle de fluxo também ordenará e tudo o que provavelmente não é particularmente útil para tais usos também.
E então, você pode usar o UDP para criar suas próprias substituições de TCP, é claro, mas provavelmente não é uma boa idéia sem uma compreensão profunda da dinâmica da rede, os algoritmos modernos de TCP são bastante sofisticados.
Além disso, acho que deve ser mencionado que há mais do que UDP e TCP, como SCTP e DCCP. O único problema atualmente é que a Internet (IPv4) está cheia de gateways NAT que impossibilitam o uso de protocolos diferentes de UDP e TCP em aplicativos de usuário final.