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

Documentos relacionados
Redes de Computadores e Aplicações

Módulo 3 Nível Transporte

Aula de Socket. Rafael De Tommaso do Valle

Redes de Computadores. Apresentação

Introdução à Programação Sockets

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

Comunicação em Sistemas Distribuídos. Conceitos: Paradigma C/S. Conceitos: Paradigma C/S. Paradigma Cliente/Servidor

Canais de Comunicação

Funcionalidade e Protocolos da Camada de Aplicação

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2008 / 2009

Programação de Sockets em C/C++

Introdução à Computação

PROTOCOLOS DE COMUNICAÇÃO

Servidor UDP. Programação Sockets Volnys Bernal. Servidor UDP Resumo das Chamadas UDP. Resumo de Chamadas UDP. Resumo de Chamadas UDP

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DO RIO GRANDE DO NORTE DEPARTAMENTO ACADÊMICO DE TECNOLOGIA DA INFORMAÇÃO

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2003 / 2004

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

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

Transferência de Arquivo: Protocolo FTP

Sockets. André Restivo. April 29, Faculdade de Engenharia da Universidade do Porto. André Restivo (FEUP) Sockets April 29, / 27

Microsoft Outlook Versão Provisória

Departamento de Informática

Redes de Computadores (PPGI/UFRJ)

Camada de Aplicação da Arquitetura TCP/IP

Introdução aos Sistemas Operativos

Redes de Computadores e Aplicações Camada de aplicação IGOR ALVES

Modelo OSI. Marcelo Assunção 10º13. Curso Profissional Técnico de Gestão e Programação de Sistemas Informáticos. Disciplina: Redes de Comunicação

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

Sistemas Operacionais II Unix: Memória e E/S. Geraldo Braz Junior

Redes de Computadores. Redes de Computadores

Programação com sockets (em Java)

Programação em Sockets visando verificar a diferença entre transmissão confiável (TCP) e não confiável (UDP)

Lista de exercícios - 1º bimestre 2016 REDES

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

Estruturas de Comunicação de Dados Aula 3 Camadas de Aplicação e Transporte

3. Projeto e implementação de Servidores

Partilha de Recursos. Através da Plataforma DropBox

Testes de Penetração: Explorador de Portas

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

Projecto de Laboratório de Computadores

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

Função Fundamental do SO

Sistema de Controlo com Acesso Remoto

Aula 2 Arquitetura de Redes. Prof. Dr. S. Motoyama

Comunicação entre Processos

PiVPN: É fácil transformar o Raspberry Pi num servidor de VPNs

TRANSPORTE. Prof. Me. Hélio Esperidião

COMUNICAÇÃO ENTRADA EM PRODUÇÃO DA NOVA PLATAFORMA DO GPMC

Servidor de rede USB sobre IP com 4 portas USB 2.0

Redes de Computadores

Escola Politécnica da Universidade de São Paulo

MANUAL DE INSTALAÇÃO E PROGRAMAÇÃO CONVERSOR - IP / USB / SERIAL RV1

Arquitetura de sistemas distribuídos

Redes de Computadores e Internet

Sistemas Distribuídos

b r o a d b A N d r o u t e r 4 p o r t s 1 0 / m b p s

Programação com Sockets. Redes de Computadores I 2007/2008

PARADIGMAS DA PROGRAMAÇÃO IV

Redes e Serviços Internet (5388)

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

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

PROGRAMAÇÃO DE COMPUTADORES

UMA ABORDAGEM SOBRE A INTERFACE DE PROGRAMAÇÃO DE APLICAÇÕES SOCKETS E A IMPLEMENTAÇÃO DE UM SERVIDOR HTTP

Grupo. 1 Introdução e objectivos. 2 Estudo do protocolo IETF Stream Control Transport Protocol SCT 2.2 Estudo do formato dos pacotes SCTP

LEIC/LERC 2012/13 2º Teste de Sistemas Operativos 15/Janeiro/2013

Sistemas Distribuídos Capítulo 3 - Aula 3

Redes de Computadores. Arquitetura de Protocolos Profa. Priscila Solís Barreto

Redes de Computadores (LTIC) 2013/14. Grupo 1 (9 valores) 2º Teste (Frequência) 19 de Junho de Nome:

PT MANUAL UTILIZADOR. Aplicação Comelit disponível na App Store e Google Play

Jéfer Benedett Dörr

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

TASM DEFINIÇÃO DE UMA NOVA TABELA DE CONVERSÃO

REDES DE COMPUTADORES

socket Objetivo: aprender a construir aplicações cliente/servidor que se comunicam usando sockets

UNIVERSIDADE ESTADUAL DE PONTA GROSSA SETOR DE CIÊNCIAS AGRÁRIAS E DE TECNOLOGIA DEPARTAMENTO DE INFORMÁTICA ENGENHARIA DE COMPUTAÇÃO

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

