Mudanças entre as edições de "PTC29008: Apresentação"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 52: Linha 52:
 
|FTP  || Transferência de arquivos entre máquinas em uma rede TCP/IP || Utiliza um modelo cliente-servidor para a transferência de arquivos em ambas as direções (download e upload) de maneira eficaz. Estabelece duas conexões TCP paralelas: uma para controle (persistente) e outra para dados (não-persistente). Caracteriza-se por ser um protocolo de padrão aberto.
 
|FTP  || Transferência de arquivos entre máquinas em uma rede TCP/IP || Utiliza um modelo cliente-servidor para a transferência de arquivos em ambas as direções (download e upload) de maneira eficaz. Estabelece duas conexões TCP paralelas: uma para controle (persistente) e outra para dados (não-persistente). Caracteriza-se por ser um protocolo de padrão aberto.
 
|-
 
|-
| ||  ||  
+
| SIP ||  ||  
 
|-
 
|-
| ||  ||  
+
| SNMP||  ||  
 
|-
 
|-
| ||  ||  
+
| MQTT ||  ||  
 
|-
 
|-
| ||  ||
+
| SMTP ||  ||
 
|-
 
|-
| ||  ||  
+
| TR069 ||  ||  
 
|-
 
|-
| || ||
+
| RTP || ||
 
|-
 
|-
 
| || ||
 
| || ||

Edição das 15h13min de 12 de fevereiro de 2019

Próxima aula



  • Caracterização de protocolos por meio de um exemplo: sintaxe, comportamento, temporização, semântica. Princípios de projeto e propriedades desejáveis de protocolos. Análise de um protocolo real.


  • Projeto 1: um protocolo de comunicação
  • Projeto 2: um protocolo de aplicação
  • Projeto 3: verificação formal do protocolo de comunicação

Um protocolo é uma parte muito importante de um sistema de comunicação. A comunicação de dados pode ser entendida como troca de informação entre dois dispositivos através de algum meio de comunicação. A comunicação ocorre no âmbito de um sistema de telecomunicações, composto por equipamentos (hardware) e programas (softwares). Um sistema básico de comunicação de dados se constitui de cinco componentes:


Rede-intro-1.png


  1. A mensagem: a informação a ser transmitida. O conteúdo da mensagem, seja um texto, música, video, ou qualquer outro tipo de informação, é representada por conjuntos de bits (dígitos binários).
  2. Transmissor: dispositivo que transmite a mensagem.
  3. Receptor: dispositivo que recebe a mensagem.
  4. Meio de comunicação: caminho físico por onde viaja a mensagem do transmissor até o receptor.
  5. Protocolo: conjunto de regras que governa a comunicação de dados.


Os sistemas de comunicação reais, incluídas as redes de computadores, são bem mais complexos do que esse modelo simplificado. No entanto, todos podem ser entendidos, em alguma medida, a partir desse modelo. Nesta disciplina estudam-se princípios e técnicas para projeto de protocolos, incluindo formas de verificar a consistência e correção de seu funcionamento.


Serviço e Protocolo

Um sistema de comunicação provê serviços para as aplicações ou usuários realizarem ações que envolvam a comunicação entre sistemas através de uma rede. Por exemplo, existem serviços para transferência de arquivos, reprodução remota de videos e músicas, execução remota de programas, pesquisa por informação, e muitos outros. O conceito de serviço está relacionado ao de protocolo. Um serviço é provido por entidades que interagem de acordo com um protocolo. Assim, um serviço é um dos elementos envolvidos na especificação de um protocolo. As figuras a seguir mostram a relação entre esses conceitos, primeiro apresentando somente a visão de um serviço para um usuário, e, em seguida, a relação entre serviço e protocolo.

PTC-Servico1.png
Um serviço visto por um usuário


PTC-Protocolo1.png
O serviço provido pelo protocolo

Protocolos reais

Que protocolos existentes despertam suas curiosidades sobre os detalhes de seus projetos ? Identifiquem alguns protocolos, e anotem suas finalidades e características.

Protocolo Finalidade Características
NTP Sincronizar os relógios dos computadores ligados a rede. Utiliza uma versão do algoritmo de Marzullo para determinar o tempo dos servidores corrigindo os efeitos da variação da latência da rede. Utiliza uma hierarquia mestre-escravo onde o servidor envia o horário UTC aos equipamentos da rede, enviando as informações por UDP.
FTP Transferência de arquivos entre máquinas em uma rede TCP/IP Utiliza um modelo cliente-servidor para a transferência de arquivos em ambas as direções (download e upload) de maneira eficaz. Estabelece duas conexões TCP paralelas: uma para controle (persistente) e outra para dados (não-persistente). Caracteriza-se por ser um protocolo de padrão aberto.
SIP
SNMP
MQTT
SMTP
TR069
RTP

