REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2016 / 2017

Documentos relacionados
REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2008 / 2009

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2003 / 2004

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2018 / 2019

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2006 / 2007

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2017 / 2018

Sistemas de Telecomunicações 2012/2013

REDES AD HOC E DE SENSORES 2011 / 2012

Um sistema de difusão de informação a nível da aplicação

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2004 / 2005

Manual de procedimentos de utilização da porta RS232 dos osciloscópios Tektronix para efeitos de registo de formas de onda

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2014 / 2015

Redes de Computadores

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2013 / 2014

Sistemas Operativos, 3. o MIEIC 2009/10, FEUP

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Funcionalidades da camada de rede

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Sistemas Operativos I/O. Rui Maranhão

Sistema de Controlo com Acesso Remoto

Número: Professor: JM JF PA _. Exame2ª Época - 13/02/2009-2h

Sistemas de Telecomunicações 2006/2007

Trabalho de laboratório sobre HTTP

Volnys Bernal 1. Trabalho Chat UDP. PSI 2653 Meios Eletrônicos Interativos I

Canais de Comunicação

Laboratório - Uso do Wireshark para examinar uma captura UDP DNS

Laboratório de Informática Avançada Automatização de Horários Manual do Professor

ERP PRIMAVERA STARTER V9.15

Exercício Programa Mini Web Server

O Manual do Desktop Sharing. Brad Hards Tradução: Pedro Morais

Nome: Nº de aluno: 2ª Ficha de Avaliação Teórica Data Limite de Entrega: 06/11/2016

TimeNET. REPORTU Digital-Time. Manual de Utilizador do Software. Gestão de Assiduidade e Controlo de Acessos Página 1 de 35

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Tabela de Conteúdo. Pág. 2

Camada de Rede Fundamentos e Protocolos. 6/7/18 Organizado por Bruno Pereira Pontes brunopontes.com.br

O Manual do Remote Desktop Connection. Brad Hards Urs Wolfer Tradução: José Pires

Programação. Folha Prática 10. Lab. 10. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Duração do Teste: 2h.

Sistema Distríbuído de Medição de Grandezas

Serviços de Comunicações Capítulo 3

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 6 de Janeiro de o Exame A

Analise e verifique que as saídas de debugam pacotes do IPv6 DHCP em ASR9k

Barramento. Prof. Leonardo Barreto Campos 1

Rede Digital com Integração de Serviços RDIS

Manual do Gestor da Turma

Guia de utilização do servidor da disciplina

Vamos fazer um pequeno experimento

Módulo 3 Nível Transporte

Guião de Preenchimento do Módulo Reporte de Execução Física Versão 1.0

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2017 / 2018

S.O. em ambiente gráfico e modo de texto

1. Introdução ao syslog

Trabalho Prático Nº6 Porta USB Processo de Enumeração

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Redes de Computadores

Data and Computer Network Endereçamento IP

Nome: Nº de aluno: 2ª Ficha de Avaliação Teórica Data Limite de Entrega 06/11/2015

Segurança Informática e nas Organizações. Guiões das Aulas Práticas

Sistemas Embebidos I , Tiago Miguel Dias ISEL, ADEETC - Secção de Eletrónica e Telecomunicações e de Computadores

Nome: Nº de aluno: Indique se vai realizar exame ou 2º teste: Exame: 2º teste: PARTE 1 (7 valores)

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2016 / 2017

Módulo 3 - Estrutura e configuração de Sistemas Operativos monoposto

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 6 de Janeiro de o Teste A

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Working 03 : Conceitos Básicos I

PROTOCOLOS DE COMUNICAÇÃO

Portal Cliente MYG SYSTEM

Trabalho Prático 1 P2P-SDIS

Sistemas de Entrada e Saídas II

2-Introdução e Conceitos Básicos das TIC

RC Peer-to-Peer. 1. Introdução. 2. Especificação. Redes de Computadores 2º Semestre 2008/2009. Projecto de Laboratório

Manual do Utilizador do Connection Manager

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 30 de Novembro de o Teste A

PROTOCOLO ICMP. Março de Curso Superior em Análise e Desenvolvimento de Sistemas Redes decomputadores II RC2A3