Engenharia de Software

Guia de Instalação do Google Cloud Print

Protocolos de Rede. Protocolos em camadas

REVISÃO - Questões de Redes em Concursos. Semestre: 2 Bimestre:2 Data: / / 2013

Gerenciamento de Redes. Alan Santos

7 Mecanismos de gestão de memória. Prof. Ricardo Silva

Sockets e Threads em Java

Efectuar o registo na OB10

Modelo em camadas. As redes de computadores são sistemas muito complexos; Decomposição dos sistemas em elementos realizáveis

Trabalho Prático 1 P2P-SDIS

Criando scanner para dectar BackupExec vulneráveis ao exploit do Metasploit. Inj3cti0n P4ck3t

Pesquisa e análise de informação

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

Redes de Computadores

Redes de Computadores I

Redes de Computadores

Sockets. Bruno Guimarães Lucas Rossini

Jéfer Benedett Dörr

Redes de Computadores (RCOMP 2014/2015)

Manual de Autoavaliação

Transcrição:

RC Peer-to-Peer Redes de Computadores 2º Semestre 2008/2009 Projecto de Laboratório 1. Introdução Pretende-se desenvolver uma aplicação Peer-to-Peer (P2P) de partilha de ficheiros. A aplicação compreende um tracker (fornecido pelos docentes) e vários peers (um por cada grupo de alunos). O tracker mantém informação sobre o swarm associado a cada ficheiro partilhável. Cada peer tem uma interface de utilizador e subentende dois protocolos da camada de aplicação, um para comunicação com o tracker e outro para comunicação com outros peers. Numa aplicação P2P, um utilizador que pretenda fazer download de um ficheiro tem que primeiro obter a localização do tracker que gere o swarm associado. Por uma questão de simplificação, neste projecto, a localização do tracker é bem conhecida e este pode ser interrogado sobre os ficheiros dos quais possui um swarm. A partilha dos ficheiros propriamente dita é feita através da transferência de blocos de 2 14 bytes entre peers. Os protocolos da camada de aplicação operam de acordo com o paradigma cliente-servidor e servem-se dos serviços da camada de transporte através da interface de sockets. Na comunicação entre um peer e o tracker, o peer é o cliente e o tracker o servidor. Cada peer obtém junto do tracker a lista de ficheiros partilhados e, para cada ficheiro, o swarm associado. A comunicação entre peer e tracker deve ser suportada na camada de transporte UDP, devendo a interface de sockets ser programada para esse efeito. Na comunicação entre peers, aquele que faz download é o cliente e o outro é o servidor. Assim sendo, cada peer tem de estar preparado para operar quer em modo cliente quer em modo servidor no que diz respeito à partilha de ficheiros. A comunicação entre peers deve ser suportada na camada de transporte TCP, devendo a interface de sockets ser programada para esse efeito. Neste projecto, cada peer pode estar envolvido apenas na partilha de um ficheiro a cada momento. 2. Especificação A especificação de um peer é constituída pela especificação da interface de utilizador (secção 2.1), a especificação do protocolo da camada de aplicação que permite a comunicação com o tracker (secção 2.2) e a especificação do protocolo da camada de 1

aplicação que permite a comunicação directa entre dois peers para partilha de ficheiros (secção 2.3). 2.1 Interface de utilizador dos peers O peer é invocado com o comando em que rcp2p [-n trackername] [-p trackerport] [-s seedport] - trackername é o nome da máquina que aloja o tracker. Este argumento é opcional. Em caso de omissão, assume o valor tejo.ist.utl.pt. - trackerport é o porto bem-conhecido no qual o tracker recebe pedidos dos peers. Este argumento é opcional. Em caso de omissão, assume o valor 8000. - seedport é o porto no qual o peer aceita pedidos de outros peers para a partilha de ficheiros. Este argumento é opcional. Em caso de omissão, assume o valor 8000. Logo após a invocação do peer, este activa a interface de utilizador através da qual o utilizador tem à disposição os seguintes comandos: a) list O utilizador pede ao tracker a lista de todos os ficheiros disponíveis para partilha e respectivo número de bytes. O resultado do pedido deve ser ecoado no ecrã. Esta lista de ficheiros permite ao utilizador escolher qual o ficheiro de que deseja fazer download. b) seed <filename> O utilizador disponibiliza o ficheiro <filename> para partilha. Por uma questão de simplificação, apenas um ficheiro pode ser partilhado de cada vez. Ao invocar este comando, o peer deve criar um ficheiro por cada bloco de 2 14 bytes em que o ficheiro <filename> é partido, usando, por exemplo, os nomes block0, block1, block2, Possivelmente o último bloco do ficheiro conterá menos do que 2 14 bytes. Em resultado deste comando, o peer deve informar o tracker de que é um seeder do ficheiro <filename>. A dimensão do ficheiro é também enviada ao tracker para que mais tarde os peers interessados neste ficheiro possam determinar o número de blocos envolvidos na sua transferência. 2

