TCP tiene bloqueo de la cola de la cola, ya que garantiza la entrega completa y en orden, por lo que cuando un paquete se pierde en tránsito, tiene que esperar una retransmisión del paquete faltante, mientras que UDP entrega paquetes a la aplicación a medida que llegan , incluidos los duplicados y sin ninguna garantía de que llegue un paquete o en qué orden llegan (en realidad es esencialmente IP con números de puerto y una suma de verificación de carga útil (opcional) añadida), pero eso está bien para la telefonía, por ejemplo, donde generalmente simplemente no importa cuando faltan unos pocos milisegundos de audio, pero el retraso es muy molesto, por lo que no se molesta con las retransmisiones, simplemente suelta los duplicados, clasifica los paquetes reordenados en el orden correcto por unos pocos cientos de milisegundos de memoria intermedia de fluctuación , y si los paquetes no aparecen a tiempo o en absoluto, simplemente se omiten,posible interpolado donde sea compatible con el códec.
Además, una parte importante de TCP es el control de flujo, para asegurarse de obtener la mayor cantidad de througput posible, pero sin sobrecargar la red (lo cual es un poco redundante, ya que una red sobrecargada dejará caer sus paquetes, lo que significa que tendrá que hacerlo retransmite, lo que perjudica el rendimiento), UDP no tiene nada de eso, lo que tiene sentido para aplicaciones como la telefonía, ya que la telefonía con un códec dado necesita una cierta cantidad de ancho de banda, no se puede "ralentizar", y también ancho de banda adicional no hace que la llamada vaya más rápido.
Además de las aplicaciones en tiempo real / baja latencia, UDP tiene sentido para transacciones realmente pequeñas, como las búsquedas de DNS, simplemente porque no tiene el establecimiento de la conexión TCP y la sobrecarga de desmontaje, tanto en términos de latencia como en términos de uso de ancho de banda. Si su solicitud es más pequeña que una MTU típica y la respuesta probablemente también lo sea, puede hacerlo en una sola vuelta, sin necesidad de mantener ningún estado en el servidor, y el control de flujo también ordena y todo eso probablemente no sea particularmente útil para tales usos tampoco.
Y luego, puede usar UDP para construir sus propios reemplazos de TCP, por supuesto, pero probablemente no sea una buena idea sin una comprensión profunda de la dinámica de la red, los algoritmos TCP modernos son bastante sofisticados.
Además, supongo que debería mencionarse que hay más de UDP y TCP, como SCTP y DCCP. Actualmente, el único problema es que Internet (IPv4) está lleno de puertas de enlace NAT que hacen que sea imposible utilizar protocolos distintos de UDP y TCP en las aplicaciones de usuario final.