INSTITUTO FEDERAL SP CAMPUS DE PRESIDENTE EPITÁCIO PESQUISA PROTOCOLO ICMP

Redes de Computadores e Aplicações. Aula 43 - Camada de Transporte TCP (Transmission Control Protocol)

Rede de computadores Protocolos UDP. Professor Carlos Muniz

Arquitetura de Sistemas Operativos

COMUNICAÇÃO ENTRE APLICAÇÕES. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

Introdução à Programação. João Manuel R. S. Tavares

Sumário. Ficheiros. Ficheiros

Configurar servidores de raio externos no ISE

Redes de Computadores

Preparação AV3 Fundamentos de Redes de Computadores

Sistemas Distribuídos

[ Arquitecturas Móveis ] 2017/2018

IMEI MONTAGEM E MANIPULAÇÃO DE REDES DE DADOS - REDES DE COMPUTADORES. Curso Profissional de Técnico de Gestão de Equipamentos Informáticos

Redes de Computadores e Aplicações

Manual de Utilizador. Documento de Apoio. (Versão Janeiro 2019)

Manual do Utilizador Gestor

Redes de Computadores RES 12502

Nome: Nº de aluno: 3ª Ficha de Avaliação 20/5/2014

Arquitetura de Redes TCP/IP. Camada de Transporte

Guião de Preenchimento do Módulo Reporte de Indicadores Versão 1.1

Capítulo 5 Sumário. Formato das Mensagens ICMP. Tipos de Mensagens ICMP

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2018 / 2019

Sistemas de Gestão De Bases de Dados. Criação de Tabelas na vista estrutura. Módulo 2. A Professora: Vanda Pereira

Eng.ª Informática - Cadeira de Redes de Computadores. Frequência 2º Semestre Avaliação Contínua. 5 de Julho de 2007

MANUAL DE INSTALAÇÃO

Transcrição:

Departamento de Engenharia Eletrotécnica REDES INTEGRADAS DE TELECOMUNICAÇÕES I 016 / 017 Mestrado Integrado em Engenharia Eletrotécnica e Computadores º ano 7º semestre º Trabalho Prático: Localização e troca de ficheiros em redes de camada dupla http://tele1.dee.fct.unl.pt Luis Bernardo

1. Objectivos Familiarização com a programação usando endereços IPv e IPv6, o ambiente gráfico Gnome/Gtk+3.0, e os mecanismos de gestão de processos e de comunicação entre processos no sistema operativo Linux. O trabalho consiste no desenvolvimento de uma aplicação para troca de ficheiros numa rede dual stack. A aplicação regista-se em endereços multicast IPv6 e IPv, e envia os pacotes de pesquisa para esses endereços sempre que o utilizador desencadeia uma pesquisa. Cada participante recebe o pedido e responde caso possua o ficheiro. Em seguida, a aplicação descarrega o ficheiro a partir de um dos servidores, utilizando um subprocesso dedicado (utilizando sockets ). O trabalho consiste no desenvolvimento de um executável:.. Especificações A aplicação necessita de dois parâmetros de configuração: os endereços IP Multicast dos grupos (por omissão vão-se usar os endereços "ff18:10:33::1" e 5.0.0.1 ) e o número de porto (por omissão vai-se usar o porto 0000). 0000 0000 Canal Multicast IPv6 +Canal Multicast IPv 0000 0000 A aplicação realiza a pesquisa por ficheiros utilizando um socket datagrama IPv6. Para receber pedidos para o grupo usa dois sockets associados aos grupos IPv e IPv6, configurados para o número de porto. Para enviar pedidos e receber respostas usa outro socket IPv6 privado (com um porto único). Para trocar ficheiros são usados um socket para receber ligações (com um porto único) mais um número arbitrário de sockets para pedir e receber ficheiros. A aplicação começa por aguardar que o utilizador configure os canais Multicast IPv6 e IPv (endereços IPv6/IPv + número de porto) onde pretende escutar. Após o utilizador premir um botão, a aplicação arranca com os quatro sockets, e fica preparada para enviar ou receber mensagens ou ligações. Paralelamente, a aplicação permite modificar a lista de ficheiros partilhados. Quando o utilizador escolhe a pesquisa de um ficheiro, a aplicação começa por enviar para os grupos o pedido e fica à espera de uma resposta até um tempo máximo de espera. Caso tenha

