Mudanças entre as edições de "RDC60807"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 732: Linha 732:
 
## <span style="color: rgb(0, 128, 0);" data-mce-style="color: #008000;">Houve perda de pacotes? Como você identificou isso?</span>
 
## <span style="color: rgb(0, 128, 0);" data-mce-style="color: #008000;">Houve perda de pacotes? Como você identificou isso?</span>
 
## <span style="color: rgb(0, 128, 0);" data-mce-style="color: #008000;">Os pacotes perdidos foram retransmitidos? Justifique.</span></span>
 
## <span style="color: rgb(0, 128, 0);" data-mce-style="color: #008000;">Os pacotes perdidos foram retransmitidos? Justifique.</span></span>
 +
#Feche o Imunes.
  
 
==PARTE 3 - Testando a capacidade do TCP de enviar dados de forma duplex==
 
==PARTE 3 - Testando a capacidade do TCP de enviar dados de forma duplex==

Edição das 17h02min de 19 de julho de 2021

  • Esta página é dedicada a descrição de roteiros de experimentos que tem por objetivo o fortalecimento de conceitos relacionados à disciplina de Redes de Computadores do curso técnico em Telecomunicações do IFSC.
  • Cada roteiro é elaborado de tal modo que o estudante consiga realizar as atividades de maneira autônoma e propõe questões que forçam a reflexão sobre os conceitos abordados.
  • Para realizar os roteiros em casa deve-se utilizar o VirtualBox e uma máquina virtual pré-configurada com todo o ferramental necessário que pode se baixada aqui:
    1. Baixe e instale o VirtualBox;
    2. Baixe a máquina virtual e salve em um diretório qualquer de sua máquina;
    3. Acesse o diretório onde salvou o arquivo Redes.ova e dê duplo clique sobre o mesmo;
    4. Irá abrir um janela do VirtualBox com a opção de Importar Appliance Virtual, deixe todas as opções padrão e clique em Importar;
    5. Irá abrir outra janela do VirtualBox: Importando Appliance...;
    6. Ao terminar sua máquina virtual estará pronta para uso. Usuário: aluno, senha: aluno.
  • Caso possua o Ubuntu já instalado em sua máquina, instale somente o Imunes com o seguinte procedimento (testado para Ubuntu 18.04 ou 20.04)
    • Abra um terminal de digite, um a um, os seguintes comandos:
      sudo apt install openvswitch-switch docker.io xterm wireshark \
          make imagemagick tk tcllib util-linux
      git clone https://github.com/imunes/imunes.git
      cd imunes
      sudo make install
      sudo imunes -p
      sudo imunes &
      
    • Habilitando o navegador Firefox nas máquinas Imunes:
      sudo apt install socat
      sudo apt-get_imunes install firefox-esr socat
      


Página principal da disciplina

Conceitos Básicos de Rede e Ferramentas Básicas de Trabalho

Objetivos

Após este laboratório o aluno deverá ser capaz de:

  • Verificar a configuração de interfaces de rede de um hospedeiro usando a ferramenta ifconfig, identificando:
    • O endereço de hardware da interface (endereço MAC);
    • O endereço IPv4 e IPv6 da Interface com as suas máscaras de rede;
  • Testar a conectividade entre dois hospedeiros usando a ferramenta ping e ganhar insight em relação aos atrasos na rede;
  • Observar a rota de pacotes IP entre dois hospedeiros usando a ferramenta traceroute;
  • Capturar pacotes de uma interface usando a ferramenta wireshark.
  • Analisar pacotes ICMP gerados pelo ping identificando:
    • o encapsulamento de pacotes,
    • as camadas de protocolos envolvidas
    • os endereços em cada camada;
    • o funcionamento básico de um protocolo (ICMP - echo request/echo reply), ganhando insight em relação as entidades de protocolos comunicantes.

Material e Pré-condições

  • Virtualbox com Máquina Virtual com a Appliance Redes instalado ou Ubuntu instalado em dual-boot.
  • Software para recortar janela da tela do computador.
  • Editor de texto para fazer relatório.

Roteiro de atividades

Você deve fazer um documento no editor de texto com os recortes de tela e comentários conforme a seguir. Anote claramente a PARTE (etapa) e o número da etapa que está sendo documentado.

Parte 1: Observando interfaces do sistema com ifconfig

O aplicativo ifconfig pode ser utilizado para visualizar a configuração ou configurar uma interface de host em redes TCP/IP. Se nenhum argumento for passado na chamada do ifconfig, o comando mostra a configuração atual de cada interface de rede.

NOTA: o ifconfig está sendo substituído pelo comando ip. A última versão do Ubuntu já não traz mais o ifconfig por default.

Consultar as páginas man ifconfig do Linux para maiores detalhes sobre o funcionamento deste aplicativo, o qual permite: *ativar/desativar a interface,

  • configurar o endereço IP,
  • definir o tamanho da MTU,
  • redefinir o endereço de hardware se a interface suporta,
  • redefinir a interrupção utilizada pelo dispositivo, entre outros.

Através do comando ifconfig' pode-se observar os resultados:

 
$ ifconfig 
eth0      Link encap:Ethernet  Endereço de HW 64:51:06:1a:f3:da  
          inet end.: 172.18.18.14  Bcast:172.18.63.255  Masc:255.255.192.0
          inet6 2804:7f5:f380:d3:1df2:5187:d2f7:6f3b  prefixlen 64  scopeid 0x0<global>
          inet6 2804:7f5:f380:d3:6869:8a08:762:83d7  prefixlen 64  scopeid 0x0<global>
          inet6: fe80::6651:6ff:fe1a:f3da/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:415237 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:118109 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:364658695 (364.6 MB) TX bytes:18315199 (18.3 MB)
          IRQ:18 

lo        Link encap:Loopback Local  
          inet end.: 127.0.0.1  Masc:255.0.0.0
          inet6: ::1/128 Escopo:Máquina
          UP LOOPBACK RUNNING  MTU:65536  Métrica:1
          pacotes RX:6688 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:6688 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:0 
          RX bytes:1057934 (1.0 MB) TX bytes:1057934 (1.0 MB) 
  • O sistema em questão possui duas interfaces de rede: eth0 e lo
  • Link encap:Ethernet: Configuração da interface Ethernet 0 (primeira)
  • Endereço de HW 64:51:06:1a:f3:da: É o endereço da placa de rede, camada 2
  • inet end.: 172.18.18.14 Bcast:172.18.63.255 Masc:255.255.192.0: Endereço IPv4 associado a interface, seu respectivo endereço de broadcast e mascara de rede
  • inet6 2804:7f5:f380:d3:1df2:5187:d2f7:6f3b prefixlen 64 scopeid 0x0<global></global>: Endereço IPv6 de escopo global, ou roteável.
  • inet6 2804:7f5:f380:d3:6869:8a08:762:83d7 prefixlen 64 scopeid 0x0<global></global>: Endereço IPv6 de escopo global, ou roteável.
  • inet6: fe80::6651:6ff:fe1a:f3da/64 Escopo:Link: Endereço IPv6 de escopo local gerado por autoconfiguração
  • UP BROADCAST RUNNING MULTICAST: Significa que a interface está ativa (UP), responde a requisições de broadcast (pode ser desabilitado no kernel) e também pode ser associada a tráfegos multicast
  • MTU: 1500: Maximum Transfer Unit – Tamanho máximo do pacote suportado pelo enlace que é do tipo Ethernet
  • Os demais parâmetros são estatísticas da respectiva interface, como por exemplo, pacotes transmitidos, recebidos etc
  • A interface lo: Qualquer tráfego que um computador envie em uma rede loopback é endereçada ao mesmo computador. O endereço IP mais usado para tal finalidade é 127.0.0.1 no IPv4 e ::1 no IPv6. O nome de domínio padrão para tal endereço é localhost. Em sistemas Unix, a interface loopback é geralmente chamada de lo ou lo0.

TAREFA: Agora utilize o comando ifconfig para verificar o estado de suas interfaces e responda:

  1. Quantas e quais interfaces de rede sua máquina possui? Liste.
  2. Quais são os endereços da camada 2 atribuído as mesmas? De onde o sistema obteve esses endereços?
  3. Quais são os endereços IPv4? De onde o sistema obteve esses endereços?
  4. Suas interfaces tem IPv6 configurado? Qual o endereço e escopo dos mesmos?
  5. Use o link Verificando a estrutura do endereço IP para explorar a estrutura do seu endereço IPv4. Recorte e cole no relatório.

Parte 2: Testando a conectividade com o ping

