Está en la página 1de 39

Desenvolvimento de

Aplicações Distribuídas

Unidade 2 – Comunicação entre processos


Sistemas de Informação
Professor: Wagner Cipriano | wagnerbhbr@gmail.com
Aspectos de SDs – Comunicação
 Fundamentos de redes
 Tipos de redes
 Esquemas de comutação
 Protocolos
 Interligação de redes
 Comunicação entre processos
 Fundamentos de comunicação em SD
 Comunicação utilizando Middlewares
 Sockets
 Representação externa de dados e Empacotamento

SI | DAD | Comunicação 2
Aspectos de SDs – Comunicação – Fundamentos de redes
 Tipos de Redes

• Mundo
Internet • Redes de redes

WAN • Países, Continentes


Wide Area Network • GSM (3G / HSDPA)
MAN • Cidades, Hipercentros
Metropolitan Area • Wimax, ATM
Network
LAN • Salas, prédios, campus
Local Area Network • Ethernet, Wifi

PAN • Computador, gadgets


Personal Area Network • USB, Bluetooth

SI | DAD | Comunicação 3
Aspectos de SDs – Comunicação – Fundamentos de redes
 Esquemas de comutação
 Broadcast
Tudo é enviado para todos os nodos.
 Comutação de circuitos
Estabelecimento de canais dedicados de comunicação
 Comutação de pacotes
Sistema de armazenamento e encaminhamento de pacotes com base nas
informações de origem e destino.

 Frame Relay
Avanço na comutação de pacotes com a passagem de pacotes em tempo real

SI | DAD | Comunicação 4
Aspectos de SDs – Comunicação – Fundamentos de redes
 Protocolos em camadas

SI | DAD | Comunicação 5
Aspectos de SDs – Comunicação – Fundamentos de redes
 Protocolos
Camadas | Suites | Portas | Endereçamento
# Camada Descrição Protocolos

7 Aplicação Atende aos requisitos de comunicação de aplicativos HTTP, SMTP, SNMP, FTP,
específicos, definindo uma interface para um serviço Telnet, SSH, NFS, DNS
Transmitem dados em uma representação de rede
6 Apresentação independente das usadas em cada nó. Criptografia, se exigida Segurança TLS, SMB, AFP
é feita nesta camada
Realiza operações relacionadas com a confiabilidade das
5 Sessão conexões, detecção de falhas e recuperação automática SIP, SSH, RPC, NetBIOS, ASP

4 Transporte Nível mais baixo de manipulação das mensagens que são TCP, UDP, SPX
endereçadas para portas de comunicação

3 Rede Transfere pacotes com base no endereçamento dos nodos, o IP, ICMP, IGMP, X.25, ARP,
que pode envolver o roteamento entre redes RARP, BGP, OSPF, RIP, IPX
Ethernet, Token Ring, PPP,
2 Enlace de dados Transmite pacotes entre nodos fisicamente conectados HDLC, Frame Relay, ISDN,
ATM, Wi-Fi

1 Física Transmite sequências de dados binários envolvendo hardware Elétrico, radio, laser
e seus circuitos

SI | DAD | Comunicação 6
Aspectos de SDs – Comunicação – Fundamentos de redes
 Protocolos
Camadas | Suites | Portas | Endereçamento

SI | DAD | Comunicação 7
Comunicação – Fundamentos de redes – Mensagens TCP/IP

 Camada de rede (IP)


 Comunicação best-effort de pacotes entre nós
 Dados brutos sem garantia de recebimento, ordem ou integridade

 Camada de Transporte (TCP/UDP)


 Comunicação entre processos
 A comunicação IP é multiplexada com portas
 Programadores lidam mais com esta camada
 Pode adicionar garantias (dependendo do protocolo utilizado)

SI | DAD | Comunicação
8
Comunicação – Fundamentos de redes
 Primitivas básicas
 send(): envia mensagem
 receive(): recebe mensagem

 Abstração de socket:

SI | DAD | Comunicação 9
Aspectos de SDs – Comunicação – Fundamentos de redes
 Protocolos rede - Endereçamento

Endereçamento IP

SI | DAD | Comunicação 10
Aspectos de SDs – Comunicação – Fundamentos de redes
 Protocolos rede - Endereçamento

Endereçamento IP

SI | DAD | Comunicação 11
Aspectos de SDs – Comunicação – Fundamentos de redes
 Interligação de Redes – Network Address Translation (NAT)

SI | DAD | Comunicação 14
Aspectos de SDs – Comunicação – Fundamentos de redes
 Interligação de Redes – Firewall

