Monday, May 04, 2009

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

Existen 2 protocolos muy populare para transferir datos por internet. Estos son el protocolo TCP y el protocolo UDP.
¿Cual es la diferencia entre estos dos protocolos??

1)El protocolo UDP, a diferencia de lo mucho que hace el protocolo tcp, es de lo más simple. Aparte de la función de multiplexeo/demultiplexing y alguna revisión mínimo de errores, no adiciona nada nuevo al IP. De hecho si el programador selecciona usar UDP en vez de TCP, entonces la aplicación tendrá interación casi directa con IP. UDP toma mensajes de applicaciones, para los servicios de multiplexeo/demultiplexing adiciona los campos de puerto fuente y puerto destino,agrega también 2 otros campos que no poseen mucha importancia y entrega el segmento resultante a la capa de red.
La capa de red encapsula al segmento en un datagrama de IP, y después hace su máximo esfuerzo por entregar el segmento al host correspondinete. Si el segmento llega de forma satisfactoria con el host, UDP entrega los números de puerto,la direcciónn de IP de la fuente, y la dirección de IP del destino a la aplicación de proceso correspondiente.
Es importante notar, que con UDP antes de enviar los datos, no existe ningún tipo de handshaking entre las entidades que envían y reciben datos. Es por esto que se dice que UDP trabaja sin conxión.
TCP a diferencia de UDP utiliza 3 modos distintos de handshake antes de empezar a transferir datos. UDP sólo empieza a transferir sin dar preliminares formales. Por lo anterior es claro que UDP no introduce ningún tipo de retraso cuando envia información. UDP es por ende más rápido que TCP.

Por otro lado, TCP mantiene el estado de conexión de todas sus terminales. Este estado de conexión incluye buffers enviados,bufers recibidos, control de parametros de congestión, parametros de acknowledgment, o reconocimiento. ( Esta información es muy útil para TCP, lo utiliza para tener un transfernecia de datos muy confiable, además le brinda control en momentos de congestión.)
UDP no mantiene ningún estado de conexión y no guarda ninguno de estos parametros. Por ende, un servidor devoto a una aplicación en partícular puede tener más clientes activos cuando la aplicación corra sobre UDP que cuando corra sobre TCP.

El segmento de TCP posee un segmento de cabecera de 20 bytes, mientras que el segmento UDP sólo posee una cabecera de 8 bytes.

TCP cuenta con un mecanismo de control de congestión , que acelera al transmisor cuando 2 ó más links ó ligas entre el transmisior o receptor se tornan excesivamente congestionadas. Esta aceleración puede tener un impacto severo en aplicaciones a tiempo real que pueden tolerar perdidas en sus paquetes, pero requieren usar una cierta tasa de transferencia.
Con respecto a UDP, para enviar datos la única restricción que presenta en la velocidad de envió, es el ciclo de reloj que posee la CPU desde la cual se están enviando los datos, así como el ancho de banda de acceso a Internet. Aunque debemos tomar en cuenta, que el host receptor no necesariamente recibirá todos los datos que se envían, cuando la red está congestiondada. Una fracción significante de los datos transmitidos se podrían perder debido a un sobreflujo del buffer del router. Por ende, la tasa de recpeción, está limitada por la congestión de la red, aun cuandp la tasa de envió no este restringida.


4 comments:

Moy said...

Interesante post, muy buena explicación al respecto.

Creo que lo único que faltaría (y más por perfeccionismo que otra cosa), es mencionar los usos comunes de TCP y UDP. Donde por todas las propiedades que bien mencionas, UDP es más popular en transmisión de datos en tiempo real, es decir, donde los datos deben llegar inmediatamente, por ejemplo una conversación telefónica, video etc(paquetes comunmente RTP), si un paquete llega muy tarde se descarta y existe un buffering muy pequeño que debe ser hecho por la aplicación misma. Por otro lado TCP es usado cuando es importante recibir todos los datos aunque tarde un poquito más, FTP, HTTP, SSH etc.

Es posible también que algunos mensajes en un protocolo sobre UDP necesiten acknowledge, pero eso debe hacerse en la capa de aplicación (por tanto responsabilidad del programador) y no asi en TCP donde como mencionas todo se maneja a nivel stack TCP (comunmente en el kernel, como es el caso de Windows y Linux), pero debe haber por ahi algun OS con el stack tcp en userland.

Moy said...

Oh, lo olvidaba, tal vez deberías hacer un post igual sobre SCTP :-)

Little Saiph said...

Muchas Gracias por tu comentario!
Muy buena información que sí es importnate agregar! Gracias ñ_ñ

Unknown said...

esta muy wena solo una pregunta ¿Qué sucede si una ventana no llega a entregarse o llega incompleta los archivos?