Departamento de Engenharia Informática Sistemas Distribuídos Capítulo 2: Programação da Comunicação 3/6/2005 José Alves Marques Departamento de Engenharia Informática Índice • • • • Revisão das Redes Modelo da comunicação distribuída Caracterização da interface Exemplos de Interfaces de comunicação 3/6/2005 José Alves Marques Departamento de Engenharia Informática Modelo de Comunicação • Comunicação: interacção entre um processo emissor, que gera a informação, e um processo receptor, que irá tratá-la. • Canal: abstracção dos mecanismos de transporte que suportam a transferência de informação • Porto: extremidade de um canal – Conceptualmente, o canal pode ser visto pelos utilizadores como a associação entre dois portos • Protocolo: definição das mensagens e respectivo encadeamento que permite a comunicação entre os interlocutores 3/6/2005 José Alves Marques Departamento de Engenharia Informática Programação da comunicação: modelo porto Processo porto Canal de comunicação físico lógico rede rede transporte API da comunicação modo utilizador modo sistema 3/6/2005 José Alves Marques Processo Departamento de Engenharia Informática Redes de Dados • Fornecer uma base mínima de compreensão das redes de dados – Arquitectura – Organização – Protocolos Revisão • Identificar os aspectos relevantes das redes de dados na concepção de sistemas distribuídos 3/6/2005 José Alves Marques Departamento de Engenharia Informática Arquitectura Lógica • Porquê uma arquitectura Lógica nas redes? • A arquitectura lógica define as propriedades da rede, adequadas ao seu campo de aplicações – – – – – – – Tipo de endereçamento Desempenho Garantia de entrega de mensagens Ordenação das mensagens Tolerância a faltas Endereçamento em difusão … • A mesma arquitectura lógica pode ser realizada (com maior ou menor facilidade) sobre várias arquitecturas físicas 3/6/2005 José Alves Marques Departamento de Engenharia Informática Características habituais das Arquitecturas Físicas Redes Locais – – – – – – Transmissão em difusão Banda passante muito grande Topologias de bus ou anel Encaminhamento trivial Menor escalabilidade, Maior tolerância a faltas Redes de Larga Escala – – – – – – 3/6/2005 Transmissão ponto a ponto Banda passante com limitações mas tecnologias tradicionais Topologia malhada com redundância Necessidade de encaminhamento Grande escalabilidade, Menor tolerância a faltas José Alves Marques Departamento de Engenharia Informática Modelo de Referência Um Modelo de Referência, ou Família de Protocolos, define as características lógicas e físicas das redes – Normalmente divididos em níveis – Os níveis são independentes mas estão relacionados – Permitem várias realizações compatíveis 3/6/2005 José Alves Marques Departamento de Engenharia Informática OSI - Nível Físico Funções: conseguir transmitir 1 bit de informação sobre o meio físico de interligação – Velocidade de propagação, atenuação, imunidade ao ruído, etc. Nível Físico define: – Níveis eléctricos do sinal – Características temporais – Protocolos de codificação, baseados no funcionamento da rede (taxa de erros, recuperação de relógio, …) – Placas de interface (network cards) • Interface eléctrica • Aspectos mecânicos dos conectores 3/6/2005 José Alves Marques Departamento de Engenharia Informática Nível Físico Bus Malhada 3/6/2005 José Alves Marques Anel Departamento de Engenharia Informática OSI: Nível Lógico ou Ligação de Dados • Funções: transmissão de pacotes, ou tramas, entre duas máquinas ligadas à mesma rede física • Nível Lógico define: – Delimitadores de trama – Endereço físico do destinatário (endereço único, broadcast, multicast) – Multiplexagem do meio de transmissão (emissor) – Detecção do endereço do destinatário (receptor) – Detecção de erros de transmissão (códigos CRC) – Definição da unidade básica de informação (bit, octeto) – Recuperação de erros de transmissão – Controlo de fluxo 3/6/2005 José Alves Marques Departamento de Engenharia Informática Nível Lógico Ethernet ATM Frame Relay GPRS UMTS 3/6/2005 José Alves Marques Departamento de Engenharia Informática OSI: Nível Rede • Funções: interligar máquinas independentemente da rede física a que estão ligadas • Uma rede lógica passa a ser composta pela interligação de várias redes físicas • Nível Rede define: – Formato dos pacotes de dados – Mecanismos de encaminhamento entre redes • Fundamental para redes malhadas • Normalmente baseados em tabelas de encaminhamento – Protocolo de rede OSI: X.25 • Com ligação, sequencialidade, controlo de fluxo – Protocolo de rede Internet: IP • Sem ligação nem garantias de qualidade (ex: IP) 3/6/2005 José Alves Marques Departamento de Engenharia Informática Nível Rede Rede IP 3/6/2005 José Alves Marques Departamento de Engenharia Informática OSI: Nível Transporte • Funções: oferecer um serviço de transmissão de informação que permita a comunicação entre utilizadores finais • Características – Com ou sem ligação – Comunicação fiável • Garantia de entrega • Garantia de ordem – Fragmentação – Controlo de fluxo – Notificação de excepções na comunicação 3/6/2005 José Alves Marques Departamento de Engenharia Informática Nível Transporte Processo Utilizador Rede TCP Processo Utilizador 3/6/2005 José Alves Marques Departamento de Engenharia Informática OSI – Níveis superiores do Modelo • Os restantes níveis do modelo OSI implicam a integração com o sistemas operativos e com as aplicações • São em grande parte o objecto desta cadeira, • Embora alguns protocolos de nível aplicacional possam ser vistos como de transporte de informação 3/6/2005 Aplicação HTTP, FTP, SMTP, Corba, IIOP, SOAP, RMI Apresentação XML, XDR, XML Sessão Binding protocol, DCE-RPC José Alves Marques Departamento de Engenharia Informática Aspectos a Analisar • Integração das Redes no Sistema Operativo • Características do Canal de Comunicação 3/6/2005 José Alves Marques Departamento de Engenharia Informática Integração da Comunicação no Sistema Operativo • As aplicações invocam uma API que lhes permite aceder ao mecanismos de transporte • A API deve ser conceptualmente independente de uma determinada pilha de protocolos de transporte • Alternativas de implementação – Funções de ES genéricas • Ex: sockets – parcialmente – Funções de comunicação específicas • Ex: Algumas funções dos sockets • Ex: TLI – Mecanismo básico de comunicação entre processos do sistema operativo • Ex: IPC dos micro-núcleos 3/6/2005 José Alves Marques Departamento de Engenharia Informática Unix – 4.4 BSD System calls Terminal handing Raw tty Sockets Cooked tty Network protocols Line disciplines Routing Character devices Netwok device drivers Interrups and traps File Map- Page Process naming ping faults Signal handling Creation and File Virtual Termination systems memory Buffer cache Page cache Process scheduling Disk device drivers Process dispatching Hardware 3/6/2005 José Alves Marques Departamento de Engenharia Informática Winsock Implementation Application Mswsock.dll SPI Msafd.dll Wshtcpip.dll Service Providers Ntdll.dll NtReadFile, NtWriteFile, NtCreateFile, NTDeviceloControlFile User mode Kernel mode \Device\AFD TDI IRPs Protocol drivers 3/6/2005 IPX/SPX AFD FSD TDI NetBEUI José Alves Marques TCP/IP Departamento de Engenharia Informática Caracterização do canal 3/6/2005 José Alves Marques Departamento de Engenharia Informática Tipos de canais (I) • Com ligação – Normalmente serve 2 interlocutores – Normalmente fiável, bidireccional e garante sequencialidade • Sem ligação – Normalmente serve mais de 2 interlocutores – Normalmente não fiável • Canal com capacidade de armazenamento em fila de Mensagens – Normalmente com entrega fiável das mensagens 3/6/2005 José Alves Marques Departamento de Engenharia Informática Canal com Fila de Mensagens Rede Emissor Emissor Receptor Receptor fila Emissor fila Emissor Receptor fila fila 3/6/2005 Receptor José Alves Marques Departamento de Engenharia Informática Portos – Extermidades do Canal de Comunicação • Portos – São extremidades de canais de comunicação • Em cada máquina são representados por objectos do modelo computacional local – Possuem 2 tipos de identificadores: • O do objecto do modelo computacional – Para ser usado na API pelos processos locais – Ex.: File descriptors, handles • O do protocolo de transporte – Para identificar a extremidade entre processos (ou máquinas) diferentes – Ex.: Endereços TCP/IP, URL 3/6/2005 José Alves Marques Departamento de Engenharia Informática Programação da comunicação: semântica de envio • Núcleo SO Assíncrona – Transferência para os tampões do núcleo – A função retorna e a aplicação continua • Síncrona – Garantia de entrega no destino – A aplicação fica bloqueada até a emnsagem ser entregue • aplicação aplicação Pedido/resposta ou Remote Procedure Call – Cliente só prossegue após resposta do servidor cliente servidor 3/6/2005 José Alves Marques Departamento de Engenharia Informática Programação da comunicação: • Conteúdo – Não Estruturado – as mensagens são constituídas por bytes transmitidos entre as aplicações – Estruturado – o conteúdo das mensagens é descrito com um protocolo de Apresentação. As mensagens podem ser traduzidas entre máquinas heterogéneas – Documentos – as mensagens são documentos estruturados que podem ser usados de diversas formas pelas aplicações. Exemplo: doc em XML • Fluxo – Sequências de octetos (byte stream) • Normalmente ilimitadas – Sequências de blocos de octetos • Fronteiras bem definidas e mantidas pelo transporte • Normalmente os blocos são limitados • O fluxo de blocos pode não manter a ordem 3/6/2005 José Alves Marques Departamento de Engenharia Informática Programação da comunicação: semântica de recepção • Ler de forma não bloqueante – Erro se nada houver na fila • Bloquear à espera de ler uma mensagem – Bloqueio infinito ou temporizado • Bloquear à espera de múltiplos eventos - guarda – Multiplexagem de E/S • e potencialmente de outras operações (ex. Windows) – Leitura da fila só após receber um dado evento – Utilizável para outras operações bloqueantes: • Espera de pedidos de ligação • Espera por aceitações de ligação • Espera por capacidade de envio 3/6/2005 José Alves Marques Departamento de Engenharia Informática Programação da comunicação: Deteção e tratamento de faltas • O modelo de faltas depende do tipo dos canais – Com ligação: • Na ligação: destinatário inexistente, etc. • Na conversação: quebra de ligação, etc. – Sem ligação: • destinatário inexistente, perda de dados, etc. • A notificação das faltas às aplicações depende da API e do modelo computacional – Valores de retorno da API – Chamadas assíncronas de procedimentos – Chamadas próprias da API 3/6/2005 José Alves Marques Departamento de Engenharia Informática Programação da comunicação: Difusão de mensagens • Semântica – Enviar apenas uma mensagens para múltiplos receptores • Suporte à difusão depende da rede – Fácil em LANs (Ethernet, etc.) • Suporte dos níveis 1 e 2 (físico e rede) – Complexo em redes maiores (MANs, WANs) • Requer suporte dos níveis superiores • Suporte específico a níveis superiores – IP multicast – Comunicação em grupo (ex. ISIS) – Brokers de mensagens com regras de distribuição das mensagens 3/6/2005 José Alves Marques Departamento de Engenharia Informática Concretizações da API: semânticas próximas do Transporte • UNIX – Sockets (BSD 82) – TLI (Transport Layer Interface, ATT 86) – Streams (Ritchie 84, ATT 89) • Windows – NetBIOS (IBM 84) – NetBEUI (IBM 85) – Winsocks (Windows Sockets ) • V1 (MS 93) • V2 (MS 96) – – – – 3/6/2005 Named Pipes (IBM OS/2) Mailslots (IBM OS/2) NetDDE (MS) MSMQ – sistema de message queuing José Alves Marques Departamento de Engenharia Informática Exemplos de Interfaces Sockets TLI Netbios Mach Message Java Message 3/6/2005 José Alves Marques Departamento de Engenharia Informática Interface sockets • Interface de programação para comunicação entre processos introduzida no Unix 4.2 BSD • Objectivos: – – – – 3/6/2005 Independente dos protocolos Transparente em relação à localização dos processos Compatível com o modelo de ES do Unix Eficiente José Alves Marques Departamento de Engenharia Informática Interface sockets • Domínio do socket: define a família de protocolos associada a um socket – Internet: família de protocolos Internet – Unix: comunicação entre processos da mesma máquina – Outros… • Tipo do socket: define as características do canal de comunicação – Stream: canal com ligação, bidireccional, fiável, interface tipo sequência de octetos – Datagram: canal sem ligação, bidireccional, não fiável, interface tipo mensagem – Raw: permite o acesso directo aos níveis inferiores dos protocolos (ex: IP na família Internet) 3/6/2005 José Alves Marques Departamento de Engenharia Informática Interface sockets Relação entre domínio, tipo de socket e protocolo Stream Datagram Raw Seq Packet 3/6/2005 UNIX INET NS Sim Sim - TCP UDP IP - SPP IDP Sim SPP José Alves Marques Departamento de Engenharia Informática Sockets sem Ligação Servidor Cliente socket socket bind bind sendto recvfrom sendto recvfrom 3/6/2005 José Alves Marques Departamento de Engenharia Informática Sockets UDP em Java 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();} José Alves Marques } 3/6/2005 } Departamento de Engenharia Informática Sockets UDP em Java 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.legth); aSocket.receive(request); DatagramPacket reply = new DatagramPacket(request.getData(), request.getLength(); request.getAddress(), request.getPort()); aSocket.send(reply); } } catch (SocketException e){System.outprintln(“Socket:”+ e.getMessage()); } catch (IOException e){System.out.println(“IO:” + e.getMessage()); } finally {if(aSocket ! = null) aSocket.close();} José Alves Marques } 3/6/2005 Departamento de Engenharia Informática Sockets Datagram em Java • DatagramSocket – classe que suporta os sockets datagram e que tem como argumento um porto • Métodos – send; receive – setSoTimeout – temporizador que limita o tempo de espera do receive – connect – define um porto remoto • Conversão do nome DNS para um endereço Internet com o método InetAddress.getByName 3/6/2005 José Alves Marques Departamento de Engenharia Informática Sockets com Ligação Servidor Cliente socket bind 3/6/2005 listen socket accept connect read write write read José Alves Marques Departamento de Engenharia Informática Sockets em Java 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 server Port = 7896; s = new Socket (args[1], serverPort); DataInputStream = new DataInputStream(s.getInputStream()); DataOutputStream out = newDataOutputStream (s.getOutputStream()); out.writeUTF(args[0]); String data = in.readUTF(); System.out.prtintln(“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} } 3/6/2005 José Alves Marques Departamento de Engenharia Informática Sockets em Java import java.net*; import java.io*; public class TCPServer{ public static void main(String args[]){ try{ int server Port = 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());} } } 3/6/2005 José Alves Marques Departamento de Engenharia Informática Sockets Stream em Java • Socket – classe que suporta o socket cliente e que tem como argumentos a identificação remota do servidor: o nome DNS do servidor e o porto • O construtor não só cria o socket como efectua a ligação • Métodos – getInputStream; getOutputStream – permite aceder aos dois streams definidos pelo socket • ServerSocket – classe para o servidor • Métdos – Accept – Recebe um socket cliente sempre que é invocado o connect • WriteUTF e readUTF – para Universal transfer format para as cadeias de caracteres 3/6/2005 José Alves Marques Departamento de Engenharia Informática Transport Layer Interface • Introduzida no Sistema V versão 3 • A implementação da TLI é suportada nos stream Unix. Objectivo total integração com os mecanismos de E/S. • As funções são muito semelhantes às dos sockets mas existe uma maior uniformização com a interface genérica dos streams. 3/6/2005 José Alves Marques Servidor Cliente t_open t_bind t_alloc Transport Layer Interface t_open t_bind t_listen t_alloc Bloqueio à espera de ligação li g a ç ão t_connect t_accept t_rcv t_snd t_snd t_rcv