SI | DAD | Comunicação 15
Aspectos de SDs – Comunicação
 Fundamentos de redes
 Tipos de redes
 Esquemas de comutação
 Protocolos
 Interligação de redes
 Comunicação entre processos
 API de protocolos Internet
 Representação externa de dados e Empacotamento
 Invocação remota
 Protocolos de Requisição/Resposta
 Chamadas de Procedimento Remoto (RPC)
 Invocação de Método Remoto (RMI)
 Comunicação Indireta
 Características e Técnicas
 Sistemas Publicar-Subscrever
 Filas de mensagens

SI | DAD | Comunicação 16
Comunicação entre Processos - Introdução
 A comunicação é o coração de qualquer SD

 Como processos na mesma máquina trocam informação ?


 Threads
 Áreas de memória compartilhada

 Como processos em máquinas diferentes trocam informação ? (SD)


 Troca de mensagens
 não existe compartilhamento de memória (física)

 Objetivo é prover transparência desta comunicação, tanto para usuário


quanto para o desenvolvedor

SI | DAD | Comunicação 17
Comunicação entre Processos - Introdução
 Toda comunicação em SD é baseada em troca de mensagens (baixo nível)
 mais complexa do que uso de memória compartilhada

 MOM - Comunicação orientada a mensagem


 Primitivas da camada de transporte (TCP / UDP)
 Primitivas mais avançadas: MPI(Message Passing Interface), enfileiramento, multicast

 RPC – Chamada remota de procedimento


 Abstrai a troca de mensagem de baixo nível (Middleware)

SI | DAD | Comunicação 18
Comunicação entre Processos - Introdução
 toda comunicação em sistemas distribuídos tem por base o envio e recepção
de mensagens no nível mais baixo da pilha de comunicação em razão da
ausência de memória compartilhada;
 ... embora esta idéia básica pareça simples, os processos que desejam trocar
informações devem acordar a forma como os bits/bytes serão enviados –
protocolo.
 e.g., A envia informações escritas em Francês e codificadas em Código EBCDIC, enquanto B aguarda
as informações em Inglês e codificada em Código ASCII.

SI | DAD | Comunicação 19
Comunicação entre Processos - Introdução
 Comunicação efetiva entre computadores envolve acordos sobre diferentes
aspectos, desde a seleção de um meio físico e a codificação dos bits para
transmissão até questões de apresentação e manipulação dos dados.
 Funcionalidades são organizadas em camadas
 Protocolos definem regras e formatos de mensagens
 Modelo de referência para implementação de protocolos abertos: OSI
 Exemplo de protocolos em ampla utilização: arquitetura TCP/IP
 Protocolos podem ser orientados a conexão ou não
 Comunicação com conexão: requer estabelecimento de conexão antes das transmissões de dados
efetivas

SI | DAD | Comunicação 20
Protocolo em camadas - OSI
 Protocolos de comunicação
 Base para os SDs

Tanenbaum & Van Steen, Distributed Systems: Principles and Paradigms, 2e, (c) 2007 Prentice-Hall, Inc. All rights reserved. 0-13-239227-5

SI | DAD | Comunicação 21
Adaptação do Modelo OSI para SDs
 Camada Middleware: Protocolos independentes da aplicação

Tanenbaum & Van Steen, Distributed Systems: Principles and Paradigms, 2e, (c) 2007 Prentice-Hall, Inc. All rights reserved. 0-13-239227-5

SI | DAD | Comunicação 22
Protocolos de Middleware
 Camada de software situada logicamente entre camada de aplicação de transporte
 Devem suportar serviços de comunicação de alto nível de forma transparente;
 e.g., serviços de comunicação de alto nível para estabelecer e sincronizar streams para transferência
de dados em tempo real.
 e.g., processo que invoca um procedimento ou um objeto em um processo remoto com o máximo de
transparência.

 solução – manter os protocolos de middleware nas camadas superiores de modo que


possam oferecer diferentes protocolos (sintonizáveis) através de uma interface única.
 esta abordagem pressupõe uma pequena adaptação do modelo de referência para comunicação,
conforme figura anterior (Camada Middleware)

 Tipos de Protocolos Middleware


 Autenticação: independente da aplicação (propósito geral)
 Protocolos de comprometimento: atomicidade
 Comunicação: Evitar acesso simultâneo a um recurso

SI | DAD | Comunicação 23
Protocolos de Middleware
 Devem suportar serviços de comunicação de alto nível de forma
