Você está na página 1de 6

Universidade Federal de Minas Gerais - Instituto de Cincias Exatas - ICEx

Departamento de Cincia da Computao - Graduao em Cincia da Computao


2o. Semestre de 2016
Disciplina: Redes de Computadores DCC023 -60 horas-aula, 4 crditos.

Professor: Jos Marcos Nogueira e Marcos Vieira


Estagirios em Docncia: Alisson e Henrique
Trabaho Prtico no. 1

Em grupo de dois alunos - 05/10/2010 - Valor: 20 pontos


Data de entrega: 29/10/2016
1.

Motivao

Suponha que um professor armazene em um repositrio, que est em um computador da


universidade, arquivos relacionados sua disciplina, a saber: slides de aulas, livros, listas de
exerccios, entre outros. Aproximando-se a data da prova, voc gostaria de acessar tais contedos
para estudar, porm no existe uma ferramenta que lhe permite realizar a transferncia de arquivos
do computador da universidade para o seu computador pessoal. Os arquivos no podem ser
copiados diretamente por dispositivos de armazenamento, somente pela rede. O professor, gente
fina, permite a voc o acesso necessrio aos arquivos da mquina da universidade. Entretanto, ele
solicita a voc, aluno da disciplina de redes de computadores, que desenvolva um programa capaz
de acessar o computador da universidade, listar o contedo disponvel do repositrio e realizar o
download do arquivo desejado. Em complemento, o professor solicita que sua aplicao, ao
transferir arquivos, seja capaz de medir a vazo alcanada na transferncia de um arquivo.
2.

Especificao

Neste trabalho, voc dever desenvolver dois programas usando o modelo de operao clienteservidor, no modo requisio-resposta sobre o protocolo TCP e a verso 6 do protocolo IP (IPv6).
O cliente (sua mquina) poder solicitar do servidor (mquina da universidade, mas pode ser a sua
prpria) os arquivos disponveis para download. O cliente tambm poder baixar um arquivo do
servidor, enviando para este o nome do arquivo desejado.
O processo de comunicao entre cliente e servidor dever seguir um padro simples, ilustrado a
seguir. O cliente deve se conectar ao servidor, enviar uma cadeia de caracteres (string) com o
comando desejado e aguardar a resposta.

O cliente tem dois comandos disposio:


list: solicita, recebe e exibe na tela a lista dos arquivos disponveis em um diretrio para
download (se no houver arquivos no diretrio, imprime uma mensagem de erro); e
get: solicita ao servidor e recebe um arquivo.
O programa cliente dever se chamar clienteFTP e o programa servidor dever se chamar
servidorFTP. Os comandos devero seguir o seguinte formato:

clienteFTP list <nome ou IPv6 do servidor> <porta do servidor> <tam_buffer>

clienteFTP get <nome do arquivo> <nome ou IPv6 do servidor> <porta do servidor>


<tam_buffer>

Para ativar o servidor, dever ser usado o seguinte comando:

servidorFTP <porta do servidor> <tam_buffer> <diretrio a ser utilizado>

Operao detalhada dos comandos list e get


Abaixo so apresentados os fluxogramas (no exaustivos) da operao esperada para os dois
comandos no cliente (figura 1) e no servidor (figura 2). Nos fluxogramas no foram identificados
todos os pontos de deteco e tratamento do erros que podem acontecer ao operar com threads,
ponteiros, arquivos e sockets.
Cdigos de erro (retorno dos comandos)
Abaixo apresentada uma lista inicial dos cdigos esperados para as mensagens de erro que
devero ser fornecidas pelos programas.
Cdigo de Erro

Descrio do erro

-1

Erros nos argumentos de entrada

-2

Erro de criao de socket

-3

Erro de bind

-4

Erro de listen

-5

Erro de accept

-6

Erro de connect

-7

Erro de comunicao com servidor/cliente

-8

Arquivo solicitado no encontrado

-9

Erro em ponteiro

