Você está na página 1de 9

UNIVERSIDADE FEDERAL DO TRIÂNGULO MINEIRO

DEPARTAMENTO DE ENGENHARIA ELÉTRICA

Projeto Aplicado
Relatório 2 – Rede com ENC28J60

Redes de Computadores
Elder Vicente de Paulo Sobrinho

Gabriel Parreira Falleiros - 201610400


Guilherme Fávaro Silva - 201910056
Hugo Silva Soares - 201910738
Igor Eduardo Vieira Ragozoni - 201910734
Pedro Augusto Pereira Balduino Teixeira - 201710744

18 de março de 2022
1. INTRODUÇÃO

Dando prosseguimento ao projeto prático da disciplina de Redes de Computadores,


este relatório consiste no relato e nas conclusões obtidas da implantação de uma rede com o
módulo ENC28J60, o Arduino e uma máquina virtual com o sistema operacional Linux.
A comunicação entre aparelhos eletrônicos é algo complexo e detalhado, onde vários
fatores influenciam e determinam os caminhos dessas trocas de dados e informações. Outro
detalhe que envolve a transmissão de dados são as várias camadas existentes nesse processo e
o protocolo ARP atua justamente entre duas dessas camadas, a camada de enlace e a camada
de rede. Na camada de enlace o endereço e na forma de MAC e o mesmo é lido em forma
hexadecimal, já na camada de rede o endereço é em forma decimal, um exemplo é o IP da
Internet, e o ARP funciona como uma espécie de tradutor entre as duas formas de endereço.
Todo roteador ou hospedeiro possui uma tabela ARP contendo o mapeamento dos
endereços de IP e MAC de outros nós (hospedeiros) dentro da sua sub-rede. Todo esse
processo pode ser explicado como um sistema de pergunta e reposta, ao sair dado de um
determinado nó, o mesmo já tem em seu pacote o IP do endereço de destino, então o ARP
consulta em sua tabela qual o endereço MAC correspondente para o endereço do destino na
camada de rede, ao obter esse endereço da camada de enlace, é feito uma consulta em toda a
sub-rede se algum nó existente nela possui aquele endereço MAC, e essa consulta sendo
respondida positivamente, a transmissão de pacotes torna-se possível de ser efetivada.
O principal conceito a ser estudado para esta etapa é o protocolo ARP (Address
Resolution Protocol). Este padrão tem um papel fundamental na implantação do TCP/IP, visto
que é utilizado para resolução de endereços da camada de internet em endereços da camada de
enlace, ou seja, conhecer o endereço físico de uma placa de rede a partir de um endereço IP.
De modo geral, ARP é um protocolo de pergunta e resposta. Sendo assim, para fazer a
correspondência entre endereços físicos e endereços lógicos, o protocolo interroga as
máquinas da rede para conhecer o seu endereço físico e depois cria uma tabela de
correspondência (Tabela ARP) entre os endereços lógicos e os endereços físicos em uma
memória secreta. Quando uma máquina tem que se comunicar com outra, ela consulta a
tabela. Caso o endereço solicitado não se encontra na tabela, o protocolo ARP emite um
pedido na rede. Dessa forma, o conjunto das máquinas da rede vai comparar este endereço
lógico ao seu. Se uma delas se identificar com esse endereço, a máquina responde ao ARP,
que vai armazenar o par de endereços na tabela de correspondência e, assim, a comunicação
pode ser feita.
A tabela ARP salva temporariamente o mapeamento, ou seja, coloca em cache nos
dispositivos na rede local. As entradas na tabela são carimbadas com data e hora da mesma
forma que as entradas da tabela MAC são carimbadas com data e hora em switches. Se um
dispositivo não receber um quadro de um dispositivo específico antes de o carimbo expirar, a
entrada para esse dispositivo será removida da tabela ARP.
Para realizar as comunicações de forma correta, o protocolo ARP trafega em seus
pacotes um conjunto pequeno de dados sobre máquinas de origem e destino. A imagem
abaixo mostra cada campo dentro do cabeçalho ARP:

Figura1 - Cabeçalho ARP.

Segue abaixo a definição de cada campo do cabeçalho:


• Tipo de hardware: Campo de 2 bytes que permite guardar um número que define qual
o tipo do equipamento daquele pacote. No caso mais comum, com equipamentos
Ethernet, o valor desse campo seria 0x0001;
• Tipo de protocolo: Campo de 2 bytes que armazena o tipo do protocolo ao qual será
mapeado o endereço de equipamento (hardware). Para o protocolo IP, seu valor para o
campo seria 0x0800;
• Tamanho endereço hardware: Para colocar no pacote um endereço Ethernet são
necessários 6 bytes, então o valor desse campo é 6;
• Tamanho endereço protocolo: Utilizando o IP, se considera um valor 4 para o campo;
• Opções: Esse campo define o tipo do pacote ARP. Ele pode ser um pacote de
requisição ou de resposta. Para cada um desses tipos, utilizam-se os valores 0x0001 e
0x0002, respectivamente;
• Endereço de hardware da origem: Esse campo recebe o endereço do equipamento de
quem está enviando o pacote. Se o hardware for Ethernet, se usaria o seguinte valor
00:00:00:00:00:01;
• Endereço de protocolo da origem: Considerando o protocolo IP, o valor poderia ser
10.0.0.2;
• Endereço de hardware do destino: Se o hardware for Ethernet, se usaria o seguinte
valor 00:00:00:00:00:02;
• Endereço de protocolo do destino: Considerando o protocolo IP, o valor poderia ser
10.0.0.5.

2. DESENVOLVIMENTO DA PRÁTICA

Como prática de laboratório, foi estabelecida o envio de pacotes e recebimento de


pacotes em uma rede entre um ENC28J60 e uma placa de Arduino via cabo de ethernet.

Após a instalação de uma virtual box, a mesma com a implementação de uma VM


Linux, foi configurada a rede da mesma em modo NAT, liberando acesso da mesma a
internet. Então, de volta a VM Linux, foram instalados alguns pacotes de ferramentas:

- net-tools: Responsável por ativar os comandos “arp” e “ifconfig”;

- tcpdump: Uma ferramenta capaz de analisar o trafego na rede;

- python3: Um compilador da linguagem python;

- telnet: Uma ferramenta capaz de verificar se o nó está com a passagem bloqueada;

- gcc: Um compilador da linguagem c++;

- build-essential: Contém uma lista de pacotes necessários para criar um pacote Debian
(bc, gcc, g ++, make, dpkg-dev, etc).

- iputils-ping: O comando ping envia pacotes ICMP ECHO_REQUEST para um


computador (host) para testar se ele pode ser alcançado via rede.

Com o download e a instalação de ferramentas capazes de auxiliar os testes do


protocolo ARP, a configuração NAT foi desativada, e a rede foi configurada em modo bridge,
garantindo a conexão sem interferência entre o Host e o ENC28J60. Também foi alterada o
endereço MAC da VM, com o intuito de padronizar o mesmo e algoritmos pré-formatados
realizarem a comunicação utilizando esse mesmo endereço.

Com a VM aberta e pronta para comunicar, foi configurado o ID, o IP, a máscara e o
endereço de MAC da placa de rede, todos os identificadores foram configurados por
endereços pré-definidos, menos o ID, esse foi utilizado o ID da placa na rede linux, e após
uma verificação desses mesmos dados, foi confirmado que foram alterados corretamente,
testando o protocolo ARP pela primeira vez verificamos que a tabela ARP está vazia, algo
explicado pelo fato de nenhuma comunicação ter sido solicitada até o momento.

O próximo passo foi programar o Arduino e montar um circuito entre o mesmo e o


ENC28J60, o mesmo circuito descrito no primeiro relatório (se quiser colocar uma ft do
circuito abaixo só para descrever melhor, vocês quem sabem). A rede local montada está
destacada pela figura abaixo:

Figura 2 – Rede local montada.

Com a rede montada, foi possível testa-la, então foram enviados três pacotes para a
primeira verificação. (se quiser colocar um print aqui dessa parte do trabalho ficaria legal, a
gente esqueceu de tirar na hora).

Com a confirmação do recebimento de todos os pacotes enviados, fica explicito a


legibilidade da montagem do circuito e das configurações até aqui. E então, checando
novamente a tabela ARP temos uma mudança em relação a primeira checagem, agora a tabela
ARP apresenta os valores identificadores da placa.

A próxima etapa foi monitorar o tráfego de rede, mas primeiro, a tabela ARP foi
esvaziada e novamente verificamos se a mesma estava vazia e esse estado foi confirmado.
Para o monitoramento do tráfego de rede, dois terminais foram abertos dentro da VM, ambos
sendo Host, um com o intuito de monitorar o tráfego rede e o outro para enviar os pacotes
pela rede. E mais uma vez foi verificado a tabela ARP, e a mesma foi novamente apresentou
os identificadores do ENC28J60. E mais uma vez a tabela ARP foi esvaziada para a sequência
dos procedimentos.

Abaixo segue duas figuras que ilustram as simulações realizadas.

Figura 3 – Dados na interface do Arduino.

Figura 4 – Transmissão de pacotes na VM.


3. QUESTIONAMENTOS PROPOSTOS
• Analise os pacotes ARP que enviamos e recebemos nesse lab
o Análise a teoria apresentada VS. a realidade.
o Os campos estão preenchidos como estudamos?
o Há diferença na montagem/preenchimento, se sim explique, se não detalhe.

O protocolo ARP, como já citado, consiste basicamente em um sistema de pergunta e


resposta, no qual um roteador hospedeiro direciona uma mensagem a todos os computadores
conectados em uma sub-rede. Analisando os pacotes ARP que foram enviados e transmitidos
podemos perceber claramente a “dança ARP”. A placa pergunta aos integrantes da sub-rede
querendo saber qual o endereço MAC do computador cujo o endereço IP é 192.168.100.200,
assim que o ENC28J60 recebe o questionamento, ele se identifica na rede enviando seu
endereço MAC até a placa que enviou. Após a pergunta e a resposta o envio do pacote é
realizado. Comprovando então o que foi estudado na parte teórica.
Na troca de informações entre os computadores os campos foram preenchidos de
maneira correta. É mostrado na tela que o computar cujo endereço de MAC é
1a:40:62:48:e3:5c pergunta quem é computador cujo endereço de IP é 192.168.100.200, logo
após isso é mostrado que o computador solicitado tem endereço MAC 01:02:03:04:05:06, e já
envia a resposta ao computador que fez a pergunta, mostrando também o seu endereço MAC.

• Recebemos a mesma qtde de dados?


Sim.

• Os dados (em hexadecimal) são exatamente os mesmos enviados?

No datasheet do ENC28J60 diz que podemos completar com 0x0 um campo menor
que 60 bytes para completar o pacote ethernet, e é por isso que esses campos são completados
e se tornando

diferentes dos dados enviados.

• Existe alguma diferença em ler os bits do pacote recebido usando diferentes