Aplicativo ping permite a um usuário verificar se um host remoto está ativo. É bastante utilizado para detectar problemas de comunicação na rede. O ping está baseado no envio de mensagens de solicitação de eco (echo request) e de resposta de eco (echo reply). Estas mensagens fazem parte do rol de mensagens do protocolo ICMP, que é um protocolo de reportagem de erros, a ser estudado mais tarde, componente do protocolo IP.

O ping é um dos principais comandos a disposição do administrador de rede no sentido de verificar a conectividade em rede. Por exemplo, se houver resposta de um ping a partir de um servidor remoto, significa que a máquina local está rodando corretamente o TCP/IP, o enlace local está funcionando corretamente, o roteamento entre a origem e o destino está operando, e por fim, a máquina remota também está rodando corretamente o TCP/IP.

Consultar as páginas man do ping para verificar as possibilidades de uso deste aplicativo.

Exemplo 1:

 
ping 191.36.0.94
PING 191.36.0.94 (191.36.0.94) 56(84) bytes of data.
64 bytes from 191.36.0.94: icmp_seq=1 ttl=60 time=2.46 ms
64 bytes from 191.36.0.94: icmp_seq=2 ttl=60 time=0.513 ms
64 bytes from 191.36.0.94: icmp_seq=3 ttl=60 time=0.573 ms
64 bytes from 191.36.0.94: icmp_seq=4 ttl=60 time=0.558 ms
^C
--- 191.36.0.94 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.513/1.026/2.463/0.830 ms
  1. No exemplo foram enviados quatro pacotes ICMP, cada um com um número de seqüência (icmp_seq), os quais foram recebidos com sucesso com o tempo de viagem assinalado (time)
  2. Cada pacote tem ainda um tempo de vida (ttltime to live), o qual é decrementado em cada roteador, sendo o pacote descartado quando chegar a zero; isto evita pacotes perdidos na rede
  3. Quando o ping é interrompido (CRTL-C), uma estatística é apresentada indicando o percentual de pacotes transmitidos, recebidos e perdidos
  4. O tempo de viagem (rttround trip time) mínimo (min), médio (avg) e máximo (max) é calculado, assim como o desvio padrão (mdev)

TAREFA: Como exercício envie ping para diferentes hosts e compare os tempos de resposta (documente recortando e colando as telas). Faça ping:

  1. no endereço local de loopback;
  2. servidores externos:
    www.ifsc.edu.br
    www.uol.com.br
    www.nasa.com
    
    e explique as possíveis diferenças entre os tempos de resposta dos ping realizados.
  3. Consulte as páginas man e teste o ping com os parâmetros abaixo e descreva suas funcionalidades:
    1. -c count
    2. -i intervalo
    3. -s packetsize
    4. -t ttl (para um site distante inicie com 1 e vá incrementando, observe as mensagens)
  4. Observe que também é possível realizar ping em endereços no formato IPv6, desde que seu computador tenha IPv6 configurado, por exemplo:
     ping6 tele.sj.ifsc.edu.br
    
  5. Tente o ping6 para outros sites.

Parte 3: Verificando rotas com o traceroute

O traceroute é capaz de traçar uma rota aproximada entre dois hosts. Este comando usa mensagens ICMP. Para determinar o nome e o endereço dos roteadores entre a fonte e o destino, o traceroute na fonte envia uma série de datagramas IP ordinários ao destino. O primeiro datagrama tem o TTL (time to live – tempo de vida) igual a 1, o segundo 2, o terceiro 3, e assim por diante, e inicia temporizadores para cada datagrama. Quando o enésimo datagrama chega ao enésimo roteador, este verifica que o tempo de sobrevida do datagrama acaba de terminar. Pelas regras do IP, o datagrama é então descartado e uma mensagem ICMP de advertência tempo de vida excedido é enviada a fonte com o nome do roteador e seu endereço IP. Quando a resposta chega de volta a fonte, a mesma calcula o tempo de viagem em função dos temporizadores.

O traceroute envia datagramas IP encapsulados em segmentos UDP a um host destino. Todavia escolhe um número de porta destino com um valor desconhecido (maior que 30000), tornando improvável que o host destino esteja usando esta porta. Quando o datagrama chega ao destino uma mensagem ICMP porta inalcançável é gerada e enviada a origem. O programa traceroute precisa saber diferenciar as mensagens ICMP recebidas – tempo excedido e porta inalcançável – para saber quando a rota foi concluída.

  1. Exemplo:
    sudo traceroute -I 200.135.37.65
    traceroute to 200.135.37.65 (200.135.37.65), 30 hops max, 60 byte packets
     1  192.168.1.1 (192.168.1.1)  0.225 ms  0.216 ms  0.368 ms
     2  172.18.0.254 (172.18.0.254)  1.236 ms  1.235 ms  1.343 ms
     3  hendrix.sj.ifsc.edu.br (200.135.37.65)  1.331 ms  1.313 ms  1.414 ms
    

O exemplo mostra a rota dos pacotes entre um computador do Lab. Redes (192.168.1.1) e o servidor hendrix (200.135.37.65). Observe que para cada roteador são realizados três amostras de tempo de ida e volta. Veja pelo mapa da rede do Campus São José que entre estes dois computadores, sistemas finais, existem dois roteadores intermediários, máquina do professor e Switch camada 3 (VLANs).

  1. Tarefa: Traçar a rota dos pacotes entre seu computador (no caso a VM) e diferentes hosts:
    1. servidor tele.sj.ifsc.edu.br do IFSC
    2. outros servidores.
  2. Explique as possíveis diferenças entre os tempos de resposta de cada uma das amostras do traceroute
  3. Explique as linhas com o caractere *.
  4. Observe que também é possível realizar traceroute em endereços no formato IPv6, desde que seu computador tenha IPv6 configurado, por exemplo:
     traceroute -I6 ipv6.br
    
  5. Tente o traceroute no IPv6, desde que seu computador tenha IPv6 configurado, para outros sites.

Parte 4: Usando as ferramentas ping, ifconfig e traceroute em um cenário com o imunes

Elaborar um cenário com 2 PCs interligados por dois roteadores,: Rede básica

  1. Execute um ifconfig em cada PC e nos roteadores. Discuta os resultados no caso dos roteadores.
  2. Execute um ping do PC1 em direção ao PC2;
  3. Modifique o retardo de um dos links para 50 ms;
  4. Execute um traceroute entre PC1 e PC2 e explique o resultado obtido quando comparado com a figura.

Wireshark e encapsulamento

Objetivos

Após este laboratório o aluno deverá ser capaz de:

  • utilizar a ferramenta wireshark para captura de pacote:
    • funções básicas de filtragem na captura e no display;
    • verificação de estruturas de pacotes;
  • consolidar o conceito de protocolo e de camadas de protocolos através da análise de troca de pacotes com ping e traceroute usando:
    • as janelas com detalhes dos pacotes e encapsulamentos;
    • a opção de flow graph para visualizar as trocas de mensagens.

Sobre o analisador Wireshark

O analisador de pacotes exibe os conteúdos de todos os campos dentro de uma mensagem de protocolo. Para que isso seja feito, o analisador de pacotes deve “entender” a estrutura de todas as mensagens trocadas pelos protocolos.

Suponha que estamos interessados em mostrar os vários campos nas mensagens trocadas pelo protocolo HTTP na Figura 5. O analisador de pacotes entende o formato dos quadros Ethernet, e desta forma pode identificar o datagrama IP dentro de um quadro. Ele também entende o formato do datagrama IP, para que ele possa extrair o segmento TCP dentro do datagrama IP. Ele entende a estrutura do segmento TCP, para que possa extrair a mensagem HTTP contida no segmento. Finalmente, ele entende o protocolo HTTP e então, por exemplo, sabe que os primeiros bytes de uma mensagem HTTP contém a cadeia “GET”, “POST” ou “HEAD”.

