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] |