junio 10, 2022

API para los Protocolos de Internet

 Socket

Un socket es un punto final de comunicación [2] en el que una aplicación puede escribir información destinada a enviarse fuera de la red subyacente, y desde el cual puede leerse información entrante. Un socket forma una abstracción sobre el punto final real de comunicación, el cual utiliza el sistema operativo local para un protocolo de transporte específico.

Socket. Tomado de [1]

La comunicación entre procesos [1] consiste en transmitir un mensaje entre un socket en un proceso y otro socket en otro proceso.  Para que un proceso reciba mensajes , su socket debe estar vinculado a un puerto local y una de las direcciones de Internet de la computadora en la que se ejecuta (ver figura 1).
Los mensajes enviados a una dirección de Internet y número de puerto en particular solo pueden ser recibidos por un proceso cuyo socket esté asociado con esa dirección de Internet y número de puerto.
Los procesos pueden usar el mismo socket para enviar y recibir mensajes.

Para enviar o recibir mensajes, un proceso primero debe crear un socket vinculado a una dirección de Internet del host local y un puerto local. Un servidor vinculará su socket a un puerto de servidor, uno que se da a conocer a los clientes para que puedan enviarle mensajes. Un cliente vincula su socket a cualquier puerto local libre. El método de recepción devuelve la dirección de Internet y el puerto del remitente, además del mensaje, lo que permite al destinatario enviar una respuesta

Tanto UDP como TCP usan la abstracción de socket, para la comunicación entre procesos. A continuación se indican los aspectos involucrados con la comunicación de Datagramas y la comunicación de flujos. 

Comunicación de Datagramas UDP

Un datagrama  UDP [1] se transmite desde un proceso de envío a un proceso de recepción sin acuse de recibo ni reintentos. Si ocurre una falla, es posible que el mensaje no llegue. Los siguientes son algunos problemas relacionados con la comunicación de datagramas:
  • Tamaño del mensaje: El protocolo IP subyacente permite longitudes de paquete de hasta 216 bytes, lo que incluye los encabezados y el mensaje. Sin embargo, la mayoría de los entornos imponen una restricción de tamaño de 8 kilobytes. 
  • Bloqueo:  los sockets proporcionan envíos sin bloqueo y recepciones con bloqueo. La operación de envío regresa cuando ha entregado el mensaje a los protocolos UDP e IP subyacentes. Al llegar, el mensaje se coloca en una cola para el socket que está vinculado al puerto de destino. 
    El método de recepción  bloquea hasta que se recibe un datagrama, a menos que se haya establecido un tiempo de espera en el socket.  
  • Tiempo espera: Se puede establecer tiempo de espera en los socket para evitar que un proceso que ha invocado una operación de  recepción se mantenga esperando indefinidamente.
  • Recibe desde cualquiera:  El método de recepción devuelve la dirección de Internet y el puerto local del remitente, lo que permite al destinatario verificar de dónde proviene el mensaje. Es posible conectar un socket de datagrama a un puerto remoto y una dirección de Internet en particular, en cuyo caso el socket solo puede enviar y recibir mensajes desde esa dirección.

 Modelo de Fallas 

La comunicación de Datagramas UDP sufren de las siguientes fallas:
  • Fallas de Omisión: mensajes pueden perderse ocasionalmente, por causa de un error detectado en un checksum o falta de espacio en el buffer. 
  • Orden: mensajes se entregan fuera del orden que se enviaron.

Uso de UDP

Ejemplos de aplicaciones que usan UDP : el Sistema de nombres de dominio (DNS), voz sobre IP (VOIP), streaming  de videos y audios,  Los datagramas UDP a veces son una opción atractiva porque no sufren los gastos generales asociados con la entrega garantizada de mensajes. Hay tres fuentes principales de sobrecarga en UDP:
  • la necesidad de almacenar información del estado en el origen y el destino;
  • la transmisión de mensajes adicionales;
  • latencia para el remitente.

Comunicación de Stream TCP

El API del protocolo TCP [1] proporciona la abstracción de un flujo (stream) de bytes en el que se pueden escribir datos y desde el cual se pueden leer.  Las siguientes características de la red están ocultas por la abstracción Stream:
  • Tamaño de mensajes: la aplicación escoge la cantidad de datos para leer/escribir del stream. 
  • Mensajes Perdidos: usa un esquema de acuse de recibo del mensaje. Hay retransmisión del mensaje si no se recibe el acuse.
  • Control del Flujo: protocolo TCP intenta ajustar las velocidades  de los procesos que leen/escriben en un stream. 
  • Duplicación y orden de los mensajes: cada paquete IP se la asocia un identificador que hace posible detectar mensaje duplicados  y reordenar los que lleguen desordenados. 
  •  Destino del Mensaje: procesos establecen una conexión antes de enviar un stream. Una vez establecido la conexión, los procesos leen/escriben sin enviar direcciones ni puertos
La comunicación de Stream TCP supone una conexión cliente-servidor con las siguientes acciones:
  • Cliente crea un socket de tipo stream y la petición de conexión con el servidor en su puesto de servicio.
  • Servidor crea un socket de escucha ligado al puerto de servicio y el socket de escucha mantiene una cola de peticiones de conexión.
  • Cuando un servidor acepta una conexión, crea un socket  para la comunicación del cliente y se reserva el socket del puerto de servicio para escuchar las peticiones de otros clientes.
  • Cuando una aplicación cierra un socket  significa que no va a seguir escribiendo.
Lo siguientes son aspectos relacionados a la comunicación por Stream: 
  • Concordancia de items de datos: los procesos que se comunican necesitan estar de acuerdo con el tipo de datos transmitidos por el stream 
  • Bloqueo:  Un proceso intenta leer los datos de un canal de entrada, o los extrae de la cola o se bloquea hasta que existan datos. El proceso de escritura de datos en el stream se bloqueará por el mecanismo de control de flujo de TCP, si el socket del otro lado intenta almacenar más información de la permitida.
  • Hilos: cuando un servidor acepta una conexión, se crea un hilo  para comunicarse con el cliente. 

Modelo de Fallas 

Para satisfacer la propiedad de integridad de una comunicación confiable, los flujos TCP usan checksum para detectar y rechazar paquetes corruptos y números de secuencia para detectar y rechazar paquetes duplicados. También, por  la propiedad de validez, los flujos de TCP usan tiempos de espera y retransmisiones para tratar los paquetes perdidos. 
Si no se recibe acuse de recibo de los paquetes, el software declara la conexión rota. Efectos de una conexión rota:
  • Los procesos que utilizan la conexión no distinguen entre un fallo de red y un fallo en el proceso que esta en el otro extremo de la conexión.
  • Los procesos comunicantes no pueden saber si sus mensajes recientes se recibieron o nó.

Uso de TCP

Muchos servicios se ejecutan sobre conexiones de tipo TCP, con números de puertos reservado. Incluyen:
  • HTTP:  protocolo de transferencia de hipertexto
  • FTP: leer directorios de computadores remotos 
  • Telnet: acceso a un terminal en un computador remoto 
  • SMTP: protocolo de transferencia de correos.

Referencias

  1. Coulouris, George F. Distributed Systems: Concepts and Design. Boston: Addison-Wesley, 2012.
  2. Tanenbaum, Andrew S., and Maarten van Steen. Distributed Systems: Principles and Paradigms. Upper Saddle River, NJ: Pearson Prentice Hall, 2007. 

No hay comentarios.:

Publicar un comentario