¿Diferencia entre TCP y UDP?

144

¿Cuál es la diferencia entre TCP y UDP?

Sé que TCP se usa en el caso de aplicaciones que no son críticas para el tiempo, y UDP se usa para juegos o aplicaciones que requieren una transmisión rápida de datos. Sé que TCP se usa para HTTP, HTTP, FTP, SMTP y Telnet. Sé que UDP se usa para DNS y DHCP.

¿Pero por qué? ¿Qué características de TCP y UDP lo hacen útil para sus respectivos casos de uso?

usuario749414
fuente
13
¿Y esto ( skullbox.net/tcpudp.php ), que fue el primer éxito de Google, no fue lo suficientemente claro? ¿Qué era confuso al respecto? Tal vez esto es mejor? tcpipguide.com/free/…
S.Lott
1
Tengo mucha curiosidad por qué esta pregunta recibió (al momento de escribir) 3 votos a favor. La primera oración ni siquiera tiene sentido y hay mucho material disponible sobre este tema si se busca.
MattH
21
@MattH: 1) Es una buena pregunta, si es bastante amplia y un duplicado que ya está bien respondida. 2) Tuviste más que suficiente reputación para arreglar el error tipográfico en la primera oración. 3) Es irrelevante que exista información sobre esto en otro lugar. Stack Overflow tiene como objetivo convertirse en un depósito de conocimiento y responde preguntas canónicamente aquí .
ire_and_curses
2
Es interesante que casi nadie mencione que DHCP utiliza la transmisión, pero todos piensan que 'la respuesta' es sobre la garantía de entrega y retransmisión.
Heath Hunnicutt
1
Solo para cualquiera que lea esto en el futuro, el sitio Skullbox mencionado anteriormente tiene MALWARE según Google (me detuvo cuando hice clic en él). Aconsejaría no ir allí.
Alan006

Respuestas:

119

TCPes un flujo orientado a la conexión a través de una red IP. Garantiza que todos los paquetes enviados llegarán al destino en el orden correcto. Esto implica el uso de paquetes de acuse de recibo enviados de vuelta al remitente, y la retransmisión automática, causando demoras adicionales y una transmisión general menos eficiente que UDP.

UDPes un protocolo sin conexión. La comunicación está orientada a datagramas . La integridad está garantizada solo en el datagrama único. Los datagramas llegan a destino y pueden llegar fuera de servicio o no llegar. Es más eficiente que TCPporque no usa ACK . Generalmente se usa para la comunicación en tiempo real, donde un pequeño porcentaje de la tasa de pérdida de paquetes es preferible a la sobrecarga de una TCPconexión.

En ciertas situaciones UDPse usa porque permite la transmisión de paquetes de difusión. Esto a veces es fundamental en casos como el DHCPprotocolo, porque la máquina del cliente aún no ha recibido una IPdirección (este es el DHCPpropósito del protocolo de negociación) y no habrá ninguna forma de establecer una TCPsecuencia sin la IPdirección en sí.

Heisenbug
fuente
55
Un ejemplo en el que se usa UDP es en la transmisión de video y audio, donde perder algunos paquetes aquí y allá generalmente no importa tanto (el color de un cuadro puede estar apagado, o un pequeño nanosegundo de audio puede ser cortado o alterado - No es realmente notable para los humanos). Por supuesto, si su conexión es realmente mala, puede perder tantos paquetes que el video se vea borroso / pixelado y el audio se vuelva borroso y se interrumpa mucho.
Niko Bellic
53

Del artículo de Skullbox:

TCP (Protocolo de control de transmisión) es el protocolo más utilizado en Internet. La razón de esto es porque TCP ofrece corrección de errores. Cuando se usa el protocolo TCP hay una "entrega garantizada". Esto se debe en gran parte a un método llamado "control de flujo". El control de flujo determina cuándo es necesario reenviar los datos y detiene el flujo de datos hasta que los paquetes anteriores se transfieran con éxito. Esto funciona porque si se envía un paquete de datos, puede producirse una colisión. Cuando esto sucede, el cliente vuelve a solicitar el paquete del servidor hasta que todo el paquete esté completo y sea idéntico al original.

UDP (User Datagram Protocol) es otro protocolo de uso común en Internet. Sin embargo, UDP nunca se utiliza para enviar datos importantes como páginas web, información de bases de datos, etc. UDP se usa comúnmente para transmitir audio y video. La transmisión de medios como archivos de audio de Windows Media (.WMA), Real Player (.RM) y otros usan UDP porque ofrece velocidad. La razón por la que UDP es más rápido que TCP es porque no hay forma de control de flujo o corrección de errores. Los datos enviados a través de Internet se ven afectados por colisiones y habrá errores. Recuerde que UDP solo se preocupa por la velocidad. Esta es la razón principal por la cual la transmisión de medios no es de alta calidad.