-10

Comando de clienteFTP no existente

-999

Outros erros (no listados)

O aluno dever acrescentar, se necessrio, outros cdigos de erro, que devero estar
documentados no arquivo README e no cdigo fonte. As mensagens de erro devero ter o seguinte
formato: Erro: %d - Descrio: %s.
2

Figura 1 : Operao esperada para clienteFTP (Sem considerar erros)

O servidor dever ser capaz de processar mltiplas conexes simultneas e, portanto, ficar
rodando at que receba um sinal SIGTERM ou SIGKILL.

Figura 2: Operao esperada para servidorFTP (Sem considerar erros)

Para obteno da lista de arquivos sugere-se utilizar as funes da biblioteca dirent.h (voc pode
usar #man 2 opendir para obter mais informaes).
Sockets devem ser utilizados no desenvolvimento do trabalho, utilizando a biblioteca de
sys/sockets.h do Linux. Os programas devero utilizar sockets com IPv6. No sero aceitos
programas somente com IPv4. Os testes sero rodados em um computador com IPv4 desabilitado.
3.

Medies de desempenho

Uma vez que os programas estejam funcionando corretamente, o aluno deve avaliar o desempenho
do funcionamento dos programas. Esta avaliao ser feita mediante a conexo de um nico
cliente ao servidor. No devem ser feitas medies com conexes simultneas de diversos clientes.
O aluno deve medir a taxa de transferncia obtida na transferncia do arquivo entre o cliente e o
servidor, isto , a vazo (throughput) da comunicao, definida como o nmero total de bytes
enviados dividido pelo tempo medido no cliente. As medies devem verificar como a vazo varia
4

com o tamanho de buffer. Devem ser fornecidas, no mnimo, as medies para os casos nos quais o
tamanho do buffer seja igual a 2i bytes, onde 1 i 16, i N. Outros valores podem ser escolhidos
conforme suas observaes indicarem necessidade. Para a medio do tempo no cliente sugere-se
utilizar a funo gettimeofday() da biblioteca sys/time.h.
O tamanho do arquivo pode ser escolhido de forma a garantir um tempo de teste nem muito longo
nem muito curto. Para testes em que os dois programas executam na mesma mquina, um arquivo
de aproximadamente 3 MB pode ser um bom ponto de partida.
4.

Entregveis

O aluno dever entregar um relatrio de medies e o cdigo fonte dos programas na linguagem
C ou C++. A entrega ser eletrnica via Moodle e deve constar de um arquivo .zip, com a mscara
tp1_<nome_do_aluno>_<curso-bcc/eca>.zip (ex: tp1_carlos_roberto_eca.zip).
contendo os
seguintes documentos:
1. todos os arquivos fonte desenvolvidos (arquivos de terminao .c/.cpp, .h e Makefile);
2. um arquivo denominado README, com uma breve descrio do programa e orientao para
compilao e execuo. Deve indicar a necessidade de instalao de alguma biblioteca;
3. uma cpia eletrnica (em .pdf) do relatrio, com, no mximo, 8 pginas.
No incluir nesse conjunto outros arquivos, como por exemplo, arquivos objeto (.o), arquivos de
backups (~* e *~) e os executveis utilizados!
Relatrio de desempenho
O relatrio com os resultados das medies de desempenho dever conter as seguintes sees:
I.
Introduo: descrio do objetivo do trabalho
II. Metodologia: dados sobre os experimentos, como a configurao das mquinas utilizadas e
a localizao das mesmas na rede. Indicar tambm como foram feitas as medies, quantas
vezes o teste foi executado, se foram execues diferentes do programa ou apenas um loop
ao redor do programa todo para fazer todas as n medies de tempo.
III. Resultados: apresentar a informao coletada, tanto na forma de tabelas quando na forma de
grficos. Cada tabela deve conter, para o experimento em questo, uma linha para cada
tamanho de mensagem, com o nmero de mensagens enviadas, o tempo total mdio medido,
o desvio padro dos tempos medidos, o intervalo de confiana para o valor mdio (com
significncia de 95%) e a banda mdia observada no experimento. Cada grfico deve usar
escalas adequadas (logartmicas ou lineares, conforme o caso), os eixos devem ser
identificados e possuir claramente a identificao das unidades em cada um. Os resultados
devem ser apresentados por linhas retas interligando os pontos medidos, que devem ser
destacados com marcas claras. Se um grfico contiver mais do que um conjunto de pontos,
as linhas devem ser claramente identificadas com marcaes, cores e legenda. Se possvel,
cada grfico deve incluir barras verticais indicando a varincia de cada valor calculado.
IV. Anlise: para cada experimento, discutir os resultados observados. Os resultados foram de
acordo com o esperado? Voc capaz de explicar por que as curvas se comportam como o
fazem? Houve algum elemento claramente de destaque nos resultados que merece uma
anlise especial (por exemplo, um pico/vale inesperado nos grficos, desvios muito
significativos nas medies)?
V. Concluso: como todo trabalho tcnico, algumas palavras finais sobre o resultado do
trabalho, tanto das observaes quanto do seu aprendizado sobre o assunto.

O relatrio no deve incluir a listagem dos programas. O relatrio dever ser feito utilizando o
formato padronizado da SBC para publicao de artigos que pode ser obtido em
http://www.sbc.org.br/documentos-da-sbc/category/169-templates-para-artigos-e-capitulos-de-livros.
5.

Critrios de Avaliao

Os seguintes critrios sero utilizados na avaliao dos programas e do relatrio:


1)
a)
b)
c)
d)
e)
f)
g)
h)
i)
j)
k)