tido resposta, lança um subprocesso, que cria um socket temporário para receber o ficheiro. No final, deve criar um ficheiro numa diretoria de saída definida na interface gráfica. Após a receção de uma nova ligação, também deve ser criado um subprocesso para enviar o ficheiro pedido. A janela principal deve listar todos os subprocessos ativos, indicando os ficheiros recebidos e a percentagem do ficheiro que já foi recebida/transferida. É fornecida uma realização incompleta do trabalho que inclui todas as funcionalidades de interface gráfica com o utilizador (incluindo a gestão da lista de ficheiros partilhados) e parte das funcionalidades de gestão de sockets e de troca de mensagens. Para reduzir a carga horária do trabalho, reduziu-se o trabalho apenas às componentes de processamento das respostas a pedidos de ficheiros, gestão de subprocessos e a comunicação..1. Pesquisa de ficheiros A partir do momento em que fica ativa, a aplicação pode enviar um pacote de pesquisa de ficheiro para o grupo. O nome a pesquisar não deve incluir o caminho (nomes de diretórios) e deve ser terminado com o carater '\0'. Este pacote identifica o número de pesquisa (número de sequência), permitindo a existência de vários pedidos em simultâneo. A mensagem de pedido enviada para o grupo consiste num octeto com o tipo de mensagem, seguida do número de sequência único, do comprimento e da cadeia de carateres com o nome que se pretende pesquisar (terminado com o carater '\0'). Mensagem pesquisa de ficheiro: { sequência contígua de } unsigned char type; // message type - QUERY= 10 uint3_t seq; // request sequence number short int ; // gth of fname string = str(fname)+1 char[] fname; // fname string 1 QUERY seq frame Ao receber a mensagem de pedido, a aplicação deve comparar o nome do ficheiro com os nomes de ficheiros partilhados (excluindo o caminho) e devolver uma mensagem de resposta ao emissor, onde indica as caraterísticas do ficheiro encontrado (o comprimento e o valor de hash) e o número de porto onde o emissor se deve ligar para descarregar o ficheiro. Inclui ainda os dados enviados pelo emissor, para permitir realizar a associação ao pedido (quando existem vários pedidos em paralelo). A mensagem de resposta enviada para o emissor do pedido consiste num octeto com o tipo de mensagem, seguida do número de sequência enviado pelo emissor, do comprimento e nome do ficheiro pedido, do comprimento do ficheiro, do valor de hash do conteúdo do ficheiro e do porto do socket onde recebe ligações. Mensagem encontrou ficheiro: { sequência contígua de } unsigned char type; // message type - HIT= 0 uint3_t seq; // request sequence number short int ; // gth of fname string = str(fname)+1 char[] fname; // fname string unsigned long long ; // File gth uint3_t hash; // File content s hash value unsigned short port; // server s port number 1 8 HIT seq frame f fhash port 3

