Trabalho Prático 1 P2P-SDIS



Documentos relacionados
Melhor caminho entre duas estações de metro

Tumblr Aplicação Android. Relatório Final

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

aplicação arquivo Condições Gerais de Utilização

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2008 / 2009

Gerenciamento de Redes: Protocolo SNMP

Sistema de Controlo com Acesso Remoto

Manual do Fénix. Gestão da ficha de unidade curricular (Portal de coordenador de ECTS) DSI (Versão 1.0)

Sistemas Distribuídos

Departamento de Informática

Funcionalidade e Protocolos da Camada de Aplicação

Sistemas entre Pares e Redes Sobrepostas

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

Programação com Sockets

Experiência 04: Comandos para testes e identificação do computador na rede.

[ Arquitecturas Móveis ] 2017/2018

Redes de Computadores 2 o Teste

Rui Carneiro, Rui Pereira, Tiago Orfão

Sistemas Distribuídos Aula 10

UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO. Licenciatura em Engenharia Informática e Computadores Alameda e Taguspark

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2003 / 2004

Redes de Computadores

Gestão Documental. Gestão Documental

EXERCÍCIOS DE REVISÃO REDES DE COMPUTADORES EDGARD JAMHOUR. Segundo Bimestre

Manual de Utilização

Manual de Utilizador

Redes: Quais as diferenças entre o Protocolo TCP e UDP

Figura 1: Modelo de interação para a autenticação do utente com o seu Cartão de Cidadão.

Manual de utilização para estudantes

Redes de Computadores

UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

CCNA Exploration (Protocolos e Conceitos de Roteamento) Protocolo RIP

Sockets e Threads em Java

trabalho Heitor Oliveira,Rafael Aleixo,Alex Rodrigues September 2013

Zone Routing Protocol - ZRP[1]

UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO UNIVASF SECRETARIA DE TECNOLOGIA DA INFORMAÇÃO STI DEPARTAMENTO DE SISTEMAS DE INFORMAÇÕES

Vamos fazer um pequeno experimento

Comunicação entre Processos

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

Redes de Computadores

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

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2016 / 2017

O que é? É uma aplicação que consiste em 2 ou mais processos que executam em diferentes processadores que não partilham memória.

Manual do Utilizador

Guia do Administrador de Licenças de Usuários Autorizados do IBM SPSS Modeler IBM

FUNDAMENTOS DE REDES DE COMPUTADORES Unidade 5 Camada de Transporte e Aplicação. Luiz Leão

Directed Diffusion. Danilo Michalczuk Taveira 1. Grupo de Teleinformática e Automação (GTA) Disciplina CPE825 - Roteamento em Redes de Computadores

Trabalho do Curso de Redes de Computadores COS765/MAB /1

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

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

Departamento de Informática Faculdade de Ciências e Tecnologia UNIVERSIDADE NOVA DE LISBOA

Níkolas Timóteo Paulino da Silva Redes de Computadores I ADS 2ºTermo

O Manual do Skanlite. Kåre Särs Anne-Marie Mahfouf Tradução: José Pires

Processo Electrónico. Calendarização de novas funcionalidades

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

Módulo 3 Nível Transporte

Exame a Nível de Escola Geografia A NEE Código 825

Universidade Federal de Minas Gerais Departamento de Ciência da Computação

Capítulo 7. A camada de aplicação

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

Rede de computadores Protocolos UDP. Professor Carlos Muniz

LEIC/LERC 2008/09 2º Teste de Sistemas Distribuídos

1. Monitorização. Índice. 1.1 Principais pontos críticos Pontos críticos directos

Redes de Computadores

Prof RG Crespo Criptografia e Segurança das Comunicações. Introdução à segurança de protocolos. Pilha de protocolos (1)

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

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

O Portal do serviço de apoio a Projectos e Clientes da Generix Group Portugal

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

Rede de computadores Cliente- servidor. Professor Carlos Muniz

Encriptação de Mensagens

