Você está na página 1de 22

Sistemas Distribuídos

Comunicação entre processos

PROSPERINO MBALAME, MSC


Comunicação entre processos

Camadas de um Middleware
Applications, services

RMI and RPC

request -reply protocol Middleware


layers
marshaling and external data representation

Prosperino Mbalame - 2020


O API para o Protocolo de Internet
• O Objecto é discutir as principais características da
comunicação entre processos usando como exemplo o
protocolo de Internet. Explicando como os
programadores podem utilizar o UDP e TCP para
passagem de dados entre processo.

• As características da comunicação entre processos:


✔ A passagem de mensagem entre dois pares de processos
pode ser implementado por duas operações básicas:
send e receive. A actividade de comunicação envolve
sempre um mecanismo de sincronização Os processos
de alguma maneira devem apresentar uma
sincronização para enviar e receber dados.
Prosperino Mbalame - 2020
Comunicação entre processos
• Comunicação Síncrona e Assíncrona:
• Uma fila é associada com cada mensagem. O processo que
envia a mensagem, nada mais faz do que inserir a mensagem
numa fila remota e o processo que recebe, retira a mensagem
da fila local.
• Na forma síncrona de comunicação, o transmissor e receptor
sincronizam a passagem de cada mensagem.
• Na forma assíncrona de comunicação, a operação de envio é
não bloqueante. Nesta forma é permitida ao processo
transmissor transferir rapidamente uma mensagem para o o
buffer local (de saída). Desta forma, a transmissão de dados
pode ocorrer em paralelo com o processo transmissor.
• As operações usando o modo bloqueantes são mais simples
de implementarem. Mas o modo não bloqueante oferece
melhores desempenhos na operação.
Prosperino Mbalame - 2020
Comunicação entre processos
• Sockets
• Ambas as formas de comunicações (UDP e TCP)
usam a abstração de sockets para providenciar
o meio de comunicação fim a fim entre os
processos.
• O termo socket surgiu originalmente do DSD
UNIX, mas também é usada em muitas versões
de UNIX, Linux, Windows NT e Macintosh OS.
• Uma comunicação entre processos é baseada
na utilização de um socket no processo
transmissor e um outro socket no processo
receptor. Prosperino Mbalame - 2020
Comunicação entre processos
• Comunicação usando Socket

Internet address = 138.37.94.248 Internet address = 138.37.88.249

Prosperino Mbalame - 2020


Fluxo de troca de dados entre sockets

Prosperino Mbalame - 2020


Comunicação entre processos
• A utilização de portas é padronizada pela IANA (Internet
Assigned Numbers Authority). Portas estão divididas em:
• Portas(0-1023) – Portas do sistema operativo Portas(1024-49151) –
Portas reservadas / registadas
• Portas (49152 - 65535) – Portas Dinâmicas e /ou privadas
• De acordo com IANA, eis algumas das portas TCP mais utilizadas:
:: 21 - FTP;
:: 23 - Telnet;
:: 25 - SMTP;
:: 80 - HTTP;
:: 110 - POP3;
:: 143 - IMAP;
:: 443 - HTTPS.
Prosperino Mbalame - 2020
Comunicação entre processos
• Java API para Internet– Java utiliza uma
classe chamada InetAddress para endereçar a
Internet
• – DNS
• Ex: InetAddress a Computer
InetAddress.getByName(“mail.unilicungo.ac.mz
”)
• IPv4 e IPv6

Prosperino Mbalame - 2020


Comunicação entre processos
• Comunicação por Datagrama UDP
✔ Um pacote é transmitido sem confirmação ou reenvio de msg
✔ Os erros não são retornados e nem tratados

• Informações de um Datagrama:
✔ Tamanho da msg, ao todo 65536 bytes, incluindo o
cabeçalho.
✔ Bloqueio, modo de espera da chegada de msg
✔ TimeOut, tempo máximo de espera para uma recepção
✔ Receive From Any, modo onde ele aceita todo os pacotes
recebidos pelo socket.

Prosperino Mbalame - 2020


Comunicação entre processos
• Modelo de Falhas para o UDP:
✔ Falha por omissão: a msg pode ser
perdida ocasionalmente ( no canal de
comunicação)
✔ Ordenação: as informações podem ser
entregue fora de ordem
• Aplicações:
✔ DNS
✔ Menos overhead, latência
✔ Multimídia
Prosperino Mbalame - 2020
Comunicação entre processos
• JavaAPI para UDP
• DatagramaPacket
✔ Esta classe providencia um construtor que faz uma
instância do pacote a ser usado na comunicação por
pacote UDP;
✔ Array de dados, Tamanho da mensagem, Internet
Address, Porta.
• DatagramaSocket
• Esta classe providencia um construtor para uma
instância que oferece suporte para TX e RX.
✔ Send e Receiver
✔ SetSoTimeout
✔ Connect
Prosperino Mbalame - 2020
UDP – Enviando msg
import java.net.*;
import java.io.*;
public class UDPClient{
public static void main(String args[]){
// 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, args[0].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();}
}
}
Prosperino Mbalame - 2020
UDP – Recebendo msg
import java.net.*;
import java.io.*;
public class UDPServer
{
public static void main(String args[])
{
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();}
} Prosperino Mbalame - 2020
TCP
• Oferece uma abstração para uma stream de bytes,
que podem ser usados para escrever ou ler dados:

✔ Tamanho da Msg;
✔ Perda de Msg;
✔ Controle de Fluxo;
✔ Ordenação e duplicação de pacotes;
✔ Mensagem orientada a conexão.
Prosperino Mbalame - 2020
TCP
• Características de uso:
✔ Compatibilidade de dados;
✔ Bloqueios;
✔ Threads.
• Modelo de Falhas
✔ Não consegue distinguir entre uma falha de rede
ou do processo
• Uso:
✔ HTTP
✔ FTP
✔ Telnet
✔ SMTP

• ServerSocket
• Socket
Prosperino Mbalame - 2020
TCP - Cliente
import java.net.*; import
java.io.*;
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]);
String data = in.readUTF();
System.out.println("Received: "+ data) ;
}catch (UnknownHostException e){
System.out.println("Sock:"+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){System.out.println("close:"+e.getMessage());}}
}
Prosperino Mbalame - 2020
}
TCP - Servidor
import java.net.*;
import java.io.*;
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());}
}
}

// this figure continues on the next slide

Prosperino Mbalame - 2020


Representação e Organização de dados
Toda informação armazenada em um programa
possui as seguintes características:
✔ São guardadas em algum tipo de estrutura;
✔ São formados por uma sequencia de bytes;
✔ São transformados em bytes antes da transmissão;
✔ São remontados ao formato original depois da
recepção;
✔ possuem diferentes tipificações.
Prosperino Mbalame - 2020
Representação e Organização de dados
Existem dois métodos para permitir que dois
computadores diferentes consigam trocar dados:
✔ Os valores são convertidos antes da transmissão
em um formato externo comum, previamente
acordado entre as duas máquinas;
✔ Enviar os dados no formato usado pelo
transmissor e junto, enviar também informações
necessárias sobre o formato usado.

Prosperino Mbalame - 2020


Referências
• Distributed Systems: Concepts and
Design. G.Coulouris, J. Dollimore, T.
Kindberg. Addison-Wesley, 1994.

• ISBN 0-201-62433-8. (Capítulos 4 e 5)


Distributed Operating Systems.
•A. S. Tanenbaum. Prentice-Hall, 1995.
ISBN 0-13-219908-4. (Secções 2.4 e 2.5)

Prosperino Mbalame - 2020


Fim da Aula

Prosperino Mbalame - 2017

Você também pode gostar