1) TCP está orientado a la conexión y es confiable, ya que UDP no tiene conexión y es confiable.

2) TCP necesita más procesamiento en el nivel de interfaz de red donde, como en UDP, no lo es.

3) TCP utiliza, protocolo de enlace de 3 vías, control de congestión, control de flujo y otros mecanismos para garantizar una transmisión confiable.

4) UDP se utiliza principalmente en casos donde el retraso del paquete es más grave que la pérdida del paquete.

p27
fuente
1
+1 Resumen razonablemente bueno. Aunque la is the most commonly used protocol on the Internetdeclaración es discutible y realmente depende de cómo se defina most commonly used, protocoly the Internet. Por ejemplo, el Protocolo de Internet es un competidor más probable para esa corona en particular.
MattH
-1: La razón por la que se usa UDP para DHCP no tiene nada que ver con la demora o pérdida de paquetes.
Heath Hunnicutt
2
Cuando se envían muchos datos en un canal claro, el TCP suele ser más rápido que UDP. La razón por la que UDP se usa para cosas como la transmisión de audio o video en vivo es que cuando un paquete TCP se pierde, la aplicación receptora no verá nada más hasta que los datos faltantes hayan sido retransmitidos y recibidos con éxito. En muchas aplicaciones de transmisión, los datos que llegan tarde serán inútiles, por lo que no tiene sentido retener todo mientras espera una retransmisión que de todos modos será inútil.
supercat
UDP se usa para DHCP porque TCP no admite transmisiones. DHCP se basa en el uso de una transmisión para obtener la dirección IP del servidor DHCP. Ver stackoverflow.com/questions/21266008/…
ScottSmudger
41

Piense en TCP como una recogida / entrega de paquetes UPS / FedEx programada dedicada entre dos ubicaciones, mientras que UDP es el equivalente a tirar una tarjeta postal en un buzón.

UPS / FedEx hará todo lo posible para asegurarse de que el paquete que envíe llegue y llegue a tiempo. Con la tarjeta postal, tienes suerte si llega, y puede llegar fuera de servicio o tarde (¿cuántas veces has recibido una tarjeta postal de alguien DESPUÉS de que haya llegado a casa de las vacaciones?)

TCP está lo más cerca posible de un protocolo de entrega garantizado, mientras que UDP es simplemente el "mejor esfuerzo".

Marc B
fuente
1
Decente suficiente respuesta. Agregaría que en una secuencia TCP los paquetes son reconocidos por el destino y los paquetes corruptos / paquetes faltantes son reenviados por el remitente. En UDP, los paquetes se envían y el destino los recibe en cualquier orden y no acusa recibo.
Erik Nedwidek
2
Un poco de una analogía engañosa quizás más adecuada para QoS
MattH
11
Me gusta mucho la analogía, pero una cosa que esta respuesta tergiversa un poco es la velocidad. hace que parezca que TCP es más rápido, cuando en realidad UDP es porque hay menos sobrecarga.
iliketocode
22

Motivos UDP se utiliza para DNS y DHCP:

DNS: TCP requiere más recursos del servidor (que escucha las conexiones) que del cliente. En particular, cuando se cierra la conexión TCP, el servidor debe recordar los detalles de la conexión (manteniéndolos en la memoria) durante dos minutos, durante un estado conocido como TIME_WAIT_2. Esta es una característica que defiende contra los paquetes repetidos erróneamente de una conexión anterior que se interpreta como parte de una conexión actual. Mantener TIME_WAIT_2 usa memoria del núcleo en el servidor. Las solicitudes de DNS son pequeñas y llegan con frecuencia desde muchos clientes diferentes. Este patrón de uso exacerba la carga en el servidor en comparación con los clientes. Se creía que el uso de UDP, que no tiene conexiones ni estado para mantener en el cliente o el servidor, mejoraría este problema.

DHCP: DHCP es una extensión de BOOTP. BOOTP es un protocolo que utilizan las computadoras cliente para obtener información de configuración de un servidor, mientras el cliente se inicia. Para localizar el servidor, se envía una transmisión solicitando servidores BOOTP (o DHCP). Las transmisiones solo se pueden enviar a través de un protocolo sin conexión, como UDP. Por lo tanto, BOOTP requería al menos un paquete UDP para la transmisión de localización del servidor. Además, debido a que BOOTP se está ejecutando mientras el cliente ... arranca, y este es un período de tiempo en el que el cliente puede no tener toda su pila TCP / IP cargada y ejecutándose, UDP puede ser el único protocolo que el cliente está listo para manejar en ese momento hora. Finalmente, algunos clientes DHCP / BOOTP solo tienen UDP a bordo. Por ejemplo, algunos termostatos IP solo implementan UDP.