Redes de Computadores

Arquitetura de sistemas distribuídos

Arquitectura de Redes

Universidade Lusófona de Humanidades e Tecnologias Fundamentos de Programação 2014/2015 primeira época v.1.0.0

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

Projecto hipotético para resolvermos hoje

A camada de enlace de dados executa diversas funções específicas. Dentre elas

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

TESTES SOCIOMÉTRICOS

ATENÇÃO O TCP/IP não é um protocolo. TCP/IP é um conjunto de diversos protocolos em 04 camadas próprias que se relaciona com o modelo OSI.

Classes e Objetos. Sintaxe de classe em Java

PROTOCOLOS DE COMUNICAÇÃO

CONTRIBUTOS DA NOVA REGULAMENTAÇÃOPARA A EFICIÊNCIA ENERGÉTICA EM EDIFÍCIOS. alinedelgado@quercusancn.org quercus@quercus.pt

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO (TIC) PLANIFICAÇÃO ANUAL 8º ANO ANO LETIVO 2013/2014

Data and Computer Network Endereçamento IP

itic 7/8 Serviços básicos da Internet Informação 7 Unidade 3 Pesquisa e análise de informação na Internet

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Desenvolvimento de um protocolo de comunicação P2P em rede local para jogos e implementação de um plugin para o motor de jogos Unity 3D

ROUTER. Alberto Felipe Friderichs Barros

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

Programação com Sockets

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2004 / 2005

Ordenação. Sistemas Distribuídos e Tolerância a Falhas. Universidade da Beira Interior 07/08

Introdução à Informática. Aula 05. Redes de Computadores. Prof. Fábio Nelson

Arquitetura TCP / IP propõe esquema de endereçamento universal - endereço IP que deve:

Transcrição:

Trabalho Prático 1 P2P-SDIS Sistemas Distribuídos Nuno Machado Matos - 080509140 Tiago Daniel Sá Cunha 080509142 25 de Março de 2011

Introdução O propósito deste trabalho é a implementação de um sistema P2P (peer to peer) com o objectivo principal de troca de ficheiros, como meio de avaliação para a Unidade Curricular de Sistemas Distribuídos. O sistema consiste na existência de vários clientes semelhantes com a capacidade de interpretar os pedidos quer do utilizador de cada aplicação, para o download de ficheiros, quer pelas outras aplicações clientes que enviam pedidos para upload de ficheiros que estes possuam no seu computador, num directório prédefinido. A aplicação usa um método de comunicação multicast, que se baseia na criação de grupos para transferência de ficheiros entre todos os clientes registados simultaneamente, sendo da responsabilidade de cada cliente tratar eficientemente o datagrama recebido. A troca de mensagens via multicast trata dois tipos: mensagens de controlo e mensagens de informação. Estas são transferidas por sockets específicos para cada um dos dois tipos. As mensagens de controlo são de três tipos: SEARCH, FOUND e GET e possuem uma sintaxe própria que será explicitada adiante neste relatório. Por sua vez as mensagens de informação são vectores de bytes e, também estas, possuem uma sintaxe própria. Por sua vez, nas mensagens de informação são transferidos chunks dos ficheiros, com um cabeçalho anexado que identifica o número do chunk e o ficheiro respectivo. Por fim, torna-se necessário a interacção com o utilizador, pelo que como valorização, criamos uma interface gráfica para o utilizador, que torna aplicação esteticamente apelativa e de uso mais simples.