c) unseed O utilizador deixa de partilhar o ficheiro que anteriormente estava a disponibilizar. Os blocos associados ao ficheiro que agora deixa de ser disponibilizado devem ser apagados. Para além disso, o peer deve informar o tracker de que já não é um seeder desse ficheiro. d) download <filename> O utilizador quer fazer download do ficheiro <filename>. Em resultado deste comando, o peer interroga o tracker acerca do swarm associado à partilha do ficheiro <filename>. Em resposta a esta interrogação, o tracker retorna a dimensão do ficheiro e o swarm a ele associado. De seguida, o peer informa o tracker que passará a ser um leecher do ficheiro <filename>. Uma vez conhecendo o swarm associado ao ficheiro, o peer estabelece uma sessão TCP com cada um dos seus peers interrogando-os acerca dos blocos do ficheiro <filename> que têm disponíveis para partilha. Com a lista de blocos que cada um dos outros peers dispõe, o peer estabelece uma estratégia relativamente a quais os blocos de que irá fazer download de cada um dos outros peers. Concluída a transmissão dos blocos pedidos, os peers servidores fecham a sessão TCP. Depois de terminadas todas as sessões, o peer avalia se dispõe de todos os blocos necessários para reconstruir o ficheiro <filename> ou se é necessário repetir todo o procedimento descrito nos últimos dois parágrafos. A partir do momento em que se inicia o download, o peer disponibiliza um servidor concorrente, suportado em TCP, com porto bem-conhecido seedport, para aceitação de pedidos de blocos do ficheiro <filename> vindos de outros peers. Assume-se que se surgirem pedidos antes de o peer dispor de blocos para partilhar, o peer pode responder indicando uma lista de blocos vazia. Concluído o download, o peer mantém-se como seeder do ficheiro recebido. e) status O utilizador pede para que seja ecoado o estado do download em curso. O estado deve conter o nome do ficheiro, a sua dimensão, a percentagem de blocos já recebidos e a constituição do último swarm associado ao ficheiro de que se está a fazer download. f) stop O utilizador pede para que seja interrompido o download em curso. Os blocos já recebidos irão continuar a ser disponibilizados. 3

g) help h) exit O utilizador pede para que seja ecoada a lista de comandos disponível. Comando utilizado para terminar a execução do peer. Todas as sessões TCP devem ser terminadas. Caso se esteja a disponibilizar um ficheiro, o tracker deve ser informado de que o peer irá deixar de pertencer ao swarm e os ficheiros dos blocos devem ser apagados. 2.2 Protocolo Peer-Tracker O tracker fornecido pelos docentes gere a base de dados dos ficheiros partilhados. Para cada ficheiro é guardada a sua dimensão, em bytes, bem como o endereço IP e o porto bemconhecido do servidor de cada peer pertencente ao swarm associado. Por omissão, o tracker encontra-se na máquina tejo.ist.utl.pt no porto UDP 8000. O protocolo de comunicação entre o cliente a ser concretizado no peer pelos alunos e o tracker contempla os seguintes comandos e respostas: a) LST\n O peer pede ao tracker a lista de todos os ficheiros disponíveis para partilha e respectivo número de bytes. A resposta a este comando é composta por várias linhas. A primeira linha contém a seguinte informação: OBJ\n As linhas seguintes contêm pares nome de ficheiro, número de bytes, separados por um espaço. A última linha é vazia (contém apenas o terminador \n ). Exemplo: OBJ\n goodmovie.avi 20000000\n badmusic.mp3 10000000\n \n b) ADD <filename> <size> <seedingport>\n O peer pede para ser registado como fazendo parte do swarm associado ao ficheiro <filename>. Caso este ficheiro ainda não se encontre a ser partilhado, uma nova entrada será registada na base de dados do tracker, ficando guardado o nome do ficheiro e o respectivo número de bytes. 4

O endereço IP do remetente do pedido e o <seedingport> são acrescentados ao swarm. A resposta do tracker a este pedido é OK\n. c) CLR <filename> <seedingport>\n O peer pede para que o seu registo no swarm, associado ao ficheiro <filename>, seja removido. O tracker identifica o registo através do nome do ficheiro <filename>, do endereço IP do peer e do número do porto, <seedingport>, onde o peer aceitava pedidos para a partilha de ficheiros. A resposta do tracker a este pedido é OK\n. d) QRY <filename>\n O peer pede ao tracker a dimensão do ficheiro <filename> e o swarm associado. A resposta a este comando é composta por várias linhas. A primeira linha contém a seguinte informação: SWARM <filename> <size>\n em que <filename> é o nome do ficheiro e <size> é a sua dimensão em bytes. As linhas seguintes contêm pares de endereço IP, número do porto, separados um do outro pelo carácter :. A última linha é vazia (contém apenas o terminador \n ). Exemplo: SWARM goodmovie.avi 20000000\n 192.168.0.2:9000\n 192.168.0.6:9000\n \n Em caso de erro em qualquer dos comandos anteriormente apresentados, o tracker responde com uma mensagem de uma linha, terminada por \n e que começa pela palavra ERR. 2.3 Protocolo Peer-Peer Quando, em resultado da interacção com o tracker, o peer fica a conhecer o endereço IP e o porto bem-conhecido dos servidores nos peers do swarm associado ao ficheiro de que se pretende fazer download, ele pode estabelecer sessões TCP com cada um desses peers. O 5