Análise dos protocolos

De acordo com Gerard Holzmann, no capítulo 2 de seu livro Design and Validation of Computer Protocols, um protocolo é composto por cinco elementos:

  1. O serviço oferecido pelo protocolo. Ex: protocolo MPCP (outra descrição)
  2. As considerações sobre o ambiente em que o protocolo é executado
  3. O vocabulário de mensagens usadas para implementar o protocolo
  4. A codificação (ou formato) de cada mensagem do vocabulário
  5. O comportamento, definido por regras de intercâmbio responsáveis pela consistência das trocas de mensagens


Com base nesses elementos, deve-se complementar ou adequar a análise dos protocolos selecionados:

Protocolo Serviço Ambiente de execução Vocabulário Codificação Comportamento
NTP Sincronização dos relógios dos computadores ligados a rede. Usa um canal UDP para intercâmbio de mensagens. Pode perder mensagens. Latências de transmissão variáveis (ex: devido a congestionamentos) podem ocorrer. NTP Data packet binária (ver RFC 5905) Há um bom resumo neste documento.
FTP Transferência de arquivos entre computadores conectados em uma rede. Usa dois canais TCP paralelos para intercâmbio de de dados de controle e arquivos. Garante confiabilidade, ou seja, entrega do arquivo enquanto protege de erros de transmissão. Conjunto de comandos: USER, PASS, LIST, STOR, PORT, QUIT. Textual (ASCII ou EBCDIC) ou binária. ( ver RFC 959) 1- Cliente realiza conexão de controle (porta 21) com servidor (modo passivo ou ativo). 2- Com a confirmação positiva, servidor mantém a conexão de controle aberta e aguarda as solicitações de transferência. 3- Em modo de execução ativo o servidor inicia a conexão de dados. 4- Em modo de execução passivo o cliente inicia a conexão de dados para iniciar a transferência.

Atividade

Aplicações de bate-papo (chat) são bastante utilizadas, havendo diversas opções na Internet. Um bate-papo básico, em que se trocam somente mensagens de texto, pode ser implementado sem grande complexidade. Crie uma aplicação de bate-papo com estas características:

  • Modelo cliente-servidor: clientes são os usuários que desejam conversar, e servidor é a aplicação que intermedia as mensagens entre clientes
  • Identificação de usuários: cada usuário deve ser identificado por uma string, a qual é informada pelo próprio usuário ao iniciar o bate-papo
  • Mensagens puramente textuais: cada mensagem enviada ao bate-papo é mostrada ao demais usuários prefixada pela identificação do usuário que a escreveu
  • Mensagens privadas ou públicas: mensagens privadas são mostradas a um único usuário específico, e mensagens públicas são mostradas para todos usuários


O desenvolvimento dessa aplicação implica projetar e implementar um protocolo para o intercâmbio de mensagens. Para a transmissão de mensagens use alguma API de comunicação existente, tal como:

Revisão sobre sockets


O uso de sockets UDP usando a API de sockets pode ser resumida nos seguintes passos:

Cliente ou servidor:

  1. Criar um socket (socket)
  2. Vinculá-lo a um endereço e port (bind)
  3. Enviar e receber dados (sendto, recvfrom)
  4. Encerrá-lo (close)


A API de sockets em sua forma mais elementar é fornecida para linguagem C. Outras linguagens oferecem versões de mais alto nível dessa API, tais como:

Exemplos existem nos tutoriais indicados nos links no início desta seção. Porém para facilitar o uso de sockets foram criadas algumas classes C++:


Cada objeto da classe UDPSocket define um ponto final de comunicação UDP. A descrição de sua interface está em UDPSocket.h (ver comentários). Objetos dessas classes funcionam como sockets, porém com simplificações (não são necessários todos os passos da API de sockets do sistema operacional). Existe um exemplo de utilização nos arquivos uclient.cpp e userver.cpp:

Exemplo de cliente
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include "UDPSocket.h"

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    UDPSocket client;
    
    try {
      // conecta no servidor da wiki
      client.send("hello world ! \n\n", "localhost", 8000);
    } catch (UDPSocket::SocketException e) {
      perror("ao enviar");
    }
    
    
    return 0;
}
Exemplo de servidor
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include "UDPSocket.h"

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    UDPSocket server("0.0.0.0", 8000);
    
    while (true) {
      try {
        string addr;
        int port;

        string dados = server.recv(64, addr, port);
        cout << "Recebeu " << dados.size() << " caracteres de " << addr << ":" << port <<" --> " << dados << endl;
      } catch (UDPSocket::SocketException e) {
        perror("ao enviar");
      }
    }
    
    
    return 0;
}


... mas quem quiser tentar (ou conhecer) algo mais completo, pode experimentar a biblioteca Boost.Asio.