Arquitectura do sistema A arquitectura P2P (peer to peer) baseia-se no conceito de descentralização do sistema, na medida em que não existe qualquer aplicação com a função de servidor, que controle o fluxo de mensagens de informação e de dados, pelo que cada cliente assume as funções de cliente e servidor da arquitectura cliente-servidor. Esta arquitectura assenta-se em dois pressupostos para funcionar correctamente: o facto de cada cliente possuir as mesmas capacidades funcionais e responsabilidades e o facto de cada utilizador contribuir com recursos para o sistema. Tendo em conta que o objectivo principal do trabalho é a implementação de um sistema P2P, será necessário um tipo de comunicação que possibilite o envio de determinada informação para receptores previamente definidos, que possam estar situados em localizações físicas diferentes. A transferência multicast consiste na entrega de informação a determinados clientes que fazem parte de um grupo, ao qual os clientes se juntam por saberem de antemão o endereço de multicast do mesmo. Dentro deste grupo, a troca de mensagens é efectuada em modo broadcast, o que facilita a comunicação porque se torna abstracta na medida em que não se necessita de se saber com exactidão o cliente para o qual se deve enviar a informação, ficando à responsabilidade de cada cliente filtrar a informação que recebe e, conforme seja ou não uma transferência cujo conteúdo lhe interessa, guarda a informação no devido lugar ou simplesmente a descarta. Na aplicação que desenvolvemos, tornou-se necessária a separação a execução das instruções dentro de cada cliente, pelo que existem várias operações simultâneas. Para tal, torna-se necessário o uso de threads e, para o seu bom funcionamento, a coordenação das mesmas em tempo real. Especificação detalhada das Threads do sistema Tendo em conta que o cliente tem a necessidade de tanto responder a pedidos do utilizador como aos dos outros clientes. Para isso ser feito em simultâneo, torna-se necessário a implementação de uma thread para cada uma destas funcionalidades, que denominaremos de ThreadUtilizador e ThreadCliente. A ThreadUtilizador está encarregue de saber qual a lista de palavras que o utilizador pretende encontrar no nome do ficheiro que pretende transferir. Depois de saber isto, espera a resposta dos outros clientes para saber quais os ficheiros passiveis de serem transferidos. Quando já não recebe mensagens que evidenciem a existência

de mais ficheiros, exibe todas as possibilidades de escolha ao cliente para este, se desejar transferir algum ficheiro da lista escolher um, ou então desistir da transferência. Se o cliente determina um ficheiro para transferir, esta thread envia pelo socket de controlo uma mensagem para os outros clientes ficarem conhecedores da intenção em transferir o determinado ficheiro e que têm autorização para o fazerem. É nesta altura que se inicia a ThreadDownload. Por sua vez, a ThreadCliente está responsável por responder aos pedidos dos outros clientes, quando estes enviam mensagens de busca de ficheiros ou para o começo da transferência de ficheiros. Quando recebe a mensagem de busca de ficheiros procura nos seus ficheiros se contem algum que respeite a lista de palavras de busca e se sim envia as mensagens FOUND respectivas. Por sua vez, quando recebe a mensagem de GET, inicia a ThreadUpload para enviar a informação referente ao ficheiro que indicou possuir na mensagem FOUND que enviou. Quando estas formalidades estão concluídas, inicia-se o processo de transferência do ficheiro previamente escolhido com a iniciação das Threads ThreadUpload e ThreadDownload. A ThreadUpload, ao ser iniciada, inicia a thread responsável por poupança do número de chunks a serem enviados por diferentes clientes, denominada ThreadControloDeInformação, que actuará simultaneamente para evitar o envio de chunks repetidos, melhorando assim a eficiência da aplicação. A ThreadUpload ao receber o endereço SHA indicativo do ficheiro a fazer download, procura os chunks a serem transferidos numa estrutura de HashMap previamente preenchida no inicio da execução da aplicação, que contém como chave uma String referente ao EndereçoSHA de cada ficheiro e uma HashMap associada, onde as chaves desta HashMap são o número do chunk que respeita a ordem do ficheiro e a eles associados o array de bytes referentes à informação especifica do ficheiro. Respeitando então o número dos chunks solicitados para serem transferidos, estes são associados num array sobre os quais se escolherão aleatoriamente os chunks a serem enviados para o socket de informação e, depois de enviados, retirados do array de chunks a enviar. Em simultâneo, a ThreadControloDeInformação verifica os pacotes recebidos no socket de informação e, se verificar que já foi transferido um chunk que se encontra ainda na lista de chunks a serem enviados, esta thread está responsável por eliminar este pedido. Por sua vez a ThreadDownload é responsável por verificar se recebeu todos os chunks necessários para a construção do ficheiro e juntar simultaneamente os chunks à HashMap conforme os recebe, caso não sejam repetidos, para possibilitar o envio destes para os clientes que os necessitem. Caso não receba todos os chunks

