Mudanças entre as edições de "Trabalho-Modulo1-RCO2-2011-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(Criou página com '= Introdução = O trabalho do primeiro módulo da disciplina trata da implementação de um protocolo de enlace ponto-a-ponto, que deve estabelecer um enlace entre dois computa...')
 
Linha 4: Linha 4:
  
 
O protocolo de enlace deve prover os seguintes serviços de enlace:
 
O protocolo de enlace deve prover os seguintes serviços de enlace:
# Encapsulamento e enquadramento (requisito mínimo, gerando um  conceito C).
+
# '''Encapsulamento e enquadramento''' (requisito mínimo, gerando um  conceito C).
# Detecção de erros (opcional, gerando conceito B)
+
#* Seu protocolo deve definir um formato de quadro capaz de conter suas informações de controle (ao menos identificador de protocolo da camada superior, dados a serem transportados e código de detecção de erros).
# Controle de erros pare-e-espere (opcional, gerando conceito  A)
+
# '''Detecção de erros''' (opcional, gerando conceito B)
 +
#* O código de erros a ser usado deve ser do tipo CRC
 +
# '''Controle de erros pare-e-espere''' (opcional, gerando conceito  A)
  
 
Para realizar o trabalho será usado o [http://www.netkit.org Netkit], um projeto da Universidade de Roma para experimentação com redes virtuais baseadas em Linux.
 
Para realizar o trabalho será usado o [http://www.netkit.org Netkit], um projeto da Universidade de Roma para experimentação com redes virtuais baseadas em Linux.

Edição das 16h45min de 24 de fevereiro de 2011

Introdução

O trabalho do primeiro módulo da disciplina trata da implementação de um protocolo de enlace ponto-a-ponto, que deve estabelecer um enlace entre dois computadores por meio de suas portas seriais. O protocolo de enlace deve-se integrar à pilha de protocolos TCP/IP do Linux, podendo assim transmitir e receber datagramas IP.

O protocolo de enlace deve prover os seguintes serviços de enlace:

  1. Encapsulamento e enquadramento (requisito mínimo, gerando um conceito C).
    • Seu protocolo deve definir um formato de quadro capaz de conter suas informações de controle (ao menos identificador de protocolo da camada superior, dados a serem transportados e código de detecção de erros).
  2. Detecção de erros (opcional, gerando conceito B)
    • O código de erros a ser usado deve ser do tipo CRC
  3. Controle de erros pare-e-espere (opcional, gerando conceito A)

Para realizar o trabalho será usado o Netkit, um projeto da Universidade de Roma para experimentação com redes virtuais baseadas em Linux.

Começando o trabalho

  • Arquivo com o experimento do Netkit
  • Lembre-se que:
    • Lstart: executa o experimento do Netkit, iniciando as máquinas virtuais
    • Lhalt: termina o experimento e matas as máquinas virtuais


O trabalho deve ser realizado usando o Netkit como plataforma de desenvolvimento. Deve-se primeiro obter o arquivo com o experimento do Netkit, e em seguida descompactá-lo. Ele contém a seguinte estrutura de arquivos e subdiretórios:

$ cd trabalho-rco2
$ ls -l
total 24
drwxr-xr-x 2 sobral sobral 4096 2011-02-24 15:06 a1
-rw-r--r-- 1 sobral sobral   47 2011-02-23 10:50 a1.startup
drwxr-xr-x 2 sobral sobral 4096 2011-02-23 11:01 a2
-rw-r--r-- 1 sobral sobral   47 2011-02-23 10:50 a2.startup
-rw-r--r-- 1 sobral sobral  253 2011-02-23 15:42 Lab.conf
-rw-r--r-- 1 sobral sobral    0 2011-02-23 10:47 lab.dep
drwxr-xr-x 2 sobral sobral 4096 2011-02-24 15:25 shared

Como se pode ver, há duas máquinas virtuais, a1 e a2, que são os computadores que devem se comunicar via portas seriais usando seu protocolo. O arquivo Lab.conf descreve a interligação desses computadores pelas portas seriais:

$ cat Lab.conf
LAB_DESCRIPTION="Protocolo de enlace do grupo XXX"
LAB_VERSION=1
LAB_AUTHOR="Seu Maneca e Dona Bilica"
LAB_EMAIL="maneca_e_bilica@ifsc.edu.br"

a2[ppp0]=serial
a1[ppp0]=serial

Os arquivos a1.startup e a2.startup contêm alguns comandos necessários para usar a porta serial em cada um desses computadores. Não é necessário que você os modifique. Caso resolva alterá-los, não remova os comandos que ali existem.

Os arquivos contendo o código-fonte inicial pro trabalho se encontra no subdiretório shared. São eles:

$ cd shared
$ ls -l
total 16
-rw-r--r-- 1 sobral sobral  101 2011-02-23 21:31 Makefile
-rw-r--r-- 1 sobral sobral 2375 2011-02-23 21:44 proto.c
-rw-r--r-- 1 sobral sobral 3389 2011-02-24 15:25 utils.c
-rw-r--r-- 1 sobral sobral 3224 2011-02-24 15:25 utils.h

A implementação do seu protocolo deve ser feita no arquivo proto.c. Os arquivos utils.h e utils.c contêm funções e definições necessárias para o funcionamento do protocolo. Eles tratam de como o protocolo interage com o sistema operacional, e assim ali estão os detalhes da comunicação com a porta serial e com a camada de rede.

A compilação e execução do seu programa deve ser feita dentro das máquinas virtuais. Assim, primeiro deve-se executar Lstart para iniciar o experimento. Uma vez iniciadas as máquinas virtuais, em uma delas entre no subdiretório /hostlab/shared. Lá você encontrará os arquivos do programa, e poderá compilá-los e testá-los.

Para compilar seu programa deve-se executar make, que resulta em um arquivo de programa chamado proto.

$ make
gcc    -c -o proto.o proto.c
gcc    -c -o utils.o utils.c
gcc -o proto proto.o utils.o -lutil
$ ls -l proto
-rwxr-xr-x 1 sobral sobral 13943 2011-02-24 15:57 proto

Para testar seu programa, execute-o assim: /hostlab/shared/proto /dev/ttyS0. A figura abaixo mostra um exemplo de como compilar e executar o programa. Note que é necessário configurar a interface tun0, que será a interface de rede associada ao enlace controlado por seu protocolo. Para poder testar adequadamente o seu enlace, configure-as da seguinte forma:

  • Em a1: ifconfig tun0 10.0.0.2 dstaddr 10.0.0.1
  • Em a2: ifconfig tun0 10.0.0.1 dstaddr 10.0.0.2

Assim, para testar a comunicação a partir de a1 basta executar ping 10.0.0.1. Se quiser testar a comunicação a partir de a2 deve-se fazer ping 10.0.0.2. No exemplo abaixo tentou-se fazer um ping a partir de a2. Esse ping foi recebido pelo programa proto em a2, que apenas mostrou que algo foi recebido.

Netkit-trab-rco2-1.png

Para finalizar o experimento e matar as máquinas virtuais, execute Lhalt.

O código-fonte inicial disponibilizado