.3. Transferência de ficheiros Depois de receber a primeira resposta, a aplicação deverá descarregar o ficheiro, ignorando as respostas seguintes. A leitura e escrita dos segmentos de ficheiro deve ser realizada em subprocessos criados no emissor e no recetor do ficheiro. Após selecionar um servidor, o recetor do ficheiro (que enviou a QUERY) deve criar um subprocesso de receção (download) de ficheiro (1), que cria um socket temporário para receber o ficheiro. Após o subprocesso estabelecer ligação (), é disparada no emissor (que enviou o HIT) a callback de aceitação de ligações. Esta callback deve também lançar um subprocesso (3), que envia o ficheiro pretendido. pipe sinal SIGUSR1 (1) () () pipe (3) sinal SIGUSR1 (5) No canal de comunicação entre o recetor e o emissor, a comunicação deve iniciar-se com o envio de um pedido de ficheiro (). O recetor indica ao emissor qual o nome do ficheiro. O emissor deve começar por enviar (5) o comprimento do ficheiro (ou zero, se não existe) e em seguida deve enviar o conteúdo do segmento pedido pelo recetor: Pedido de ficheiro: { sequência contígua de } short int _fiame; // Fiame gth(max. 56 bytes) char[] fiame; // Fiame string ended by '\0' Resposta a pedido de ficheiro: { sequência contígua de } long long file_gth; // File gth (0 if non existent) char[] file_contents; // File contents 8 f frame f FILE Os subprocessos podem comunicar com os processos pai através de um pipe criado antes da separação do subprocesso, enviando mensagens com uma estrutura arbitrária, que informam o processo pai de: conteúdo do cabeçalho para preenchimento da interface gráfica (no caso do emissor de ficheiros); informação sobre evolução da transferência; fim da transferência (com informação sobre se houve erro, tempo de transferência e número de bytes). Como estas mensagens são internas ao programa, não são normalizadas no enunciado, devendo ser os alunos a definir a sua estrutura. O processo pai apenas vai comunicar com os subprocessos quando os quiser parar, utilizando o sinal SIGUSR1 para esse efeito. O processo pai também vai poder seguir o que está a ocorrer nos subprocessos através da função de tratamento do sinal SIGCHLD, executada quando morre um dos seus filhos. Através da análise do motivo de saída (_exit ou sinal) e do valor do _exit, é possível detetar se o processo enviou uma mensagem através do pipe, ou se falhou. 3. Desenvolvimento da aplicação Para facilitar o desenvolvimento da aplicação é fornecido um programa de teste totalmente funcional (demo_t + demo_t.glade), o ficheiro glade-3 gui_t.glade com a definição da interface gráfica do programa de teste, mais um conjunto de ficheiros descritos abaixo.

A interface contém uma linha inicial onde se configura os endereços IPv6 e IPv multicast e o número de porto, e onde a aplicação escreve o número de porto onde recebe ligações e o número de processo. O botão "Active" controla o arranque do servidor. Na segunda e terceira linha contém uma tabela (do tipo GtkTreeView) com a lista de ficheiros partilhados (representa o nome de ficheiro, o comprimento, e o valor de hash do conteúdo do ficheiro). A linha seguinte contém os comandos da lista de ficheiros: permite acrescentar ou remover um ficheiro, e gravar ou ler um ficheiro com uma lista de ficheiros, com o nome representado na caixa à direita. A linha seguinte controla a transferência de ficheiros: permite pedir ficheiros, parar uma transferência, definir se se optimiza a transferência, e mostra a diretoria onde os ficheiros são escritos. O nome da diretoria resulta da concatenação de "out" com o pid do processo. Esta linha inclui ainda um botão para limpar a janela de texto da última linha. A sexta linha contém a lista de subprocessos ativos num dado instante, com o número de pid, de pipe, se é emissor (SND) ou recetor (RCV), a percentagem de bytes transferidos/recebidos, o nome do ficheiro pedido e o ficheiro que está a ser criado. A sexta, e última linha, contém uma caixa para escrever mensagens. Cada grupo pode fazer todas as modificações que quiser ao programa base. No entanto, recomenda-se que invistam o tempo na correta realização da aplicação proposta. Configuração dos grupos Dados da aplicação Botão de arranque Lista de ficheiros partilhados Gestão da lista de ficheiros partilhados Pedido de ficheiro Parar transferência Diretoria onde coloca ficheiros recebidos Lista de subprocessos activos Janela de Log O código C fornecido está organizado em sete módulos: sock.{c,h} Biblioteca de funções para lidar com sockets e com endereços IP (incluindo obter o endereço local); file.{c,h} Biblioteca de funções para lidar com ficheiros e para gerir a lista de ficheiros; gui.h e gui_g3.c Biblioteca de funções para lidar com os elementos gráficos da interface, exceto as listas de ficheiros e de subprocessos; subprocess.{c,h} Funções para lidar com subprocessos de transferência de ficheiros e com a tabela gráfica de subprocessos. Este módulo está incompleto falta completar a maior parte das funções que gere a transferência de ficheiros e a comunicação entre processo pai e os subprocessos; 5