necessários para a construção total do ficheiro, reenvia uma mensagem GET para obter os chunks em falta. Tendo analisado todas as threads e a sua interacção, debruçar-nos-emos agora sobre a especificação das mensagens que são trocadas entre os clientes e o seu impacto no sistema. Estruturação e troca de mensagens As mensagens trocadas neste sistema que implementámos estão divididas em dois tipos distintos: de controlo e de informação. As mensagens de controlo são SEARCH, FOUND e GET e são trocadas num socket multicast de controlo. O objectivo destas mensagens é o estabelecimento de ligações abstractas no sistema, por forma a definir quais dos clientes enviarão a informação para o pedido de busca efectuado. A mensagem SEARCH possui a seguinte sintaxe: SEARCH idpedido ListaDePalavrasBusca. Esta mensagem aos ser enviada para o socket espera a recepção da mensagem FOUND para saber quais os ficheiros que existem nos clientes que pertencem ao grupo, cujo nome contenha as palavras contidas na ListaDePalavrasBusca. Quando o cliente recebe pelo socket a mensagem SEARCH, procura num directório previamente definido todos os ficheiros que possuam no seu nome as palavras contidas na ListaDePalavrasBusca. Para todos os ficheiros que encontrar que cumpram o objectivo anterior, envia uma mensagem FOUND pelo mesmo socket para possibilitar ao cliente que procurou o ficheiro escolher qual o que deseja, sendo que utiliza o mesmo idpedido que recebeu no SEARCH. A sintaxe da mensagem FOUND é: FOUND idpedido EndereçoSHA TamanhoFicheiro ListaNomesFicheiro. O objectivo do Endereço SHA é atribuir um código a cada ficheiro para que a sua identificação seja inequívoca e de fácil verificação. Este endereço é obtido através de um algoritmo previamente fornecido na página do Moodle da Unidade Curricular, denominado SHA-256. Quando o cliente que procurou os ficheiros recebe os FOUND, exibe-os ao utilizador para este escolher qual o que pretende transferir. Depois de esta escolha ter sido feita, a aplicação cria a mensagem GET que reutiliza o EndereçoSHA recebido pela mensagem FOUND, respectivamente associada à escolha do utilizador, para pedir ao sistema que envie o ficheiro inequivocamente definido pelo seu EndereçoSHA.

A sintaxe desta mensagem GET é: GET EndereçoSHA ListaDeChunksParaTranferência, dos quais esta última lista pretende especificar quais os chunks que pretende receber. Por predefinição serão todos, contudo esta mensagem é usada para quando se perdem pacotes de informação e se torna apenas necessário o envio de alguns pacotes para completar o ficheiro. Por sua vez, as mensagens de informação possuem uma diferença fundamental pois em vez de serem constituídas por Strings são constituídas por bytes. A sintaxe é então a anexação sequencial de um array de bytes referente ao EndereçoSHA, um array de bytes que se referem ao número do chunk e o array de bytes da informação do ficheiro, que se encontrava alojado na HashMap. Valorização Depois de definir todas as funcionalidades necessárias do sistema debruçamonos agora para as valorizações que implementámos no sistema, com graus de importância diferentes. A primeira e mais simples é a criação do directório de ficheiros necessário para a aplicação funcionar definida previamente no endereço C:\Temp_SDIS, caso este não exista, por forma a evitar a interrupção pela não existência do mesmo. A mais valorização mais importante é a Interface gráfica para com o utilizador para simplificar a aplicação e a tornar mais apelativa. A interface é apresentada em baixo, na figura seguinte. Interface gráfica da aplicação