protocolo da camada de aplicação entre peers contempla os seguintes comandos e respostas: a) BLK <filename>\n O peer cliente pede ao peer servidor a lista dos blocos disponíveis pertencentes ao ficheiro <filename>. A resposta a este comando é composta por várias linhas. Cada linha contém o número de um bloco e é terminada com o carácter \n. A última linha é vazia (contém apenas o terminador \n ). Exemplo: 0\n 1\n 33\n 324\n 325\n 326\n 702\n \n b) DWNLD\n<x 1 >\n<x 2 >\n \n<x k >\n\n Depois de recebida a resposta do peer servidor, o peer cliente estabelece uma estratégia relativamente a quais os blocos que irá fazer download de cada um dos peers servidores. Estabelecida essa estratégia, envia a cada peer servidor um comando composto por várias linhas. A primeira linha contém a seguinte informação: DWNLD\n Cada uma das linhas seguintes contém o número de um bloco e é terminada com o carácter \n. A última linha é vazia (contém apenas o terminador \n ). Exemplo: DWNLD\n 0\n 1\n 33\n 324\n \n Em resposta, o peer servidor envia os bytes dos blocos pedidos (sem delimitadores ou terminadores). Concluída a transmissão dos blocos, o peer servidor termina a sessão TCP. 6

3. Desenvolvimento Deve garantir que o seu código compila e executa correctamente no ambiente de desenvolvimento disponível no laboratório: Compilador: gcc versão 4.1.1 Depurador: ddd versão 3.3.11 glibc: versão 2.4 Baseie a operação do seu programa no seguinte conjunto de chamadas de sistema: Nome da máquina: gethostname(). Endereço IP de uma máquina remota a partir do seu nome: gethostbyname(). Leitura de informação do utilizador para a aplicação: fgets(). Gestão de um cliente UDP: socket(), close(). Comunicação UDP: sendto(), recvfrom(). Gestão de um cliente TCP: socket(), connect(), close(). Gestão de um servidor TCP: socket(), bind(), listen(), accept(), close(). Comunicação TCP: write(), read(). Multiplexagem de informação: select(). Criação de um processo concorrente: fork(). O código desenvolvido deve estar convenientemente estruturado e comentado. As chamadas de sistema read() e write() podem ler e escrever, respectivamente, um número de bytes inferior ao que lhes foi solicitado. Quer os processos cliente quer os processos servidor devem terminar graciosamente pelo menos nas seguintes situações de falha: mensagens do protocolo erradas vindas da entidade par correspondente; ligação TCP do cliente ou do servidor fechada de forma imprevista; condições de erro das chamadas de sistema. 4. Bibliografia José Sanguino, A Quick Guide to Networking Software, 2009 W. Richard Stevens, Unix Network Programming: Networking APIs: Sockets and XTI (Volume 1), 2a edição, Prentice-Hall PTR, 1998, ISBN 0-13-490012-X, capítulo 5 Michael J. Donahoo, Kenneth L. Calvert, TCP/IP Sockets in C: Practical Guide for Programmers, Morgan Kaufmann, ISBN 1558608265, 2000 Manual on-line, comando man 7

5. Entrega do Projecto O código a entregar é composto pelos ficheiros fonte do conversador e a correspondente makefile. A entrega do trabalho é feita por e-mail ao seu docente de laboratório. Deve criar um único ficheiro de arquivo zip com todos os ficheiros fonte e outros ficheiros necessários à execução das aplicações. O arquivo deve estar preparado para ser aberto para o directório corrente e compilado com o comando make. O nome do ficheiro submetido deve ter o seguinte formato: proj<número_do_grupo>.zip 6. Glossário Seeder: É um peer que tem todo o ficheiro que está a ser partilhado. Leecher: É um peer que só tem parte do ficheiro que está a ser partilhado. Assim que receber todo o ficheiro passa a ser um seeder. Swarm: Conjunto de todos os seeders e leechers associados a um ficheiro que está a ser partilhado. Tracker: É um servidor que mantém actual o swarm associado a cada ficheiro partilhável. 8