Los sockets son puntos finales de enlaces de comunicaciones entre procesos.
Los procesos los tratan como descriptores de ficheros, de forma que se pueden
intercambiar datos con otros procesos transmitiendo y recibiendo a través de
sockets.
El tipo de sockets describe la forma en la que se transfiere información a
través de ese socket.
Sockets Stream (TCP, Transport Control
Protocol)
Son un servicio orientado a conexión donde los datos se transfieren sin
encuadrarlos en registros o bloques. Si se rompe la conexión entre los procesos,
éstos serán informados.
El protocolo de comunicaciones con streams es un protocolo orientado a
conexión, ya que para establecer una comunicación utilizando el protocolo TCP,
hay que establecer en primer lugar una conexión entre un par de sockets.
Mientras uno de los sockets atiende peticiones de conexión (servidor), el otro
solicita una conexión (cliente). Una vez que los dos sockets estén conectados,
se pueden utilizar para transmitir datos en ambas direcciones.
Sockets Datagrama (UDP, User Datagram
Protocol)
Son un servicio de transporte sin conexión. Son más eficientes que TCP, pero
no está garantizada la fiabilidad. Los datos se envían y reciben en paquetes,
cuya entrega no está garantizada. Los paquetes pueden ser duplicados, perdidos o
llegar en un orden diferente al que se envió.
El protocolo de comunicaciones con datagramas es un protocolo sin conexión,
es decir, cada vez que se envíen datagramas es necesario enviar el descriptor
del socket local y la dirección del socket que debe recibir el datagrama. Como
se puede ver, hay que enviar datos adicionales cada vez que se realice una
comunicación.
Son sockets que dan acceso directo a la capa de software de red subyacente o
a protocolos de más bajo nivel. Se utilizan sobre todo para la depuración del
código de los protocolos.
Diferencias entre Sockets Stream y Datagrama
Ahora se nos presenta un problema, ¿qué protocolo, o tipo de sockets, debemos
usar - UDP o TCP? La decisión depende de la aplicación cliente/servidor que
estemos escribiendo. Vamos a ver algunas diferencias entre los protocolos para
ayudar en la decisión.
En UDP, cada vez que se envía un datagrama, hay que enviar también el
descriptor del socket local y la dirección del socket que va a recibir el
datagrama, luego éstos son más grandes que los TCP. Como el protocolo TCP está
orientado a conexión, tenemos que establecer esta conexión entre los dos sockets
antes de nada, lo que implica un cierto tiempo empleado en el establecimiento de
la conexión, que no existe en UDP.
En UDP hay un límite de tamaño de los datagramas, establecido en 64
kilobytes, que se pueden enviar a una localización determinada, mientras que TCP
no tiene límite; una vez que se ha establecido la conexión, el par de sockets
funciona como los streams: todos los datos se leen inmediatamente, en el mismo
orden en que se van recibiendo.
UDP es un protocolo desordenado, no garantiza que los datagramas que
se hayan enviado sean recibidos en el mismo orden por el socket de recepción. Al
contrario, TCP es un protocolo ordenado, garantiza que todos los paquetes
que se envíen serán recibidos en el socket destino en el mismo orden en que se
han enviado.
Los datagramas son bloques de información del tipo lanzar y olvidar.
Para la mayoría de los programas que utilicen la red, el usar un flujo TCP en
vez de un datagrama UDP es más sencillo y hay menos posibilidades de tener
problemas. Sin embargo, cuando se requiere un rendimiento óptimo, y está
justificado el tiempo adicional que supone realizar la verificación de los
datos, los datagramas son un mecanismo realmente útil.
En resumen, TCP parece más indicado para la implementación de servicios de
red como un control remoto (rlogin, telnet) y transmisión de
ficheros (ftp); que necesitan transmitir datos de longitud indefinida.
UDP es menos complejo y tiene una menor sobrecarga sobre la conexión; esto hace
que sea el indicado en la implementación de aplicaciones cliente/servidor en
sistemas distribuidos montados sobre redes de área local.
|
|
[Anterior] [Indice] [Siguiente] |