Redes
de Computadores
Trabalho Prático
Consulte
as Normas Gerais para Trabalhos Práticos
abaixo para informações referentes a avaliação (e
itens avaliados), entrega, atrasos, grupos, pontos extras e laboratórios.
Pontos
O
trabalho prático vale 2,0 pontos (em um total de 10 pontos).
Grupo
O
grupo deverá ter no máximo 4 alunos.
Data de Entrega
17
de novembro de 2009.
Descrição Geral
O
trabalho prático pode envolver uma implementação com
UDP ou com TCP, a critério dos alunos.
Descrição – Trabalho
Prático com UDP (User Datagram
Protocol)
O
trabalho prático com UDP consiste em implementar um
projeto no qual seja utilizado o protocolo UDP. O protocolo UDP é um dos
protocolos de transporte usado na Internet. O projeto deverá ter um servidor
escrito em C ou Java para Unix/Linux ou Windows e um cliente que poderá ser implementado em qualquer outra linguagem. Abaixo estão
algumas sugestões de implementação para o trabalho
UDP:
- Jogo multiusuário em tempo real: Essa proposta consiste em implementar
um jogo de ação multiusuário em tempo real para no mínimo 3 jogadores.
Jogos em tempo real são aqueles que não possuem turnos, e onde todos os
jogadores interagem ao mesmo tempo com o servidor através da troca de
mensagens (neste caso, mensagens UDP). Toda transmissão de dados deverá
ser feita entre o cliente e o servidor, nunca entre clientes. O jogo
deverá ser implementado de forma que o servidor
do jogo, seja implementado em Unix juntamente com todas as consistências e
regras do mesmo. O cliente Windows deverá ser somente uma interface com os
jogadores e um transmissor de pacotes UDP para o servidor. Em função
disso, o programa cliente (Windows) não implementa
nenhuma regra, contagem de pontos, teste de colisão, etc. Algumas
sugestões e idéias de jogos são:
- Jogo de corrida de carros numa pista, ou
corrida maluca na cidade;
- Pacman multiusuário, cada jogador com uma função
diferente;
- Bomberman, cada jogador com um personagem;
- Jogos de labirinto para encontrar a saída ou
outros jogadores;
- Jogos de disparos, ou tiros de canhões, space invaders, combate (Atari), asteroids, etc;
- Jogos de perseguição onde cada jogador tem
diferentes objetivos, Rally X (Flipperama);
- Akanoid, pinball, paredão,
ou telejogo multiusuário;
Não implemente nenhum destes
trabalhos:
- Chat, ICQ ou IRC
- Jogos somente para 2
jogadores
- Programa para transferência de arquivos: Esta proposta é a de implementação
de um programa de transferência de arquivos utilizando janelas
deslizantes. A transferência de arquivos não precisa ser implementada em dois sentidos (somente Windows/Unix/Linux
para o Unix/Linux/Windows ou vice-versa). Não é necessário fazer conversão
de formatos de arquivos texto, assuma sempre transmissões binárias. O
protocolo deve usar janelas deslizantes na transmissão e recepção para acelerar
o tráfego na rede, aproveitando melhor o meio de transmissão. Como foi visto na aula teórica, o protocolo deverá enviar
somente ACKs positivos (de confirmação do
recebimento de pacotes), e cada ACK vale por todos os anteriores. Escolha
um tamanho de janela apropriado e compare o tempo de transmissão do seu
programa com um FTP ou WinSCP.
- Gerenciador para processamento distribuído: implementar um
programa para gerenciamento (servidor em Unix) de processamento
distribuído (clientes Windows). O servidor distribui tarefas para os
programas clientes processarrem em paralelo de
forma distribuída. O processamento pode ser de imagens (renderização de imagens raytracing),
compactação de dados, comparação de arquivos texto (útil para comparação
de sequências de DNA), algoritmos de quebra
senha ou decriptação força bruta, etc.
- Servidor de streaming de dados UDP: um servidor de streaming de dados em tempo real
através de UDP, como música ou vídeo. Dependendo do formato dos dados,
seria necessária também a implementação de um
cliente visualizador;
Uma outra
linha alternativa de implementação para o trabalho em UDP é implementar na
forma de um applet Java uma demonstração de
funcionamento de algum protocolo relacionado com a disciplina de Redes, com o
objetivo de fazer parte das páginas de aula para os próximos semestres. Abaixo
estão algumas sugestões:
- Protocolo de janelas deslizantes: ilustrar graficamente o funcionamento de um
protocolo de janelas deslizantes com a possibilidade de erros de
transmissão, perda de pacotes, diferentes taxas de velocidade e delay e tamanhos de pacotes, mostrando o que acontece
com o envio de pacotes e ACKs pelo meio de
transmissão;
- Enlace MACA e MACAW: simular o funcionamento do protocolo de enlace
sem fio MACA ou MACAW em situações extremas (conflitos de transmissão,
estações fora de alcance, etc);
- Máquina de estados finitos de protocolos: simular o funcionamento de uma máquina de
estados finitos de um protocolo de enlace (exemplo: PPP) mostrando ao
mesmo tempo o que ocorre com a máquina de estados do cliente e do servidor
na hora em que é feita uma conexão.
- Modulação e codificação de dados: mostrar como funciona a codificação de dados
binários em diferentes tipos de meios de transmissão e os diferentes tipos
de modulação de sinal (amplitude, frequência e
fase);
- Protocolos MAC: simular o funcionamento de protocolos de acesso
múliplo em redes broadcast (CSMA, CSMA/CD,
Bitmap, Contador binário);
Caso o grupo tenha uma nova proposta ou idéia, consulte o
professor.
Descrição - TCP
(Transmition Control Protocol)
O
trabalho prático TCP consiste em implementar um
projeto no qual seja utilizado o protocolo TCP. O protocolo TCP é um dos
protocolos de transporte usado na Internet. O TCP ao contrário do UDP é um
protocolo orientado à conexão. Por isso, os clientes precisam estabelecer uma
conexão com o servidor antes de qualquer informação ser transmitida. Por causa
disso também, o seu servidor terá um socket para cada
cliente, diferente do servidor UDP que usava um socket
somente para todos os clientes. O projeto deverá ter um servidor escrito em C
para Unix e um cliente que poderá ser implementado em
qualquer outra plataforma. Abaixo estão algumas sugestões de implementação
para o trabalho:
- Jogo multiusuário em turnos: Essa proposta consiste em implementar
um jogo qualquer baseado em turnos. Nesses casos, cada jogador faz a sua
jogada na sua vez enquanto os demais aguardam a sua hora de jogar. Toda
transmissão de dados deverá ser feita entre o cliente e o servidor, nunca
entre clientes. O jogo deverá ser implementado de
forma que o servidor do jogo, seja implementado em Unix juntamente com
todas as consistências e regras do mesmo. O cliente Windows deverá ser
somente uma interface com os jogadores. Em função disso, normalmente o
programa cliente (Windows) não faz o redesenho do jogo até receber uma
resposta do servidor, já que este é que verifica colisões, movimentações
inválidas, etc. Algumas idéias de jogos são:
- Jogos de cartas em geral (truco, mau-mau, buraco, etc);
- Jogos de tabuleiro (xadrez, dama, war, combate, detetive, othelo, go, banco imobiliário, etc);
- Jogos contra o computador (senha)
- Jogo da memória, ligue
os pontos, etc;
Não implemente nenhum destes trabalhos:
- Chat, ICQ ou IRC
- Jogo da velha
- Adedanha
O
servidor deverá permitir a entrada de no mínimo 3
clientes ao mesmo tempo. Servidores que implementam
jogos que entre duas pessoas (xadrez, dama, etc)
deverão receber conexões de vários jogos em paralelo ao mesmo tempo. Jogos contra o computador deve permitir que várias pessoas
se conectem ao mesmo tempo para jogar.
- FabraiAnhangueraster: FabraAnhangueraister é um programa de comunicação peer-to-peer como o Napster.
A idéia é disponibilizar a lista de arquivos locais em um servidor para que
todos os clientes possam pesquisá-los. Porém a transferência de arquivos é
feita entre cada usuário diretamente sem a passagem dos dados pelo
servidor.
O
servidor deverá ser implementado em Unix e os clientes
em Windows (ou outra plataforma). Para isso ele deve fazer o controle das
conexões TCP/IP ativas e tratar evntuais desconexões.
Deve ser implementado um protocolo simples de
mensagens, entrada e saída de usuários. Quando um usuário entra no FabraAnhangueraister, os demais
precisam ser avisados de quantos arquivos disponíveis existem no sistema. Cada
vez que um usuário entra, ele envia a sua lista de arquivos para o servidor e
este redistribui a estatística com o total de arquivos. Toda busca de arquivos efetuada por um cliente, deve ser pesquisada nos
arquivos do servidor e o cliente deve receber o resultado da busca contendo o
número IP dos demais clientes que possuem o arquivo requisitado. A
transferência é feita diretamente entre os clientes. Não é necessário implementar o tempo de ping entre
os clientes no resultado da busca.
- Servidor WWW: O trabalho consiste em implementar um
servidor Web. O servidor Web é um daemon
(programa residente em Unix) que aguarda a recepção de requisições de
páginas e devolve na mesma conexão o objeto requisitado. O protocolo HTTP usado
nos browsers e servidores Web da Internet porém
não é tão trivial porque pode conter até uma dezena de linhas
aproximadamente que especificam uma série de parâmetros da requisição. O
servidor implementado porém não precisa
interpretar todos os parâmetros à risca.
Além
da busca de objetos Web, o servidor deverá atender também requisições de
formulários através do comandos POST. O comando POST
executa um CGI (gateway de interface ou programa externo ao servidor Web) que
recebe dados de um formulário preenchido pelo usuário e gera uma página de
resposta.
- Servidor SMTP: SMTP é o protocolo de envio de correio eletrônico usado na
internet. O trabalho consiste em implementar um
servidor SMTP que receba emails através de conexões TCP de programas
clientes de email como por exemplo o Outlook.
Uma
alternativa para o trabalho é implementar na forma de
um applet Java uma demonstração de funcionamento de
algum protocolo de Redes, com o objetivo de fazer parte das páginas de aula
para os próximos semestres. Abaixo estão algumas sugestões:
- Simulação de redes de pacotes IP: ilustrar graficamente o funcionamento de uma rede
baseada em pacotes IP
e o seu roteamento;
- Algoritmos de roteamento: simular o funcionamento dos algoritmos de roteamento mostrados na aula (flooding,
flow-based, vetor de distâncias e link state), ilustrando situações de falhas na rede e
mudanças no tráfego;
- Algoritmos de congestionamento: simular o funcionamento de algoritmos de
congestionamento (balde furado, balde furado com token,
pacotes de engasgo e fila parcial valorada) em redes de pacotes ou redes
de circuitos virtuais;
- Protocolo ARP (address
resolution protocol): simular o funcionamento do protocolo ARP usado
para a obtenção dos endereços MAC numa rede local Ethernet;
- Tunelamento: mostrar o funcionamento de tunelamento de pacotes IP em um outro tipo de rede, ponto-a-ponto;
- Controle de fluxo em TCP: simular o funcionamento do controle de fluxo de
dados implementado pelo TCP mostrando situações
de erro;
- Estabelecimento de conexão TCP: simular o processo de conexão do protocolo TCP;
- Máquina de estados do TCP: mostrar o funcionamento da máquina de estados
do protocolo TCP à medida que os pacotes são enviados e recebidos;
- Consulta de DNS: mostrar como funciona a consulta de DNS;
Caso o grupo tenha uma nova proposta ou idéia, consulte o
professor.
Normas Gerais para Trabalhos Práticos
Lindenberg
Naffah Ferreira
Baseado em material elaborado
pelo Prof. Rodrigo O. R. Antunes, reproduzido com
autorização
Leia esta página inteira para
se informar corretamente a respeito do que deve ser feito, redigido, e entregue
a respeito dos trabalhos. Esta página contém ainda informações a respeito da
avaliação e
dicas valiosas para o seu trabalho.
Não deixe para começar o seu trabalho na última hora.
O trabalho parece mais simples enquanto você ainda não o começou
Normas para Trabalhos Práticos
O
objetivo do trabalho prático é avaliar a capacidade do aluno para desenvolver
um projeto utilizando os conceitos aprendidos no laboratório, trabalhar em
grupo e entregar o projeto no prazo. Os trabalhos práticos serão avaliados em
todos estes quisitos. A avaliação consiste na
apresentação do projeto com todos os membros do grupo. A nota dos componentes
do grupo é sempre a mesma. Se um aluno perde ponto, o grupo inteiro perde
ponto. Com base nos objetivos citados, a avaliação dos trabalhos práticos é
feita da seguinte maneira:
- Prazo:
Todos os trabalhos são apresentados na aula marcada para esse fim,
usualmente uma aula de laboratório, com uma das máquinas ligada a um datashow. Se
o trabalho for entregue 1 aula depois da aula
estipulada para a entrega, o trabalho valerá somente 2/3 do pontos. Se for
entregue 2 aulas de laboratório depois, valerá
somente 1/3 dos pontos. E após duas aulas, o trabalho não poderá ser mais
entregue.
- Funcionamento: O trabalho deverá estar completamente operacional e funcionando.
Trabalhos com bugs
perderão pontos e trabalhos que não funcionarem corretamente perderão muitos pontos.
- Quantidade de usuários: O trabalho de redes é criado para que seja
usado por vários usuários simultaneamente. No mínimo, 3
usuários deverão usá-lo ao mesmo tempo na apresentação. Se o trabalho
permitir a entrada de usuários ilimitados, terá um ponto extra.
- Identificação dos usuários: No trabalho de redes, a identificação dos
usuários conectados é essencial para o funcionamento. Essa identificação
não deve ser feita pelo cliente (como nas aulas de laboratórios). A
identificação é feita de formas diferentes dependendo do protocolo usado
(UDP ou TCP), mas deve ser feita sempre pelo servidor.
- Reconfiguração do servidor: No trabalho prático, o servidor deve ter a
capacidade de ser utilizado várias vezes em sequência, sem a necessidade de ser reiniciado no
sistema operacional. Ou seja, o servidor deve tratar várias instâncias de
execução enquanto estiver rodando. Se for um jogo, o jogo precisa rodar
várias partidas sem precisar reiniciar os programas.
- Lógica do programa: A lógica do trabalho prático deve ser implementada toda no servidor. O programa cliente é uma
mera interface do servidor com o usuário. A lógica do programa diz
respeito ao processamento das informações para o seu funcionamento. Em um
jogo é por exemplo: contagem de pontos, cálculo
da posição dos jogadores na tela, verificação do ganhador, etc.
- Saída/Entrada de usuários: O servidor deve tratar a saída e entrada de
usuários tomando a ação necessária para manter o resto do programa em
execução, sem afetar os demais usuários. Se o funcionamento do servidor
depender da presença de todos os usuários a sessão poderá ser interrompida
com a saída de um usuário, mas todos precisam ser avisados que a sessão
foi encerrada por causa da saída de um usuário.
- Qualidade do fonte: A qualidade do programa fonte será observada
como em qualquer outra disciplina de um curso de informática (indentação, comentários, divisão da lógica em
procedimentos, modularização, orientação a
objetos, polimorfismo, etc).
- Avaliação do grupo: Durante a apresentação cada componente do grupo
será questionado com relação ao trabalho. Se alguém não acertar alguma pergunta,
o grupo todo perde pontos.
Entrega
No
dia da entrega é necessário entregar os códigos fontes do trabalho prático:
tanto do servidor quanto do cliente. A entrega pode ser em disquete ou CD. Não
é necessário entregar cópia impressa do trabalho na apresentação, nem dos fontes e nem da documentação.
Grupos
Todo
o grupo deverá estar presente no dia da apresentação para a arguição.
Se algum elemento do grupo não estiver presente, todo o grupo perderá pontos.
Não serão
tolerados
- Trabalhos copiados de outros grupos ou da
Internet ou de grupos de outros períodos.
- Falta de algum componente do grupo no dia da
apresentação.
Laboratórios
As
aulas de laboratório são muito importantes para o desenvolvimento do trabalho
porque todo o seu conteúdo pode ser aplicável ao desenvolvimento do mesmo. Por
isso procure não faltar às aulas de laboratório e a participar do seu
desenvolvimento para não ficar perdido depois e ter a oportunidade de tirar as
dúvidas com o professor.
As aulas de
laboratório no dia da entrega do trabalho serão usadas para a apresentação dos
grupos. É essencial que o seu trabalho esteja pronto para entrega neste dia. As
demais aulas de laboratório são dedicadas a tópicos específicos ao longo do
curso, focadas principalmente no emprego de utilitários de rede e desenvolvimento
de programas em rede.
Uma parte das
aulas de laboratório são aproveitadas nos trabalhos
práticos porque implementam as operações fundamentais relacionadas com a
transmissão de dados através da rede. Portanto, acompanhar as aulas de
laboratório pode poupar tempo na elaboração dos trabalhos práticos.
Dicas
Seguem
abaixo algumas dicas que podem ajudar no desenvolvimento dos trabalhos:
- Faça as práticas de redes: as práticas foram
criadas não só para que o aluno aprenda a desenvolver um programa em rede mas também para servir como base para o trabalho
prático. Os próprios fontes do laboratório podem
ser usados integralmente nos trabalhos.
- Se o seu trabalho não for uma das propostas
citadas nas páginas dos trabalhos, converse com o professor para não
desenvolver um trabalho inválido ou muito trivial.
- Comece o seu trabalho pela parte de comunicação
e em seguida acrescente as demais funcionalidades (interface, parte lógica
etc.). Desta forma será mais fácil testá-lo em caso de problemas.
- Faça um trabalho simples. Note que simples não é
o mesmo que trivial! Não perca tempo desenvolvendo interfaces elaboradas
porque isso não será avaliado. A interface precisa ter recursos
suficientes somente para o funcionamento e uso do programa. Telas sofisticadas
não dão pontos extras.
- Programas em redes em geral não podem ser depurados
(debugged)
passo a passo porque envolvem um outro software
sendo executado em outra máquina. A forma mais fácil de depurá-los é por
meio de mensagens e controles de informação na tela ou console.
- Uma parte importante do trabalho é a
sincronização entre o servidor e o cliente. Não tente fazer isso por meio
de delays
(fazer o seu programa dormir por um tempo aguardando pacotes). Delays de
tempo para sincronizar são difíceis de depurar, e normalmente resolvem o
problema em determinadas situações específicas. Mas na prática, o problema
pode voltar a acontecer quando o trabalho é modificado ou testado sob
outra condição.
- Se for utilizar
componentes proprietários para o seu trabalho (gráficos especiais, de áudio
etc.), faça testes com eles para ter certeza que irão funcionar
corretamente no laboratório. É comum um componente funcionar no seu
computador doméstico e não funcionar no laboratório. Isso porque os
computadores do laboratório não permitem alterações na sua configuração.
- O trabalho é de redes, não de interfaces
gráficas! Não se preocupe se os seus gráficos não estão muito sofisticados
ou se não tem animações.
- Teste o seu trabalho no laboratório antes do dia
da entrega e não use componentes que não existam nas máquinas do
laboratório. Caso contrário, seu grupo não conseguirá apresentar o
trabalho.
- Não use animações em flash!
- Mais importante! Comece o seu trabalho o mais cedo possível
porque ele não será adiado. Os trabalhos sempre parecem mais fáceis de
fazer enquanto você ainda não começou.