callbacks_socket.{c,h} Funções de iniciação e paragem dos sockets, callbacks de interação com sockets, e codificação de mensagens. Este módulo está incompleto falta completar as funções que suportam a comunicação com IPv; callbacks.{c,h} Funções de arranque e paragem da aplicação, timers, e controlo da lógica do programa. Este módulo está incompleto falta completar parte das funções; main.c Função de arranque da aplicação. Cria diretoria para guardar os ficheiros recebidos. Makefile Script de controlo de compilação. Pode ser usado para definir símbolos de compilação (e.g. DEBUG, NOFORK) usados para controlar o programa. O programa fornecido inclui todos os ficheiros completos exceto os ficheiros subprocess.{c,h}, callbacks_socket.{c,h} e callbacks.{c,h}, que devem ser completados pelos alunos. Na comunicação multicast falta completar o arranque e paragem dos sockets IPv, a configuração do relógio de tempo limite de pedido, a receção de mensagens IPv, e o processamento da mensagem HIT. Na comunicação de ficheiros a comunicação através do socket e dos pipes está por fazer. Para facilitar o debug do código dos subprocessos pode-se definir o símbolo NOFORK, que desativa a criação do subprocesso, correndo o código no processo principal. A parte inicial do trabalho corresponde em ler e compreender o código fornecido, tornando realizável em pouco tempo a comunicação. RECOMENDA-SE AOS ALUNOS QUE VEJAM O CÓDIGO FORNECIDO EM DETALHE, para conseguirem tirar total proveito dele. O trabalho deve ser desenvolvido em várias fases distintas: 1. ler e compreender o código que é fornecido com o enunciado do trabalho (ANTES DA PRIMEIRA AULA);. terminar a programação da função write_hit_message, que prepara as mensagens HIT; 3. terminar a programação da função que trata o botão envia o pacote QUERY de forma a armar um temporizador (para desistir após QUERY_TIMEOUT ms) e a callback do temporizador;. terminar a programação da função de receção de mensagens HIT, lidando com múltiplas respostas a um pedido e lançando os subprocessos de receção de ficheiros; 5. programação da função de envio de ficheiros que lança os subprocessos de receção de ficheiros, completando o protocolo inicial e enviando o ficheiro (ainda sem comunicação através do pipe); 6. Programação da função de receção de ficheiros. O ficheiro deve ser guardado na diretoria que é criada no botão de arranque para esse efeito. Deve correr o protocolo inicial antes de receber o ficheiro (inicialmente sem comunicação através do pipe); 7. Programação da comunicação através do pipe, incluindo o envio nas funções de e 5 e a função de receção de dados do pipe, no programa principal, que atualiza a interface gráfica; 8. Programação da inicialização do socket IPv e da pesquisa/recepção de dados através do grupo IPv. 9. Se tiver tempo, teste de velocidade na transferência de ficheiro, modificando a dimensão dos buffers de envio e receção de dados no nível e no ciclo de envio e receção do ficheiro nos subprocessos. Observe-se que o programa de teste é intencionalmente to porque inclui um 'usleep' no ciclo de envio/receção de ficheiro, que o faz "dormir" durante 5 ms entre envios de blocos do ficheiro. 6

Planeamento previsto para as semanas do trabalho: 1. começar a fase () durante a semana 1;. terminar a fase (5) durante a semana ; 3. começar a fase (7) durante a semana 3. O trabalho foi optimizado para poder ser realizado em paralelo em grupos de elementos; As fases (), (5); e (6) e (7) podem ser realizadas em paralelo. Não se esqueça que no dia 7 de Novembro ÀS 1 HORAS vai ser necessário entregar os trabalhos. Não deixe para a última semana o que pode fazer ao longo das primeiras semanas, porque NÃO VAI CONSEGUIR FAZER NESSA SEMANA TODOS OS TRABALHOS QUE TEM DE FAZER AGENDADOS PARA ESSA ALTURA. Postura dos Alunos Cada grupo deve ter em consideração o seguinte: Não perca tempo com a estética de entrada e saída de dados Programe de acordo com os princípios gerais de uma boa codificação (utilização de indentação, apresentação de comentários, uso de variáveis com nomes conformes às suas funções...) e Proceda de modo a que o trabalho a fazer fique equitativamente distribuído pelos dois membros do grupo. 7