Estratégias de teste Como o sistema elaborado pretende o uso em vários clientes distintos e a transferência de vários ficheiros em simultâneo, decidimos aplicar uma bateria de testes que tentasse cobrir o melhor possível todas as hipóteses. Começamos na transferência de um ficheiro entre 2 clientes, em que um deles fazia upload e o outro download. Este teste decorreu com sucesso mesmo para ficheiros de elevada dimensão. Passamos então para a tentativa de trocar ficheiros entre os dois, ou seja, em que ambos os clientes pediriam um ficheiro do vizinho e enviariam para o vizinho também. Este teste decorreu sem problemas e, tal como o anterior, sucedeu mesmo para ficheiros de elevada dimensão. Findas as hipóteses de teste entre dois clientes passámos para testes com três ou mais clientes. Em primeiro lugar, colocámos dois clientes a pedir o mesmo ficheiro ao terceiro e também este teste foi um sucesso. Em reverso, colocámos dois clientes a enviar para apenas um cliente, sendo que neste teste também não ocorreram problemas, incluindo ficheiros de elevada dimensão. Os problemas começaram a surgir quando, usando três clientes, se tentou fazer pedidos sequenciais em que o primeiro pedia um ficheiro que só o segundo tinha, e este pedia um que só o terceiro tinha e o terceiro pedia ao primeiro. Este teste demonstrou alguma perda de pacotes, afectando os ficheiros de teste, sendo que nem sempre tal perda aconteceu. Para testes de complexidade superior aconteceram sempre este tipo de problemas, pelo que nos foi impossível descobrir o problema e corrigi-lo.

Conclusão Com a conclusão deste trabalho, verificámos que o trabalho foi quase concluído com perfeição, tendo em conta que apenas alguns detalhes que nos foram impossíveis de diagnosticar e corrigir estão a interferir com o bom funcionamento da aplicação. As maiores dificuldades deste projecto foram, a nível técnico, a familiarização demorada para com o uso de threads e sockets em Java, a percepção completa e inequívoca do enunciado do trabalho e do planeamento do sistema e, tal como referido anteriormente, a falta de capacidade para descobrir a falha que existe na versão final da aplicação que nos impede de completar com sucesso testes de muito elevada complexidade. A nível institucional, dado que o trabalho teve de ser desenvolvido dentro da rede da FEUP e dado que não era possível testar a aplicação através do portátil e tendo de recorrer ao número limitado de computadores disponíveis para testes, nomeadamente testes com várias máquinas em simultâneo, pode-se dizer que a eficiência de trabalho foi afectada por estas vertentes. Em termos de falhas na implementação temos a acrescentar que o tamanho das mensagens de informação não obedecem às dimensões definidas, porque aquando da implementação, tomou-se como tamanho necessário a medida em bytes em vez de bits e faltou tempo para corrigir esta falha. Outra falha na implementação é o facto de não termos implementado, também por falta de tempo, a little endian byteorder, sendo que estas duas falhas teriam de ser ambas corrigidas para serem possíveis de usar a aplicação com qualquer outra aplicação que seguisse o protocolo especificado. Bibliografia Maranhão, Rui - Computer Networks [Em linha]. Porto [Consult. 15-03-2011]. Disponível em WWW: <URL:http://moodle.fe.up.pt/1011/file.php/678/lectures/AT02.pdf>. Maranhão, Rui - Work [Em linha]. Porto [Consult. 16-03-2011]. Disponível em WWW: <URL:http://moodle.fe.up.pt/1011/file.php/678/lectures/AT03.pdf>. Maranhão, Rui - Distributed Systems Assignment #1: P2P-SDIS [Em linha]. Porto [Consult. 03-03-2011]. Disponível em WWW: <URL:http://moodle.fe.up.pt/1011/mod/resource/view.php?id=14612>.