Comunicação em Sistemas Distribuídos

Propaganda
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação em Sistemas
Distribuídos
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Objetivos
• Estudar os modelos de comunicação nos Sistemas Operacionais de
Rede.
• Apresentar as características da camada de Transporte e seus
protocolos.
• Estudar as principais formas de inter-processos.
• Apresentar os principais modelos de Middleware.
• Message-oriented Middleware.
• Remote Procedure Call
• Remote Metod Invocation
• CORBA
• Transaction Processing Monitor.
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
A Finalidade do Modelo de Referência OSI
Aplicação
Apresentação
Sessão
•Open Systems Interconnections
criado pela ISO (International
Organization for Standardization)
Objetivos:
• Reduzir a complexidade
Transporte
Rede
Enlace
Físico
• Padronizar as interfaces
• Facilitar a engenharia modular
• Garantir a interoperabilidade
• Acelerar a evolução
• Reduzir conflitos entre equipamentos
• Simplificar o desenvolvimento
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Camadas do Modelo OSI - Aplicação
Aplicação
Serviços da rede para as aplicações
Apresentação
Sessão
Transporte
Rede
Enlace
Físico
Disponibiliza serviços da rede para os diversos
aplicativos, como correio eletrônico, FTP,
Emulação de terminal, E-commerce, etc)
• Contempla as tecnologias que permitem ao
software do usuário a utilização dos recursos da
rede.
• Por exemplo: um processador de texto utiliza os
serviços de transferência de arquivo para
ingressar na rede.
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Camadas do Modelo OSI - Apresentação
Aplicação
Apresentação
Representação de dados
• Garantir que os dados sejam compreensíveis para o
sistema receptor
Sessão
• Cuidar da formatação e codificação dos dados
Transporte
• Estruturar e eventualmente converter os dados
Rede
• Negociar e compatibilizar a sintaxe com a camada de
aplicação
Enlace
• Pode ocorrer compressão, criptografia ou
decodificação dos dados
Físico
• Exemplos de protocolos de apresentação: MPEG,
JPEG, GIF, ASCII, etc
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Camadas do Modelo OSI - Sessão
Aplicação
Comunicação interhosts
Apresentação
Sessão
Transporte
Rede
Enlace
Físico
• Estabelece, gerencia, regulamenta e finaliza sessões
entre as apresentações
• Sessões de comunicação consiste em requisições e
resposta a serviços que ocorrem entre as aplicações
localizadas em equipamentos de rede diferentes.
• Oferece recursos para sincronismo entre aplicações em
hosts diferentes
• Coordena os direitos de acesso
• Fornece relatórios acessibilidade
• Exemplos de protocolos de sessão: Sistemas
operacionais, como Windows, Novel Netware, MAC OS
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Camadas do Modelo OSI - Transporte
Aplicação
Conexões ponto a ponto
Apresentação
• Trata das funções de transporte de segmentos entre os
Sessão
Transporte
hosts
• Responsável pela confiabilidade do transporte de dados
• Estabelece, mantém e finaliza circuitos virtuais fim-a-fim
Rede
Enlace
Físico
• Fornece controle de fluxo das informações
• Mantém um serviço de transporte de dados que isola as
camadas superiores (upper layers) das inferiores (data
layers)
• Responsável pela qualidade de tipo de serviço
requeridos pelos níveis superiores (taxa, tamanho do
pacote, tempo disponível para retransmissão, controle do
fluxo de dados)
• Exemplos: TCP, UDP, SPX
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Camadas do Modelo OSI - Rede
Aplicação
Endereçamento e Melhor Rota
• Prove o endereçamento lógico usado pelos roteadores
Apresentação
Sessão
Transporte
Rede
Enlace
Físico
• Fornece seleção das melhores rotas entre redes
• Construção das tabelas de roteamento
• Serviços de InternetWorking
• Fornece conectividade de redes geograficamente
separadas
• Métodos de movimentação de informações entre redes
• A camada de rede pode escolher uma rota específica e
impedir que os dados sejam enviados a redes não
envolvidas
• Exemplos: IP, IPX, X.25
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Camadas do Modelo OSI - Enlace
Aplicação
Apresentação
Sessão
Acessos aos meios
• Organização dos bits em grupos lógicos de informações
chamados de frames ou quadros.
• Fornece transferência de dados entre os meios
• Responsável pelo endereçamento físico e topologia de rede
Transporte
Rede
Enlace
Físico
• Possui funções de notificação de erros e controle de fluxo
• Função de identificar fisicamente os hosts em uma rede
• Exemplos:
LAN: Ethernet, IEEE 802.3/802.2, etc
WAN: Frame Relay, HDLC, PPP, ATM etc
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Camadas do Modelo OSI - Física
Aplicação
Apresentação
Sessão
Transporte
Rede
Enlace
Físico
Transmissão digital
• Cuida das estruturas e especificações físicas
• Define as especificações elétricas, mecânicas e
funcionais da mídia de transmissão
• Procedimentos para ativar, manter e desativar o link
físico entre sistemas
• Controla níveis de tensão, taxas de dados, distâncias
máximas de transmissão e conectores físicos
• Responsável pela pinagem de cabos
• Codificação da transmissão de bits e regras de
sincronização (clocking)
• Exemplo: V.24, V.35, E1, E3, SDH etc
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre as Camadas do Modelo
OSI
Usuário A
Aplicação
Dados
A
Transporte
Usuário B
A
Dados
Aplicação
A A
Dados
Apresentação
S A A
Dados
Sessão
T S A A
Dados
Transporte
R T S A A
Dados
Dados
Apresentação A A
Sessão
Dados
Dados
S A A
Dados
T S A A
Dados
Dados
Rede
R T S A A
Enlace
E R T S A A
Físico
F E R T S A A
Dados
E
Dados
E R T S A A
E F
F E R T S A A
Dados
Dados
Rede
E
Enlace
E F
Físico
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Modelo de Referência OSI
Protocolo de aplicação
Aplicação
Apresentação
Sessão
Protocolo de apresentação
Protocolo de sessão
Protocolo de transporte
Transporte
Aplicação
Apresentação
Sessão
Transporte
Sub-rede De Comunicações
Rede
Rede
Rede
Rede
Enlace
Enlace
Enlace
Enlace
Físico
Físico
Físico
Físico
Roteador
Roteador
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Overhead das camadas
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Data Link Layer
2-3
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Arquitetura TCP/IP
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
As Camadas OSI x TCP/IP
Modelo OSI
Aplicação
Apresentação
TCP/IP
FTP, SMTP,
Telnet, etc..
Sessão
Transporte
TCP/UDP
Rede
IP, ICMP, ARP/RARP
Enlace
Físico
Não Padronizado
Para redes LAN: Ethernet, Gigabit Eth, 802.3, 802.5
Para redes WAN: Frame Relay, ATM, PPP, etc
Instituto Presbiteriano Mackenzie
Arquitetura Internet
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
request
cliente
servidor
reply
Comunicação lógica
kernel
kernel
Comunicação real
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Cabeçalho TCP
Número do porta de origem
16 bits
Número da porta de destino
16 bits
Número de Seqüência
32 bits
Número de ACK (Reconhecimento)
32 bits
HLEN.
4 bits
Reservado
6 bits
U A P R S F
R C S S Y I
G K H T N N
Checksum TCP
16 bits
Tamanho da janela
16 bits
Ponteiro de Urgência
16 bits
Opções (se existir)
Dados
20
bytes
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Triplo HandShake TCP / Estabelecer
conexão
Host A
1
Envia SYN
(seq=100 ctl=SYN)
Host B
SYN recebido
2
SYN recebido
3
Estabelecido
(seq=101 ack=301 ctl=ack)
Envia SYN, ACK
(seq=300 ack=101 ctl=syn,ack)
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Sequencia TCP e Números de ACK
Source
Source
Port
Port
Dest.
Dest.
Port
Port
Acabo de
enviar #10
Sequence
Sequence
##
Acknowledgement
Acknowledgement
##
…
…
Recebi o #10,
Agora preciso do
#11.
Source Dest. Seq. Ack.
1028
10
1028 23
23
10 100
100
Source Dest. Seq. Ack.
23
23 1028
1028 100
100 11
11
Source Dest. Seq. Ack.
1028
1028
23
23
11
11
101
101
Source Dest. Seq. Ack.
23
23 1028
1028 101
101 12
12
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
ACK TCP Simples
Host A
No exemplo ao lado:
• O tamanho da janela
é1
• Com esse tamanho,
cada segmento deve
ser reconhecido (ACK)
antes que outro
segmento possa ser
enviado.
• Resulta num uso
pouco eficiente da
banda
Host B
Envia 1
Recebe 1
Envia ACK 2
Recebe ACK 2
Envia 2
Recebe 2
Envia ACK 3
Recebe ACK 3
Envia 3
Recebe 3
Envia ACK 4
Recebe ACK 4
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Janela Deslizante TCP
No exemplo ao lado:
• O tamanho da janela é 3
• Um tamanho de janela
maior permite que mais
dados sejam transmitidos
enquanto se espera um
reconhecimento.
• O termo janela deslizante
se refere ao fato do
tamanho da janela se
adequar dinamicamente
durante a sessão TCP.
• A janela deslizante
possibilita o uso otimizado
da banda
Host A
Envia 1
Envia 2
Envia 3
Recebe ACK 4
Envia 4
Envia 5
Envia 6
Recebe ACK 7
Host B
Recebe 1
Recebe 2
Recebe 3
Envia ACK 4
Recebe 4
Recebe 5
Recebe 6
Envia ACK 7
Instituto Presbiteriano Mackenzie
Client-Server TCP
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Protocolo UDP - User Datagram Protocol
• Protocolo de camada 4
• Opera em modo não orientado à conexão (connection less) - RFC 768
• Oferece protocolo sem confiabilidade
• Não há campos de seqüência ou de reconhecimento
• Os protocolos da camada de aplicação (superiores) devem prover
reconhecimento para haver confiabilidade.
• Os protocolos que utilizam UDP são TFTP (Trivial File Transfer Protocol),
SNMP (Simple Network Management Protocol), NFS (Network File
System) e DNS (Domain Name System)
• Possibilita várias conexões UDP simultâneas no mesmo host
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Formato do Segmento UDP
Número do porta de origem
16 bits
Número da porta de destino
16 bits
Comprimento
16 bits
Checksum
16 bits
Dados
8
octetos
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
Em um S.D. os processos (programas em execução) se comunicam através de:
Acesso compartilhado em uma memória comum
Rede na qual estão conectados via troca de mensagens (message
passing) ou comunicação orientada à mensagens
Esta operação é conhecida como IPC (Inter-Process Communication)
Características:
Simplicidade
Atende diferentes aplicações
Semântica simples
Atende tanto IPCs local e remoto
Eficiência
Refere-se ao custo de estabelecer e encerrar uma conexão
Confiabilidade
Manipulação de mensagens perdidas, time-out, etc..
Segurança
Deve suportar criptografia
Portabilidade
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
O destino da mensagem (p. ex. um servidor) é definido através de
de duas referências: endereço IP e porta local.
Este par recebe o nome de socket.
Socket é um end-point de um enlace de comunicação de duas vias
entre dois programas rodando em um Sistema Distribuído.
Um socket é descrito por uma API (Application Programer’s Interface).
Uma API para UDP estabelece a mais simples forma de comunicação entre
processos: datagramas ou message passing.
Uma API para TCP estabelece uma conexão entre um par de processos
definido como stream.
Um par socket estabelece uma conexão entre dois end-points
As duas principais primitivas de serviço são: send e receive.
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
A comunicação entre processos pode ser:
Síncrona
Assíncrona
As primitivas de serviço podem ser do tipo:
Bloqueadas
Não bloqueadas
A comunicação segue dois modelos:
Persistente
Transiente
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
Comunicação síncrona
Os processos atendem a uma semântica de
sincronização. O processo transmissor da mensagem estabelece uma conexão
e aguarda a resposta do processo remoto depois de enviada a solicitação.
Comunicação assíncrona
O processo transmissor não aguarda a resposta do
servidor. Depois de bufferizada a mensagem para posterior envio, o processo
segue, sem aguardar a resposta do processo remoto.
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
Técnicas para o processo remoto detectar a chegada de uma mensagem:
Polling:
Uma primitiva test permite ao receptor verificar se alguma mensagem
chegou antes de chamar a primitiva receive
Interrupt:
Uma interrupção de software é usada para notificar o processo receptor
quando chega uma mensagem e esta é armazenada no buffer
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
Primitiva Bloqueante (síncrona)
Para a primitiva send – enquanto a mensagem está sendo enviada o
processo fica bloqueado
Para a primitiva receive – fica bloqueado até alguma mensagem chegar
ou até um time-out.
Primitiva não – Bloqueante (assíncrona)
Para a primitiva send – retorna o controle imediatamente antes da
mensagem ser enviada.
Para a primitiva receive – passa para o kernel o ponteiro para o buffer e
retorna imediatamente, antes de receber a mensagem.
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
Comunicação persistente
A mensagem submetida à transmissão é armazenada
nos sistemas de comunicação e assim que possível é entregue ao seu
destino, não sendo necessário queos processos send e receiver
estejam rodando
Comunicação transiente
A mensagem submetida à transmissão é armazenada
nos sistemas de comunicação, se e somente se, os processos send e
receiver estirem rodando.
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
a)
b)
Persistent asynchronous communication
Persistent synchronous communication
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
c)
d)
Transient asynchronous communication
Receipt-based transient synchronous communication
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
e)
f)
Delivery-based transient synchronous communication at message delivery
Response-based transient synchronous communication
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Comunicação entre processos
request
cliente
servidor
reply
Comunicação lógica
kernel
kernel
Comunicação real
Apresentação
Porta de entrada
Porta
Cliente
Porta de conexão
Conexão TCP
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Arquitetura TCP/IP - “Well Know ports”
Application
Presentation
Session
T
E
L
N
E
T
F
T
P
S
M
T
P
D
N
S
T
F
T
P
S
N
M
P
23
20/21
25
53
69
161
Transport Layer
Network Layer
TCP
UDP
6
17
ICMP
IP
Data Link
Ethernet
CSMA/CD
Token Ring
Physical
Ethernet
Camada Física
Token Ring
Camada Física
ARP RARP
FR/PPP
EIA/TIA 232 / V35
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Programação de Sockets com TCP
Socket: uma porta entre o processo de aplicação e o protocolo
de transporte fim-a-fim (UCP or TCP)
serviço TCP: transferência confiável de bytes de um
processo para outro
controlado pelo
criador da aplicação
controlado pelo
sistema
operacional
processo
processo
socket
TCP com
buffers,
variáveis
socket
TCP com
buffers,
variáveis
host o
servidor
internet
host ou
servidor
controlado pelo
criador da aplicação
controlado pelo
sistema
operacional
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Sockets
Socket API
•
•
•
•
introduzida no BSD4.1 UNIX, 1981
explicitamente criados, usados e
liberados pelas aplicações
paradigma cliente/servidor
dois tipos de serviço de transporte
via socket API:
– datagrama não confiável
– confiável, orientado a cadeias de
bytes
socket
uma interface local,
controlada pelo OS (uma
“porta”) na qual os
processos de aplicação
podem tanto enviar
quanto receber
mensagens de e para
outro processo de
aplicação (local ou
remoto)
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Berkeley Sockets (1)
Primitive
Meaning
Socket
Create a new communication endpoint
Bind
Attach a local address to a socket
Listen
Announce willingness to accept connections
Accept
Block caller until a connection request arrives
Connect
Actively attempt to establish a connection
Send
Send some data over the connection
Receive
Receive some data over the connection
Close
Release the connection
Instituto Presbiteriano Mackenzie
Berkeley Sockets (2)
•
Connection-oriented communication pattern using sockets.
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Sockets com TCP
Cliente deve contactar o servidor
• processo servidor já deve estar
executando antes de ser
contactado
• servidor deve ter criado socket
(porta) que aceita o contato do
cliente
Cliente contata o servidor:
• criando um socket TCP local
• especificando endereço IP e
número da porta do processo
servidor
• Quando o cliente cria o socket:
cliente TCP estabelece conexão
com o TCP do servidor
• Quando contactado pelo cliente,
o TCP do servidor cria um novo
socket para o processo servidor
comunicar-se com o cliente
– permite o servidor conversar
com múltiplos clientes
ponto de vista da aplicação
TCP fornece a transferência
confiável, em ordem, de bytes
(“pipe”) entre o cliente e o
servidor
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Sockets com TCP
teclado
input
stream
process
Process
o
cliente
stream de
saída:
stream de entrada:
seqüência de bytes
para dentro do processo
output
stream
inFromServer
seqüência de bytes
para fora do processo
outToServer
• cliente lê linha da entrada padrão
do sistema (inFromUser stream)
, envia para o servidor via socket
(outToServer stream)
• servidor lê linha do socket
• servidor converte linha para letras
maiúsculas e envia de volta ao
cliente
• cliente lê a linha modificada
através do (inFromServer
stream)
inFromUser
Exemplo de aplicação clienteservidor:
monitor
input
stream
TCP
socket
clientSocket
cliente
para rede
da rede
TCP
socket
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Interação Cliente/servidor: TCP
Servidor
(executando em hostid)
Cliente
cria socket,
port=x, para
solicitação entrante:
welcomeSocket =
ServerSocket()
TCP
espera por pedido
estabel. de conexão
de conexão entrante
connectionSocket =
welcomeSocket.accept()
lê pedido de
connectionSocket
escreve resposta para
connectionSocket
fecha
connectionSocket
cria socket,
conecta com hostid, port=x
clientSocket =
Socket()
envia pedido usando
clientSocket
lê resposta de
clientSocket
fecha
clientSocket
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: cliente Java (TCP)
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
Cria
stream de entrada
Cria
socket cliente,
conecta ao servidor
Cria
stream de saída
ligado ao socket
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: cliente Java (TCP), cont.
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
Cria
stream de entrada
ligado ao socket
sentence = inFromUser.readLine();
Envia linha
para o servidor
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
Lê linha
do servidor
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: servidor Java (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
Cria
socket de aceitação
na porta 6789
Espera, no socket
de aceitação por
contato do cliente
Cria stream de
entrada, ligado
ao socket
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: servidor Java (cont)
Cria stream de
saída, ligado ao
socket
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
Lê linha do
socket
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
Escreve linha
para o socket
outToClient.writeBytes(capitalizedSentence);
}
}
}
Fim do while loop,
retorne e espere por
outra conexão do cliente
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Sockets com UDP
UDP: não há conexão entre o
cliente e o servidor
• não existe apresentação
• transmissor envia
explicitamente endereço IP e
porta de destino em cada
mensagem
• servidor deve extrair o endereço
IP e porta do transmissor de
cada datagrama recebido
• UDP: dados transmitidos
podem ser recebidos foram de
ordem ou perdidos
ponto de vista da aplicação
UDP fornece a transferência
não confiável de grupos de bytes
(“datagramas”) entre o cliente e o
servidor
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Interação Cliente/servidor: UDP
Servidor
(executando hostid)
cria socket,
port=x, para
solicitação entrante:
serverSocket =
DatagramSocket()
lê pedido de:
serverSocket
escreve resposta para
serverSocket
especificando endereço
do host cliente e
número da porta
Cliente
cria socket,
clientSocket =
DatagramSocket()
Cria, endereço (hostid, port=x,
envia datagrama de pedido
usando clientSocket
lê resposta de
clientSocket
fecha
clientSocket
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: cliente Java (UDP)
stream
de entrada
process
o
cliente
monitor
inFromUser
teclado
Process
Entrada: recebe
pacote (TCP
recebe “byte
stream”)
pacote
UDP
receivePacket
(TCP envia “byte
stream”)
sendPacket
Saída: envia pacote
socket
UDP
clientSocket
cliente
para rede
da rede
pacote
UDP
UDP
socket
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: cliente Java (UDP)
import java.io.*;
import java.net.*;
Cria
stream de entrada
Cria
socket cliente
Translada
nome do host para
endereço IP
usando DNS
class UDPClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: cliente Java (UDP), cont.
Cria datagrama com
dados a enviar,
tamanho, endereço IP
porta
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
Envia datagrama
para servidor
clientSocket.send(sendPacket);
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
Lê datagrama
do servidor
clientSocket.receive(receivePacket);
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: servidor Java (UDP)
import java.io.*;
import java.net.*;
Cria
socket datagrama
na porta 9876
class UDPServer {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
Cria espaço para
datagramas recebidos
Recebe
datagram
a
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
Exemplo: servidor Java, (cont.)
String sentence = new String(receivePacket.getData());
Obtém endereço IP
e número da porta
do transmissor
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
Cria datagrama
para enviar ao cliente
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
Escreve o
datagrama para
dentro do socket
serverSocket.send(sendPacket);
}
}
}
Termina o while loop,
retorna e espera por
outro datagrama
Instituto Presbiteriano Mackenzie
Faculdade de Computação e Informática
Disciplina de Sistemas Distribuídos
The Message-Passing Interface (MPI)
Primitive
Meaning
MPI_bsend
Append outgoing message to a local send buffer
MPI_send
Send a message and wait until copied to local or remote buffer
MPI_ssend
Send a message and wait until receipt starts
MPI_sendrecv
Send a message and wait for reply
MPI_isend
Pass reference to outgoing message, and continue
MPI_issend
Pass reference to outgoing message, and wait until receipt starts
MPI_recv
Receive a message; block if there are none
MPI_irecv
Check if there is an incoming message, but do not block
Download