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