LOS SOCKETS
Introducción
En el siguiente ensayo
estudiaremos una de las herramientas que son vitales a la hora de poder
comunicarnos entre ordenadores. Sabemos que para tener una conectividad, por lo
menos del lado físico tenemos que tener un medio para poder tener la conexión,
ya sea cableado, inalámbricamente, etc. Sin embargo, para llegar a tener la
comunicación, necesitamos conectarla de una manera lógica que nos garantice el
intercambio de datos entre ordenadores, y como ayuda tenemos lo que se le llaman
Sockets.
¿Qué es un Socket?
Un Socket de red es un punto
final en un flujo de comunicación entre dos programas que se ejecutan en una
red, en otras palabras, un socket es el canal de comunicación por el que fluyen
los datos.
Los Sockets son creados y usados
con un conjunto de solicitudes de programación o “Llamadas de función” algunas
veces llamadas sockets de interfaz de programación de aplicaciones (API). (TechTarget, 2017)
Los Sockets también se pueden
usar para la comunicación entre procesos dentro de la misma computadora.
Cuando se declaran los sockets los
destinos de los mensajes se especifican como direcciones de socket; cada
dirección de socket es un identificador de comunicación que consta de un número
de puerto y una dirección de Internet.
Las operaciones de IPC (comunicación
entre procesos) se basan en pares de socket, cada uno perteneciente a un
proceso de comunicación, ya sea de emisor o de receptor. El IPC se realiza
intercambiando algunos datos mediante la transmisión de esos datos en un
mensaje entre un socket en un proceso y otro socket en otro proceso. Cuando se
envían mensajes, los mensajes se ponen en cola en el socket emisor hasta que el
protocolo de red subyacente los haya transmitido. Cuando llegan, los mensajes
se ponen en cola en el socket receptor hasta que el proceso de recepción
realiza las llamadas necesarias para recibirlos.
Hay dos protocolos de
comunicación que uno puede usar para la programación de sockets: Datagram
Communication (comunicación de datagramas) y (Stream Communication) comunicación
de flujo.
Comunicación de Datagramas:
Antes de explicar esta conexión veamos que es un datagrama:
Datagrama: Un datagrama es una unidad de
transferencia asociada con redes en donde los datos se transmiten de la fuente
al destino sin garantía de entrega y estos se dividen con frecuencia en
fragmentos más pequeños y se transmiten sin una ruta definida o un pedido de
entrega garantizado. (Techopedia Inc., 2017)
El protocolo de comunicación de
datagramas, conocido como UDP (protocolo de datagramas de usuario), es un
protocolo sin conexión, lo que significa que cada vez que envía datagramas,
también debe enviar el descriptor de socket local y la dirección de la toma
receptora. Como puede ver, se deben enviar datos adicionales cada vez que se
realiza una comunicación.
Comunicación de flujo:
El protocolo de comunicación de flujo se conoce como TCP
(protocolo de control de transferencia). A diferencia de UDP, TCP es un
protocolo orientado a la conexión. Para hacer la comunicación sobre el
protocolo TCP, primero debe establecerse una conexión entre el par de sockets.
Mientras uno de los sockets escucha una solicitud de conexión (servidor), el
otro solicita una conexión (cliente). Una vez que se han conectado dos sockets,
se pueden usar para transmitir datos en ambas direcciones (o en cualquiera de
las dos). (Mahmoud, 2017)
Ventajas de UDP
- Paquetes más pequeños, por ejemplo el header de UDP es de 8.
- No necesita crear una conexión antes de enviar datos.
- Más control sobre cuándo se envían los datos.
Desventajas de UDP
- Tiene una primitiva detección de errores, ya que este solo hace una suma de comprobación de los 16 bits que muchas veces no es de confianza.
- Cuando hay un segmento corrupto, UDP no tratara de recuperarlo, sino solo lo eliminara y solo manda un error a la aplicación para que este lo trate de alguna manera.
- Si un paquete se pierde, no lo reenvía.
- No garantiza que los paquetes lleguen al mismo orden con el que fueron enviados
- No hay control cuando llega a ver congestión, ya que si llega a ver congestión, este aún intenta mandar todos los paquetes
Ventajas TCP/IP
- Cuando se envía un paquete, el receptor confirma que se le entregó el paquete.
- Si se pierde un paquete, este lo reenvía.
- Como los segmentos están numerados, estos llegan en el mismo orden con el que fueron enviados.
- Si hay congestión, retrasa los demás paquetes para evitar la pérdida de paquetes.
Desventajas TCP/IP
- Su header es más grande ya que tiene 20 bytes.
- Muchas veces los datos no llegan inmediatamente o tardan demasiado.
- Tiende a tener una gran sobrecarga, efecto colateral de la retransmisión de paquetes. (PieterExplainsTech, 2013)
Conclusión
Podemos ver que tenemos que
elegir alguna de las dos formas de comunicarse, y normalmente la pregunta que
todos se hacen es “¿Cuál es mejor?”. La respuesta es que todo depende de qué
tipo de aplicación se esté construyendo, ya que para unos les convendrá usar sockets
datagrama y a otros usar sockets stream. Por ejemplo para hacer una comunicación
de texto, en stream no habrá problema, pero con datagramas, puede que la
información no esté en orden o simplemente es más fácil que algo se corrompa.
Sin embargo en servicios de streaming los desarrolladores prefieren usar
datagramas, ya que se evita la sobrecarga, es inmediato y se puede enmascarar
la perdida de paquetes. Por ello debemos de ser inteligentes y utilizar el que
más nos convenga.
Bibliografía
Mahmoud, Q. H. (15 de 10 de 2017). IDG
Communications Inc. Obtenido de Java World: https://www.javaworld.com
Techopedia Inc. (14 de 10 de 2017). Datagram.
Obtenido de Technopedia: https://www.techopedia.com
TechTarget. (14
de 10 de 2017). Network Socket. Obtenido de TechTarget | WhatIs.com:
http://whatis.techtarget.com
PieterExplainsTech (25
de 07 de 2013). UDP and TCP: Comparison
of Transport Protocols [Archivo de video]. Obtenido de https://www.youtube.com/watch?v=Vdc8TCESIg8
Comentarios
Publicar un comentario