Como otros han mencionado, UDP también es útil para la transmisión de medios, especialmente audio. Las conversaciones suenan mejor bajo el retraso de la red si simplemente descarta los paquetes retrasados. Puede hacerlo con UDP, pero con TCP todo lo que obtiene durante el retraso es una pausa, seguida de audio que siempre se retrasará tanto como ya se ha detenido. Para conversaciones telefónicas bidireccionales, esto es inaceptable.

Heath Hunnicutt
fuente
17

Una de las diferencias es en resumen

UDP : Enviar mensaje y no mirar hacia atrás si llegó a destino, Protocolo sin conexión
TCP : Enviar mensaje y garantía de llegar a destino, Protocolo orientado a conexión

caltuntas
fuente
9

TCP establece una conexión antes de que tenga lugar la transmisión de datos real, UDP no. De esta manera, UDP puede proporcionar una entrega más rápida. Las aplicaciones como DNS, acceso al servidor horario, por lo tanto, usan UDP.

A diferencia de UDP, TCP utiliza el control de congestión. Responde a la carga de la red. A diferencia de UDP, se ralentiza cuando la congestión de la red es inminente. Por lo tanto, las aplicaciones como multimedia que prefieren un rendimiento constante pueden ser UDP.

Además, UDP no es confiable, no reacciona ante la pérdida de paquetes. Por lo tanto, las aplicaciones sensibles a la pérdida, como la transmisión multimedia, prefieren UDP. Sin embargo, TCP es un protocolo confiable, por lo tanto, las aplicaciones que requieren confiabilidad como transferencia web, correo electrónico, descarga de archivos prefieren TCP.

Además, en Internet hoy en día UDP no es tan acogedor como TCP debido a los cuadros intermedios. Algunas aplicaciones como Skype caen a TCP cuando se supone que la conexión UDP está bloqueada.

Timir
fuente
2

Breves y simples diferencias entre el protocolo Tcp y Udp:

1) Tcp: protocolo de control de transmisión y Udp: protocolo de datagramas de usuario.

2) Tcp es un protocolo confiable, mientras que Udp es un protocolo poco confiable.

3) Tcp es un flujo orientado, mientras que Udp es un protocolo orientado a mensajes.

4) Tcp es más lento que Udp.

msc
fuente
1

Ejecute este hilo y déjeme intentar expresarlo de esta manera.

TCP

Apretón de manos de 3 vías

Bob: Hola Amy, me gustaría contarte un secreto
Amy: OK, adelante, estoy listo
Bob: OK

Comunicación
Bob: 'Yo', esta es la primera letra
Amy: Primera carta recibida, por favor envíeme la segunda letra
Bob: '', esta es la segunda letra
Amy: Segunda carta recibida, envíeme la tercera letra
Bob: 'L ', esta es la tercera letra
Después de un tiempo
Bob: ' L ', esta es la tercera letra
Amy: Tercera carta recibida, por favor envíeme la cuarta letra
Bob: ' O ', esta es la cuarta carta
Amy: ...
... ...

Apretón de manos de 4 vías
Bob: Mi secreto está expuesto, ahora conoces mi corazón.
Amy: ok. No tengo nada que decir.
Bob: ok.

UDP

Bob: TE AMO
Amy recibió: OVI LE

TCP es más confiable que UDP con un orden de mensajes uniforme garantizado, por eso UDP es más ligero y eficiente.

Eugene
fuente
0

Explicación simple por analogía

TCP es así.

Imagina que tienes un amigo por correspondencia en Marte (nos comunicamos con cartas escritas en los viejos tiempos antes de internet).

Debe enviar a su amigo por correspondencia los siete hábitos de las personas altamente efectivas. Entonces decides enviarlo en siete cartas separadas:

  1. Carta 1 - Sea proactivo
  2. Carta 2 - Comience con el fin en mente ...

etc.

etc..Carta 7 - Afilar la sierra

Requisitos:

Desea asegurarse de que su amigo por correspondencia reciba todas sus cartas, en orden y que lleguen perfectamente . Si su bolígrafo recibe la letra 7 antes de la letra 1, eso no es bueno. si su amigo por correspondencia recibe todas las letras excepto la letra 3, eso tampoco es bueno.