transparente;
 “data (un)marshaling” - necessário para sistemas integrados;
 “naming protocols” - facilitar o compartilhamento de recursos;
 “security protocols” - para segurança de comunicação;
 “scaling mechanisms” - para replicação e salvaguarda.

 Separação de responsabilidades:
 assim, o que resta são protocolos verdadeiramente específicos e dependentes da aplicação.

 Para melhor entender as várias alternativas de comunicação que o middleware pode ofererecer para as
aplicações, podemos ver o middleware como um serviço adicional no modelo cliente/servidor.
 e.g., considere um sistema de correio eletrônico, cujo núcleo do sistema de entrega de mensagens pode ser visto
como um serviço de comunicação do “middleware”;
 Cliente: é representado pelo agente do usuário que permite ao mesmo a composição, envio e recepção de emails;
 Servidor: um agente transmissor repassa este email para o sistema de entrega de mensagens

SI | DAD | Comunicação 24
Middlewares de Comunicação
 Serviços de comunicação que podem ser adicionados a camada de
middleware e seus tipos:
 Chamadas de procedimento remoto
 Comunicação orientada a mensagens
 Comunicação orientada a fluxos

Aplicações e Serviços

Invocação Remota, Comunicação Indireta


Camadas de
middleware
Primitivas de comunicação entre processos:
sockets, passagem de mensagens

TCP e UDP

SI | DAD | Comunicação 25
Tipos de Comunicação - Persistência
 Persistente
 Mensagem fica armazenada o tempo que for necessário para entrega-la ao destinatário
 Exemplo: Email

 Transiente
 Mensagem armazenada somente durante a execução do remetente e do receptor
 Exemplo: API cliente/servidor simples

SI | DAD | Comunicação 26
Tipos de Comunicação - Sincronizção
 Remetente pode ou não ficar bloqueado até receber resposta
 Assíncrona
 Remetente continua sua execução imediatamente após enviar a Mensagem (Não fica bloqueado)
 Ex: Email

 Síncrona
 Execução do remetente é bloqueada até que sua requisição seja aceita*
 Ex: Telefone

* Pontos de sincronização
 “request submission” - remetente é bloqueado até o middleware notificá-lo que irá assumir o
controle da transmissão da requisição;
 “request delivery” - remetente é bloqueado até que a requisição seja entregue ao receptor, mas
ainda assim cabe ao middleware notificar;
 “request processing” - remetente é bloqueado até que a requisição seja recebida e processada pelo
receptor – middleware notifica remetente.

SI | DAD | Comunicação
27
Tipos de Comunicação - Granularidade
 Um conjunto de mensagens pode ou não estar relacionadas

 Discreta
 Cada mensagem é uma unidade de informação completa
 Ex: Mensagem para adicionar um novo recurso (envia dados de um form via api)

 Fluxo
 Várias mensagens estã orelacionadas umas com as outras
 Relacionadas pela ordem ou pela relação temporal
 Ex: Streaming de audio e video (multimidia), Chamada de áudio

SI | DAD | Comunicação
28
Comunicação entre Processos - Sockets
 API de protocolos Internet
 Sockets
 De acordo com KUROSE: “socket é a interface entre a camada de aplicação e a de transporte
dentro de uma máquina”.
 Cada socket tem um endereço único na internet. Este endereço é formado por um número IP e
por um número de porta.

SI | DAD | Comunicação 29
Comunicação entre processos – Sockets
 Listando as conexões TCP no Windows

Processo
Ex: Apache na
porta 80

SI | DAD | Comunicação 30
Comunicação entre processos – Sockets
 Listando as conexões TCP no linux – netstat
 Porta 7000: Calculadora TCP

SI | DAD | Comunicação 31
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets


 Uma API de comunicação via sockets oferece classes que permitem o envio e o
recebimento de dados
 Os sockets podem utilizar:
 UDP (User Datagram Protocol): Comunicação via datagramas não orientada a conexão
 TCP (Transmission Control Protocol): Comunicação via stream orientada a conexão
 Ao socket deve ser fornecido o endereço de IP e a porta de destino
 Na plataforma Java, a API de sockets provê as seguintes classes:
 Comunicação via datagramas: DatagramSocket e DatagramPacket
 Comunicação via stream: ServerSocket e Socket

Nota
• Stream é uma sequencia de dados que é transmitida de um processo a outro.
• Datagrama é uma unidade de transferência em uma rede baseada em pacotes.

SI | DAD | Comunicação 32
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – UDP

SI | DAD | Comunicação 33
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – UDP


