2. Sistemas Distribuidos
Comunicación interprocesos
René Guamán-Quinche
Facultad de la Energía, las Industrias y los Recursos Naturales No Renovables
Carrera de Ingeniería en Sistemas/Computación
Noviembre, 2020
Loja, Ecuador
3. 3
1. Introducción
2. El api de los protocolos de internet
3. Representación externa de datos y serialización
4. Comunicación multicast
5. Virtualización de redes
6. Posix
Contenido
4. 4
Introduction
Los procesos dentro de los sistemas
distribuidos se ejecutan en los diferentes
recursos de procesamiento disponible,
muchas veces repartidos en la red. La
concecuencia de esto es que los procesos
deben tener un medio para que se
puedan comunicar
Estos métodos incluyen: Socket, paso
de mensajes, redes superpuestas
(overlay networks) y soporte multicast
5. 5
The API for the internet protocols
El paso de mensajes entre procesos puede ser soportado por dos operaciones de
comunicación de mensajes: sent y receive (enviar o recibir)
6. 6
The API for the internet protocols
Comunicación síncrona o
asíncrona: La operación enviar
puede bloquear el proceso o el hilo
de ejecución a la espera de su
correspondiente operación recibir
(síncrona). O se puede enviar el
mensaje y seguir la ejecución una
vez se copia la información al buffer
(asíncrona)
Características entre la comunicación entre
procesos Bloqueante No Bloqueante
7. 7
The API for the internet protocols
Destino del mensaje: Los mensajes se envían a pares <dirección, puerto>.
Un puerto es el destino del mensaje dentro del computador
Características entre la comunicación entre procesos
En informática,
un puerto es una interfaz a
través de la cual se pueden
enviar y recibir los
diferentes tipos de datos.
8. 8
The API for the internet protocols
Destino del mensaje: Los mensajes se envían a pares <dirección, puerto>.
Un puerto es el destino del mensaje dentro del computador
Características entre la comunicación entre procesos
16 bits, existen 65536
puertos
0 - 65535
9. 9
The API for the internet protocols
Orden: Algunas aplicaciones requieren recibir los mensajes en el orden en que se
enviaron
Características entre la comunicación entre procesos
10. 10
The API for the internet protocols
Modelo abstracto de comunicación de datos entre procesos
La comunicación entre procesos consiste en transmitir información entre un
socket en un proceso y un socket en otro proceso
Para recibir el mensaje, el socket debe tener asociado el puerto y la dirección de
internet del computador en el cuál se está ejecutando el proceso
Socket
11. 11
The API for the internet protocols
Proporciona comunicación entre procesos que ejecutan en máquinas distintas
Diseño independiente del protocolo de comunicación
Un socket es un descriptor de un punto final de comunicación (dirección IP y
puerto)
Abstracción que:
Representa un extremo de una comunicación bidireccional con una dirección
asociada
Ofrece interfaz de acceso a los servicios de red en el nivel de transporte
(Protocolo TCP y UDP)
Socket
12. 12
The API for the internet protocols
Un dominio representa una familia de protocolos
Un socket está asociado a un dominio desde su creación
Sólo se pueden comunicar sockets del mismo dominio
Los servicios de sockets son independientes del dominio
Socket
14. 14
The API for the internet protocols
Socket Stream
Protocolo TCP
Flujo de datos bidireccional
Orientado a conexión
Debe establecerse una conexión extremo-a-
extremo antes del envío y recepción de datos
Proporcionan fiabilidad
Paquetes ordenados por secuencia, sin
duplicación de paquetes, libre de errores
Ejemplos:
HTTP, Telnet, FTP, SMTP
Protocolo UDP
Flujo de datos bidireccional
No orientado a conexión
No se establece/mantiene una conexión entre los
procesos que comunican
Longitud máxima de un datagrama (datos y
cabeceras) es 64 KB
Mantiene separación entre paquetes
No proporcionan fiabilidad
No realiza la recuperación de errores
Paquetes desordenados, duplicados, pérdidas
Ejemplos:
DNS
Socket Datagram
15. 15
The API for the internet protocols
El Datagram se envía del proceso emisor al proceso receptor sin confirmación ni
reintentos
Si un fallo ocurre, el mensaje podría no llegar
Problemas
Tamaño del mensaje es limitado – 216
byte – si excede se debe dividir el paquete
Bloqueos
Se acaba el tiempo de espera (timeout)
Recibe de cualquiera: operación de recepción no especifica el origen del
mensaje
UDP
16. 16
The API for the internet protocols
Fallas de Omisión: Los mensajes no podrían llegar por falta de espacio en el
buffer de origen y destino
Orden: Los mensajes UDP no necesariamente llegan en el orden en que se
enviaron
UDP - Fallas
17. 17
The API for the internet protocols
Uso: para algunas aplicaciones, es aceptable usar un servicio que propenso a
fallas por omisiones ocasionales (DNS o VoIP)
No sufre de los costes de rendimiento que podría traer el tener que garantizar la
entrega de mensaje, hay tres causas para estos costes:
Necesidad de almacenar información del estado del origen o del destino
Transmisión de mensajes extra
Latencia para el emisor
UDP
18. 18
The API for the internet protocols
Hay dos clases en Java que proveen la funcionalidad de UDP
DatagramPacket: provee un constructor que hace una instancia de un objeto de
la siguiente forma
DatagramSocket: provee el soporte para sockets que permiten recibir y enviar
datagram UDP
UDP
19. 19
The API for the internet protocols
Modelo de comunicación con sockets datagrama
20. 20
The API for the internet protocols
getData() : para obtener el mensaje contenido en el datagrama.
getAddress() : para obtener la dirección IP.
getPort(): para obtener el puerto.
DatagramSocket:
DatagramSocket(): constructor sin argumentos que permite que el sistema elija un
puerto entre los que estén libres y selecciona una de las direcciones locales.
DatagramSocket(int port): constructor que toma un número de puerto como
argumento, apropiado para los procesos que necesitan un número de puerto
(servicios).
DatagramSocket(int port, InetAddress laddr): constructor que toma como
argumentos el número de puerto y una determinada dirección local.
UDP
21. 21
The API for the internet protocols
La clase DatagramSocket proporciona varios métodos:
send(DatagramPacket p) y receive(DatagramPacket p): sirven para transmitir
datagramas entre un par de conectores. contiene el mensaje y el destino. El
argumento de receive es un DatagramPacket vacío en el que colocar el mensaje, su
longitud y su origen.
setSoTimeout(int timeout): este método permite establecer un tiempo de espera
límite. Cuando se fija un límite, el método receive se bloquea durante el tiempo
fijado y después lanza una excepción InterruptedIOException
connect(InetAddress address, int port): este método se utiliza para conectarse a
un puerto remoto y a una dirección Internet concretos, en cuyo caso el conector sólo
podrá enviar y recibir mensajes de esa dirección.
UDP
25. 25
The API for the internet protocols
El API provee una abstracción de un flujo de bytes por el cual la información es
escrita y leída. La abstracción esconde las siguientes características de la red:
Tamaño del mensaje
Mensajes perdidos: implementa un esquema de confirmación: emisor recibe un
msj llegó a su destino, si no se renvia el msj
Control de Flujo: controla la velocidad que se envia y reciba
Ordenamiento y duplicación de mensajes: identificadores de cada paquete
Destinatirio(s) del mensaje: conección donde se envía
TCP
26. 26
The API for the internet protocols
Problemas:
No hay acuerdo en la información enviada en el flujo de datos
Bloqueo (control de flujo)
Hilos (o falta de soporte para estos)
Uso
Http. Ftp, Telnet, Smtp
TCP
27. 27
The API for the internet protocols
Fallos: en un red defectuosa, TCP puede presentar :
El proceso usando la conexión no puede distinguir entre una falla de red o una
falla de proceso del otro lado de la conexión
Los procesos no pueden saber si los mensajes que han enviado recientemente se
recibieron o no
TCP
28. 28
The API for the internet protocols
Java ofrece dos clases para dar soporte a la comunicación por TCP
ServerSocket: la usan los servidores para crear una conexión que escucha en un
puerto determinado
Socket: Se necesita proveer la información de la dirección y puerto y se encarga
de conectarse con el socket
TCP
29. 29
The API for the internet protocols
Socket: Stream y Datagramas
30. 30
The API for the internet protocols
Socket: Direcciones
Cada socket debe tener asignada una dirección única
Dirección de host (32 bits) + puerto (16 bits) + protocolo
Las direcciones se usan para:
Asignar una dirección local a un socket (bind)
Especificar una dirección remota (connect o sendto)
Las direcciones son dependientes del dominio
37. 37
The API for the internet protocols
Socket: Puertos
Un puerto identifica un destino en un computador
Los puertos se asocian a procesos,
permiten que la transmisión se dirija a un proceso específico en el computador
destino
Un puerto tiene un único receptor y múltiples emisores (excepto multicast)
Toda aplicación que desee enviar y recibir datos debe abrir un puerto
38. 38
The API for the internet protocols
Socket: Puertos
Número entero de 16 bits
216
puertos en una máquina ~ 65536 puertos posibles
Reservados para aplicaciones de Internet: 0-1023 (también llamados well-known
puertos)
Puertos entre 1024 y 49151 son puertos registrados para ser usados por los
servicios
Puertos por encima de 65535 para uso privado
39. 39
The API for the internet protocols
Socket: Encapsulación de un paquete TCP
40. 40
The API for the internet protocols
Modelo de comunicación con sockets stream
41. 41
The API for the internet protocols
Api de java para las direcciones de internet:
Como paquetes enviados por UDP y TCP, se envían a direcciónes de internet.
Java provee la clase InetAddress
No hay necesidad de espeficiar directamente la dirección IP, se puede hacer
referencia a un computador con su nombre DNS
Socket