Así es como nos aseguramos de que se cumplan nuestros requisitos:

  • Carta de confirmación: Entonces su amigo por correspondencia envía una carta de confirmación para decir "He recibido la carta 1". De esa manera, sabrá que su amigo por correspondencia lo ha recibido. Si una carta no llega o llega fuera de servicio, entonces debe detenerse y regresar y volver a enviar esa carta y todas las cartas posteriores.
  • Control de flujo: en la época de Navidad, sabe que su amigo por correspondencia recibirá una gran cantidad de correo, por lo que disminuirá la velocidad porque no quiere abrumarlo. (Su amigo por correspondencia le envía actualizaciones constantes sobre la cantidad de mensajes no leídos que hay en el buzón de correo de su amigo por correo; si su amigo por correo dice que la bandeja de entrada está a punto de explotar porque está muy llena, entonces disminuye la velocidad al enviar sus cartas, porque su amigo por correo no podrá leerlos.
  • Llegada perfecta A veces, mientras envía su carta por correo, puede romperse o un caracol puede comer la mitad. ¿Cómo sabes que toda tu carta ha llegado en perfectas condiciones? Bueno, su amigo por correspondencia le dará un mecanismo por el cual puede verificar si recibió la carta completa y si fue exactamente la carta que envió. (por ejemplo, a través de un recuento de palabras, etc.). Una analogía básica.
BKSpurgeon
fuente
0

TLDR;

  • TCP: orientado a la transmisión, requiere una conexión, confiable, lento
  • UDP: orientado a mensajes, sin conexión, poco confiable, rápido

Antes de comenzar, recuerde que todas las desventajas de algo son una continuación de sus ventajas . Solo hay una herramienta adecuada para un trabajo, no hay panacea. TCP / UDP coexistió durante décadas, y por una razón.

TCP

Fue diseñado para ser extremadamente confiable y hace su trabajo muy bien. Es muy complejo porque realiza una tarea difícil: demostrar un transporte confiable a través del protocolo IP poco confiable.

Dado que toda la lógica compleja de TCP está encapsulada en la pila de red, no tiene que hacer muchas tareas laboriosas y propensas a errores de bajo nivel en la capa de aplicación.

Cuando envía datos a través de TCP, escribe una secuencia de bytes en el socket en el remitente donde se divide en paquetes, se pasa por la pila y se envía por cable. En el lado del receptor, los paquetes se vuelven a ensamblar en un flujo continuo de bytes.

Mantener esta agradable abstracción tiene un costo en términos de complejidad y rendimiento. Si se pierde el primer paquete del flujo de bytes, el receptor retrasará el procesamiento de los paquetes posteriores, incluso aquellos que ya han llegado.

Además, para ser confiable, TCP implementa esto:

  • TCP requiere una conexión establecida, que requiere 3 viajes de ida y vuelta (apretón de manos de 3 vías "infame").
  • TCP tiene una característica llamada "inicio lento" cuando aumenta gradualmente la velocidad de transmisión después de establecer una conexión para permitir que un receptor se mantenga al día con los datos.
  • Cada paquete enviado debe ser reconocido o, de lo contrario, un remitente dejará de enviar más datos
  • Y sigue y sigue y sigue...

Todo esto se exacerba en redes inalámbricas lentas y poco confiables, mientras que TCP fue diseñado para redes cableadas donde los retrasos son predecibles y la pérdida de paquetes no es tan común. Además, como muchas personas ya mencionaron, para algunas cosas TCP simplemente no funciona en absoluto (DHCP). Sin embargo, cuando es relevante, TCP todavía hace su trabajo excepcionalmente bien.

Al usar una analogía de correo, una sesión TCP es similar a contarle una historia a su secretaria, que la divide en correos y envía un servicio de correo basura a un editor. Por otro lado, otra secretaria reúne los correos en un solo texto. Algunos correos se pierden, otros se corrompen, por lo que se requiere un procedimiento muy complejo para una entrega confiable y su historia de 10 páginas puede tardar mucho tiempo en llegar a su editor.

UDP

UDP, por otro lado, está orientado a mensajes, por lo que un receptor escribe un mensaje (paquete) en el zócalo y luego se transmite a un receptor tal cual, sin ninguna división / ensamblaje.

En comparación con TCP, su especificación es muy simple. Esencialmente, todo lo que hace por usted es agregar una suma de verificación al paquete para que un receptor pueda detectar su corrupción. Todo lo demás debe ser implementado por usted, un desarrollador de software. Ahora lea la voluminosa especificación TCP e intente volver a implementar algunas partes de ella.

Algunas personas tomaron este camino y obtuvieron resultados muy decentes, hasta el punto de que HTTP / 3 usa QUIC, un protocolo basado en UDP. Sin embargo, esto es más una excepción. Las aplicaciones comunes de UDP son aplicaciones de audio / video y conferencias como Skype, Zoom o Google Hangout, donde perder paquetes no es tan importante en comparación con un retraso introducido por TCP.

raiks
fuente