Nós utilizaremos o sniffer Wireshark (http://www.wireshark.org) para estes laboratórios, o que nos permite exibir os conteúdos das mensagens sendo enviadas/recebidas de/por protocolos em diferentes camadas da pilha de protocolos. Tecnicamente falando, Wireshark é um analisador de pacotes que pode ser executado em computadores com Windows, Linux/UNIX e MAC.

É um analisador de pacotes ideal para nossos laboratórios, pois é estável, tem uma grande base de usuários e é bem documentado incluindo um guia de usuário (http://www.wireshark.org/docs/wsug_html/), páginas de manual (http://www.wireshark.org/docs/man-pages/), e uma seção de FAQ detalhada (http://www.wireshark.org/faq.html), funcionalidade rica que inclui a capacidade de analisar mais que 500 protocolos, e uma interface com o usuário bem projetada. Ele funciona em computadores ligados a uma Ethernet para conectar-se à Internet, bem como protocolos ponto a ponto, tal como PPP.

OBS: Se o wireshark estiver instalado em sua máquina, para chamá-lo a partir de um terminal deve fazer:

 sudo wireshark

ETAPA 1: Identificando os campos da interface do Wireshark

Quando você executar o programa Wireshark, a interface com o usuário exibida na Figura abaixo aparecerá. Inicialmente, nenhum dado será apresentado nas janelas. A interface do Wireshark tem seis componentes principais:

  1. Os menus de comandos são localizados no topo da janela. Por enquanto, interessam apenas os menus File e Capture. O menu File permite salvar dados de capturas de pacotes ou abrir um arquivo contendo dados de capturas de pacotes previamente realizadas, e sair da aplicação. O menu Capture permite iniciar uma captura de pacotes;
  2. A barra de ferramentas contém os comandos de menu que são mais frequentemente utilizados. Há atalhos para abrir ou salvar dados de captura de pacotes e para iniciar ou parar uma captura de pacotes;
  3. Abaixo da barra de ferramentas, está o campo de filtragem de pacotes exibidos. Nele podem ser digitados nome de protocolo ou outra informação apresentada na janela de listagem de pacotes. Apenas os pacotes que correspondem ao filtro são exibidos;
  4. A janela de listagem de pacotes apresenta um resumo de uma linha para cada pacote capturado, incluindo o número do pacote (atribuído pelo Wireshark; este não é o número do pacote contido no cabeçalho de qualquer protocolo), o tempo que o pacote foi capturado, os endereços fonte e destino do pacote, o tipo de protocolo, e informação específica do protocolo contida no pacote. A lista de pacotes pode ser ordenada conforme qualquer uma destas categorias clicando no nome de uma coluna correspondente. O campo tipo do protocolo lista o protocolo de mais alto nível que enviou ou recebeu este pacote, i.e., o protocolo que é a fonte ou o último sorvedouro para este pacote;
  5. A janela de detalhes de cabeçalho de pacotes fornece detalhes sobre o pacote selecionado na janela de listagem de pacotes. Para selecionar um pacote, basta clicar sobre ele com o botão esquerdo do mouse na janela de listagem de pacotes. Os detalhes apresentados incluem informações sobre o quadro Ethernet e o datagrama IP que contém o pacote. A quantidade de detalhes exibida pode ser expandida ou contraída. Se o pacote foi carregado sobre TCP ou UDP, detalhes correspondentes também são apresentados, os quais também podem ser contraídos ou expandidos. Finalmente, detalhes sobre o protocolo de mais alto nível que enviou ou recebeu este pacote também são apresentados;
  6. A janela de conteúdo de pacotes mostra o conteúdo inteiro do quadro capturado, nos formatos ASCII e hexadecimal.

Figura 3 - Interface com o usuário do Wireshark

ETAPA 2 - Verificando pacotes do ping (ICMP REQUEST/REPLY)

Etapa 1 - Treinamento
  1. Inicie o Wireshark. Inicialmente as janelas estarão vazias, pois não há captura de pacotes em progresso;
      sudo wireshark
    
  2. Para iniciar uma captura de pacotes, selecione o menu Capture e depois Interfaces. Provavelmente sua interface de rede será a 'enp0s3, duplo clique sobre a mesma.
  3. Isso faz com que a janela de interfaces de rede disponíveis seja apresentada (Figura 4);
    Figura 4 - Interfaces de rede no Wireshark
  4. Como nada está acontecendo na rede, a janela apresenta o conteúdo vazio;
  5. Em outro terminal, execute um comando ping (endereço na saída da nossa rede - ver aula anterior):
      ping -c 3 200.237.201.153
    
  6. Ao voltar para a janela do Wireshark, houve a captura de todos os três pacotes envolvidos no process;
  7. Pare a captura de pacotes:
      Capture >> Stop
    
  8. Para testar as capacidades de filtragem, vamos inserir a cadeia “icmp” (sem as aspas e em minúsculo) no especificação do filtro de exibição e depois selecionar Apply (ou Enter). Observe que somente os pacotes envolvidos no ping estão sendo mostrados. Os resultados obtidos devem ser similar a tela mostrada na Figura 5.
  9. Selecione a primeira mensagem ECHO REQUEST: as informações dos cabeçalhos do quadro Ethernet, do datagrama IP, do pacote ICMP aparecem na janela de cabeçalhos de pacotes. É possível ver os detalhes, expandido ou comprimindo os itens com um clique na seta ao lado deles. Observe:
    1. Endereço IP de origem e de destino;
    2. Endereço MAC de origem e destino.
  10. Selecione uma mensagem ECHO REPLY. Observe:
    1. Endereço IP de origem e de destino;
    2. Endereço MAC de origem e destino.
  11. Saia do Wireshark.

Figura 5 - Tela Wireshark - Ping

Etapa 2 -- Tarefa
  1. Abra o Wireshark em modo captura.
  2. Abra um terminal e faça um "ping -c 3" para um site conhecido (você pode usar o nome: www.ifsc.edu.br por exemplo).
  3. Pare a captura de pacotes no Wireshark.
  4. Aplique um filtro icmp no display. Recorte a tela observada e indique os pacotes ICMP ECHO REQUEST. Anote quem são os endereços IP e MAC que aparecem no pacote IP e Frame Ethernet.
  5. Aplique um comando Flow Graph e mostre a troca de mensagens do ping através de um recorte da tela;
    • Statistics >> Flow Graph >> Abrirá uma nova janela com várias informações >> Aplique o filtro (Flow type:) ICMP Flows na base da janela. Salve esta tela no relatório.
    • Feche esta janela.
  6. Crie um filtro para mostrar somente pacotes icmp que saem da sua máquina (ver filtro ip.src). Faça um recorte das telas de criação do filtro (mostrando o filtro).

Desvendando o HTTP com Wireshark - Básico

Fonte base: Wireshark - HTTP

Objetivos

  • Baseado na pequena introdução ao Wireshark estamos prontos para utilizar o mesmo para investigar protocolos em operação.
  • Explorar vários aspectos do protocolo HTTP:
    1. A interação básica GET/resposta do HTTP.
    2. A interação manual GET/resposta do HTTP utilizando o telnet.
    3. Diferenciação do comportamento das versões 1.0 e 1.1 do protocolo HTTP.

A Interação Básica GET/Resposta do HTTP

  1. Vamos iniciar a nossa exploração do HTTP baixando um arquivo em HTML simples - bastante pequeno, que não contém objetos incluídos. Faça o seguinte:
    1. inicie o navegador;
    2. limpe o cache do mesmo (teclas de atalho para o Firefox: Ctrl + Shift + Del);
    3. inicie o Wireshark, como descrito no Ferramentas básicas;
    4. inicie a captura de pacotes;
    5. digite o seguinte URL no navegador http://tele.sj.ifsc.edu.br/~odilson/RED29004//RED29004.html;
    6. pare a captura de pacotes;
    7. digite “http” (somente as letras, sem as aspas) na caixa de texto de especificação do filtro de exibição, de tal forma que apenas as mensagens HTTP capturadas serão exibidas na janela de listagem de pacotes. (Só estamos interessados em HTTP desta vez, e não desejamos ver todos os pacotes capturados).
      Fig.1 Requisição e Resposta HTTP
  2. O exemplo da figura 1 mostra na janela de listagem de pacotes duas mensagens HTTP capturadas:
    1. A mensagem GET (do seu navegador para o servidor web www.sj.ifsc.edu.br) e a mensagem de resposta do servidor para o seu navegador.
    2. A janela de conteúdos de pacotes mostra detalhes da mensagem selecionada (neste caso a mensagem HTTP GET /~odilson/RED29004//RED29004.html, que está em destaque na janela de listagem de pacotes).
    3. A mensagem HTTP transportada em um segmento TCP, que é carregado em um datagrama IP, que é levado em um quadro Ethernet com 5728 bits no fio. Isso é observado de baixo para cima na janela de detalhes do cabeçalho do pacote selecionado. O Wireshark exibe informações sobre o quadro, IP, TCP e HTTP. Você deve expandir as informações, por exemplo, do HTTP clicando na seta ao lado esquerdo de “Hypertext Transfer Protocol”. Observando as informações das mensagens HTTP GET e de resposta. Você consegue inclusive enxergar a mensagem mostrada no navegador: RED29004! Página de teste.
  3. Responda às seguintes perguntas e imprima as mensagens GET e a resposta e indique em que parte da mensagem você encontrou a informação que responde às questões.
    1. O seu navegador executa HTTP 1.0 ou 1.1? Com uma mensagem 200 OK selecionada, na janela central, clique na seta ao lado de Hypertext Transfer Protocol
    2. Qual a versão de HTTP do servidor? Com uma mensagem GET selecionada, na janela central, clique na seta ao lado de Hypertext Transfer Protocol
    3. Quais idiomas (se algum) o seu navegador indica ao servidor que pode aceitar?
    4. Qual o endereço IP do seu computador?
    5. E do servidor tele.sj.ifsc.edu.br?
    6. Qual o número da porta utilizada no seu computador?
    7. E do servidor tele.sj.ifsc.edu.br?
    8. Qual o código de status retornado do servidor para o seu navegador? É uma mensagem contendo um texto em inglês seguidna por um número. São mensagen padronizadas do protocolo HTTP.
    9. Quando o arquivo em HTML que você baixou foi modificado no servidor pela última vez?
    10. Encontre a mensagem RED29004! Página de teste. Vá clicando nas setas da janela central do wireshark. Onde (em qual campo) encontra-se?

Interação Básica GET/Resposta do HTTP usando TELNET e REQUISIÇÃO MANUAL

  1. Vamos repetir o acesso aos links acima, porém sem usar o navegador. A ideia é que nós façamos o papel de navegador. Isso deve ser feito com os seguintes passos:
    1. Coloque o Wireshark para capturar pacotes
    2. Abra um terminal de texto no Linux.
    3. Execute este comando:
      telnet -4 tele.sj.ifsc.edu.br 80
      
    4. Após aparecer esta linha:
      Trying 200.135.37.75...
      Connected to tele.sj.ifsc.edu.br.
      Escape character is '^]'.
      
      digite o seguinte:
      GET /~odilson/RED29004//RED29004.html HTTP/1.0
      
      em seguida
      <Enter> <Enter>
      
    5. Anote a página html que foi enviada como resposta.
    6. Quanto tempo levou para fechar a conexão (após o duplo Enter)? Foi imediato?
    7. Refaça um pedido em que o recurso é inexistente no servidor (ex: GET /~odilson/RED29004//abacaxi). Observe a resposta. Qual é o código da mensagem recebida?
  2. Refaça a conexão com o servidor:
    telnet -4 tele.sj.ifsc.edu.br 80
    
    1. Refaça o pedido, mas agora utilizando o HTTP/1.1, e tente inferir a diferença da versão 1.0. Note que o GET nesta versão deve ser realizado com o campo Host:
      GET /~odilson/RED29004//RED29004.html HTTP/1.1
      Host: tele.sj.ifsc.edu.br
      <enter>/<enter>
      
    2. Quanto tempo levou para fechar a conexão (após o duplo Enter)?
  3. Refaça a conexão com o servidor:
    telnet -4 tele.sj.ifsc.edu.br 80
    
    1. Refaça o pedido, mas agora utilizando o HTTP/1.1:
      GET /~odilson/RED29004//RED29004.html HTTP/1.1
      Host: tele.sj.ifsc.edu.br
      <enter>/<enter>
      
    2. Antes do fechamento da conexão, faça um novo pedido na conexão já aberta:
      GET /~odilson/RED29004//RED29004_arq3.html HTTP/1.1
      Host: tele.sj.ifsc.edu.br
      <enter>/<enter>
      
  4. O que explica a diferença de tempo para fechamento de conexão entre as versões HTTP 1.0 e 1.1?

Desvendando o HTTP com Wireshark - AVANÇADO

Objetivos

  • Explorar GET Condicional/Resposta no protocolo HTTP.
  • Analisar documentos HTML com Objetos Incluídos
  • Comparar as mensagens nos protocolos HTTP X HTTPS.

Fonte base

PARTE 1 - A Interação HTTP GET Condicional/Resposta

A maioria dos navegadores web tem um cache (seção 2.2.6 do livro) e, desta forma, realizam GET condicional quando pretendem baixar um objeto HTTP já presente em seu cache.

Execute os seguintes passos:

  1. Inicie o Firefox;
  2. Limpe o cache do seu navegador(Ctrl + Shift + Del);
  3. Inicie o Wireshark;
  4. Digite o URL no navegador http://tele.sj.ifsc.edu.br/~odilson/RED29004//RED29004.html.
  5. Seu navegador deve exibir um arquivo em HTML muito simples com duas linhas;
  6. Pressione o botão refresh (F5) no navegador (ou digite o URL novamente);
  7. Pare a captura de pacotes, e digite “http” na caixa de texto de especificação de filtro, para que apenas as mensagens HTTP sejam apresentadas na janela de listagem de pacotes.
    • Se você realizou o procedimento corretamente, você visualizará um total de 6 mensagens no Wireshark: três GETs e três respostas.
    • Obs: Para finas de análise, despreze a solicitação e resposta relativa ao favicon.ico, que é relativa ao download do ícone do IFSC.

Tarefa:

  1. Inspecione o conteúdo da primeira mensagem HTTP GET do seu navegador para o servidor tele.sj.ifsc.edu.br. Você vê uma linha “If-Modified-Since”?
  2. Inspecione o conteúdo da primeira resposta do servidor. O servidor retornou explicitamente o conteúdo do arquivo? Como você pode dizer isso?
  3. Agora inspecione o conteúdo da segunda mensagem HTTP GET do seu navegador para o servidor. Você vê uma linha “If-Modified-Since”? Caso a resposta seja afirmativa, qual informação segue o cabeçalho “If-Modified-Since”?
  4. Qual é o código de status e a frase retornada do servidor na resposta à segunda mensagem HTTP GET? É diferente do código de retorno da primeira mensagem?
  5. O servidor retornou explicitamente o ojeto HTTP na segunda requisição? Explique.
  6. Qual o tamanho da primeira e segunda mensagem de retorno do servidor? O que explica a diferença de tamanho?

PARTE 2 - Documentos HTML com Objetos Incluídos

Agora que vimos como o Wireshark mostra o tráfego capturado para arquivos em HTML simples, também podemos observar o que acontece quando o seu browser baixa um arquivo com objetos incluídos, no nosso exemplo, imagens que estão armazenadas em outros servidores.

Faça o seguinte:

  1. Inicie o Firefox;
  2. Limpe o cache do seu navegador;
  3. Inicie o Wireshark;
  4. Digite o URL no navegador http://tele.sj.ifsc.edu.br/~odilson/RED29004/RED29004_arq3.html;
  5. Seu navegador deve exibir um arquivo pequeno em HTML com duas imagens incluídas.
    • Estas duas imagens estão referenciadas no objeto HTML. Isto é, as imagens não estão contidas no objeto HTML e sim referenciadas no mesmo, um URL para cada imagem.
    • Como discutido no livro, seu navegador terá que baixar estas imagens dos locais correspondentes.
  6. Verifique o código fonte da página, clicando com o botão direito do mouse sobre ela no navegador e em inspecionar.
    • Observe os links dentro do código html.
  7. Digite o URL no navegador http://tele.sj.ifsc.edu.br/~odilson/RED29004/RED29004_arq4.html.
  8. Seu navegador deve exibir um arquivo pequeno em HTML com cinco imagens incluídas.
    • Estas cinco imagens,diferentemente do caso anterior, estão depositadas no próprio sítio do professor;
  9. Verifique o código fonte da página, clicando com o botão direito do mouse sobre ela no navegador e em inspecionar.
    • Observe os links dentro do código html.
  10. Pare a captura de pacotes, e digite “http” na caixa de texto de especificação de filtro, para que apenas as mensagens HTTP seja exibidas.

Tarefa:

  1. Quantas mensagens HTTP GET foram enviadas pelo seu navegador em cada acesso?
  2. Para quais endereços na Internet (URL) estas mensagens foram enviadas em cada acesso?
  3. Você consegue dizer se o seu navegador baixou imagens com ou sem paralelismo? Explique e diferencie o comportamento em cada um dos casos, em sítios diferentes e no mesmo sítio.

PARTE 3 - Segurança com HTTPS

Para finalizar, vamos capturar sequências de mensagens HTTPS, somente a título de comparação.

Execute os seguintes procedimentos:

  1. Inicie o Firefox;
  2. Limpe o cache do seu navegador;
  3. Inicie o Wireshark;
  4. Digite o seguinte URL no navegador https://www.ssllabs.com/ssltest/;
  5. Pare a captura de pacotes e digite "ssl" na caixa de texto de especificação de filtro, para que apenas as mensagens criptografadas sejam exibidas.

Tarefa:

  1. Compare a sequência de troca de mensagens (GET e resposta) entre o HTTP (das seções anteriores) com o ssl, existe alguma similaridade?
  2. Que tipos de campos são mais presentes nesse tipo de mensagens?
  3. Você consegue identificar o conteúdo de alguma nas mensagens ssl, como no caso das mensagens HTTP?

Serviço de Nomes (DNS)

Objetivos

O Domain Name System (DNS) traduz nomes de hosts em endereços Internet Protocol (IP), preenchendo uma lacuna crítica na infraestrutura da Internet. Neste laboratório, observaremos mais de perto:

  1. O lado cliente do DNS.
  2. Uma pequena análise do protocolo e
  3. Consultas AAAA

Lembre-se de que o papel do cliente no DNS é relativamente simples:

  • Um cliente envia uma consulta ao seu DNS, e obtém uma resposta.
  • Muito pode acontecer “por baixo dos panos”, de forma invisível aos clientes DNS, enquanto os servidores DNS, organizados hierarquicamente, comunicam-se entre si para, ou recursivamente ou iterativamente, resolver uma consulta DNS de um cliente.
  • Uma resposta é recebida deste servidor.

Fonte Base

PARTE 1: Consulta simples ao DNS gerada a partir de um comando ping

O comando ping pode ser usado tanto com um endereço IP como com um nome de host.

  • Em última instância, ele sempre enviará pacotes para um endereço IP.
  • No caso de ser usado o endereço de host, ele tentará resolver (mapear) este nome em um endereço IP usando um servidor DNS (local).
  • Ele gera uma pergunta para o servidor (ou para os servidores, caso exista mais de um configurado).
  • Esta experiência mostra como verificar os servidores instalados e, através de uma captura de pacote mostra a estrutura dos cabeçalhos DNS.
  1. Inicialmente consulte e anote quem são os servidores DNS instados na sua máquina. É para estes servidores que serão conduzidas as perguntas DNS:
    nmcli dev show | grep DNS
    
  2. Inicie o wireshark para capturar os pacotes.
  3. Execute o ping para um endereço de host conhecido
    ping www.polito.it
    
  4. Pare a captura de pacotes no Wireshark e coloque um filtro de display para mostrar apenas mensagens DNS e de ICMP
    dns || icmp
    
  5. Observe os pacotes capturados.
    • Em particular foque no pacote de pergunta que deve ser similar ao mostrado abaixo e deve estar direcionado a um dos servidores DNS. Nos Flags do header do pacote DNS é possível observar que é um QUERY (pergunta) a ser resolvido de forma recursiva.
    • A pergunta propriamente dita está no campo QUERIES, onde é colocado o nome a ser resolvido e o tipo do registro solicitado (tipo A -- Address) que indica resolução de nome. Estrutura de uma pergunta simples DNS
    • Foque agora um pacote de resposta do servidor para o cliente.
      • Deve ter uma estrutura similar ao mostrado abaixo.
      • Nos Flags do header do pacote DNS é possível observar que é uma resposta.
      • A resposta propriamente dita está no campo ANSWERS (ele também repete a pergunta no campo QUERIES).
      • Note que podem haver vários registros (RR) retornados, cada um com um tipo.
      • No exemplo abaixo também é retornada uma lista de servidores autorizados (RR tipo NS).
      • Também é retornado o endereço IP destes servidores através de RRs adicionais do tipo A (inclusive endereços IPv6).
        Estrutura de uma resposta simples DNS
      • Perguntas a serem respondidas, baseado nos pacotes "Standard query" e "Standard query response":
        1. Quem são os servidores DNS da sua máquina?
        2. O ping gerou pergunta para cada um deles, ou somente para um?
        3. Qual o tipo da RR associada a pergunta (Queries). O que significa?
        4. Qual endereço IP retornado para o www.polito.it?
        5. Qual endereço IP usado no ping (ver pacote REQUEST ICMP)?
        6. Qual protocolo de transporte, camada 4, que foi usado para transportar as mensagens de aplicação DNS?
        7. Quais os servidores autorizados (Authoritative nameservers) foram repassados em resposta a sua consulta?
      • Logo após o primeiro ping existe mais uma consulta DNS. Esta pergunta é realizada através de uma mensagem do tipo PTR. O ping está tentando verificar qual é o nome da máquina que realmente está respondendo. É o DNS reverso, nesse tipo de consulta se fornece um IP e o servidor devolve o nome da máquina.
      • Perguntas a serem respondidas:
        1. Qual o IP que se pretende resolver?
        2. Qual o nome retornado?
        3. O nome retornado é www.polito.it? Sim ou não? Explique.

PARTE 2 - Consultas DNS por meio de ferramentas especializadas

  1. Usando o programa host ou dig, que são executados no terminal, descubra e anote no relatório os endereços IP associados aos seguintes nomes de hosts (máquinas):
    • mail.ifsc.edu.br
    • www.google.com
    • www.gmail.com
  2. Agora descubra e anote no relatório quem é o servidor DNS responsável por cada um dos domínios dos nomes acima.
    • Para isso consulte o valor do registro NS associado a esses domínios.
    • Por exemplo, com o programa host ou dig isso pode ser feito assim:
      host -t ns ifsc.edu.br
      dig -t ns ifsc.edu.br
      
  3. O serviço DNS fornece outras informações além do endereço IP associado a cada nome de domínio e/ou máquina.
    • Por exemplo, como ele pode-se descobrir que host recebe emails em um determinado domínio.
    • Isso é utilizado pelos MTA (Mail Transfer Agent) mundo afora para entregarem emails para seus destinatários (lembre que isso se faz com o protocolo SMTP).
    • Para descobrir essa informação, deve-se consultar o registro MX (Mail eXchange) de um domínio.
    • Novamente as ferramentas a ser utilizada nesse caso podem ser host ou dig.
    • Por exemplo:
      host -t mx ifsc.edu.br
      dig -t mx ifsc.edu.br
      
      Descubra e anote no relatório quem é o servidor de emails nos seguintes domínios:
    • gmail.com
    • hotmail.com
    • ifsc.edu.br
  4. Outra informação útil guardada por servidores DNS é a tradução de endereço IP para nome de domínio.
    • Isso é chamado de tradução reversa (ou DNS reverso).
    • Usando os programas de diagnóstico já vistos, isso pode ser feito assim:
      dig -x 200.135.37.65
      
      ... o dig tem um resultado um pouco mais carregado que o utilitário host, porém neste caso é mais prático.
    • Veja o resultado da consulta logo após a linha ;; ANSWER SECTION:.
    • Experimente fazer a resolução reversa para cada um dos IP obtidos nas consultas realizadas no primeiro exercício desta atividade.
    • Pode-se também usar a variante do dig para respostas curtas:
      dig -x 200.135.37.65 +short
      
  5. Faça uma consulta iterativa com dig e responda:
    dig @c.root-servers.net. +trace mail.ru.
    
    1. Qual foi o RLD (Root Level Domain) consultado?
    2. Qual o TLD (Top Level Domain) consultado?
    3. Qual o SLD (Second Level Domain) consultado?
    4. Como você sabe que foram esses os LDs consultados?
  6. Consultando um servidor explícito(@)
    dig @j.root-servers.net. +trace www.sj.ifsc.edu.br.
    
  7. AVANÇADO. Execute somente se tiver curiosidade. Como explicado durante a aula e visto no exercício anterior, DNS é um banco de dados distribuído. Isso quer dizer que suas informações estão espalhadas em milhares (ou milhões?) de servidores DNS mundo afora. Cada servidor DNS mantém os dados dos domínios por que é responsável. Será que é possível rastrear todos os servidores DNS que devem ser consultados até chegar ao servidor do domínio procurado? Posto de outro modo, vamos fazer todo o processo de requisição interativa, do exercício anterior, manualmente, ou seja, descobrir quem é o Root Level Domain, o Top Level Domain e o Second Level Domain. Anote no relatório.
    1. Descubra quem são os servidores raiz (topo de hierarquia DNS):
      host -t ns .
      dig -t ns .
      
    2. Escolha um dos servidores TLD listados, e use-o para fazer as consultas. Por exemplo:
      host -v -t a www.sj.ifsc.edu.br. j.root-servers.net.
      
      ... e observe a seção ;; AUTHORITY SECTION:. Ele contém a listagem de servidores DNS que podem atender sua consulta.
    3. Continue fazendo as consultas aos servidores DNS listados, até conseguir traduzir o nome requisitado. Por exemplo:
      host -v -t a www.sj.ifsc.edu.br. b.dns.br
      
    4. Quantos servidores DNS foram necessários consultar no total?

Algumas consultas AAAA

Vamos expandir um pouco nossos horizontes e fazer algumas consultas envolvendo IPv6.

  1. No terminal de sua máquina faça uma consulta e responda: qual o endereço IPv6 dos hosts? Por exemplo:
    dig AAAA google.com
    host -t AAAA google.com
    
    1. webmail.ufsc.br
    2. www.sj.ifsc.edu.br
    3. www.nyt.com
    4. ipv6.br
    5. www.microsoft.com
  2. Agora vamos fazer a consulta reversa. Qual é o nome de host dos seguintes endereços? Por exemplo:
    dig -x 2001:12ff::10
    dig -x 2001:12ff::10 +short
    host 2001:12ff::10
    
    1. 2801:84:0:2::10
    2. 2001:12d0:0:126::183:244
    3. 2001:12ff::10

Exemplos de arquivos de um Second Level Domain fictício

  • Exemplo de arquivos de configuração de um servidor BIND

/etc/bind/db.redes

$TTL	86400
@	IN	SOA	ns.redes.edu.br. root (
		     2016090900		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			  86400 )	; Negative Cache TTL
;
@	IN	NS	ns.redes.edu.br.
@	IN	MX	10	mail.redes.edu.br.
$ORIGIN redes.edu.br.
ns	A	192.168.1.101
www	A	192.168.1.102
www	A	192.168.1.103
www	A	192.168.1.104
www	A	192.168.1.105
www	A	192.168.1.106
www	A	192.168.1.107
ftp	A	192.168.1.108
mail	A	192.168.1.109

/etc/bind/db.2.168.192 (Zona reversa)

$TTL	86400
@	IN	SOA	ns.redes.edu.br. root (
		     2016090900		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			  86400 )	; Negative Cache TTL
;
	IN      NS      ns.redes.edu.br.
101       IN      PTR     ns.redes.edu.br.
102       IN      PTR     www.redes.edu.br.
108       IN      PTR     ftp.redes.edu.br.
109       IN      PTR     mail.redes.edu.br.

Desvendando o UDP - Básico

Objetivos

  • Familiarizar-se com o UDP
  • Entender a estrutura do pacote UDP
  • Entender o conceito de portas
  • Entender o conceito de multiplexação

Fonte Base

Parte 1 - Fluxo único UDP

  1. Usaremos dois terminais para execução do experimento.
    • Um terminal escutará na porta 5000 e a outro transmitirá uma mensagem nessa porta. Os processos de transmissão e recepção podem ocorrer simultaneamente, em terminais distintos.
  2. Abrir duas janelas de terminal.
  3. Abrir o Wireshark, interfaces any, para escuta das portas no protocolo UDP usando um filtro:
    udp.port==5000
    
  4. No primeiro terminal digitar:
    netcat -u -l -p 5000
    
  5. No segundo terminal, que irá transmitir para a porta 5000 aberta no primeiro terminal, executa:
    netcat -u IP_DEST 5000
    
    onde IP_DEST é o número IP de sua própria máquina.
    • Em seguida escreve no terminal uma mensagem de até 20 caracteres, ao teclar <enter> a mensagem será enviada.</enter>
    • O wireshark deve ter capturado os pacotes UDP.
  6. Identifique e anote os seguintes dados na captura do wireshark:.
    1. PORTAS FONTE E DESTINO.
    2. Campo de protocolo no pacote IP (Na janela central, clique sobre o Internet Protocol e observe o campo Protocol).
    3. Campo de tamanho (anote o tamanho) e checksum no pacote (datagrama) UDP (Na janela central, clique sobre o User Datagram Protocol).
    4. O campo de dados no pacote UDP.
  7. Transmita sequencialmente várias mensagens, devendo identificar múltiplos datagramas UDP.
  8. PERGUNTAS baseadas na captura e em seus conhecimentos teóricos:
    1. Qual o valor de cada campo do cabeçalho do pacote UDP?
    2. Qual o tamanho máximo do número de porta?
    3. Qual o tamanho máximo da área de dados (payload) do pacote?
    4. Qual o número identificador de protocolo UDP no pacote IP? (igual acima)
    5. Em algum momento foi identificado algum procedimento para estabelecimento de conexão?
    6. Em algum campo do UDP existe numeração de mensagens?

Parte 2 - Experimento com UDP - MUX e DEMUX

  1. Conceber um adendo ao experimento anterior para demonstrar a multiplexação e demultiplexação de informação.
    • Obs.:No experimento anterior o terminal 1 fazia o papel de servidor e o terminal 2 o papel de cliente.
    • Obs.:Lembre-se que a demultiplexação permitirá que diferentes fluxos sejam encaminhados para diferentes processos. Nesse sentido, por exemplo, em uma mesma máquina pode-se abrir dois os mais terminais onde, em cada um deles, pode-se gerar ou aguardar fluxos distintos (diferenciados pelas portas).
    1. 1 servidor com 2 clientes enviando mensagens distintas.
    2. 2 servidores (portas distintas) com 1 cliente para cada servidor, enviando mensagens distintas.
  2. Capture os pacotes com o Wireshark e caracterize quais pacotes pertencem a cada fluxo (porta).


Desvendando o TCP - Básico

Objetivos

  • Verificar o comportamento básico do Protocolo TCP:
    • Fase de Estabelecimento de Conexão
    • Troca de Dados
    • Finalização da Conexão

Fonte Base

Verificando o estabelecimento, troca de dados e finalização da conexão

  1. O roteiro será executado sobre 2 máquinas virtuais, através do uso do Imunes. Abra o Imunes e crie uma rede extremamente simples com somente dois PCs, conforme a figura.
    2PCs.png
  2. Execute o Imunes e monte a rede conforme a figura.
  3. Inicie a simulação:
     Experiment >> Execute
    
  4. Executar no pc2 um servidor TCP aguardando na porta 5555 na forma:
     netcat -l -n -vv -p 5555
    
    • Dica: para copiar o comando para o terminal do Imunes: copie da Wiki e cole clicando sobre a rodinha do mouse.
    • Em uma comunicação TCP um processo é servidor (aguarda pedido de conexão) e um processo é o cliente, que gera um pedido de conexão
  5. Executar o Wireshark na eth0 do pc1 (clique com o botão direito do mouse sobre o ícone do pc1 >> Wireshark >> eth0).
    • Aplique um filtro "tcp" para limpar a apresentação.
  6. Executar no pc1 um cliente TCP que solicita uma conexão ao servidor:
      netcat -vv -n 10.0.0.21 5555
    
  7. Enviar uma pequena mensagem de 5 caracteres, e no final teclar ENTER e depois CTRL+C.
    • O CTRL-C encerra a conexão no netcat.
  8. Observe que no Wireshark todos pacotes TCP, desde o estabelecimento até a desconexão devem estar capturados. Um exemplo dessa captura encontra-se na Figura 2.
Fig.2 -- Protocolo TCP
  1. O processo de conexão do TCP envolve a troca de 3 pacotes e é sempre iniciado pelo cliente. O cliente envia um pacote SYN, o servidor responde com um SYN-ACK e o cliente finalmente responde com ACK. Observe estes pacotes no wireshark.
  2. Baseado na captura de pacotes realizada responda:
    1. Quais foram as portas de origem e destino usadas?
    2. Quais os tamanhos das janelas informadas, tanto pelo cliente quanto pelo servidor?
    3. Quais os números de sequência informado pelo Wireshark e o número que consta no campo Data em bytes. Qual é relação entre esses números?
    4. Em qual mensagem (número) aparece a texto que você digitou?
    5. Qual o número identificador de protocolo TCP no pacote IP? (Na janela central, clique sobre o Internet Protocol e observe o campo Protocol).
    • Um dos objetivos do processo de conexão é sincronizar o número de sequência. Cada lado fica sabendo do número de sequência do outro. O número de sequência não começa com.
    • O Wireshark converte a numeração para mostrar a partir do 0 mas o número inicial de sequência é criado randomicamente por cada lado. (ver [1])
  3. Volte ao Wireshark e analise o processo de termino da conexão (iniciado pelo cliente neste caso, no momento do CTRL+C).
    • Note que qualquer uma das partes pode realizar esta finalização.
    • Pode ser observado que o cliente envia um pacote TCP com flag FIN.
    • O servidor responde com um FIN-ACK.
    • Finalmente o cliente faz um ACK.
    • Veja se confere com a figura Término de conexão TCP ou com os slides apresentados no início da aula.
  4. Gere com o Wireshark um diagrama da comunicação, ou diagrama de troca de mensagens. Insira-o no relatório:
      Statistics >> Flow Graph >> OK
    
  5. Analise esse diagrama, observando qual pacote contém os dados, ou seja, o texto que você digitou.
  6. Analise também o estabelecimento e fechamento de conexão, confere com o apresentado na teoria?

Desvendando o TCP - Número de Sequência, Controle de Erros e Funcionamento Full-Duplex

Objetivos

  • Verificar alguns mecanismos do protocolo TCP:
    • Controle de Erros: Significado de Número de Sequência, ACK
    • Controle de Fluxo: Significado do campo Windows Size; Funcionamento do controle de fluxo;
    • Comportamento Full-Duplex.

Configuração do Laboratório

  1. O roteiro será executado sobre máquinas virtuais, através do uso do Imunes.
  2. Abra um terminal e baixe o aquivo de configuração da rede a ser utilizada e um arquivo auxiliar dos experimentos:
    cd ~
    wget -4 http://docente.ifsc.edu.br/odilson/RED29004/TCP_Num_Seq_Erro.imn 
    wget -4 http://docente.ifsc.edu.br/odilson/RED29004/arq30Bytes.txt
    

PARTE 1 - Transmissão sem erros: Verificação de Número de Sequência e Reconhecimentos

  1. Execute o Imunes, num terminal execute:
     sudo imunes
    
  2. Carregue o arquivo:
     File >> Open >> TCP_Num_Seq_Erro.imn
    
    • Será apresentada uma simples rede a ser utilizada no experimento, composta de 2 PCs: Transmissor e Receptor.
  3. Inicie a simulação da rede no Imunes:
    Experiment >> Execute
    
    • Dica: para abrir um terminal de uma das máquinas da rede a ser simulada basta dar um duplo clique sobre a mesma.
  4. Copie o arquivo arq30Bytes.txt para a máquina Transmissor do Imunes. No terminal da máquina hospedeira (NÃO do Imunes) digite::
    sudo hcp arq30Bytes.txt Transmissor:
    
  5. Execute o Wireshark no Receptor:
    Clique direito do mouse sobre o ícone do Receptor >> Wireshark >> eth0..
    
  6. Execute o processo servidor no Receptor e prepare o mesmo para limitar a sua capacidade de recepção em cerca de 20 bytes (tamanho do buffer). Isto permitirá ver a quebra do arquivo de 30 bytes em alguns segmentos TCP:
    sysctl -w net.ipv4.tcp_rmem='20 20 20'
    nc -vvnl -p 5555 > ArqRecebido.txt
    
    • Dica: para copiar textos para o Imunes, copie normalmente o texto, por exemplo, da Wiki, com o < Ctrl > + < C > e cole clicando sobre a rodinha (scroll) do mouse.
  7. Envie o arquivo arq30Bytes.txt da máquina Transmissor:
    nc -vvn 10.0.0.21 5555 < arq30Bytes.txt
    
  8. Pare os processos rodando nos terminais do Transmissor e Receptor com:
    Ctrl + c
    
  9. Pare a captura de pacotes no Wireshark.
  10. Na tela do Wireshark você terá algo parecido com o apresentado na Figura 1.
    Fig.1 -- Protocolo TCP
    • O comportamento padrão do Wireshark é redefinir o número de sequência para sempre iniciar em 0. Este comportamento pode ser alterado conforme nossas necessidades:
      Edit >> Preferences >> Protocols >> TCP >> (Habilite/Desabilite) Relative sequence numbers >> OK
      
  11. Analise como os dados foram transmitidos e reconhecidos.
  12. Perguntas
    1. Qual o número de sequência (normalizado pelo Wireshark) de cada segmento de dados transmitido (de PC1 para PC2) e qual o significado do número de reconhecimento em cada um deles?
    2. Como foi reconhecido cada segmento enviado?
      • Relate esta análise por segmento usando os timestamps (coluna Time) como referência.
  13. Feche o Imunes.

PARTE 2 - Transmissão com erros: retransmissões

  1. Execute o Imunes, num terminal execute:
     sudo imunes
    
  2. Carregue o arquivo:
     File >> Open >> TCP_Num_Seq_Erro.imn
    
    • Será apresentada uma simples rede a ser utilizada no experimento, composta de 2 PCs: Transmissor e Receptor.
  3. Inicie a simulação da rede no Imunes:
    Experiment >> Execute
    
    • Dica: para abrir um terminal de uma das máquinas da rede a ser simulada basta dar um duplo clique sobre a mesma.
  4. Copie o arquivo arq30Bytes.txt para a máquina Transmissor do Imunes. No terminal da máquina hospedeira (NÃO do Imunes) digite::
    sudo hcp arq30Bytes.txt Transmissor:
    
  5. Execute o Wireshark no Receptor:
    Clique direito do mouse sobre o ícone do Receptor >> Wireshark >> eth0..
    
  6. Execute o processo servidor no Receptor e prepare o mesmo para limitar a sua capacidade de recepção em cerca de 20 bytes (tamanho do buffer) e perda de dados em torno de 40%. Isto permitirá ver a quebra do arquivo de 30 bytes em alguns segmentos TCP:
    sysctl -w net.ipv4.tcp_rmem='20 20 20'
    tc qdisc replace dev eth0 root netem loss 40% 
    nc -vvnl -p 5555 > ArqRecebido.txt
    
    • Dica: para copiar textos para o Imunes, copie normalmente o texto, por exemplo, da Wiki, com o < Ctrl > + < C > e cole clicando sobre a rodinha (scroll) do mouse.
  7. Envie o arquivo arq30Bytes.txt da máquina Transmissor:
     nc -vvn 10.0.0.21 5555 < arq30Bytes.txt
    
    • Obs: Caso receba uma mensagem "No route to host", repita o comando acima. O problema é gerado por perdas sucessivas de mensagens de estabelecimento de conexão do TCP, devido à perda de dados estabelecida em 40%.
  8. Pare os processos rodando nos terminais do Transmissor e Receptor com:
    Ctrl + c
    
  9. Pare a captura de pacotes no Wireshark.
  10. Adicione o filtro tcp ao Wireshark, para limpar os dados apresentados.
  11. Analise como os dados foram transmitidos e reconhecidos.
  12. Perguntas:
    1. Qual o número de sequência (normalizado pelo Wireshark) de cada segmento de dados transmitido (de PC1 para PC2) e qual o significado do número de reconhecimento em cada um deles?
    2. Como foi reconhecido cada segmento enviado?
    3. Houve perda de pacotes? Como você identificou isso?
    4. Os pacotes perdidos foram retransmitidos? Justifique.
  13. Feche o Imunes.

PARTE 3 - Testando a capacidade do TCP de enviar dados de forma duplex

  • Agora vamos fazer um pequeno teste de transmissão de arquivos entre dois colegas e observar o comportamento full-duplex.
  • No experimento, o arquivo de uma máquina será transmitido para outra e vice-versa.
  1. Pare a simulação no Imunes se estiver rodando. Isso é para limpar as configurações previamente feitas:
    Experiment >> Terminate
    
  2. Carregue o arquivo:
    File >> Open >> TCP_Num_Seq_Erro.imn
    
  3. Inicie a simulação da rede no Imunes:
    Experiment >> Execute
    
  4. Num terminal da máquina do hospedeira (Não do Imunes) baixe os arquivos para o experimento e salve-os a pasta pessoal de seu usuário:
    cd ~
    wget -4 http://docente.ifsc.edu.br/odilson/RED29004/Servidor.tx -O Servidor.tx
    wget -4 http://docente.ifsc.edu.br/odilson/RED29004/Cliente.tx -O Cliente.tx
    
  5. Copie os arquivos para as máquinas do Imunes. No terminal da máquina hospedeira (NÃO do Imunes) digite:
    sudo hcp Servidor.tx Transmissor: 
    sudo hcp Cliente.tx Receptor:
    
  6. Execute o Wireshark no Receptor:
    Clique direito do mouse sobre o ícone do Receptor >> Wireshark >> eth0..
    
  7. Limite o tamanho do buffer do TCP tanto no Transmissor quanto Receptor:
    sysctl -w net.ipv4.tcp_rmem='10000 10000 10000'
    
  8. No Transmissor, que fará o papel de servidor por aguardar a conexão do cliente, execute o comando abaixo. Perceba que o Servidor vai enviar (o sinal < indica isso) um arquivo e vai receber e salvar (o sinal > indica isso) outro do Cliente.
    nc -vvnl -p 5555 < Servidor.tx > Arq_recebido.rx
    
  9. No Receptor, que fará o papel de cliente, execute o comando abaixo. Perceba que ele também vai enviar e receber arquivo do servidor.
    nc -vvn 10.0.0.20 5555 < Cliente.tx > Arq_recebido.rx
    
  10. Pare os processos rodando nos terminais do Transmissor e Receptor com:
    Ctrl + c
    
  11. Confira o conteúdo dos arquivos recebidos no Transmissor e Receptor:
    cat Arq_recebido.rx
    

  12. Pare a captura de pacotes no Wireshark.
  13. Adicione o filtro tcp ao Wireshark, para limpar os dados apresentados.
  14. Analise como os dados foram transmitidos e reconhecidos.
  15. Perguntas:
    1. Onde pode ser observado a comunicação full-duplex? Obs.: Foque a análise nos segmentos que contém [PSH, ACK].
    2. Qual é a relação entre os comandos no terminal tanto do cliente como do servidor com a comunicação full-duplex?
    3. Como os ACKs são propagados, em pacotes exclusivos ou de carona (piggyback) com os dados?

TCP: Equidade e controle de congestionamento

Objetivos

  • Gerar gráficos para facilitar a visualização do controle de congestionamento e a consequente equidade do protocolo TCP.
  • Utilizar o software Iperf (iperf –h para help) para gerar tráfego entre duas máquinas, cliente e servidor.
  • Utilização do software Imunes para simulação de redes "complexas".

Cenário para todos os experimentos

Dois clientes "disputando" o enlace com o servidor
  • O roteiro será executado sobre máquinas virtuais, através do uso do Imunes.
  • Para realização dos ensaios será montada a rede virtual apresentada na Figura.
  • Observe que na figura todos os enlaces são iguais e limitados a 1 Mbps com delay de 5 us.
  • Os dois clientes vão disputar o enlace único entre o roteador e servidor.

Parte 1: Somente fluxos TCP

  1. Baixe o arquivo de configuração da rede, no terminal digite:
    wget -4 http://docente.ifsc.edu.br/odilson/RED29004/TCP_Controle_de_congestionamento_e_equidade.imn
    
  2. Execute o Imunes.
    sudo imunes
    
  3. Carregue o arquivo de configuração:
    File >> Open >> /home/aluno/TCP_Controle_de_congestionamento_e_equidade.imn
    
    • Perceba que será apresentada uma rede com um roteador, dois clientes e um servidor de rede. Todos interligados por enlaces de 10 kbps.
  4. Inicie a simulação no Imunes:
    Experiment >> Execute
    
  5. Limite o tamanho do buffer do TCP tanto no Servidor quanto no Cliente1:
    sysctl -w net.ipv4.tcp_rmem='10000 10000 10000'
    
    • Para copiar comando para os terminais das máquinas virtuais: copie o texto desejado, selecione o terminal da máquina desejada (duplo clique sobre a mesma) e clique sobre a "rodinha" do mouse que o texto será colado.
  6. No Servidor execute:
    iperf -s -p 2000 & iperf -s -p 2001 & iperf -s -p 2002 &
    
  7. No Roteador execute o Wireshark:
    Clique com o botão direito do mouse sobre o ícone do Roteador e no menu selecione: Wireshark >> eth2...
    
  8. No Cliente1 execute (copie a três linhas e cole no terminal adequado e em seguida tecle <enter>):
    iperf -c 10.0.2.10 -f m -i 1 -t 50 -p 2000 & \
    (sleep 5; iperf -c 10.0.2.10 -f m -i 1 -t 40 -p 2001) & \
    (sleep 10; iperf -c 10.0.2.10 -f m -i 1 -t 20 -p 2002) &
    
    </enter>
  9. Fique monitorando o Cliente1 até a tela parar de ser atualizada, aproximadamente 50 s.
  10. Pare os processos no Cliente1 e Servidor utilizando CTRL-C.
  11. Pare a captura de dados no Wireshark.
  12. No wireshark acesse Statistics >> IO Graph e, na tela que abrir, ajuste TODOS os parâmetros para obter um gráfico similar ao apresentado na Figura 2:
    Captura de 3 fluxos de dados
    1. Clique em Add a new graph (sinal de + no canto inferior esquerdo)
      • X Enabled
      • Duplo clique sobre o campo Graph name: Porta 2000
      • Duplo clique sobre o campo Display Filter: tcp.port==2000
      • Duplo clique sobre o campo Color: clique no botão logo a direita e selecione a cor desejada.
    2. Para os demais gráficos copie o anterior clicando no ícone com dois retângulos no canto inferior esquerdo
      • Edite nome, porta e cor.
    3. Salve esse gráfico no relatório.
    4. Responda:
      1. Explique os filtros aplicados no gráfico do Wireshark.
        • Quais são os 4 gráficos apresentados?
        • Há uma relação de valor entre as curvas?
        • Qual é esta relação?
      2. Por que a curva vermelha se sobrepõe a curva preta nos primeiros 5 segundos, a partir do início da transmissão?
      3. Qual é a relação entre a curva preta e as curvas vermelha e verde no intervalo entre 6 e 10 segundos, a partir do início da transmissão?
      4. Qual é o mecanismo do TCP que explica a grande oscilação das curvas, principalmente percebida no intervalo entre 10 e 30 segundos, a partir do início da transmissão?

Parte 2: Fluxos TCP mais UDP

Agora vamos dificultar a vida do TCP incluindo um tráfego UDP. O gráfico gerado deverá apresentar a competição pelo meio de transmissão entre os diversos fluxos de dados.

  1. Baixe o arquivo de configuração da rede, no terminal digite:
    wget -4 http://docente.ifsc.edu.br/odilson/RED29004/TCP_Controle_de_congestionamento_e_equidade.imn
    
  2. Execute o Imunes.
    sudo imunes
    
  3. Carregue o arquivo de configuração:
    File >> Open >> /home/aluno/TCP_Controle_de_congestionamento_e_equidade.imn
    
  4. Inicie a simulação no Imunes:
    Experiment >> Execute
    
  5. Limite o tamanho do buffer do TCP no Servidor, Cliente1 e Cliente2:
    sysctl -w net.ipv4.tcp_rmem='10000 10000 10000'
    
    • Para copiar comando para os terminais das máquinas virtuais: copie o texto desejado, selecione o terminal da máquina desejada (duplo clique sobre a mesma) e clique sobre a "rodinha" do mouse que o texto será colado.
  6. No Servidor execute:
    iperf -s -u -p 2000 & iperf -s -p 2001 & iperf -s -p 2002 &
    
  7. No Roteador execute o Wireshark:
    Clique com o botão direito do mouse sobre o Roteador >> Wireshark >> eth2...
    
  8. A próxima etapa deve ser executada "simultaneamente" nos Cliente1 e Cliente2.
    1. Para isso copie o texto abaixo e cole no terminal do Cliente1, ainda NÃO tecle <enter>:
      sleep 5;iperf -u -c 10.0.2.10 -f m -i 1 -t 25 -p 2000 -b 10000000
      
      </enter>
    2. Copie o texto abaixo e cole no terminal do Cliente2, ainda NÃO tecle <enter>:
      iperf -c 10.0.2.10 -f m -i 1 -t 50 -p 2001 &  iperf -c 10.0.2.10 -f m -i 1 -t 50 -p 2002
      
      </enter>
    3. Tecle <enter> no Cliente2 e Cliente1, NESSA ORDEM, "simultaneamente".</enter>
  9. Fique monitorando o Cliente2 a tela parar de ser atualizada, aproximadamente 50 s.
  10. Pare os processos no Cliente1, Cliente2 e Servidor utilizando CTRL-C.
  11. Pare a captura de dados no Wireshark.
  12. No wireshark acesse Statistics >> IO Graph e, na tela que abrir, ajuste TODOS os parâmetros para obter um gráfico similar ao apresentado na Figura:
    Captura de 2 fluxos de dados TCP mais um fluxo UDP
    1. Clique em Add a new graph (sinal de + no canto inferior esquerdo)
      • X Enabled
    2. No Graph 2 altere o filtro para tcp.analysis.flags.
    3. No Graph 3 altere o filtro para udp.port==2000.
    4. No Graph 4 altere o filtro para tcp.port==2001.
    5. No Graph 5 altere o filtro para tcp.port==2002.
    6. Salve o gráfico no relatório.
    7. Responda:
        • Quais são os 5 gráficos apresentados?
        • Há uma relação de valor entre as curvas?
        • Qual é esta relação?
      1. O que ocorreu com os fluxos TCP após a entrada do fluxo UDP?
      2. Em que momento houve erros no TCP? Qual é a relação desse momento com o UDP?
      3. O que ocorreu com os fluxos TCP após o término do fluxo UDP?
    8. Como desafio, compare o comportamento dos vários fluxos de dados, nos segundo experimentos, acrescentando mais fluxos UDP e TCP.