Programa:
Corretude do Makefile;
Corretude da compilao;
Cliente e/ou servidor sem permitir mltiplas conexes no servidor;
Nomeao dos programas;
Formato de entrada da linha de comandos;
Suporte a IPv6;
Corretude no envio de arquivos (se retorna os arquivos diretrio);
Corretude no comando list (se retorna corretamente os arquivos solicitados);
Cdigo de erro incompatvel com a relao fornecida nesta especificao;
Clareza, indentao e comentrios no programa;
Linguagens de programao utilizadas .

a)
b)
c)
d)

Relatrio:
Formato e tamanho;
Aderncia das concluses aos dados apresentados;
Utilizao dos tamanhos de buffer como solicitados;
Clareza e objetividade.

2)

Todos os programas sero avaliados em um ambiente com instalao padro do sistema


operacional UBUNTU 14.04.5, verso desktop com o ambiente de desenvolvimento denominado
build-essential1 do Ubuntu. Qualquer ferramenta ou biblioteca que no esteja contida nesta
instalao dever ser fornecida pelo aluno.
Referncias

Donahoo, M. J. and Calvert, K. L. TCP/IP sockets in C: practical guide for programmers.


Morgan Kaufmann. 2009
W. Richard Stevens, Bill Fenner, and Andrew M. Rudoff. 2003. UNIX Network Programming,
Vol. 1 (3 ed.). Pearson Education.
Douglas E. Comer. 1991. Internetworking with TCP/IP (2nd Ed.), Vol. I. Prentice-Hall, Inc.,
Upper Saddle River, NJ, USA.
Michael Kerrisk. 2010. The Linux Programming Interface: A Linux and UNIX System
Programming Handbook (1st ed.). No Starch Press, San Francisco, CA, USA.
Bjarne Stroustrup. The C++ Programming Language. Addison-Wesley, 2013, 4th Edition.
Nivio Ziviani. Projeto de Algoritmos com Implementaes em Pascal e C. Cengage
Learning, 3 Ed, 2010.
https://computing.llnl.gov/tutorials/pthreads/
https://linux.die.net/man/3/opendir
Manual do linux

http://packages.ubuntu.com/trusty/devel/build-essential
6

Você também pode gostar