import java.net.*;
import java.io.*;
Programando o cliente
public class UDPClient{
public static void main(Stringargs[]){
// args give message contents and server hostname
DatagramSocket aSocket = null;
try {
aSocket = new DatagramSocket();
byte [] m = args[0].getBytes();
InetAddress aHost = InetAddress.getByName(args[1]);
int serverPort = 6789;

DatagramPacket request = new DatagramPacket(m, m.length(),


aHost, serverPort);
aSocket.send(request);

byte[] buffer = new byte[1000];


DatagramPacket reply = new DatagramPacket(buffer,
buffer.length);
aSocket.receive(reply);
System.out.println("Reply: " + new
String(reply.getData()));
} catch (SocketException e){System.out.println("Socket: " +
e.getMessage());
} catch (IOException e){System.out.println("IO: " + e.getMessage());
} finally { if(aSocket != null) aSocket.close();}
}
}

SI | DAD | Comunicação 34
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – UDP


import java.net.*;
import java.io.*;
Programando o servidor
public class UDPServer{
public static void main(Stringargs[]){
DatagramSocket aSocket = null;
try{
aSocket = new DatagramSocket(6789);
byte[] buffer = new byte[1000];
while(true){
DatagramPacket request = new
DatagramPacket(buffer, buffer.length);
aSocket.receive(request);

DatagramPacket reply = new


DatagramPacket(request.getData(),
request.getLength(), request.getAddress(),
request.getPort());
aSocket.send(reply);
}
} catch (SocketException e){System.out.println("Socket: " +
e.getMessage());
} catch (IOException e) {System.out.println("IO: " + e.getMessage());
} finally {if (aSocket != null) aSocket.close();}
}
}

SI | DAD | Comunicação 35
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – TCP

SI | DAD | Comunicação 36
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – TCP

Programando o cliente
Inicialização
gethostbyname – traduz nome do servidor
socket – cria o socket
connect – conecta à porta do servidor

Trasmissão:
send – envia msg para o servidor
recv – recebe msg do servidor

Encerramento
close – fecha o socket

SI | DAD | Comunicação 37
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – TCP

Programando o servidor
Inicialização
socket – cria o socket
bind – associa o socket ao endereço local
listen – associa socket a requisições de
entrada

Trasmissão:
accept – aceita conexão de cliente
recv – recebe msg do cliente
send – envia msg para o cliente

Encerramento
close – fecha o socket

SI | DAD | Comunicação 38
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – TCP


import java.net.*;
import java.io.*;
Programando o cliente
public class TCPClient {
public static void main (String args[]) {
// arguments supply message and hostname of destination
Socket s = null;
try{
int serverPort = 7896;
s = new Socket(args[1], serverPort);
DataInputStream in = new
DataInputStream( s.getInputStream() );
DataOutputStream out = new
DataOutputStream( s.getOutputStream() );

out.writeUTF(args[0]); // UTF is a string encoding; see Sec


4.3
String data = in.readUTF();
System.out.println("Received: " + data) ;
} catch (UnknownHostException e){
System.out.println("Socket:" + e.getMessage());
} catch (EOFException e){System.out.println("EOF:" + e.getMessage());
} catch (IOException e){System.out.println("IO:" + e.getMessage());
} finally {if(s!=null) try { s.close();} catch (IOException e){/*close
failed*/}}
}
}

SI | DAD | Comunicação 39
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – TCP


import java.net.*;
import java.io.*; Programando o servidor
public class TCPServer {
public static void main (String args[]) {
try{
int serverPort = 7896;
ServerSocket listenSocket = new ServerSocket(serverPort);
while(true) {
Socket clientSocket = listenSocket.accept();
Connection c = new Connection(clientSocket);
}
} catch(IOException e)
{System.out.println("Listen :"+e.getMessage());}
}
}
class Connection extends Thread {
.........
}

SI | DAD | Comunicação 40
Aspectos de SDs – Comunicação – Comunicação entre Processos

 API de protocolos Internet – Sockets – TCP


import java.net.*;
import java.io.*; Programando o servidor
public class TCPServer {
.........
}
class Connection extends Thread {
DataInputStream in;
DataOutputStream out;
Socket clientSocket;
public Connection (Socket aClientSocket) {
try {
clientSocket = aClientSocket;
in = new DataInputStream( clientSocket.getInputStream());
out = new
DataOutputStream( clientSocket.getOutputStream());
this.start();
} catch(IOException e)
{System.out.println("Connection:"+e.getMessage());}
}
public void run(){
try { // an echo server
String data = in.readUTF();
out.writeUTF(data);
} catch(EOFException e) {System.out.println("EOF:"+e.getMessage());
} catch(IOException e) {System.out.println("IO:"+e.getMessage());
} finally { try {clientSocket.close();}catch (IOException e){/*close
failed*/}}
}
}

SI | DAD | Comunicação 41

También podría gustarte