o Se sim, explique porque isso acontece e como resolver
o Como ficaria os bits do pacote recebido se a leitura fosse feita usando a
unidade DOUBLE WORD (32 bits)?
Sim, existe diferença em ler os dados usando diferentes unidades. Isso acontece devido
a quantidade de informação que esses dados carregam e a sua capacidade de armazenamento,
no caso, do byte vs word, possuem 8 bits e 16 bits respectivamente, no caso do word pode se
dizer que é equivalente à 2 bytes. A aplicação para cada uma dessas unidades variam de
acordo com o objetivo, por exemplo, geralmente usamos o tipo bit em memória simples em
acionamentos de entradas ou saídas digitais, pois recebem apenas 0 e 1 (low e high), já os
bytes usamos em memórias do tipo char, para acionamentos ou reset de todo um conjunto de
bits, as words usamos em memórias do tipo time ou memórias do tipo int. E quando vamos
transmitir essas informações, temos que tomar muito cuidado na implementação do código
que fará essa transmissão por conta do choque de bits dentro desses conjuntos, como por
exemplo, mandar um byte com uma informação que já está contida dentro de uma word que
foi ou está sendo transmitida, havendo assim um choque de dados. Para resolver essa
diferença na leitura dos bits basta criar uma função que convertam essas unidades entre si,
como byte para word e vice-versa, e que essa conversão aconteça somente quando necessária,
ou seja, depende de como queremos que o pacote seja lido e o que queremos levar de
informação para o destinatário. Os bits do pacote recebido ficariam dessa forma caso fossem
lidos usando a unidade double word: 0xFFFFFFFF, 0x8A7CFFFF, OxA362DAE1, 0x100608,
0x4068, 0x8A7C100, 0xa362DAE1, 0x2307FEA9 0x0, 0xFEA90, 0xFEA9

• Pense/pesquise como montar um código C para ler/montar os pacotes de dados (pela


teoria há campos de tamanhos diferentes ➔ campos de 8bits, 16 bits,... Como
tratar/resolver isso?).

Uma solução já aprendida (em C), nas aulas, para tratamento de campos com
diversos tamanhos é a implementação de structs. Que basicamente poderia agrupar vários
tipos de dados e assim realizar a transmissão/recebimento destes agrupamentos.

• Se você refizer este mesmo experimento, usando alguma máquina do laboratório que
usa Windows, o que acontece?
o O Arduino irá receber o mesmo pacote, com os mesmos dados? Explique/faça
uma análise detalhada
o O Arduino irá responder ao Windows? O pacote enviado pelo Arduino é
exatamente o mesmo de antes (ver slides anteriores)? Explique/faça um análise
detalhada.
Caso o experimento fosse realizado no Windows não mudaria a transmissão de
pacotes, nem os dados, desde que o prompt de comando seja modificado para ver e alterar a
tabela ARP, portanto a comunicação entre o Arduino e os pacotes são os mesmos. Vale
ressaltar outro ponto, os códigos C e Python importam algumas bibliotecas Linux, então de
cara não executariam no Windows.

4. CONCLUSÃO
A segunda etapa do projeto da disciplina de Redes de Computadores deu
prosseguimento aos conhecimentos adquiridos em sala de aula e na primeira parte do projeto,
focando, neste momento, no entendimento do funcionamento da tabela ARP.
Além disso, a utilização do sistema operacional Linux em uma máquina virtual e os
novos procedimentos feitos com o Arduino e o módulo ENC28J60 também agregaram
conhecimentos aos discentes, de modo a melhorar o cenário para as próximas etapas.
Por fim, é importante ressaltar a importância de correlacionar entre os conhecimentos
teóricos e práticos, visto que, nesta prática, estes foram complementares.

5. REFERÊNCIAS BIBLIOGRÁFICAS
[1] DE PAULO SOBRINHO, Elder Vicente. Redes de Computadores – Tipos de Rede.
Uberaba: UFTM, 2022. 116 slides, color.
[2] O protocol ARP - Address Resolution Protocol. Disponível em:
<https://blog.pantuza.com/artigos/o-protocolo-arp-address-resolution-protocol>. Acesso em
março de 2022.
[3] O protocol ARP. Disponível em: <https://br.ccm.net/contents/262-o-protocolo-arp>.
Acesso em março de 2022.
[4] Address Resolution Protocol (Protocolo de Resolução de Endereços). Disponível em:
<http://deptal.estgp.pt:9090/cisco/ccna1/course/module5/5.2.1.2/5.2.1.2.html#:~:text=A%20ta
bela%20ARP%20%C3%A9%20armazenada,descobrir%20o%20endere%C3%A7o%20MAC
%20correspondente.>. Acesso em março de 2022.

Você também pode gostar