Mudanças entre as edições de "Curso Técnico Integrado de Telecomunicações - Redes de Computadores (RCO)"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(Criou página com '==Documentação== *Carga horária, Ementas, Bibliografia * Plano de Ensino ==Cronograma das Atividades== <!-- PROFESSOR: C...')
 
 
(696 revisões intermediárias por 7 usuários não estão sendo mostradas)
Linha 1: Linha 1:
==Documentação==
+
{{DivulgueEngtelecom}}
 +
==Informações Gerais==
 +
*[[RCO-IntTel|Carga horária, Ementas, Bibliografia]]
 +
*[[RCO-IntTel (Plano de Ensino) | Plano de Ensino]]
 +
 
 +
==Edições==
 +
*[[RCO60807 2021-1|RCO60803 2021 em diante - Prof. Odilson Tadeu Valle - Roteiros de laboratórios]]
 +
*[[RCO60803 2019-1|RCO60803 2019-1 - Trabalho dirigido - Prof. Odilson Tadeu Valle]]
 +
*[[RCO60803 2018-2|RCO60803 2018-2 - Prof. Odilson Tadeu Valle / Prof. Eraldo Silveira e Silva]]
 +
*[[RCO60803 2018-1|RCO60803 2018-1 - Prof. Odilson Tadeu Valle / Prof. Eraldo Silveira e Silva]]
 +
*[[RCO60803 2017-2|RCO60803 2017-2 - Prof. Odilson Tadeu Valle / Prof. Eraldo Silveira e Silva]]
 +
*[[RCO60803 2017-1|RCO60803 2017-1 - Prof. Juliano de Souza / Prof. Eraldo Silveira e Silva]]
 +
*[[RCO60803 2016-2|RCO60803 2016-2 - Prof. Juliano de Souza / Prof. Luciano Barreto]]
 +
*[[RCO60803 2016-1|RCO60803 2016-1 - Prof. Fernando Rodrigues Santos / Prof. Juliano de Souza]]
 +
*[[RCO60803-2015-2|RCO60803 2015-2 - Prof. Simara Sonaglio]]
 +
*[[RCO60803-2015-1|RCO60803 2015-1 - Prof. Arliones Hoeller / Prof. Túlio Ribeiro]]
 +
*[[RCO60803-2014-2|RCO60803 2014-2 - Prof. Arliones Hoeller / Prof. Tomás Grimm / Prof. José Clair]]
 +
 
 +
= Material de apoio =
 +
 
 +
==''Applets'' do Kurose==
 +
Vários [http://wps.pearsoned.com/ecs_kurose_compnetw_6/216/55463/14198700.cw/ aplicativos] com representação dinâmica de características das redes de computadores.
 +
==Transparências utilizadas durante as aulas==
 +
[http://docente.ifsc.edu.br/odilson/RDC60803/slides-kurose-cap1.pdf Capítulo 1 - Introdução]
 +
 
 +
[http://docente.ifsc.edu.br/odilson/RDC60803/slides-kurose-cap2.pdf Capítulo 2 - Camada de Aplicação]
  
*[[RCO-IntTel|Carga horária, Ementas, Bibliografia]]
+
[http://docente.ifsc.edu.br/odilson/RDC60803/PPTs%20-%20Cap%C3%ADtulo%202%20-%20FTP%20-%20Email%20-%20P2P.pdf Capítulo 2 - Camada de Aplicação - FTP + EMAIL + P2P]
 +
 
 +
[http://docente.ifsc.edu.br/odilson/RDC60803/slides-kurose-cap3.pdf Capítulo 3 - Camada de Transporte]
 +
 
 +
[http://docente.ifsc.edu.br/odilson/RDC60803/PPTs%20-%20Cap%C3%ADtulo%204%20A%20camada%20de%20REDE.pdf Capítulo 4 - Camada de Rede]
 +
 
 +
==Slides de Outras Universidades==
  
*[[RCO-IntTel (Plano de Ensino) | Plano de Ensino]]
+
*[https://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwiO0aDJu_LTAhWJlZAKHX8JA2wQFggjMAA&url=http%3A%2F%2Fwww.eecs.yorku.ca%2Fcourse_archive%2F2015-16%2FW%2F3214%2FCSE3214_14_TCP_2_2016_posted_part2.pdf&usg=AFQjCNEJh3yITWuyOPZ17bbObT54JqrLCw&sig2=jJwHLo13iooIUaI5F2m-kA TCP Error Control- EECS - LASSONDE]
 +
*[https://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwiO0aDJu_LTAhWJlZAKHX8JA2wQFggpMAE&url=http%3A%2F%2Fwww.eecs.yorku.ca%2Fcourse_archive%2F2015-16%2FW%2F3214%2FCSE3214_14_TCP_2_2016_posted_part1.pdf&usg=AFQjCNHNz8hZ4GHyiDZkcMgomCQBR4KTaA&sig2=nS8450rR2x6C_EM9tT0yWw TCP- Flow and Error Control - LASSONDE]
 +
*[https://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0ahUKEwjUvtPAmJjUAhXHHZAKHfSBAEgQFghCMAI&url=http%3A%2F%2Fwww.eecs.yorku.ca%2Fcourse_archive%2F2015-16%2FW%2F3214%2FCSE3214_14_TCP_3_2016_posted.pdf&usg=AFQjCNHFkmBZT2Pn_G6e-AuDvJHL6FuZzg&sig2=UxXTDU_OKoMp2jC3K1O-jg Congestion Control - LASSONDE]
 +
*[https://www.cpe.ku.ac.th/~cpj/204325/ Slides/Aula Faculty of Engineering, Kasetsart University]
  
 +
== Curiosidades ==
  
==Cronograma das Atividades==
+
* [http://www.pop-sc.rnp.br/publico/monitoramento.php Monitoramento do tráfego RNP - PoP-SC]
 +
* [https://www.rnp.br/sistema-rnp/ferramentas/panorama-de-trafego Monitoramento do tráfego RNP - Nacional]
 +
* [http://www.redclara.net/index.php/pt/red/redclara/topologia-actual-de-la-red Rede Clara Internacional]
 +
* [https://eventos.rnp.br/sites/default/files/activity/activity-presentation/apresentacao_wrnp_2017_eduardo_grizenid_v_1.2.pdf Futura infraestrutura de rede da RNP]
 +
* [https://http2.akamai.com/demo Comparativo HTTP/1.1 vs HTTP/2]
 +
* [https://www.youtube.com/watch?v=IlAJJI-qG2k Animated map shows the undersea cables that power the internet]
 +
* [https://submarine-cable-map-2019.telegeography.com/ Submarine Cable Map 2019]
 +
* [https://www.bbc.com/portuguese/geral-50162526 A pré-história da internet]
 +
* [https://www.youtube.com/watch?v=9hIQjrMHTv4 ''History of the Internet'']
 +
* [https://www.youtube.com/watch?v=A5dD2x2iQx8 ''History of the Internet'' - legendado]
 +
* [https://www.youtube.com/watch?v=PBWhzz_Gn10 ''Warriors of the Net'']
 +
* [https://www.youtube.com/watch?v=O_xG0ay5Vqs ''Warriors of the Net'' - legendado]
 +
* [https://www.youtube.com/watch?v=VANORrzKX50 ''Browser Wars'']
 +
* [https://www.youtube.com/watch?v=1G3SUTmioQE ''Browser Wars'' - legendado]
 +
* [https://www.youtube.com/watch?v=0nz-lcuv3TM ''Browser Wars'' - dublado]
 +
* [https://db-ip.com/200.135.37.65 Localização geográfica de IPs]
 +
* [http://ipv6.br/ '''IPv6 no Brasil''']
 +
* [https://www.youtube.com/watch?v=5OtebbSnwoM Fragmentação no IPv4 e IPv6]
 +
* [http://ipv6.br/lab/ Laboratório de IPv6 - Livro didático contendo vários roteiros para entendimento do IPv6]
 +
* [https://www.google.com/intl/pt-BR/ipv6/statistics.html#tab=per-country-ipv6-adoption&tab=per-country-ipv6-adoption Estatísticas Google sobre IPv6]
 +
* [https://http2.github.io/faq/#will-http2-replace-http1x HTTP/2 Frequently Asked Questions]
 +
* [https://www.youtube.com/watch?v=8XxeAw_d-BI Iniciação à máquinas de estados]
  
 
<!--  
 
<!--  
PROFESSOR: COPIAR TODO ESSE BLOCO PARA CRIAR NOVOS CRONOGRAMAS. O COMENTÁRIO ABAIXO DEVE SER RETIRADO PARA A CRIAÇÃO DE NOVAS LINHAS NA TABELA
+
=Laboratórios=
 +
 
 +
 
 +
{{Collapse top |Laboratório 1 - Ferramentas de Rede e Conceitos Básicos}}
 +
 
 +
===Objetivos===
 +
 
 +
*Familiarização com a infraestrutura dos laboratórios de redes
 +
*Familiarização com ferramentas de rede: ifconfig, ping, traceroute;
 +
*Desenvolver a noção de endereçamentos de rede IP e de endereço de hardware (MAC)
 +
*Desenvolver a noção de rotas em redes  IP
 +
*Testar a conectividade IP com ping
 +
 
 +
===Conceitos introdutórios para uso do laboratório===
 +
 
 +
 
 +
====Estrutura do Laboratório====
 +
 
 +
[http://docente.ifsc.edu.br/odilson/RDC60803/Ferramentas%20de%20rede%20e%20conceitos%20basicos.pdf Conceitos Básicos]
 +
 
 +
[http://tele.sj.ifsc.edu.br/~eraldo/AULAS/2018-2/RCO-INTEGRADO/MACxIP.pdf Endereçamento MAC x Endereçamento IP]
 +
 
 +
A rede do laboratório em uso segue o modelo apresentado no diagrama da Figura 1 (endereçamento pode ser diferente).
 +
 
 +
[[Arquivo:Diagrama_rede_IFSC_lab_redes_I.jpeg |thumb | 400px| Figura 1 - Diagrama da rede do laboratório]]
 +
 
 +
Os Laboratórios de Redes de Computadores estão equipados com N+1 (N = número de computadores para alunos) computadores conectados em rede e com acesso a Internet. A rede local do laboratório tem endereço IP 192.168.1.0/24. A máscara de rede '''/24''' indica que o último ''byte'' do endereço é utilizado para identificar cada máquina, por exemplo  192.168.1.1, 192.168.1.2, etc.
 +
 
 +
===Roteiro de atividades===
 +
====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 Uuntu 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.
 +
 
 +
 
 +
#Analisando os dados obtidos do seguinte exemplo <syntaxhighlight lang=bash>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
 +
          endereço 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
 +
          endereço 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) </syntaxhighlight>
 +
##O sistema em questão possui duas interfaces de rede: '''eth0''' e '''lo'''
 +
##'''Link encap:Ethernet''': Configuração da interface '''Eth'''ernet 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
 +
##endereço 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.
 +
#Agora utilize o comando '''ifconfig''' para verificar o estado de suas interfaces e responda:
 +
##Quantas e quais interfaces de rede sua máquina possui? Liste.
 +
##Quais são os endereços da camada 2 atribuído as mesmas? De onde o sistema obteve esses endereços?
 +
##Quais são os endereços IPv4? De onde o sistema obteve esses endereços?
 +
##Suas interfaces tem IPv6 configurado? Qual o endereço e escopo dos mesmos? Como foram obtidos? Qual o alcance (é roteável) do mesmo?
 +
##Use o link *[http://jodies.de/ipcalc  Verificando a estrutura do endereço IP] para explorar a estrutura do seu endereço IPv4.
 +
 
 +
====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: <syntaxhighlight lang=bash>
 +
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 </syntaxhighlight>
 +
 
 +
##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'')
 +
##Cada pacote tem ainda um tempo de vida (''ttl'' – ''time to live''), o qual é decrementado em cada roteador, sendo o pacote descartado quando chegar a zero; isto evita pacotes perdidos na rede
 +
##Quando o ping é interrompido ('''CRTL-C'''), uma estatística é apresentada indicando o percentual de pacotes transmitidos, recebidos e perdidos
 +
##O tempo de viagem (''rtt'' – ''round trip time'') mínimo (''min''), médio (''avg'') e máximo (''max'') é calculado, assim como o desvio padrão (''mdev'')
 +
#Como exercício envie '''ping''' para diferentes ''hosts'' e compare os tempos de resposta:
 +
##no endereço local de loopback;
 +
##máquina de um colega do laboratório;
 +
##servidor e roteador da rede da escola;
 +
##servidores externos: <syntaxhighlight lang=bash>
 +
www.ifsc.edu.br
 +
www.uol.com.br
 +
www.nasa.com </syntaxhighlight> e explique as possíveis diferenças entre os tempos de resposta dos ping realizados.
 +
#Consulte as páginas ''man'' e teste o '''ping''' com os parâmetros abaixo e descreva suas funcionalidades:
 +
##-c count
 +
##-i intervalo
 +
##-s packetsize
 +
##-t ttl (para um site distante inicie com 1 e vá incrementando, observe as mensagens)
 +
#Observe que também é possível realizar ping em endereços no formato IPv6, por exemplo: <syntaxhighlight lang=bash> ping6 www.sj.ifsc.edu.br </syntaxhighlight>
 +
#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.
 +
 
 +
#Exemplo: <syntaxhighlight lang=bash>
 +
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 </syntaxhighlight>
 +
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).
 +
#Traçar a rota dos pacotes entre seu computador e diferentes hosts:
 +
##máquina de um colega do laboratório
 +
##servidor e roteador da rede da escola
 +
##servidores externos.
 +
#Explique as possíveis diferenças entre os tempos de resposta de cada uma das amostras do '''traceroute'''
 +
#Explique as linhas com o caracter *.
 +
#Fazendo uso das ferramentas desse laboratório, refaça o diagrama da rede do campus apontando claramente os novos endereços IPs associados aos roteadores.
 +
#Observe que também é possível realizar traceroute em endereços no formato IPv6, por exemplo: <syntaxhighlight lang=bash> sudo traceroute -I6 ipv6.br </syntaxhighlight>
 +
#Tente o traceroute no IPv6 para outros sites.
 +
 
 +
====Referências adcionais====
 +
 
 +
* [http://linux-ip.net/html Guia de Administração da Camada IP no Linux
 +
 
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 2 - Wireshark e encapsulamento}}
 +
 
 +
===Objetivos===
 +
 
 +
*Familiarização com o ''sniffer'' de rede WireShark
 +
*Observar o comportamento do ''ping'' e se familiarizar com o processo de encapsulamento;
 +
 
 +
====WireShark====
 +
2005 KUROSE, J.F & ROSS, K. W. Todos os direitos reservados
 +
 
 +
[http://docente.ifsc.edu.br/odilson/RDC60803/Wireshark%20e%20encapsulamento.pdf Wireshark e encapsulamento]
 +
*Introdução
 +
O entendimento de protocolos de redes pode ser bastante aprofundado através da “observação de protocolos funcionando” e “da manipulação de protocolos” - observando a sequência de mensagens trocadas entre duas entidades, entrando nos detalhes da operação do protocolo, e fazendo com que os protocolos realizem certas ações e então observando estas ações e as consequências.
 +
 
 +
A ferramenta básica para observar as mensagens trocadas entre as entidades em execução é chamada de ''sniffer''. Como o nome sugere, um ''sniffer'' captura mensagens sendo enviadas/recebidas pelo seu computador; ele também tipicamente armazena e/ou apresenta os conteúdos dos vários campos dos protocolos nestas mensagens capturadas. Um ''sniffer'' isoladamente é um elemento passivo. Ele observa as mensagens sendo enviadas e recebidas pelas aplicações e protocolos executando no seu computador, mas jamais envia pacotes. Similarmente, os pacotes recebidos nunca são explicitamente endereçados ao ''sniffer''. Ao invés disso, um ''sniffer'' recebe uma cópia de pacotes que são enviados/recebidos para/de aplicações e protocolos executando no seu computador.
 +
 
 +
A Figura 2 mostra a estrutura de um ''sniffer''. À direita da Figura 2 estão os protocolos (neste caso, protocolos da Internet) e aplicações (tais como navegador web ou cliente FTP) que normalmente executam no seu computador. O ''sniffer'', exibido dentro do retângulo tracejado na Figura 2 é uma adição aos softwares usuais no seu computador, e consiste de duas partes: a biblioteca de captura de pacotes e o analisador de pacotes. A biblioteca de captura de pacotes recebe uma cópia de cada quadro da camada de enlace que é enviado do ou recebido pelo seu computador. Lembre que mensagens trocadas por protocolos das camadas mais altas tais como HTTP, FTP, TCP, UDP, DNS ou IP, são todos eventualmente encapsulados em quadros que são transmitidos para o meio físico como um cabo Ethernet. Na Figura 2, assume-se que o meio físico é uma Ethernet, e desta forma, os protocolos das camadas superiores são eventualmente encapsulados em um quadro Ethernet. Capturar todos os quadros fornece todas as mensagens enviadas/recebidas de/por todos os protocolos e aplicações executando em seu computador.
 +
 
 +
[[Arquivo:Sniffer_estrutura.png |thumb | 500px| Figura 2 - Estrutura de um ''sniffer'']]
 +
 
 +
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. Por exemplo, 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.
 +
 
 +
*Analisando os campos da interface do Wireshark
 +
Quando você executar o programa Wireshark, a interface com o usuário exibida na Figura 3 aparecerá. Inicialmente, nenhum dado será apresentado nas janelas. A interface do Wireshark tem seis componentes principais:
 +
#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;
 +
#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;
 +
#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;
 +
#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;
 +
#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;
 +
#A janela de conteúdo de pacotes mostra o conteúdo inteiro do quadro capturado, nos formatos ASCII e hexadecimal.
 +
 
 +
[[Arquivo:Wireshark_interface_usuario.png  | 700px| Figura 3 - Interface com o usuário do Wireshark]]
 +
 
 +
====Roteiro de atividades====
 +
 
 +
=====Etapa 1=====
 +
#Inicie o navegador web;
 +
#Inicie o Wireshark. Inicialmente as janelas estarão vazias, pois não há captura de pacotes em progresso;
 +
#Para iniciar uma captura de pacotes, selecione o menu Capture e depois Interfaces. Provavelmente sua interface de rede será a '''eth0'''.
 +
#Isso faz com que a janela de interfaces de rede disponíveis seja apresentada (Figura 4); [[Arquivo:Wireshark_interfaces_rede.png |thumb | 400px| Figura 4 - Interfaces de rede no Wireshark]]
 +
#O botão ''Start'' da interface '''eth0''' deve ser selecionado. Na Figura 4, no Wireshark foi selecionada a interface wlan;
 +
#Como nada está acontecendo na rede, a janela apresenta o conteúdo vazio;
 +
#Execute um comando ping (endereço na saída da nossa rede - ver aula anterior):<syntaxhighlight lang=bash>
 +
  ping 200.237.201.153</syntaxhighlight>
 +
#Ao voltar para a janela do Wireshark, houve a captura de todos os pacotes envolvidos no process;
 +
#Antes de continuar, vamos parar a captura de pacotes e trabalhar com o que temos. Basta clicar em ''Capture'' e depois em ''Stop'';
 +
#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 Aplicar). Observe que somente os pacotes envolvidos no ping estão sendo mostrados. Os resultados obtidos devem ser similar a tela mostrada na Figura 5.
 +
#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.
 +
#Selecione uma mensagem ECHO REPLY. Analise o pacote: endereço fonte, endereço destino etc;
 +
#Saia do Wireshark.
 +
 
 +
[[Arquivo:TelaWiresharkPing.png | 700px| Figura 5 - Tela Wireshark - Ping]]
 +
 
 +
=====Etapa 2=====
 +
 
 +
#Com Wireshark ativo (Abra-o novamente) faça um pingue para um site conhecido (você pode usar o nome: www.ifsc.edu.br por exemplo):
 +
#Teste outros filtros, por exemplo, mostre somente pacotes originados e/ou destinados a um determinado ''host'' ('''ip.addr == 192.168...''', ip.src, ip.dst).
 +
#Qual é o endereço IP do sítio navegado? Qual é o endereço IP da interface de rede do seu computador? Qual o endereço MAC de sua máquina?
 +
 
 +
 
 +
=====Etapa 3 - Desafios=====
 +
 
 +
#Solicite um endereço IP de um colega e faça um experimento para descobrir o endereço MAC do computador dele.
 +
#Tente elaborar um experimento para descobrir o endereço MAC do servidor de www.ifsc.edu.br. É possível? Explique para o professor...
 +
 
 +
 
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 3 - Conceituando protocolos}}
 +
 
 +
===Objetivos===
 +
 
 +
*Desenvolver o conceito de protocolo
 +
*Conceber um protocolo/serviço de calculadora pela rede
 +
 
 +
===Introdução===
 +
[http://docente.ifsc.edu.br/odilson/RDC60803/Conceituando%20protocolos.pdf Conceituando protocolos]
 +
 
 +
O entendimento de protocolos de redes pode ser bastante aprofundado através da “observação de protocolos funcionando” e “da manipulação de protocolos” - observando a sequência de mensagens trocadas entre duas entidades, entrando nos detalhes da operação do protocolo, e fazendo com que os protocolos realizem certas ações e então observando estas ações e as consequências.
 +
 
 +
Um protocolo de camada de aplicação define:
 +
#Os tipos de mensagens trocadas.
 +
#A sintaxe dos vários tipos de mensagens, tais como os campos da mensagem e como os campos são delineados.
 +
#A semântica dos campos, isto é, o significado da informação nos campos.
 +
#Regras para determinar quando e como um processo envia mensagens e responde a mensagens.
 +
 
 +
Neste experimento será proposto a construção de um protocolo de aplicação para prestar serviços na área de operações matemáticas. Na implementação deste serviço todos grupos serão clientes, solicitando respostas a desafios matemáticos, e servidores, enviando respostas as solicitações, de serviço. Deve ser observado que para não se tornar complexo será usado o transporte de informação através do ICMP (usando o ping). O ping possui uma facilidade para transportar bytes de dados (flag -p). A observação destes dados será feita usando o wireshark (captura de pacotes). Pode-se dizer que o programa ping juntamente com o wireshark e a própria interpretação de pacotes pelo grupo constituem a camada de aplicação.
 +
A camada de transporte foi de certa forma subsituída pelo ICMP que na prática é posicionado na camada de rede (por ser um protocolo auxiliar no funcionamento da camada IP).
 +
 
 +
[[Arquivo:AppRCO.png | 500px | Estrutura Applicação'']]
 +
 
 +
===Procedimento do Laboratório===
 +
 
 +
*Definição do protocolo a ser criado
 +
#Vamos criar uma calculadora em rede através de um protocolo bem simples, utilizando como ferramenta de comunicação o ping.
 +
##O protocolo tem por objetivo dar suporte a uma calculadora em rede.
 +
##Um aluno cria uma mensagem e envia, sem aviso prévio, a um colega. Este será o cliente da arquitetura cliente-servidor.
 +
##O colega, ao receber a mensagem, deverá interpretá-la, elaborar uma resposta à pergunta e retorná-la ao colega. Este será o servidor da arquitetura cliente-servidor.
 +
##A estrutura básica de um pacote que flui do cliente para o servidor e vice-versa é apresentada na figura abaixo. Essa estrutura deverá ser absolutamente respeitada, caso contrário, o servidor poderá não conseguir interpretá-la e descartará a mensagem.
 +
[[Arquivo:RCOestrutura-pacote.png | 400px | Estrutura do Pacote'']]
 +
 
 +
 
 +
Para auxiliar na interpretação das mensagens utilize:
 +
#[http://iris.sel.eesc.usp.br/sel433a/ASCII.pdf Tabela ASCII]
 +
#[http://www.rapidtables.com/convert/number/hex-to-ascii.htm Ferramenta para conversão ASCII <==> Hexadecimal]
 +
#[http://xor.pw/ XOR CALCULATOR]
 +
 
 +
*Roteiro de Atividades:
 +
#Inicie o Wireshark.
 +
#Inicie a captura de pacotes em sua interface de rede e adicione o filtro '''icmp'''.
 +
#Cada estudante vai construir uma mensagem, respeitando o formato estabelecido, de solicitação (lado cliente). Para construir a mensagem utilize o código ASCII. Essa mensagem deverá explicitar:
 +
##O tipo (requisição ou resposta, ver figura).
 +
##Como endereço de destino (DEST) e fonte (FONTE) utilize o último campo do endereço IP de sua máquina e do colega para qual a mensagem se destina. Por exemplo, a máquina do professor possui o IP 192.168.1.1 e, portanto, seu endereço seria 01.
 +
##Um desafio matemático, por exemplo: 2+2.
 +
#Envie essa mensagem através do comando '''ping''' com a ''flag'' ''pattern''. Um exemplo de mensagem é: <syntaxhighlight lang=bash> ping -p FFFF02001001322B322B03FFFF 192.168.1.10 </syntaxhighlight>
 +
##Verifique com Wireshark se a mensagem é para o seu grupo e decifre a mensagem.
 +
#Ao receber uma ou mais mensagens de colegas no wireshark, interprete-a verificando quem é o emitente e realizando a operação aritmética solicitada.
 +
##Monte uma resposta e utilize o comando '''ping''' para responder ao emitente.
 +
##Certifique-se que o colega conseguiu interpretar a mensagem
 +
#Desafio:
 +
#*Em equipes, 2 alunos, proponha um novo padrão de mensagens de um protocolo que dê suporte a um Quiz, perguntas e repostas, sobre o tema geografia. Perguntas do tipo: qual é a capital da Austrália?
 +
#*Implemente o protocolo e teste seus conhecimentos e de seus colegas sobre o tema.
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 4 - Desvendando o HTTP com Wireshark - BÁSICO}}
 +
 
 +
===Sobre este Laboratório===
 +
 
 +
*Baseado na pequena introdução ao Wireshark apresentada no '''Laboratório 2''' e no '''Laboratório Conceituando Protocolos''' , agora estamos prontos para utilizar o Wireshark para investigar protocolos de aplicação reais em operação. Neste laboratório o protocolo HTTP é explorado nas suas características básicas
 +
 
 +
===Fonte base===
 +
 
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/Desvendando%20o%20HTTP%20basico.pdf SLIDES DE APOIO: Desvendando o HTTP - Básico - Baseado na Pearson/Kurose]
 +
*[http://www.ebah.com.br/content/ABAAABZ6QAD/wireshark-http Wireshark - HTTP]
 +
*[https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP na Wikipedia]
 +
 
 +
===Objetivos===
 +
 
 +
*Explorar vários aspectos do protocolo HTTP:
 +
*a interação básica GET/resposta do HTTP,
 +
*formatos de mensagens HTTP;
 +
*diferenças http 1.0 e 1.1 / persistência
 +
 
 +
===PARTE 1 - Interação Básica GET/Resposta do HTTP===
 +
 
 +
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:
 +
#inicie o navegador;
 +
#limpe o cache do mesmo (teclas de atalho para o Firefox: '''Ctrl + Shift + Del''');
 +
#inicie o Wireshark, como descrito no '''Laboratório 1''';
 +
#inicie a captura de pacotes;
 +
#digite o seguinte URL no navegador http://tele.sj.ifsc.edu.br/~odilson/RED29004/RED29004.html;
 +
#pare a captura de pacotes;
 +
#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).
 +
#No ''browser'', clique o botão da direita e visualize o código fonte da página adquirida em html.
 +
[[Arquivo:HTTP_Wireshark.png |thumb | 300px| Fig.1 Requisição e Resposta HTTP]]
 +
 
 +
O exemplo da figura 1 mostra na janela de listagem de pacotes duas mensagens HTTP capturadas:
 +
#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.
 +
#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).
 +
#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.'''
 +
 
 +
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.
 +
#O seu navegador executa HTTP 1.0 ou 1.1?
 +
#Qual a versão de HTTP do servidor?
 +
#Quais idiomas (se algum) o seu navegador indica ao servidor que pode aceitar?
 +
#Qual o endereço IP do seu computador?
 +
#E do servidor tele.sj.ifsc.edu.br?
 +
#Qual o número da porta utilizada no seu computador? Note que esta pergunta se refere a porta do protocolo de transporte TCP, portanto, verifique o header TCP;
 +
#E do servidor tele.sj.ifsc.edu.br?
 +
#Qual o código de status retornado do servidor para o seu navegador?
 +
#Quando o arquivo em HTML que você baixou foi modificado no servidor pela última vez?
 +
#Quantos bytes de conteúdo são baixados pelo seu navegador?
 +
#Encontre a mensagem '''RED29004! Página de teste'''. Onde (em qual campo) encontra-se?
 +
#Qual a diferença entre os endereços (IP) de origem e destino entre a mensagem GET e a de resposta do HTTP?
 +
 
 +
===PARTE 2 - Interação Básica GET/Resposta do HTTP usando TELNET e REQUISIÇÃO MANUAL===
 +
 
 +
Para esta etapa temos que recordar que o browser é responsável por:
 +
*se conectar ao servidor usando uma porta TCP 80 (default) e
 +
*gerar uma mensagem GET para apanhar um recurso no servidor;
 +
*receber e mostrar a página
 +
Mas será que podemos "emular" o comportamento do browser usando uma outra ferramenta? Por exemplo, o telnet permite abrir uma conexão na porta 80. O que for teclado após a conexão será enviado para o servidor pela conexão estabelecida.
 +
 
 +
Aproveitando o comportamento acima, vamos montar na MÃO o pacote de aplicação (que o browser gera) e receber a página do servidor como resposta. Claro que agora não teremos a facilidade do browser em mostrar a página para nós. O que veremos é um código HTML, que é um formato de documentos WEB.
 +
 
 +
# 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:
 +
#* Coloque o Wireshark para capturar pacotes
 +
#* Abra um terminal de texto no Linux (menu ''Aplicativos->Acessórios->Terminal'').
 +
#* Execute este comando: <syntaxhighlight lang=bash>
 +
telnet tele.sj.ifsc.edu.br 80
 +
</syntaxhighlight>
 +
#* Após aparecer esta linha: <syntaxhighlight lang=text>
 +
Trying 200.135.37.75...
 +
Connected to integrado.sj.ifsc.edu.br.
 +
Escape character is '^]'.
 +
</syntaxhighlight>digite o seguinte:<syntaxhighlight lang=text>
 +
GET /~odilson/RED29004//RED29004.html HTTP/1.0
 +
</syntaxhighlight> e em seguida tecle ENTER duas vezes.
 +
#* Identifique a página html que foi enviada como resposta.
 +
#* No WireShark, compare o resultado das execuções desses comandos com o resultado anteriormente visto no navegador. Qual a diferença em ambos os casos?
 +
#* Identifique os componentes do sistema de comunicação de dados nesse acesso direto (quem é cliente, quem é servidor)
 +
#* Refaça um pedido em que o recurso é inexistente no servidor (ex: página html com nome inexistente, GET /~odilson/RED29004//Nada.html HTTP/1.0). Observe a resposta. Qual o código (número) de resposta recebido? <syntaxhighlight lang=bash> telnet tele.sj.ifsc.edu.br 80
 +
GET /~odilson/RED29004//Nada.html HTTP/1.0 </syntaxhighlight>
 +
#* Refaça um pedido para o recurso ''default'' e veja o código de resposta:<syntaxhighlight lang=bash> telnet tele.sj.ifsc.edu.br 80
 +
GET / HTTP/1.0</syntaxhighlight>
 +
#* Refaça o pedido usando 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:<syntaxhighlight lang=bash>
 +
telnet tele.sj.ifsc.edu.br 80
 +
GET /~odilson/RED29004//RED29004.html HTTP/1.1
 +
Host: tele.sj.ifsc.edu.br</syntaxhighlight>
 +
#'''Nesse teste você deve ter observado que a conexão se manteve aberta'''. Experimente refazer o pedido para um outro recurso na mesma conexão:<syntaxhighlight lang=bash>
 +
GET /~odilson/RED29004//RED29004_arq2.html HTTP/1.1
 +
Host: tele.sj.ifsc.edu.br
 +
</syntaxhighlight>
 +
Esta característica é a "persistência" do http versão 1.1, que permite reutilizar a mesma conexão para adquirir múltiplos recursos.
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 5 - 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 HTTP.
 +
 
 +
===Fonte base===
 +
 
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/Desvendando%20o%20HTTP%20avancado.pdf SLIDES DE APOIO: Desvendando o HTTP - Avançado - Baseado na Pearson/Kurose]
 +
*[http://www.ebah.com.br/content/ABAAABZ6QAD/wireshark-http Wireshark - HTTP]
 +
*[https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP na Wikipedia]
 +
 
 +
===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 baixam um objeto HTTP. Execute os seguintes passos:
 +
#inicie o navegador web;
 +
#limpe o cache do seu navegador('''Ctrl + Shift + Del''');
 +
#inicie o Wireshark;
 +
#digite o URL no navegador http://tele.sj.ifsc.edu.br/~odilson/RED29004//RED29004.html seu navegador deve exibir um arquivo em HTML muito simples com duas linhas;
 +
#pressione o botão “refresh” ('''F5''') no navegador (ou digite o URL novamente);
 +
#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 ''fiveicon'', que é relativa ao ''download'' do ícone do IFSC.
 +
 
 +
Responda às seguintes questões:
 +
#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”?
 +
#Inspecione o conteúdo da primeira resposta do servidor. O servidor retornou explicitamente o conteúdo do arquivo? Como você pode dizer isso?
 +
#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”?
 +
#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?
 +
#O servidor retornou explicitamente o conteúdo do arquivo? Explique.
 +
#Qual o tamanho da primeira e segunda mensagem de retorno do servidor?
 +
 
 +
===PARTE 2 -Documentos HTML com Objetos Incluídos===
 +
 
 +
Agora que vimos como o Wireshark mostra o tráfego capturado para arquivos em HTML grandes, nós 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:
 +
#inicie o navegador web;
 +
#limpe o cache do seu navegador;
 +
#inicie o Wireshark;
 +
#digite o URL no navegador  http://tele.sj.ifsc.edu.br/~odilson/RED29004/RED29004_arq3.html seu navegador deve exibir um arquivo pequeno em HTML com duas imagens incluídas. Estas duas imagens estão referenciadas no arquivo em HTML. Isto é, as imagens não estão no arquivo em HTML, ao invés disso, há um URL para cada imagem no arquivo em HTML. Como discutido no livro, seu navegador terá que baixar estas imagens dos locais correspondentes. As imagens estão em docente.ifsc.edu.br;
 +
#Verifique o código fonte da página, clicando com o botão direito sobre ela. Observe os links dentro do código html.
 +
#digite o URL no navegador  http://tele.sj.ifsc.edu.br/~odilson/RED29004/RED29004_arq4.html 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;
 +
#Verifique o código fonte da página, clicando com o botão direito sobre ela. Observe os links dentro do código html.
 +
#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.
 +
 
 +
Responda às seguintes questões:
 +
#Quantas mensagens HTTP GET foram enviadas pelo seu navegador em cada acesso?
 +
#Para quais endereços na Internet estas mensagens foram enviadas em cada acesso?
 +
#Você consegue dizer se o seu navegador baixou imagens com ou sem paralelismo? Explique e diferencie o comportamento em cada um dos casos.
 +
 
 +
===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:
 +
#inicie o navegador web;
 +
#limpe o cache do seu navegador;
 +
#inicie o Wireshark;
 +
#digite o seguinte URL no navegador https://www.ssllabs.com/ssltest/;
 +
#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.
 +
 
 +
Responda:
 +
#Compare a sequência de troca de mensagens (GET e resposta) entre o HTTP (das seções anteriores) com o ssl, existe alguma similaridade?
 +
#Que tipos de campos são mais presentes nesse tipo de mensagens?
 +
#Você consegue identificar o conteúdo de alguma nas mensagens ssl, como no caso das mensagens http?
 +
 
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 6 - Servidor Apache e Construção de Página HTML}}
 +
 
 +
===Objetivos===
 +
*Introdução a ferramenta de simulação de redes Netkit.
 +
*Configurando o servidor Apache para disponibilizar páginas HTML.
 +
*Construindo e disponibilizando páginas HTML.
 +
*Noções de ''shell script'' para automatizar tarefas.
 +
 
 +
===Fonte base===
 +
 
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/ServidorApache.pdf SLIDES DE APOIO: Introdução à Programação “para Web”]. Baseado no resumo destes material Introdução à Programação para Web de Carlos Bazilio: [http://www.ic.uff.br/~bazilio/cursos/java/slides/Introducao.pptm]
 +
*[https://www.apache.org/ Apache]
 +
 
 +
===Máquinas Virtuais UML / Netkit2===
 +
 
 +
[http://docente.ifsc.edu.br/odilson/RDC60803/SlidesApoioMaquinaVirtual.pdf Conceitos de máquinas virtuais]
 +
 
 +
Para esta aula de laboratório estaremos usando o [https://wiki.sj.ifsc.edu.br/index.php/Netkit2 netkit2] do Prof. Sobral, uma extensão do [http://wiki.netkit.org/index.php/Main_Page netkit] da '''Universidade Roma Tre'''.
 +
Trata-se de uma ferramenta que que permite criar máquinas virtuais leves sobre o linux. Estas máquinas podem ser ligadas em rede. Neste laboratório conectaremos uma máquina virtual na REDE do Laboratório através de uma bridge.
 +
 
 +
===O Servidor Apache===
 +
 
 +
Neste laboratório vamos criar uma página html e hospedá-la em um máquina virtual com o [http://www.apache.org/ Web Server Apache]. Para maiores informações consulte [http://softwarelivre.org/php/servidor-web-apache Visão Geral do Apache ].
 +
 
 +
===PARTE 1 - Colocando o servidor Apache no ar no Netkit===
 +
 
 +
#Inicialmente vamos colocar um Máquina Virtual (VM)  Netkit conectada com uma bridge para que possamos acessá-la de qualquer lugar do laboratório. Utilize o editor de texto Gedit e salve as definições do laboratório abaixo em um arquivo '''/home/aluno/lab.conf''':<syntaxhighlight lang=bash>
 +
pc1[type]=generic
 +
pc1[eth0]=uplink:bridge=eth0:ip=dhcp
 +
</syntaxhighlight>
 +
#Rode o '''netKit''' em seu computador. Em um terminal digite: <syntaxhighlight lang=bash> mkdir .netkit
 +
netkit2 & </syntaxhighlight>
 +
#Caso surja uma mensagem recomendando atualizar o Netkit, faça-o através do menu: '''<General> <Update>'''. Aguarde a finalização do processo.
 +
#No menu '''<File> <Load and Run>''', procure o arquivo '''/home/aluno/lab.conf''' e clique em OK. Abrirá um terminal da máquina virtual (VM) que estará rodando servidor Apache que vamos utilizar, onde é possível fazer a configuração do mesmo.
 +
#<span style="color: red;">Dica: não tente alterar o tamanho da janela do Netkit. Se isso for feito não consegue-se mais voltar ao tamnho original.
 +
#Ao clicar no menu '''<File> <Graph>''', pode-se ter uma visão da rede a ser simulada e conferir se é equivalente ao diagrama proposto.
 +
#Identifique o IP da VM usando o comando '''ifconfig'''. Esse será, doravante, seu '''''endereço_IP'''''.
 +
#*<span style="color: blue;">Dica: para copiar textos para o Netkit, copie normalmente o texto, por exemplo, da Wiki, com o < Ctrl > + < C > e cole clicando sobre a rodinha (''scroll'') do mouse.
 +
#Teste a conectividade entre a máquina virtual e a máquina hospedeira com o comando ping. Na VM execute: <syntaxhighlight lang=bash>
 +
ping 192.168.1.1 </syntaxhighlight>
 +
#Coloque o servidor apache em execução. Este servidor escutará na porta 80 por requisições de páginas (objetos HTTP). Execute no terminal da VM: <syntaxhighlight lang=bash> /etc/init.d/apache2 start </syntaxhighlight>
 +
#Inicie o Wireshark em sua máquina.
 +
#Abra o Firefox na sua máquina (hospedeira) e coloque como endereço: <syntaxhighlight lang=bash>  http://endereco_IP </syntaxhighlight>
 +
#Pronto. Você está acessando a página ''default'' do Apache da VM.
 +
#Você pode verificar o arquivo de definição da página ''default'' na VM com o comando: <syntaxhighlight lang=bash> cat /var/www/index.html </syntaxhighlight>
 +
#Com sua experiência com o Wireshark filtre as mensagens trocadas entre o servidor da VM e seu navegador.
 +
##Localize os comandos GET e a resposta do servidor.
 +
##Observe quais são os IPs de destino e fonte da requisição e resposta.
 +
##Observe as portas de destino e fonte da requisição e resposta.
 +
##Qual versão do HTTP está sendo usada?
 +
#Escolha um servidor web de um colega, acesse a página HTML desse colega e repita as capturas de pacotes.
 +
 
 +
===PARTE 2 - Colocando no ar a sua página HTML===
 +
 
 +
Nesta parte do experimento vamos editar um código HTML e disponibilizá-la em um diretório especial por você criado. Observe que vamos editar a página no hospedeiro e salvá-la em um diretório compartilhado entre a máquina hospedeira e a MV.
 +
 
 +
#Usando o Gedit,  salve o código html abaixo como no arquivo '''/home/aluno/lab/shared/index.html''' da sua máquina hospedeira.<syntaxhighlight lang=bash>
 +
<!DOCTYPE html>
 +
<html>
 +
<body>
 +
 
 +
<h1>Alo Mundo</h1>
 +
 
 +
<p>Estamos sendo visitados por extraterrestres...</p>
 +
 
 +
</body>
 +
</syntaxhighlight>
 +
#Crie a adapte para o seu caso um [https://pt.wikipedia.org/wiki/Shell_script Shell Script] com o conteúdo exemplo abaixo. Com o Gedit crie um arquivo e salve como '''/home/aluno/lab/shared/config_apache.sh''' <syntaxhighlight lang=bash>
 +
#!/bin/bash
 +
mkdir /var/www/ET
 +
chmod 755 /var/www/ET
 +
cp /hostlab/shared/index.html /var/www/ET
 +
chmod 555 /var/www/ET/index.html
 +
service apache2 restart </syntaxhighlight>
 +
#Em sua máquina hospedeira transforme o script em executável. Num terminal digite: <syntaxhighlight lang=bash> chmod +x /home/aluno/lab/shared/config_apache.sh </syntaxhighlight>
 +
#O shell script será executado na máquina virtual do apache, portanto, abra o terminal da mesma no Netkit e digite: <syntaxhighlight lang=bash>
 +
/hostlab/shared/config_apache.sh
 +
</syntaxhighlight>
 +
#Agora você deve ser capaz de acessar a página recém criada através do seu navegador no hospedeiro usando o endereço: <syntaxhighlight lang=bash>  http://endereco_IP/ET </syntaxhighlight>
 +
#Personalize a página HTML acrescentando novas frases de sua preferência.  Para isso repita os passos: 1, 3 e 4.
 +
#Avise o professor para que ele mostre no telão sua página através do Epoptes.
 +
#Acesse as páginas HTML personalizadas dos demais colegas.
 +
#Se desejar, crie outras páginas, para isto basta executar os passos 1 a 5, só que criando diretórios com nomes distintos dos demais já existentes. Cada novo diretório poderá conter uma nova página.
 +
#Também se desejar incremente suas novas páginas com figuras (objetos). Lembre-se de copiar esse objetos para o diretório pertinente na VM.
 +
#*Com o navegador acesse as novas páginas criadas.
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 7 - 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:
 +
#O lado cliente do DNS.
 +
#Uma pequena análise do protocolo e
 +
#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. Do ponto de vista do cliente DNS, contudo, o protocolo é bastante simples - uma consulta é feita ao seu servidor DNS e uma resposta é recebida deste servidor.
 +
 
 +
===Fonte Base===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/Servico%20de%20Nomes%20DNS.pdf Serviço de Nomes - DNS]
 +
 
 +
===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.
 +
 
 +
#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. Use a ferramenta nm-tool ou acesso ao arquivo de configuração do sistema:<syntaxhighlight lang=bash>
 +
cat /etc/resolv.conf</syntaxhighlight>
 +
#Prepare o wireshark para capturar pacotes.
 +
#Execute o ping para um endereço de host conhecido <syntaxhighlight lang=bash>
 +
ping www.ifsc.edu.br</syntaxhighlight>
 +
#Pare a captura de pacotes no Wireshark e coloque um filtro de display para mostrar apenas mensagens DNS e de ICMP<syntaxhighlight lang=bash>
 +
dns || icmp </syntaxhighlight>
 +
#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) que indica resolução de nome.
 +
#:
 +
#:[[Arquivo:DNS-Tela1-Wireshark.jpg | 900px| 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).
 +
#:
 +
#:
 +
#:[[Arquivo:DNS-Tela2-Wireshark.jpg | 900px| Estrutura de uma resposta simples DNS]]
 +
#Perguntas a serem respondidas, baseado nos pacotes "''Standard query''" e "''Standard query response''":
 +
##Quem são os servidores DNS da sua máquina?
 +
##O ping gerou pergunta para cada um deles?
 +
##Qual o tipo da RR associada a pergunta (''Queries''). O que significa?
 +
##Qual endereço IP retornado para o www.ifsc.edu.br?
 +
##Qual endereço IP usado no ping (ver pacote REQUEST ICMP)?
 +
##Qual protocolo de transporte, camada 4, que foi usado para transportar as mensagens de aplicação DNS?
 +
##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 colsulta se fornece um IP e o servidor devolve o nome da máquina.
 +
#Perguntas a serem respondidas:
 +
##Qual o IP que se pretende resolver?
 +
##Qual o nome retornado?
 +
##O nome retornado é www.ifsc.edu.br? Sim ou não? Explique.
 +
 
 +
===PARTE 2 - Consultas DNS por meio de ferramentas especializadas===
 +
# Usando o programa [http://manpages.ubuntu.com/manpages/precise/man5/hosts.5.html host], [http://manpages.ubuntu.com/manpages/trusty/en/man1/nslookup.1.html Nslookup] ou [http://manpages.ubuntu.com/manpages/precise/man1/dig.1.html 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
 +
# 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: <syntaxhighlight lang=bash>
 +
host -t ns ifsc.edu.br
 +
dig -t ns ifsc.edu.br
 +
</syntaxhighlight>
 +
# 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: <syntaxhighlight lang=bash>
 +
host -t mx ifsc.edu.br
 +
dig -t mx ifsc.edu.br
 +
</syntaxhighlight>Descubra e anote no relatório quem é o servidor de emails nos seguintes domínios:
 +
#* gmail.com
 +
#* hotmail.com
 +
#* ifsc.edu.br
 +
# 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: <syntaxhighlight lang=bash>
 +
dig -x 200.135.37.65
 +
</syntaxhighlight> ... o ''dig'' tem um resultado um pouco mais carregado que os outros utilitários (''host'' e ''nslookup''), 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: <syntaxhighlight lang=bash>
 +
dig -x 200.135.37.65 +short
 +
</syntaxhighlight>
 +
#Faça uma consulta iterativa com dig e responda:<syntaxhighlight lang=bash>
 +
dig +trace mail.ru. </syntaxhighlight>
 +
##Qual foi o RLD (''Root Level Domain'') consultado?
 +
##Qual o TLD (''Top Level Domain'') consultado?
 +
##Qual o SLD (''Second Level Domain'') consultado?
 +
##Como você sabe que foram esses os LDs consultados?
 +
#Consultando um servidor explícito(@)<syntaxhighlight lang=bash>
 +
dig @j.root-servers.net. +trace www.sj.ifsc.edu.br. </syntaxhighlight>
 +
#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.
 +
## Descubra quem são os servidores raiz (topo de hierarquia DNS): <syntaxhighlight lang=bash>
 +
host -t ns .
 +
dig -t ns .
 +
</syntaxhighlight>
 +
## Escolha um dos servidores TLD listados, e use-o para fazer as consultas. Por exemplo: <syntaxhighlight lang=bash>
 +
host -v -t a www.sj.ifsc.edu.br. j.root-servers.net.
 +
</syntaxhighlight>... e observe a seção '';; AUTHORITY SECTION:''. Ele contém a listagem de servidores DNS que podem atender sua consulta.
 +
## Continue fazendo as consultas aos servidores DNS listados, até conseguir traduzir o nome requisitado. Por exemplo: <syntaxhighlight lang=bash>
 +
host -v -t a www.sj.ifsc.edu.br. b.dns.br </syntaxhighlight>
 +
## Quantos servidores DNS foram necessários consultar no total?
 +
 
 +
===Algumas consultas AAAA===
 +
Vamos expandir um pouco nossos horizontes e fazer algumas consultas envolvendo IPv6.
 +
#No terminal de sua máquina faça uma consulta e responda: qual o endereço IPv6 dos hosts? Por exemplo: <syntaxhighlight lang=bash>
 +
dig AAAA google.com
 +
host -t AAAA google.com </syntaxhighlight>
 +
##webmail.ufsc.br
 +
##www.sj.ifsc.edu.br
 +
##www.nyt.com
 +
##ipv6.br
 +
##www.microsoft.com
 +
#Agora vamos fazer a consulta reversa. Qual é o nome de host dos seguintes endereços? Por exemplo: <syntaxhighlight lang=bash>
 +
dig -x 2001:12ff::10
 +
dig -x 2001:12ff::10 +short
 +
host 2001:12ff::10 </syntaxhighlight>
 +
##2801:84:0:2::10
 +
##2001:12d0:0:126::183:244
 +
##2001:12ff::10
 +
##2804:1454:1004:100::2
 +
 
 +
===Analisando o protocolo via Wireshark===
 +
Agora que já está ficando claro como funcionam as consultas DNS, deve-se investigar como se dá a comunicação entre seu computador e seu servidor DNS.
 +
#abra o navegador web e limpe o cache do mesmo;
 +
#abra o Wireshark e escolha a interface e inicie a captura de pacotes;
 +
#inicie a captura de pacotes no Wireshark;
 +
#no terminal digite '''dig +trace canon.jp''' (isso vai provocar a consulta DNS);
 +
#pare a captura de pacotes;
 +
#No Wireshark digite “dns” no filtro (sem as aspas);
 +
Com base nisso identifique o seguinte:
 +
#quantas mensagens são trocadas entre cliente e servidor DNS para cada consulta?
 +
#que protocolo de transporte é usado?
 +
#que portas de origem e destino são utilizadas?
 +
#qual o formato das mensagens DNS? Elas são textuais como as mensagens HTTP?
 +
#qual o tipo de registro DNS acessado em cada consulta?
 +
#que informações estão contidas nas respostas DNS? Há algo além do que foi pedido?
 +
#qual o tamanho das mensagens DNS?
 +
#qual endereço IP a mensagem de consulta DNS é enviada? Foi o mesmo ip obtido na seção anterior: seu servidor DNS?
 +
#examine a mensagem de consulta DNS. Qual o campo “type” desta mensagem?
 +
#a mensagem de consulta contém algum campo “answer”?
 +
#examine a mensagem de resposta DNS. Quantos campos com “answer” existem?
 +
#quais são os benefícios de usar o UDP ao invés do TCP como protocolo de transporte para o DNS?
 +
 
 +
===Exemplos de arquivos de um ''Second Level Domain'' fictício===
 +
*Exemplo de arquivos de configuração de um servidor [https://www.isc.org/downloads/bind/ BIND]
 +
/etc/bind/db.redes <syntaxhighlight lang=bash>
 +
$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 </syntaxhighlight>
 +
 
 +
/etc/bind/db.2.168.192 (Zona reversa) <syntaxhighlight lang=bash>
 +
$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. </syntaxhighlight>
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 8 - 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===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/UDP%20Basico.pdf Introdução a camada de transporte e UDP básico]
 +
 
 +
===Parte 1 - Fluxo único UDP===
 +
 
 +
#Combinar equipes com dois computadores para execução do experimento.
 +
#*Uma equipe escutará na porta 5000 e a outra equipe transmitirá uma mensagem nessa porta. Os processos de transmissão e recepção podem ocorrer simultaneamente, em terminais distintos.
 +
#*Cada equipe deve identificar os IPs ('''IP_DEST''') das máquinas de seus pares.
 +
#Cada equipe deve abrir uma Janela de terminal.
 +
#Cada equipe deve preparar o '''Wireshark''', interfaces '''any''', para escuta das portas no protocolo UDP usando um filtro:<syntaxhighlight lang=bash>
 +
udp.port==5000</syntaxhighlight>
 +
#A equipe da escuta na porta 5000 executa no terminal: <syntaxhighlight lang=bash>
 +
netcat -u -l -p 5000 </syntaxhighlight>
 +
#A equipe que irá transmitir para a porta 5000 executa no terminal: <syntaxhighlight lang=bash>
 +
netcat -u IP_DEST 5000 </syntaxhighlight>
 +
#*Em seguida escreve no terminal uma mensagem de até 20 caracteres, ao teclar <Enter> a mensagem será enviada.
 +
#*O wireshark deve ter capturado os pacotes UDP
 +
#Identifique e anote os seguintes dados na captura do wireshark:
 +
#*IP FONTE e DESTINO
 +
#*PORTAS FONTE E DESTINO para ambas comunicações
 +
#*Campo de protocolo no pacote IP
 +
#*Campo de tamanho (anote o tamanho) e ''checksum'' no pacote (datagrama) UDP
 +
#*O campo de dados no pacote UDP
 +
#Troquem os papéis das equipes: quem houvia agora transmite mensagens.
 +
#Cada equipe pode transmitir sequencialmente várias mensagens, devendo identificar múltiplos datagramas UDP.
 +
#PERGUNTAS baseadas na captura:
 +
##Qual o tamanho de cada campo do cabeçalho do pacote UDP?
 +
##Qual o tamanho máximo do número de porta?
 +
##Qual o tamanho máximo da área de dados (payload) do pacote?
 +
##Qual o número identificador de protocolo UDP no pacote IP?
 +
##Em algum momento foi identificado algum procedimento para estabelecimento de conexão?
 +
##Em algum campo do UDP existe numeração de mensagens?
 +
 
 +
===Parte 2 - Experimento com UDP - MUX e DEMUX===
 +
 
 +
#Conceber um adendo ao experimento anterior para demonstrar a multiplexação e demultiplexação de informação.
 +
#*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).
 +
#Capture os pacotes com o Wireshark e caracterize quais pacotes pertencem a cada fluxo (porta).
 +
#Mostre o experimento ao professor, que projetará o mesmo no telão.
 +
 
 +
'''DESAFIO''' (para casa?): capture e anote byte a byte o conteúdo de um pequeno pacote UDP (e dados IP) e calcule o CHECKSUM do mesmo (pesquise no google como fazer).
 +
{{Collapse bottom}}
 +
{{Collapse top |Laboratório 9 - 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===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/TCP%20Basico.pdf Camada de transporte: TCP básico]
 +
 
 +
==Configuração do Laboratório==
 +
O netkit2 deve ser atualizado manualmente com este procedimento:
 +
# Abrir um terminal
 +
# Baixar o programa do ''Netkit2'' com o comando: <syntaxhighlight lang=bash>
 +
wget http://tele.sj.ifsc.edu.br/~msobral/netkit2/bin/netkit2
 +
</syntaxhighlight>
 +
# Copiá-lo para o diretório do Netkit2 com o comando: <syntaxhighlight lang=bash>
 +
cp netkit2 ${NETKIT2_HOME}/bin/
 +
</syntaxhighlight>
 +
 
 +
O roteiro será executado sobre 3 máquinas virtuais, através do uso do [[Netkit2 | Netkit2]]. Copie o texto abaixo no '''Gedit''' e salve com o nome '''/home/aluno/TCP.conf'''.
 +
<syntaxhighlight lang=text>
 +
PC1[type]=generic
 +
PC2[type]=generic
 +
PC3[type]=generic
 +
 
 +
 
 +
PC1[eth0]=lan0:ip=10.0.0.1/24
 +
PC2[eth0]=lan0:ip=10.0.0.2/24
 +
PC3[eth0]=lan0:ip=10.0.0.3/24
 +
</syntaxhighlight>
 +
 
 +
===Verificando o estabelecimento, troca de dados e finalização da conexão===
 +
 
 +
#Executar a configuração do laboratório no Netkit. Abra o NetKit2 e abra o arquivo de configuração: <syntaxhighlight lang=bash>
 +
File > Load and Run </syntaxhighlight>
 +
#*Perceba que abrirá uma janela com três abas inferiores, representando três máquina virtuais criadas pelo Netkit, denominadas: PC1, PC2 e PC3. Cada uma dessas abas é o terminal de configuração da respectiva máquina virtual.
 +
#Executar no PC2 um servidor TCP aguardando na porta 5555 na forma: <syntaxhighlight lang=bash> netcat -l 5555 </syntaxhighlight>
 +
#*Obs.: para copiar texto para as máquinas do NetKit, pode-se copiar normalmente o texto e em seguida, no terminal do NetKit apropriado, clique na "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
 +
#Executar no PC3 o tcpdump com foco na porta tcp 5555 e para salvar pacotes em arquivo: <syntaxhighlight lang=bash> tcpdump -i eth0 tcp port 5555 -s 1024 -U -w /hostlab/shared/pc3.cap </syntaxhighlight>
 +
#Executar no PC1 um cliente TCP que solicita uma conexão ao servidor: <syntaxhighlight lang=bash>  netcat 10.0.0.2 5555 </syntaxhighlight>
 +
#Enviar uma pequena mensagem de 5 caracteres, e no final teclar ENTER e depois CTRL+D.
 +
#*O CTRL-D encerra a conexão no netcat
 +
#Vá até o terminal do PC3 e encerre a captura de pacotes do '''tcpdump''' digitando CTRL+C.
 +
#Abrir o arquivo de captura gravado no PC3 com o Wireshark. Temos duas possibilidades para fazer isso, escolha uma das duas:
 +
##Abrir o Wireshark e ir no menu File > Open > Pasta Pessoal > lab > shared > pc3.pcap
 +
##Abrir o "navegador de arquivos" e encontrar procurar o arquivo na pasta aluno/lab/shared/pc3.pcap (/home/aluno/lab/shared/pc3.pcap).
 +
#Todos pacotes TCP, desde o estabelecimento até a desconexão devem estar capturados. Um exemplo dessa captura encontra-se na Figura 1.
 +
[[Arquivo:WiresharkTCP.png |thumb | 600px| Fig.1 -- Protocolo TCP]]
 +
#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.
 +
#*Pratique seu inglês e leia um pouco sobre este processo de estabelecimento de conexão em [https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_establishment Connection Establishment]
 +
#Baseado na captura de pacotes realizada responda:
 +
##Quais foram as portas de origem e destino usadas?
 +
##Quais os tamanhos das janelas informadas, tanto pelo cliente quanto pelo servidor?
 +
##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?
 +
##Em qual mensagem (número) aparece a texto que você digitou?
 +
##Qual o número identificador de protocolo TCP no pacote IP?
 +
#*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 zero.
 +
#*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 [https://wiki.wireshark.org/TCP_Relative_Sequence_Numbers])
 +
#Volte ao wireshark e analise o processo de termino da conexão (iniciado pelo cliente neste caso, no momento do CTRL+D).
 +
#*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 [http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm Término de conexão TCP] ou com os [http://docente.ifsc.edu.br/odilson/RDC60803/TCP%20Basico.pdf slides] apresentados no início da aula.
 +
#Gere com o wireshark um diagrama da comunicação, ou diagrama de troca de mensagens, fazendo: Statistics > Flow Graph > OK
 +
#Analise esse diagrama, observando qual pacote  contém os dados, ou seja, o texto que você digitou.
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 10 - Desvendando o TCP - Número de Sequência,  Controle de Erros e Funcionamento Full-Duplex}}
 +
 
 +
===Objetivos===
 +
 
 +
*Verificar:
 +
**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
 +
 
 +
===Fonte Base===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/TCP%20controle%20de%20erros.pdf TCP - Controle de Erros]
 +
 
 +
==Configuração do Laboratório==
 +
O roteiro será executado sobre máquinas virtuais, através do uso do [[Netkit2 | Netkit2]]. Copie o texto abaixo, abra o editor Gedit, cole o texto e salve o arquivo em /home/aluno/TCP.conf.
 +
<syntaxhighlight lang=bash>
 +
PC1[type]=generic
 +
PC2[type]=generic
 +
PC3[type]=generic
 +
 +
 +
PC1[eth0]=lan0:ip=10.0.0.1/24
 +
PC2[eth0]=lan0:ip=10.0.0.2/24
 +
PC3[eth0]=lan0:ip=10.0.0.3/24
 +
</syntaxhighlight>
 +
 
 +
===PARTE 1 - Transmissão sem erros: Verificação de Número de Sequência, Reconhecimentos e Controle de Fluxo===
 +
#Executar a configuração do laboratório no Netkit. Abra o NetKit2 e abra o arquivo de configuração: <syntaxhighlight lang=bash>
 +
File > Load and Run </syntaxhighlight>
 +
#*Perceba que abrirá uma janela com três abas inferiores, representando três máquina virtuais criadas pelo Netkit, denominadas: PC1, PC2 e PC3. Cada uma dessas abas é o terminal de configuração da respectiva máquina virtual.
 +
#Utilize o editor de texto '''gedit''' da máquina real, inclua o texto abaixo, e salve como '''/home/aluno/lab/shared/arq.tx''' <syntaxhighlight lang=bash>
 +
ABCDEFGHIJKLMNOPQRSTUVXZW1234 </syntaxhighlight>
 +
#Execute o tcpdump no PC3 <syntaxhighlight lang=bash>
 +
  tcpdump -i eth0 tcp port 5555 -s 1024 -U -w /hostlab/shared/pc3.pcap </syntaxhighlight>
 +
#Execute os comandos abaixo no PC2 (copie e cole).
 +
##O primeiro comando limita 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.
 +
##O segundo comando abre a porta 5555, através do netcat, e espera a chegada dos dados.<syntaxhighlight lang=bash>
 +
sysctl -w net.ipv4.tcp_rmem='20 20 20'
 +
netcat -l 5555 > arq.rx </syntaxhighlight>
 +
#Envie o arquivo arq.tx a partir do PC1 com o comando:<syntaxhighlight lang=bash>
 +
netcat 10.0.0.2 5555 < /hostlab/shared/arq.tx </syntaxhighlight>
 +
#No PC3 faça CTRL+C, para parar a captura de pacotes.
 +
#Abra o arquivo de captura gravado no PC3 (/home/aluno/lab/shared/pc3.pcap) com o Wireshark:
 +
##Abrir o Wireshark e ir no menu File > Open > Pasta Pessoal > lab > shared > pc3.pcap
 +
#Você terá algo parecido com o apresentado na Figura 1.[[Arquivo:WiresharkTCPPerdaDePacotes.png |thumb | 600px| Fig.1 -- Protocolo TCP]]
 +
#Analise como os dados foram transmitidos e reconhecidos.
 +
====Perguntas====
 +
#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?
 +
#Como foi reconhecido cada segmento enviado? 
 +
#*Relate esta análise por segmento usando os timestamps (coluna Time) como referência.
 +
 
 +
====Arquivo CAP deste experimento====
 +
 
 +
*[https://www.dropbox.com/s/cv82wa1r3jatvgp/tcp_parte1-pc3-sequencia-controle-fluxo.cap Sequencia.cap]
 +
 
 +
===PARTE 2 - Transmissão com erros: retransmissões===
 +
 
 +
#Repetir todo a parte 1 mas substituir o item 4 por: <syntaxhighlight lang=bash>
 +
sysctl -w net.ipv4.tcp_rmem='20 20 20'
 +
tc qdisc add dev eth0 root netem loss 50%
 +
netcat -l 5555 > arq.rx </syntaxhighlight>
 +
Perguntas:
 +
#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?
 +
#Como foi reconhecido cada segmento enviado?
 +
#Houve perda de pacotes? Como você identificou isso?
 +
#Os pacotes perdidos foram retransmitidos? Justifique.
 +
 
 +
====arquivo cap deste experimento====
 +
 
 +
*[https://www.dropbox.com/s/fb9izlu3ykin4yt/pc3-retransmissoes.cap  retransmissoes.cap]
 +
 
 +
===PARTE 3 - Testando a capacidade do TCP de enviar dados de forma duplex===
 +
 
 +
*Agora vamos deixar de lado o netkit para fazer um pequeno teste de transmissão de arquivos entre dois colegas.
 +
*No experimento, o arquivo de um aluno será transmitido para outro e vice-versa.
 +
 
 +
#Em um terminal da máquina real, crie um diretório de trabalho e entre no mesmo <syntaxhighlight lang=bash>
 +
mkdir teste
 +
cd teste </syntaxhighlight>
 +
#Com o '''gedit''' construa um arquivo de cerca de 2000 bytes. Coloque neste arquivo o seu poema ou letra de canção preferida. Salve o arquivo com nome '''/home/aluno/teste/arq.tx'''.
 +
#Escolha um colega para transferir o arquivo.
 +
##Negocie quem será o servidor e quem será o cliente.
 +
##No processo, o arquivo criado por um aluno será enviado ao colega e vice-versa (tx, rx).
 +
#O servidor deve fazer <syntaxhighlight lang=bash>
 +
netcat -l 5555 < arq.tx > arq.rx </syntaxhighlight>
 +
#*Ao término da transmissão, o arq.rx conterá os dados recebidos.
 +
#O cliente deve fazer, <span style="color: red;">lembre-se de adequar o IP_SERVIDOR<syntaxhighlight lang=bash>
 +
netcat IP_SERVIDOR 5555 < arq.tx > arq.rx </syntaxhighlight>
 +
#*<span style="color: black;">Ao término da transmissão, o arq.rx conterá os dados recebidos.
 +
#Abra o arquivo recebido do colega (arq.rx) com o '''gedit''' e confira o conteúdo.
 +
Perguntas:
 +
#Onde pode ser observado a comunicação ''full-duplex''?
 +
#Qual é a relação entre os comandos do cliente e servidor com a comunicação ''full-duplex''?
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 11 - Controle de congestionamento e equidade do TCP}}
 +
 
 +
===Objetivos===
 +
*Tem como objetivo gerar um gráfico para facilitar a visualização do '''controle de congestionamento''' e a consequente '''equidade''' do protocolo TCP.
 +
*Utilizar o software [https://iperf.fr/ Iperf] (iperf –h para help) para gerar tráfego entre duas máquinas, '''cliente''' e '''servidor'''.
 +
*Utilizar o software [[netkit2]].
 +
 
 +
===Fonte Base===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/TCP%20controle%20de%20congestionbamento%20e%20equidade.pdf TCP - Controle de Congestionamento e Equidade]
 +
*[https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/tcp-congestion/index.html Animação do controle de congestinamento]
 +
 
 +
===Roteiro===
 +
*O roteiro será executado sobre máquinas virtuais, através do uso do [[Netkit2 | Netkit2]].
 +
*Para realização dos ensaios será montada a rede virtual apresentada na Figura 1.
 +
 
 +
[[Arquivo:TCP_Rede_Controle_de_Fluxo.png |thumb | 200px| Figura 1 - Rede ara testes]]
 +
#Copie o texto abaixo e crie um arquivo com o '''Gedit''', salve-o como /home/aluno/TCP.conf.<syntaxhighlight lang=bash>
 +
# Definição das máquinas
 +
R1[type]=router
 +
PC1[type]=generic
 +
PC2[type]=generic
 +
PC3[type]=generic
 +
 
 +
# Definição dos roteadores padrão
 +
PC1[default_gateway]=10.0.0.254
 +
PC2[default_gateway]=10.0.1.254
 +
PC3[default_gateway]=10.0.1.254
 +
 
 +
# Definição das interfaces do roteador
 +
R1[eth0]=lan0:ip=10.0.0.254/24:rate=10000
 +
R1[eth1]=lan1:ip=10.0.1.254/24:rate=10000
 +
 
 +
# Definição das interfaces dos PCs
 +
PC1[eth0]=lan0:ip=10.0.0.1/24:rate=10000
 +
PC2[eth0]=lan1:ip=10.0.1.2/24:rate=10000
 +
PC3[eth0]=lan1:ip=10.0.1.3/24:rate=10000 </syntaxhighlight>
 +
#Execute o NetKit2.
 +
#Carregue o arquivo de configuração: <syntaxhighlight lang=bash>
 +
File > Load and Run </syntaxhighlight>
 +
#*Perceba que abrirá uma janela com quatro abas inferiores, representando um roteador e três máquina virtuais criadas pelo Netkit, denominadas: R1, PC1, PC2 e PC3. Cada uma dessas abas é o terminal de configuração do respectivo equipamento.
 +
#*Ao clicar no menu '''File - Graph''', pode-se ter uma visão da rede a ser simulada e conferir se é equivalente ao diagrama proposto.
 +
#Execute no PC3 o tcpdump para salvar a troca de dados entre o PC1 e o PC2 num arquivo: <syntaxhighlight lang=bash>
 +
tcpdump -i eth0 -w /hostlab/shared/pc3.cap </syntaxhighlight>
 +
#*Para copiar comando para os terminais das máquinas virtuais: copie o texto desejado, no Netkit selecione o terminal da máquina desejada e clique sobre a "rodinha" do mouse que o texto será colado.
 +
#No PC1 (servidor) execute: <syntaxhighlight lang=bash>
 +
iperf -s -p 2000 & iperf -s -p 2001 & iperf -s -p 2002 & </syntaxhighlight>
 +
#No PC2 (cliente) execute (copie a três linhas e cole no terminal adequado e em seguida tecle <Enter>): <syntaxhighlight lang=bash>
 +
iperf -c 10.0.0.1 -f m -i 1 -t 90 -p 2000 -l 1300 & \
 +
(sleep 20; iperf -c 10.0.0.1 -f m -i 1 -t 70 -p 2001 -l 1300) & \
 +
(sleep 30; iperf -c 10.0.0.1 -f m -i 1 -t 60 -p 2002 -l 1300) & </syntaxhighlight>
 +
#Fique monitorando o PC2 até a tela parar de ser atualizada, aproximadamente 90 s.
 +
#Pare os processos nos três PCs utilizando CTRL-C.
 +
#Abra o Wireshark.
 +
#Abra o arquivo <syntaxhighlight lang=bash>
 +
File > Open > /home/aluno/lab/shared/pc3.cap </syntaxhighlight>
 +
#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.
 +
#*Perceba que todos os botões '''Graph 1...4''' devem ser clicados,  e os filtros aplicados (tcp.port==2000; tcp.port==2001; tcp.port==2002) isso fará com que o Wireshark mostre as respectivas curvas. [[Arquivo:TCP_Wireshark.png |thumb | 400px| Figura 2 - Captura de 3 fluxos de dados]]
 +
#Responda:
 +
##Explique detalhadamente o significado de cada parâmetro dos comandos dos itens 5 e 6 acima, tanto do cliente quanto do servidor.
 +
##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?
 +
##Por que a curva vermelha se sobrepõe a curva preta nos primeiros 20 segundos? Considere o início do tempo onde há início de tráfego!
 +
##Qual é a relação entre a curva preta e as curvas vermelha e verde no intervalo entre 20 e 30 segundos?
 +
##Explique a relação entre as 4 curvas e o comando do cliente (item 5) no intervalo entre 20 e 40 segundos.
 +
##Qual é o mecanismo do TCP que explica a grande oscilação das curvas, principalmente percebida no intervalo entre 20 e 30 segundos?
 +
 
 +
=====Incluindo 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.
 +
#Deslique o NetKit2, para limpar todos os processos e ''buffers'': <syntaxhighlight lang=bash>
 +
File > Quit </syntaxhighlight>
 +
#Copie o texto abaixo e crie um arquivo, salve-o como /home/aluno/TCPxUDP.conf: <syntaxhighlight lang=bash>
 +
# Definição das máquinas
 +
R1[type]=router
 +
PC1[type]=generic
 +
PC2[type]=generic
 +
PC3[type]=generic
 +
PC4[type]=generic
 +
 +
# Definição dos roteadores padrão
 +
PC1[default_gateway]=10.0.0.254
 +
PC2[default_gateway]=10.0.1.254
 +
PC3[default_gateway]=10.0.1.254
 +
PC4[default_gateway]=10.0.1.254
 +
 +
# Definição das interfaces do roteador
 +
R1[eth0]=lan0:ip=10.0.0.254/24:rate=10000
 +
R1[eth1]=lan1:ip=10.0.1.254/24:rate=10000
 +
 +
# Definição das interfaces dos PCs
 +
PC1[eth0]=lan0:ip=10.0.0.1/24:rate=10000
 +
PC2[eth0]=lan1:ip=10.0.1.2/24:rate=10000
 +
PC3[eth0]=lan1:ip=10.0.1.3/24:rate=10000
 +
PC4[eth0]=lan1:ip=10.0.1.4/24:rate=10000 </syntaxhighlight>
 +
#Execute o NetKit2 e carregue o arquivo de configuração.
 +
#No PC4 execute: <syntaxhighlight lang=bash>
 +
tcpdump -i eth0 -w /hostlab/shared/pc4.cap </syntaxhighlight>
 +
#No PC1 execute: <syntaxhighlight lang=bash>
 +
iperf -s -u -p 2000 & iperf -s -p 2001 & </syntaxhighlight>
 +
#A próxima etapa deve ser executada "simultaneamente" nos PC2 e PC3.
 +
##Para isso copie o texto abaixo e cole no terminal do PC2, ainda NÃO tecle <Enter>: <syntaxhighlight lang=bash>
 +
iperf -u -c 10.0.0.1 -f m -i 1 -t 60 -p 2000 -l 1300 -b 10000000 </syntaxhighlight>
 +
##Copie o texto abaixo e cole no terminal do PC3, ainda NÃO tecle <Enter>: <syntaxhighlight lang=bash>
 +
iperf -c 10.0.0.1 -f m -i 1 -t 90 -p 2001 -l 1300 </syntaxhighlight>
 +
##Tecle <Enter> no PC3 e PC2, NESSA ORDEM, "simultaneamente".
 +
#Fique monitorando o PC3 a tela parar de ser atualizada, aproximadamente 90 s.
 +
#Pare os processos nos quatro PCs utilizando CTRL-C.
 +
#Rode o Wireshark e abra o arquivo /home/aluno/lab/shared/pc4.cap.
 +
#Baseado na Figura 3, no '''Graph 2''' altere o filtro para '''udp.port==2000''' e no '''Graph 3''' altere o filtro para '''tcp.port==2001'''. Salve o gráfico gerado.
 +
[[Arquivo:TCPxUDP_Wireshark.png |thumb | 400px| Figura 3 - Captura de 2 fluxos de dados TCP e UDP]]
 +
#Responda as mesmas questões do item anterior, '''todas'''.
 +
#Explique o comportamento dos vários fluxos de dados com e sem o UDP.
 +
 
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 12 - TCP x UDP}}
 +
 
 +
===Objetivos===
 +
*O objetivo desses experimentos é evidenciar as diferenças entre os protocolos TCP e UDP.
 +
*Ambos protocolos de transporte podem ser usados por aplicações que precisem se comunicar. Porém cada um deles têm certas propriedades, então a escolha precisa ser realizada baseada no tipo de comunicação a ser feita pela aplicação.
 +
 
 +
==== Experimento 1 ====
 +
<span style="color: red;">Antes de qualquer experimento deve-se desabilitar algumas funcionalidades do kernel do LINUX, para que os experimentos reflitam a teoria. Caso sua interface de rede não seja a '''eth0''' adapte o comando, caso reiniciar a máquina repita-o:</span>
 +
<syntaxhighlight lang=bash>sudo ethtool --offload eth0 gso off tso off sg off gro off </syntaxhighlight>
 +
 
 +
O que aconteceria se um arquivo fosse transferido de um computador a outro com ambos protocolos?
 +
 
 +
# Abra um terminal e execute o seguinte comando para fazer o download de um arquivo a ser usado no experimento: <syntaxhighlight lang=bash>
 +
wget http://tele.sj.ifsc.edu.br/~odilson/RED29004/jogo.exe
 +
</syntaxhighlight>
 +
# Observe o tamanho do arquivo transferido ... ele deve ter exatamente 332831416 bytes (cerca de 318 MB). Você pode fazer isso com o comando '''ls -l jogo.exe''', ou executando o gerenciador de arquivos e visualizando as propriedades desse arquivo.
 +
# Escolha um colega para fazer o experimento em que o arquivo será transferido de um computador para o outro. NÃO pode ser na própria máquina. Um será o '''receptor''' e outro o '''transmissor'''.
 +
=====A primeira transferência será feita usando o protocolo TCP da seguinte forma=====
 +
#Execute o WireShark e deixe-o capturando pacotes '''somente''' durante a transferência do arquivo. Como o o comportamento padrão do wireshark é redefinir o número de sequência para sempre iniciar em um e isso pode atrapalhar nossos experimentos, vamos '''desabilitar/desativar''' essa funcionalidade: <syntaxhighlight lang=bash>
 +
Edit >> Preferences >> Protocols >> TCP >> Relative sequence numbers </syntaxhighlight>
 +
#No computador '''receptor''' execute o '''netcat''' ('''nc''') (utilize '''man nc''' para saber os detalhes das ''flags'' utilizadas) que abrirá uma conexão TCP na porta, por exemplo, 5555 e salvará os dados transferidos em '''arquivo''': <syntaxhighlight lang=bash>
 +
nc -vvnl 5555 > arquivoTCP
 +
</syntaxhighlight>
 +
#No computador '''transmissor''' execute, após o processo do '''receptor''' estar executando ('''adeque o ip_do_receptor para o devido número IP'''): <syntaxhighlight lang=bash>
 +
time nc -vvn ip_do_receptor 5555 < jogo.exe
 +
</syntaxhighlight>
 +
#Quando completar a transferência, pare o Wireshark.
 +
#Verifique o tamanho do arquivo recebido. Ele é igual ao arquivo original? E quanto tempo levou para transmiti-lo? No terminal digite: <syntaxhighlight lang=bash>
 +
ls -l </syntaxhighlight>
 +
#Analisando a captura de pacotes do WireShark responda:
 +
## Quais as portas origem e destino escolhidas pelo cliente e servidor?
 +
## Qual é o número de sequência do primeiro e do último pacote?
 +
## Qual é o número de sequência do primeiro e do último ACK?
 +
## Qual o Tamanho Máximo de Segmento (MSS) escolhidos pelo cliente e servidor na conexão.
 +
## É possível calcular o tamanho do arquivo pela análise dos pacotes? Qual é a maneira mais fácil? Apresente os cálculos ou descreva a maneira de obtenção do valor.
 +
## Qual é o tamanho do último segmento de dados recebido?
 +
## Todos os segmentos trocados entre as máquinas contém dados ou alguns são somente de controle? Qual o percentual aproximado de segmentos de controle?
 +
 
 +
=====A segunda transferência será feita usando o protocolo UDP=====
 +
#Execute o WireShark e deixe-o capturando pacotes '''somente''' durante a transferência do arquivo.
 +
#Combine com um colega e estabeleça quem suem será o transmissor e quem será o receptor. No computador '''receptor''' baixe o programa '''receptor''', acrescente a ele permissão de execução e o execute, conforme a sequência de comandos abaixo: <syntaxhighlight lang=bash>
 +
wget http://tele.sj.ifsc.edu.br/~odilson/RED29004/receptor
 +
chmod +x receptor
 +
./receptor 5555 > arquivoUDP
 +
</syntaxhighlight>
 +
#No computador '''transmissor''' baixe o programa '''transmissor''', acrescente a ele permissão de execução e o execute, conforme a sequência de comandos abaixo: <syntaxhighlight lang=bash>
 +
wget http://tele.sj.ifsc.edu.br/~odilson/RED29004/transmissor
 +
chmod +x transmissor </syntaxhighlight>
 +
#Inicie a transferência do arquivo ('''adeque o ip_do_receptor para o número IP do colega'''): <syntaxhighlight lang=bash>
 +
./transmissor ip_do_receptor 5555 < jogo.exe
 +
</syntaxhighlight>
 +
#Quando completar a transferência (vai aparecer a mensagem no '''transmissor''' "Levou XXXXX segundos para transmitir XXXXX bytes).
 +
#No '''receptor''' digite <CTRL + C>
 +
#Verifique o tamanho do arquivo recebido.
 +
##Ele é igual ao arquivo original?
 +
##Quanto tempo levou para transmiti-lo?
 +
#Analisando a captura de pacotes do WireShark responda:
 +
## Qual é o número de sequência do primeiro e do último pacote? Existe?
 +
## É possível calcular o tamanho do arquivo pela análise dos pacotes? É mais fácil ou difícil que no caso da transferência via TCP?
 +
## Há segmentos de controle ou somente segmentos de dados?
 +
## Qual é o tamanho do último segmento de dados recebido?
 +
# Compare as transferências feitas com os protocolos TCP e UDP.
 +
## O que eles têm em comum?
 +
## Que diferenças lhe pareceram mais pronunciadas?
 +
## Como isso deve afetar as aplicações que usam esses protocolos?
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 13 - Interligação de duas redes locais via um roteador}}
 +
 
 +
===Objetivos===
 +
 
 +
*Introdução ao mundo IP
 +
*Verificação das configurações de interfaces
 +
*Verificação de tabelas de roteamento nos hospedeiros e no roteador
 +
*Verificação de roteamento no roteador
 +
 
 +
===Fonte Base===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/IP%20Basico.pdf Introdução a Camada de Rede]
 +
*[http://tele.sj.ifsc.edu.br/~eraldo/AULAS/2018-2/RCO-INTEGRADO/MACxIP.pdf Endereçamento MAC x Endereçamento IP]
 +
 
 +
===Procedimento===
 +
 
 +
#Construir uma rede no Netkit com dois PCs e um roteador. Use um arquivo lab.conf da forma: <syntaxhighlight lang=text>
 +
r1[type]=router
 +
 +
pc1[type]=generic
 +
pc2[type]=generic
 +
 +
pc3[type]=generic
 +
pc4[type]=generic
 +
 +
r1[eth0]=lan0:ip=192.168.200.254/24
 +
r1[eth1]=lan1:ip=192.168.100.254/24
 +
 +
pc1[eth0]=lan0:ip=192.168.200.1/24
 +
pc1[default_gateway]=192.168.200.254
 +
 +
pc2[eth0]=lan0:ip=192.168.200.2/24
 +
pc2[default_gateway]=192.168.200.254
 +
 +
pc3[eth0]=lan1
 +
 +
pc4[eth0]=lan1:ip=192.168.100.2/24
 +
pc4[default_gateway]=192.168.100.254
 +
</syntaxhighlight>
 +
#Chamar o netkit2 (Aplicativos >> Educativo >> Netkit2)
 +
#Forçar a atualização do Netkit2: <syntaxhighlight lang=text> General >> Update </syntaxhighlight>
 +
#Carregar o arquivo '''lab.conf''' a partir do Netkit2:<syntaxhighlight lang=bash>
 +
File >> Load Only
 +
</syntaxhighlight>
 +
#Visualizar a rede a ser implementada:<syntaxhighlight lang=bash>
 +
File >> Graph
 +
</syntaxhighlight>
 +
#Executar a rede: <syntaxhighlight lang=bash>
 +
Network >> Start
 +
</syntaxhighlight>
 +
#Copie o diagrama da rede para o papel e, para todas interfaces de rede apresentadas no diagrama, anote, baseados nos comandos dos itens seguintes:
 +
##Endereço IP
 +
##Endereço MAC
 +
##Roteador padrão
 +
#Observar os endereços de hardware (ou MAC) e IP de cada dispositivo na rede. No terminal de cada '''pc''' execute: <syntaxhighlight lang=bash>
 +
ifconfig </syntaxhighlight>
 +
#Observar e interpretar a tabela de roteamento nos hospedeiros '''pc1''' e '''pc4'''. Identificar os ''default gateways'' em cada '''pc'''.<syntaxhighlight lang=bash>
 +
route -n
 +
</syntaxhighlight>
 +
#Observar e interpretar a tabela de roteamento no roteador ('''r1''')<syntaxhighlight lang=bash>
 +
exit
 +
route -n
 +
</syntaxhighlight>
 +
#Observar e "provar" que pacotes indo de '''pc1''' para '''pc4''' são encaminhados ao roteador e, em seguida, entregues ao destino, ou seja, entrega indireta.
 +
#*Use o '''ping''', '''tcpdump''' e seu diagrama de rede como apoio.
 +
#*Lembre-se que você pode verificar o fluxo de dados individualmente em cada interface de rede e, portanto, se certificar que se há ou não pacotes atravessando o roteador:
 +
#**Num primeiro momento em '''r1''':<syntaxhighlight lang=bash>
 +
tcpdump -i eth0 -n -e</syntaxhighlight>
 +
#**Em seguida, ainda em '''r1''': <syntaxhighlight lang=bash>
 +
tcpdump -i eth1 -n -e</syntaxhighlight>
 +
#**Ver: [http://www.tcpdump.org/tcpdump_man.html manpage do tcpdump]
 +
#Observar e "provar" que pacotes indo de '''pc1''' para '''pc2''' na '''lan0''' são enviados diretamente para '''pc2''', ou seja, entrega direta.
 +
#*Use o '''ping''' e '''tcpdump''' como apoio, adequando os comandos apresentados no item anterior.
 +
 
 +
===Configuração básica de interface de rede===
 +
#Configure a interface de rede no '''pc3'''.
 +
#*O mesmo deverá ser capaz de "pingar" para qualquer outro PC ou ser "pingado".
 +
#*Dica: observe a configuração de rede do '''pc4''' e tente adaptá-la para o '''pc3'''.
 +
#*Dica de ferramentas de configuração: use os comandos '''ifconfig''' e '''route'''. Use o '''man''' ou procure na web como utilizar esses comandos.
 +
#Execute o comando ping do '''pc3''' para o '''pc4'''. Obteve sucesso?
 +
#Execute o comando ping do '''pc3''' para o '''pc1'''. Obteve sucesso?
 +
#Execute o comando ping do '''pc2''' para o '''pc3'''. Obteve sucesso?
 +
 
 +
====Referências adicionais====
 +
 
 +
* [http://linux-ip.net/html Guia de Administração da Camada IP no Linux
 +
 
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 14 - Roteamento Estático em Redes }}
 +
 
 +
===Objetivo===
 +
 
 +
*Proporcionar ao aluno uma visão prática de roteamento IP.
 +
*Princípios de configuração de rotas.
 +
 
 +
===Fonte Base===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/IP%20Roteamento.pdf Introdução ao Roteamento]
 +
 
 +
====PARTE 1 - Rede com 3 roteadores====
 +
 
 +
:Laboratório a ser montado no netkit.
 +
 
 +
[[Image:LabRoteamento-RCO1-2017-2.png |thumb | 800px| Figura 1 - Rede para roteamento]]
 +
 
 +
#Construir a rede apresentada na Figura 1, usando como apoio a configuração do netkit descrita na sequência. As sub-redes (SN) a serem utilizadas na parte 1 e 2 são:
 +
## SN1 : 200.10.1.0/24
 +
## SN2 : 200.10.2.0/24
 +
## SN3 : 200.10.3.0/24
 +
## SN4 : 200.10.4.0/24
 +
## SN5 : 200.10.5.0/24
 +
## SN6 : 200.10.6.0/24
 +
## SN7 : 200.10.7.0/24
 +
## SN8 : 200.10.8.0/24
 +
#Abaixo o arquivo de configuração para o NetKit. Copie e salve como '''/home/aluno/roteamento.conf'''.<syntaxhighlight lang=text>
 +
 
 +
H1[type]=generic
 +
H2[type]=generic
 +
 
 +
R1[type]=generic
 +
R2[type]=generic
 +
R3[type]=generic
 +
 
 +
 
 +
H1[eth0]=SN1:ip=200.10.1.1/24
 +
H2[eth0]=SN8:ip=200.10.8.1/24
 +
 
 +
R1[eth0]=SN1:ip=200.10.1.254/24
 +
R1[eth1]=SN4:ip=200.10.4.1/24
 +
R1[eth2]=SN2:ip=200.10.2.1/24
 +
 
 +
 
 +
R2[eth0]=SN8:ip=200.10.8.254/24
 +
R2[eth1]=SN4:ip=200.10.4.2/24
 +
R2[eth2]=SN7:ip=200.10.7.1/24
 +
 
 +
R3[eth0]=SN2:ip=200.10.2.2/24
 +
R3[eth1]=SN7:ip=200.10.7.2/24 </syntaxhighlight>
 +
#Inicie o Netkit e carregue o arquivo de configuração e execute-o.
 +
#Execute comandos de ping entre os hosts e roteadores.
 +
##O ping entre as interfaces/equipamentos pertencentes a mesma sub-rede funcionam, por quê?
 +
##O ping entre interfaces/equipamentos de sub-redes distintas não funcionam, por quê?
 +
#Usando como apoio os comandos de inserção de rota insira as rotas default em H1 e H2:
 +
##H1: <syntaxhighlight lang=bash> route add default gw 200.10.1.254 </syntaxhighlight>
 +
##H2: <syntaxhighlight lang=bash> route add default gw 200.10.8.254 </syntaxhighlight>
 +
#Habilitar o roteamento e instalar rotas em cada roteador para que pacotes vindos de H1 para H2 passem por R1, R3 e R2. O retorno deve ser via R2 e R1.
 +
##R1: <syntaxhighlight lang=bash>
 +
echo 1 > /proc/sys/net/ipv4/ip_forward
 +
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
 +
route add -net 200.10.8.0/24 gw 200.10.2.2 </syntaxhighlight>
 +
##R2: <syntaxhighlight lang=bash>
 +
echo 1 > /proc/sys/net/ipv4/ip_forward
 +
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
 +
route add -net 200.10.1.0/24 gw 200.10.4.1 </syntaxhighlight>
 +
##R3: <syntaxhighlight lang=bash>
 +
echo 1 > /proc/sys/net/ipv4/ip_forward
 +
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
 +
route add -net 200.10.8.0/24 gw 200.10.7.1
 +
route add -net 200.10.1.0/24 gw 200.10.2.1
 +
</syntaxhighlight>
 +
#Teste a conectividade IP com o comando ping.
 +
##O ping entre as interfaces/equipamentos pertencentes a mesma sub-rede funcionam, por quê?
 +
##O ping entre interfaces/equipamentos de sub-redes distintas não funcionam, por quê?
 +
#Confirme os caminhos estabelecidos monitorando as interfaces com o tcpdump e/ou traceroute.
 +
 
 +
====PARTE 2 - Desafio: Rede com 4 roteadores====
 +
 
 +
#Crie um arquivo de configuração que descreva a rede abaixo no '''netkit'''.
 +
##Observe que essa rede tem somente um roteador a mais que a rede apresentada anteriormente.
 +
##As rotas devem ser configuradas de forma que pacotes que trafegam de H1 para H2 passem por R1, R3, R4 e R2.
 +
##O retorno (H2 ==> H1) deve ser por R2, R4 e R1.
 +
##Cada sub-rede SN está em uma rede ethernet separada.
 +
##Chame o professor e mostre que os roteamentos estão sendo realizados corretamente, com o apoio do tcpdump e tracerotue.
 +
 
 +
* SN1 : 200.10.1.0/24
 +
* SN2 : 200.10.2.0/24
 +
* SN3 : 200.10.3.0/24
 +
* SN4 : 200.10.4.0/24
 +
* SN5 : 200.10.5.0/24
 +
* SN6 : 200.10.6.0/24
 +
* SN7 : 200.10.7.0/24
 +
* SN8 : 200.10.8.0/24
 +
 
 +
[[Image:ExercicioConfEstaticaZebra.png]]
 +
 
 +
====PARTE 3 - Criando loop para verificar o campo TTL====
 +
 
 +
#Crie um conjunto de rotas que façam que um pacote vindo de H1 para H2 entre em um loop entre R1, R3, R2, R1.
 +
#Envie um pacote único com o ping de H1 para H2.
 +
#Rastreie com o tcpdump o pacote em loop e verifique o momento em que o pacote sai de circulação.
 +
 
 +
==Links de Referência==
 +
 
 +
* [http://en.wikipedia.org/wiki/Longest_prefix_match Prefixo Mais Longo]
 +
 
 +
* [http://jodies.de/ipcalc?host=192.168.20.19&mask1=28&mask2= Calculador IP]
 +
 
 +
* [http://linux-ip.net/html Guia de Administração da Camada IP no Linux]
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 15 - Sub-redes}}
 +
 
 +
===Objetivos===
 +
*Compreender endereçamento IPv4.
 +
*Compreender o processo de alocação de faixas de IPs.
 +
*Compreender e manipular os números IPs.
 +
*Compreender e manipular as máscaras de rede.
 +
===Fonte Base===
 +
*[https://www.todoespacoonline.com/w/2015/06/calculo-de-sub-redes-ipv4/ Cálculo de Sub-rede IPv4]
 +
 
 +
===Exercícios===
 +
#Considere um endereço IP 200.135.233.8/21. Determine:
 +
##O endereço da rede ao qual pertence;
 +
##O endereço de broadcast da rede;
 +
##A faixa de endereçamento que podem ser usados por hospedeiros desta rede.
 +
#Suponha que um administrador de rede tenha recebido o bloco de endereços 200.40.8.0/21 e que deseja dividir este bloco em 8 blocos de endereços iguais, de menor tamanho, para ser alocado a 8 sub-redes administradas por ele.
 +
##Determine o tamanho total do bloco de endereços.
 +
##Determine o tamanho de cada sub-bloco.
 +
##Determine o endereço/máscara de rede de cada sub-rede.
 +
#Quantas estações (''hosts'') uma rede 223.1.10.0/24 suporta?
 +
#Um provedor de acesso com bloco de IPs 200.23.16.0/20 deseja montar 8 sub-redes. Mostre como isso é possível e como ficaria os endereços de cada uma dessas sub-redes.
 +
#Um provedor de acesso a Internet possui o seguinte bloco de endereços IP: 12.17.192.0/18. Os endereços IP de 12.17.192.0 até 12.17.207.255 já estão alocados para clientes deste provedor. Este provedor precisa atender a quatro novos clientes, um deles necessita de rede com pelo menos 1000 endereços de IP válidos e os outros três necessitam de rede com pelo menos 30 IP válidos. Faça uma proposta para alocação de endereços IP para estes clientes. Os endereços reservados para estes novos clientes devem ser alocados a partir da numeração mais baixa disponível. Procure também responder as questões abaixo:
 +
##Qual o total de endereços que dispõe o provedor em questão?
 +
##Quantos endereços IP já estão utilizados?
 +
##Quantos endereços IP este provedor possui livres para alocar aos novos clientes?
 +
##Qual o endereço identificador de cada sub-rede dos novos clientes?
 +
##Qual o a máscara de rede de cada sub-rede dos novos clientes?
 +
##Qual o endereço de broadcast de cada sub-rede dos novos clientes?
 +
##Quantos endereços IP ainda sobrarão ao provedor após atender a estes clientes?
 +
#Um administrador precisa montar uma rede experimental conforme mostrada na Figura 1. Na sub-rede 1 ele precisará instalar cerca 25 ''hosts'', e nas sub-redes 2 e 3 ele precisará instalar cerca de 12 ''hosts''. O administrador dispõe do bloco de endereços IP 192.168.10.0/24 para ser utilizado no endereçamento da rede experimental. Faça uma proposta para alocação de endereços IP para cada sub-rede (rede 1, 2 e 3), incluindo também as sub-redes relativas aos enlaces ponto-a-ponto (rede AB, AC e BC). Responda ainda:
 +
##Qual o endereço identificador de rede de cada sub-rede (1, 2, 3, AB, AC e BC)?
 +
##Qual o a máscara de rede de cada sub-rede (1, 2, 3, AB, AC e BC)?
 +
##Quais os endereços IP que serão atribuídos a cada interface de rede nos enlaces ponto-a-ponto dos roteadores (enlaces relativos as redes AB, AC e BC)?  [[Arquivo:CdrEx.png |thumb | 400px| Figura 1 - Rede experimental]]
 +
 
 +
*Para conferir seu cálculos utilize, por exemplo, as seguintes ferramentas:
 +
**Terminal Linux: '''ipcalc'''
 +
**Site web: [http://jodies.de/ipcalc ipcalc]
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 16 - Sub-redes e Roteamento Estático em Redes }}
 +
 
 +
===Objetivos===
 +
*Compreender endereçamento IPv4.
 +
*Compreender o processo de alocação de faixas de IPs.
 +
*Compreender e manipular os números IPs.
 +
*Compreender e manipular as máscaras de rede.
 +
*Proporcionar ao aluno uma visão prática de roteamento IP.
 +
 
 +
===Fonte Básica===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/IP_DHCP_NAT.pdf DHCP e NAT]
 +
*[http://www.davidc.net/sites/default/subnets/subnets.html Cálculo de sub-redes]
 +
 
 +
===Roteiro===
 +
 
 +
#Um administrador precisa montar uma rede experimental conforme mostrada na Figura 1. Na sub-rede 1 ele precisará instalar cerca 50 ''hosts'', e nas sub-redes 2 e 3 ele precisará instalar cerca de 20 ''hosts''. O administrador dispõe do bloco de endereços IP 192.168.10.0/24 para ser utilizado no endereçamento da rede experimental. Faça uma proposta para alocação de endereços IP para cada sub-rede (rede 1, 2 e 3), incluindo também as sub-redes relativas aos enlaces ponto-a-ponto (rede AB, AC e BC). Responda ainda:
 +
##Qual o endereço identificador de rede de cada sub-rede (1, 2, 3, AB, AC e BC)?
 +
##Qual o a máscara de rede de cada sub-rede (1, 2, 3, AB, AC e BC)?
 +
##Quais os endereços IP que serão atribuídos a cada interface de rede nos enlaces ponto-a-ponto dos roteadores (enlaces relativos as redes AB, AC e BC)?  [[Arquivo:CdrEx.png |thumb | 400px| Figura 1 - Rede experimental]]
 +
#Baseado no arquivo exemplo abaixo, crie um arquivo de configuração para o NetKit que implemente sua proposta. O arquivo deve contemplar todas as configurações necessárias para o perfeito funcionamento da rede, ou seja, ao carregar o arquivo todos os hosts deverão ser capazes de "pingar" uma ao outro.
 +
##Faça testes de conectividade entre os hosts.
 +
##Demostre para o professor o perfeito funcionamento de sua rede.
 +
*O arquivo de configuração do Netkit abaixo, é a definição para o perfeito funcionamento da simulação da rede apresentada na Figura 2. [[Arquivo:DynamicRoutingTriangle.png |thumb | 400px| Figura 2 - Rede exemplo]]
 +
<syntaxhighlight lang=bash>
 +
# Hosts definitions
 +
pc1[type]=generic
 +
pc2[type]=generic
 +
pc3[type]=generic
 +
 +
# Hosts' interfaces to local routers
 +
pc1[eth0]=link0:ip=192.168.0.1/24
 +
pc2[eth0]=link1:ip=192.168.1.1/24
 +
pc3[eth0]=link2:ip=192.168.2.1/24
 +
 +
# Default gateways definitions
 +
pc1[default_gateway]=192.168.0.254
 +
pc2[default_gateway]=192.168.1.254
 +
pc3[default_gateway]=192.168.2.254
 +
 +
# Routers definitions
 +
r1[type]=gateway
 +
r2[type]=gateway
 +
r3[type]=gateway
 +
 +
# Routers' interfaces to local networks
 +
r1[eth0]=link0:ip=192.168.0.254/24
 +
r2[eth0]=link1:ip=192.168.1.254/24
 +
r3[eth0]=link2:ip=192.168.2.254/24
 +
 +
# Network "backbone" links
 +
r1[eth1]=backbone0:ip=10.0.0.1/30
 +
r1[eth2]=backbone1:ip=10.0.1.1/30
 +
 +
r2[eth1]=backbone0:ip=10.0.0.2/30
 +
r2[eth2]=backbone2:ip=10.0.2.1/30
 +
 +
r3[eth1]=backbone1:ip=10.0.1.2/30
 +
r3[eth2]=backbone2:ip=10.0.2.2/30
 +
 +
# Routes definition
 +
r1[route]=192.168.2.0/24:gateway=10.0.1.2
 +
r1[route]=192.168.1.0/24:gateway=10.0.0.2
 +
r1[route]=10.0.2.0/30:gateway=10.0.0.2
 +
r2[route]=192.168.0.0/24:gateway=10.0.0.1
 +
r2[route]=192.168.2.0/24:gateway=10.0.2.2
 +
r2[route]=10.0.1.0/30:gateway=10.0.2.2
 +
r3[route]=192.168.0.0/24:gateway=10.0.1.1
 +
r3[route]=192.168.1.0/24:gateway=10.0.2.1
 +
r3[route]=10.0.0.0/30:gateway=10.0.2.1</syntaxhighlight>
 +
 
 +
===Referencia===
 +
 
 +
*[http://www.davidc.net/sites/default/subnets/subnets.html Link Calculador Online de Subnets]
 +
 
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 17 - Tecnologia de Enlace Ethernet }}
 +
 
 +
===Objetivos===
 +
 
 +
*Compreender que Ethernet não é Internet e que não é necessário o mundo IP para haver comunicação.
 +
*Diferenciar Hub de Switch
 +
*Compreender o papel do protocolo ARP
 +
 
 +
===Fonte Base===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/Camada%20de%20enlace.pdf Camada de Enlace]
 +
 
 +
===Animação Pearson/Kurose===
 +
 
 +
*[https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/csma-cd/index.html Animação CSMA/CD]
 +
 
 +
===PARTE 1===
 +
 
 +
Neste experimento vamos conectar quatro computadores através de um Hub Ethernet. Este dispositivo faz com que todos os computadores se conectem tal como um cabo. Quando um PC envia uma mensagem para outro PC, TODOS os computadores podem ver esta mensagem. Para haver comunicação basta que um computador envie um frame ETHERNET direcionado para o endereço de hardware do computador destino. NÃO é necessário que as interfaces dos computadores estejam configuradas com endereços IP.
 +
 
 +
[[Arquivo:RCO-Animacao_HUB.gif | thumb | 400px| Figura 2 - Funcionamento de um Hub]]
 +
 
 +
#Contruir um arquivo '''\home\aluno\hub.conf''' com a seguinte configuração <syntaxhighlight lang=bash>
 +
pc1[type]=generic
 +
pc2[type]=generic
 +
pc3[type]=generic
 +
pc4[type]=generic
 +
 
 +
pc1[eth0]=lan0
 +
pc2[eth0]=lan0
 +
pc3[eth0]=lan0
 +
pc4[eth0]=lan0
 +
</syntaxhighlight>
 +
#Carregar e executar a configuração no Netkit.
 +
#Baixar o arquivo sendraw.py: [http://tele.sj.ifsc.edu.br/~eraldo/AULAS/2018/RCO-INTEGRADO/sendraw.py sendraw.py] para o diretório /home/aluno
 +
#Copiar o arquivo para a Máquina Virtual, no terminal da máquina real digite:<syntaxhighlight lang=bash>
 +
cp /home/aluno/sendraw.py /home/aluno/lab/shared </syntaxhighlight>
 +
#Identificar o endereço de Hardware (MAC) do PC2. Use o '''ifconfig'''. Note que NÃO existe endereço IPv4 configurado.
 +
#Executar o tcpdump no PC2:<syntaxhighlight lang=bash>
 +
  tcpdump -i eth0 -e -X -vvv -s 50</syntaxhighlight>
 +
#Executar o tcpdump no PC3:<syntaxhighlight lang=bash>
 +
  tcpdump -i eth0 -e -X -vvv -s 50</syntaxhighlight>
 +
#Executar o tcpdump no PC4:<syntaxhighlight lang=bash>
 +
  tcpdump -i eth0 -e -X -vvv -s 50</syntaxhighlight>
 +
#No PC1 enviar uma mensagem para o PC2 usando o endereço de hardware identificado anteriormente, <span style="color: red;">lembre-se se substituir o ENDERECO_MAC pelo MAC adequado:<syntaxhighlight lang=bash>
 +
  python /hostlab/shared/sendraw.py -d ENDERECO_MAC -i Alo-Mundo</syntaxhighlight> <span style="color: black;"><blockquote style="background: lime; border: 1px solid black; padding: 1em;"> Observe que a mensagem chega a todos os PCs embora foi enviada somente para o PC2. </blockquote>
 +
#O que explica o comportamento de broadcast para esse caso?
 +
#Pode existir colisão em um sistema com HUBs simples como este do experimento?
 +
 
 +
===PARTE 2 - Explorando o SWITCH e o endereço de Broadcast Ethernet===
 +
 
 +
[[Arquivo:RCO-Animacao_SWITCH.gif | thumb | 370px| Figura 2 - Funcionamento de um Switch]]
 +
 
 +
#Construir um arquivo '''/home/aluno/switch.conf''' com a seguinte configuração: <syntaxhighlight lang=bash>
 +
switchA[type]=switch
 +
 
 +
pc1[type]=generic
 +
pc2[type]=generic
 +
pc3[type]=generic
 +
pc4[type]=generic
 +
 
 +
switchA[eth0]=port0
 +
switchA[eth1]=port1
 +
switchA[eth2]=port2
 +
switchA[eth3]=port3
 +
 
 +
pc1[eth0]=port0
 +
pc2[eth0]=port1
 +
pc3[eth0]=port2
 +
pc4[eth0]=port3
 +
</syntaxhighlight>
 +
#Carregar e executar a configuração no Netkit.
 +
#Baixar o arquivo sendraw.py do site:  [http://tele.sj.ifsc.edu.br/~eraldo/AULAS/2018/RCO-INTEGRADO/sendraw.py sendraw.py] para o /home/aluno.
 +
#Copiar o arquivo para a Máquina Virtual. No terminal da máquina real digite:<syntaxhighlight lang=bash>
 +
  cp /home/aluno/sendraw.py /home/aluno/lab/shared/ </syntaxhighlight>
 +
#Identificar o endereço de Hardware (MAC) do PC2. Use o ifconfig. Note que NÃO existe endereço IPv4 configurado
 +
#Executar o tcpdump no PC2, PC3 e PC4 com o comando:<syntaxhighlight lang=bash>
 +
  tcpdump -i eth0 -e -X -vvv -s 50</syntaxhighlight>
 +
#No PC1 enviar uma mensagem para o PC2 usando o endereço de hardware identificado anteriormente, <span style="color: red;">Lembre-se se substituir o ENDERECO_MAC pelo MAC adequado:<syntaxhighlight lang=bash>
 +
  python /hostlab/shared/sendraw.py -d ENDERECO_MAC -i Alo-Mundo </syntaxhighlight> <span style="color: black;"><blockquote style="background: lime; border: 1px solid black; padding: 1em;"> Agora somente o PC2 deve receber pois o ''switch'' entrega o quadro somente para a porta de saída associada ao respectivo MAC destino. </blockquote><blockquote style="background: red; border: 1px solid black; padding: 1em;"> CASO todos tenham recebido, é devido ao fato que por algum motivo o switch ainda não aprendeu quem está conectado nas portas. Neste caso envie pacotes do PC2 para o PC1 e depois retome o experimento do item 4. </blockquote>
 +
#No PC1 enviar uma mensagem em broadcast (endereço FF:FF:FF:FF:FF:FF)<syntaxhighlight lang=bash>
 +
  python /hostlab/shared/sendraw.py -d FF:FF:FF:FF:FF:FF -i Mensagem_Broadcast  </syntaxhighlight>
 +
<blockquote style="background: lime; border: 1px solid black; padding: 1em;">
 +
  Note que neste caso todos os computadores recebem a mensagem em ''broadcast'', mesmo sendo um '''switch'''.
 +
</blockquote>
 +
 
 +
===PARTE 3 - Explorando o ARP===
 +
 
 +
O protocolo ARP serve como apoio para descoberta do endereço MAC dado que se sabe o endereço IP de uma máquina. Quando um PC deseja enviar um pacote IP para uma máquina na rede local, ele necessita descobrir o endereço MAC desta máquina. O protocolo ARP usa o broadcast ETHERNET para perguntar para todas as máquinas na rede QUEM tem o endereço IP em questão. A máquina que possui o endereço responderá informando o seu MAC.
 +
 
 +
#Configure endereços IP em todas as máquinas do laboratório anterior. Use exemplo a rede 10.10.10.0/24
 +
#Rode o wireshark no '''PC2''' com os procedimentos:
 +
##Clique sobre a aba do '''PC2'''.
 +
##Menu: Wireshark >> any
 +
#Faça um ping do PC1 no PC2 e observe a sequência de pacotes trocados. Faça um diagrama no tempo mostrando a troca de pacotes até a realização do ECHO REQUEST do ping. Os resultados do Wireshark devem ser similares a: [[Arquivo:RCO-TelaARP.jpg | 700px| Troca de pacotes ARP e PING]]
 +
#Confira o cache do arp no PC1 fazendo:<syntaxhighlight lang=bash>
 +
  arp -a</syntaxhighlight>
 +
#Confira o cache do arp no PC2 fazendo:<syntaxhighlight lang=bash>
 +
  arp -a</syntaxhighlight>
 +
#Faça um ping do PC1 no PC3.
 +
#Confira novamente o cache do arp no PC1 fazendo:<syntaxhighlight lang=bash>
 +
  arp -a</syntaxhighlight>
 +
 
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 18 - IPv6: Endereços e ''Neighbor Discovery''}}
 +
 
 +
===Fonte Base===
 +
*[http://docente.ifsc.edu.br/odilson/RDC60803/IPv6.pdf IPv6]
 +
 
 +
Fontes Extras
 +
*Este roteiro foi baseado no material disponível no Livro - [http://www.paulogurgel.com.br/ Laboratório de IPv6].
 +
*[http://docente.ifsc.edu.br/odilson/RED29004/enderec-v6.pdf Guia didático de endereçamento IPv6] obtido de http://ipv6.br/.
 +
 
 +
===Objetivos do laboratório:===
 +
*Um primeiro contato com o protocolo [https://pt.wikipedia.org/wiki/IPv6 IPv6].
 +
*Compreender o funcionando do ''Neighbor Discovery'', o equivalente ao ARP (''Address Resolution Protocol'') do IPv4, que em resumo é uma tabela contendo a relação ente IPs e MACs.
 +
*Aprender configurações básicas de interfaces IPv6 no Linux.
 +
 
 +
===Introdução teórica===
 +
Obs.: texto copiado literalmente de: [http://ipv6.br/lab/ Laboratório de IPv6].
 +
 
 +
A '''descoberta de vizinhança''' por meio do protocolo ''Neighbor Discovery'' no
 +
IPv6 é um procedimento realizado pelos nós de uma rede para descobrir endereços físicos dos dispositivos vizinhos presentes no mesmo enlace. A função deste protocolo se assemelha à função do ARP e do RARP no IPv4.
 +
*O procedimento é iniciado quando um dispositivo tenta enviar um pacote cujo endereço físico de destino é desconhecido. O nó solicitante envia uma mensagem ''Neighbor Solicitation'' (NS) para todos os nós do enlace pertencentes ao grupo ''multicast solicited-node'' (ff02::1:ffXX:XXXX), de modo que XX:XXXX são os últimos 24 bits do endereço IPv6 em que está interessado.
 +
*É possível notar que, por uma coincidência dos últimos 24 bits, é bastante provável que apenas o nó de destino faça realmente parte deste grupo. Isto é um ''truque'' interessante do IPv6 para diminuir o tráfego deste tipo de pacote na rede.
 +
*Na mensagem NS, o endereço IPv6 a ser resolvido é informado no campo ''Target''. O campo ''Source link-layer address'' informa ao nó de destino o endereço MAC do nó de origem, poupando-o de ter que fazer o mesmo procedimento no sentido inverso.
 +
*O nó de destino, dono do IPv6 requisitado, ao receber este pacote, envia uma mensagem ''Neighbor Advertisement'' (NA) como resposta diretamente ao nó requisitante. O seu endereço físico será informado no campo ''Target link-layer address''.
 +
*A informação de mapeamento entre endereços IP e endereços físicos é armazenada em uma tabela chamada ''neighbor cache''. Nela também fica registrado o ''status'' de cada destino, informando se o mesmo é alcançável ou não.
 +
 
 +
===Roteiro de atividades: ETAPA 1===
 +
 
 +
A figura abaixo apresenta o diagrama esquemático da rede a ser montada/analisada. Observe que todos os IPv6 ''Global Unicast'' já estão definidos na mesma, são esses IPs que utilizaremos em nosso experimento.
 +
 
 +
[[Arquivo:Diagrama_rede_IPv6.jpg]]
 +
 
 +
#Crie em seu computador um arquivo com nome '''/home/aluno/IPv6.conf''', com o seguinte conteúdo: <syntaxhighlight lang=bash>
 +
#Ligacao das maquinas nos dominios de colisao
 +
#Duas pequenas redes interligadas pelo backbone
 +
 +
# Hosts definitions
 +
pc1[type]=generic
 +
pc2[type]=generic
 +
pc3[type]=generic
 +
pc4[type]=generic
 +
 +
# Hosts' interfaces to local routers
 +
pc1[eth0]=link0:ipv6=2001:bcc:faca:1::101/64
 +
pc2[eth0]=link1:ipv6=2001:bcc:cafe:1::102/64
 +
pc3[eth0]=HUB1:ipv6=2001:bcc:1f0:1::103/64
 +
pc4[eth0]=HUB1
 +
 +
#Default Gateways definitions
 +
pc1[route]=default6:gateway=2001:bcc:faca:1::1
 +
pc2[route]=default6:gateway=2001:bcc:cafe:1::1
 +
pc3[route]=default6:gateway=2001:bcc:1f0:1::1
 +
 +
# Routers definitions
 +
r1[type]=gateway
 +
r2[type]=gateway
 +
 +
#Routers interfaces definitions
 +
r1[eth0]=backbone0:ipv6=2001:db8:dead:1::1/64
 +
r1[eth1]=link0:ipv6=2001:bcc:faca:1::1/64
 +
r1[eth2]=link1:ipv6=2001:bcc:cafe:1::1/64
 +
 +
r2[eth0]=backbone0:ipv6=2001:db8:dead:1::2/64
 +
r2[eth1]=HUB1:ipv6=2001:bcc:1f0:1::1/64
 +
 +
#Routers definitions
 +
r1[route]=2001:bcc:1f0:1::0/64:gateway=2001:db8:dead:1::2
 +
r2[route]=2001:bcc:faca:1::0/64:gateway=2001:db8:dead:1::1
 +
r2[route]=2001:bcc:cafe:1::0/64:gateway=2001:db8:dead:1::1
 +
</syntaxhighlight>
 +
#Tenha certeza que o Netkit2 estja atualizado: General >> Update.
 +
#Rode o NetKit em seu computador. Em um terminal digite: <syntaxhighlight lang=bash>
 +
netkit2 & </syntaxhighlight>
 +
#No menu '''File''' - '''Load and Run''', procure o arquivo '''/home/aluno/IPv6.conf''' e clique em OK. Abrirá uma janela com 6 abas, onde cada uma delas é um terminal de configuração do respectivo equipamento: '''pc1-4''' ou '''r1-2'''.
 +
#Observe que o '''pc4''' não está com sua interface configurada.
 +
#Ao clicar no menu '''File''' - '''Graph''', pode-se ter uma visão da rede a ser simulada e conferir se é equivalente ao diagrama proposto.
 +
#Faça um '''ping6''' entre o '''pc1''' ao '''pc3''': <syntaxhighlight lang=bash>
 +
ping6 -c4 2001:bcc:1f0:1::103 </syntaxhighlight>
 +
#Faça um '''ping6''' entre o '''pc1''' e '''pc2'''.
 +
#No '''pc4''' use o seguinte comando para adicionar o endereço IPv6 à interface de rede: <syntaxhighlight lang=bash>
 +
ip addr add 2001:bcc:1f0:1::104/64 dev eth0 </syntaxhighlight>
 +
#No '''pc4''', acrescente o ''default gateway'' com o seguinte comando: <syntaxhighlight lang=bash>
 +
ip -6 route add default via 2001:bcc:1f0:1::1 dev eth0 </syntaxhighlight>
 +
#No '''pc1''' use o seguinte comando para verificar como ficou a configuração dos endereços da interface de rede. O resultado é similar ao apresentado pelo comando '''ifconfig''': <syntaxhighlight lang=bash>
 +
ip addr show dev eth0 </syntaxhighlight>
 +
#Todo o roteamento está pronto, mas caso desejássemos poderíamos acrescentar rotas com comando similares aos já utilizados. Por exemplo, no '''r1''', para adicionar uma rota estática para a rede dos '''pc3''' e '''pc4''' utilizaríamos o seguinte comando: <syntaxhighlight lang=bash>
 +
ip -6 route add 2001:bcc:1f0:1::/64 via 2001:db8:dead:1::2 dev eth0 </syntaxhighlight>
 +
#Confira as rotas estabelecidas em todos os ''hosts'' com o comando abaixo.
 +
##São coerentes com os dados apresentados no diagrama acima?<syntaxhighlight lang=bash>
 +
ip -6 route show </syntaxhighlight>
 +
#No '''pc1''' use os seguintes comandos para ver a rota para alguns vizinhos: <syntaxhighlight lang=bash>
 +
traceroute6 2001:bcc:1f0:1::103
 +
traceroute6 2001:bcc:1f0:1::104 </syntaxhighlight>
 +
#*Anote as rotas.
 +
#Deixe um '''ping6''' entre o '''pc1''' ao '''pc3''' rodando: <syntaxhighlight lang=bash>
 +
ping6 2001:bcc:1f0:1::103 </syntaxhighlight>
 +
#Rode o wireshark no '''r1''' com os procedimentos:
 +
##Clique sobre a aba do '''r1'''.
 +
##Menu: Wireshark >> any
 +
#Analisando a captura do Wireshark, você verá os pacotes relativos ao ping6 e também pacotes parecidos com: <syntaxhighlight lang=bash> fe80::4cd6:19ff:fedc:2b52 2001:db8:dead:1::1 ICMPv6 86 Neighbor Solicitation for 2001:db8:dead:1::1 from 4e:d6:19:dc:2b:52
 +
2001:db8:dead:1::1 fe80::4cd6:19ff:fedc:2b52 ICMPv6 78 Neighbor Advertisement 2001:db8:dead:1::1 (rtr, sol) </syntaxhighlight>
 +
#Explique o processo de descoberta de vizinhança (''Neighbor Discovery'' / ''Neighbor Solicitation'' - '''NS''' e ''Neighbor Advertisement'' - '''NA'''), citando o endereço '''link local''' utilizado.
 +
#*Alguns exemplos de campos visualizáveis para uma mensagem do tipo ''Neighbor Advertisement'':
 +
##Destination (camada Ethernet)
 +
##*O endereço MAC do nó requisitante que foi obtido por meio da mensagem NS enviada anteriormente.
 +
##Source (camada Ethernet)
 +
##*A origem é o endereço MAC da interface do dispositivo que enviou a resposta.
 +
##Type (camada Ethernet)
 +
##*Indica que a mensagem utiliza IPv6.
 +
##Next header (camada IPv6)
 +
##*Indica qual é o próximo cabeçalho. Neste caso, o valor 58 (0x3a) refere-se a uma mensagem ICMPv6.
 +
##Source (camada IPv6)
 +
##*A origem é o endereço IP da interface diretamente ligada ao enlace em que a requisição foi recebida.
 +
##Destination (camada IPv6)
 +
##*Diferentemente da mensagem NS, a mensagem NA possui como destino o endereço IPv6 global do nó requisitante.
 +
##Type (camada ICMPv6)
 +
##*Indica que a mensagem é do tipo 136 (Neighbor Advertisement).
 +
##Flags (camada ICMPv6)
 +
##*Uma mensagem NA possui três flags:
 +
###Indica se quem está enviando é um roteador. Neste caso, o valor marcado é 0, pois não é um roteador.
 +
###Indica se a mensagem é uma resposta a um NS. Neste caso, o valor marcado é 1, pois é uma resposta.
 +
###Indica se a informação carregada na mensagem é uma atualização de endereço de algum nó da rede. Neste caso, o valor marcado é 1, pois está informando o endereço pela primeira vez.
 +
##Target Address (camada ICMPv6)
 +
##*Indica o endereço IP associado às informações das flags. Neste caso, é o próprio endereço da interface do dispositivo em questão.
 +
##ICMPv6 option (camada ICMPv6)
 +
##*Indica as opções do pacote ICMPv6:
 +
###Target link-layer address
 +
##Type
 +
##*Indica o tipo de opção. Neste caso, Target link-layer address.
 +
##Link-layer address
 +
##*Indica o endereço MAC da interface do dispositivo em questão.
 +
#Em todos os ''hosts'' rode o comando <syntaxhighlight lang=bash> ip -6 neighbor show </syntaxhighlight>
 +
##Qual é a funcionalidade desse comando?
 +
##Qual é o significado do conteúdo dessa tabela?
 +
##A tabela mostrada em cada um dos casos é compatível com o diagrama da rede montado?
 +
##Por que, por exemplo, na tabela do '''pc3''' não há uma referência explícita ao '''pc1'''?
 +
 
 +
===Roteiro de atividades: ETAPA 2 - DESAFIO===
 +
 
 +
Acrescentar um terceiro roteador ligado a R1 e R2 (backbone0). Acrescentar uma rede ethernet ligada a este roteador. Configure  a rede com endereços IPv6 colocando pelo menos um PC adicional. Acrescente os roteamentos necessários para que este PC seja pingável a partir de PC1.
 +
 
 +
{{Collapse bottom}}
 +
 
 +
{{Collapse top |Laboratório 19 - Configurando uma Rede Doméstica}}
 +
 
 +
===Objetivos===
 +
*Entender os componentes e princípio de funcionamento de uma rede residencial.
 +
*Configurar um roteador sem fio.
 +
*Testa a rede configurada através do acesso da mesma via Telefone Celular.
 +
 
 +
===Fonte Base===
 +
 
 +
*[https://esr.rnp.br/publicacoes/sistemas/proinfo?download=d2ddea18f00665ce8623e36bd4e3c7c5 Livro da Escola Superior de Redes (ESR): Formação de suporte técnico PROINFO]
 +
 
 +
===Analisando o roteador===
 +
#Roteador ??????. Descrição Geral do aparelho:
 +
##Fonte de alimentação. Cuidar com tensão cc e polaridade.
 +
##Porta WAN (''Wide Area Network'')
 +
##Portas LAN (''Local Area Network'')
 +
##Antena ou antenas
 +
##Botão reset. Normalmente configura LAN em 192.168.0.0/24 ou 192.168.1.0/24
 +
##Parte frontal, LEDs: Power, Status, WAN, WLAN, 1...4.
 +
#Descrição dos modos de uso básicos.
 +
#Ligar o aparelho na tomada.
 +
##LED Power acendeu?
 +
 
 +
====Montando uma rede básica====
 +
#Conectar o computador numa das portas LAN do roteador sem fio.
 +
#Conectar a porta WAN num dos pontos de rede do laboratório.
 +
#Pressionar o botão Reset.
 +
#Teste a rede de seu computador, caso não esteja funcionando desconecte e reconecte o cabo de rede entre seu computador e uma porta LAN do roteador sem fio.
 +
#Com o navegador acesse 192.168.0.1. '''Usuário: admin''', '''senha: em branco'''. Caso não consiga acesso, pressione novamente o botão reset.
 +
#Redefina a senha do administrador do roteador para RCO60803.
 +
#Aba Home:
 +
##Clique no menu esquerdo WAN. Discutir a funcionalidade.
 +
##Clique no menu esquerdo LAN. Discutir a funcionalidade.
 +
##Clique no menu esquerdo DHCP. Discutir a funcionalidade.
 +
##Clique no menu esquerdo Wireless. Discutir a funcionalidade.
 +
##Clique no menu esquerdo Wizard. Discutir a funcionalidade.
 +
#Aba Status:
 +
##Device Info. Discutir a funcionalidade.
 +
##Wireless. Discutir a funcionalidade.
 +
#Reconfigure o roteador sem fio para alugar os endereços 192.168.X.20-60, onde X é igual ao último dígito do número IP de sua máquina. Por exemplo, para a máquina 192.168.1.7, X=7.
 +
#Para verificar o funcionamento, num terminal da máquina (real) execute o comando abaixo. Caso tudo esteja funcionando corretamente, sua máquina configurará uma nova interface de rede com o número IP fornecido por seu roteador ou um roteador de um colega. <syntaxhighlight lang=bash> sudo dhclient eth0:0 </syntaxhighlight>
 +
#Reconfigure o WiFi de seu roteador:
 +
##Troque o SSID (''Service Set IDentifier'') de seu roteador, colocando seu primeiro nome como nome de rede.
 +
##Configure a segurança para WPA2 (''Wireless Security Setup'').
 +
##Ajuste a senha para RCO60803 (respeite as maiúsculas).
 +
##Salve e reinicie o roteador para as alterações terem validade.
 +
#Teste a configuração, acessando a sua rede sem fio através de seu telefone celular.
 +
 
 +
{{Collapse bottom}}
 +
 
 +
==Projeto Final==
 +
{{Collapse top |Descrição do Projeto}}
 +
 
 +
===Objetivos===
 +
 
 +
*Aplicar os conhecimentos adquiridos durante o curso de redes através da confecção de uma rede múltiplos domínios simulando a Internet.
 +
**Dado uma topologia de rede definida a um grupo, calcular as sub-redes de acordo com os requisitos colocados;
 +
**Implementar a proposta de sub-redes no arquivo de configuração do netkit de tal modo a rede ficar plenamente operacional;
 +
**Estabelecer um roteamento global entre todos os domínios das equipes;
 +
**Estabelecer um serviço WEB sobre a rede construída;
 +
**Construir páginas WEB de acordo com os requisitos;
 +
**Estabelecer um serviço de configuração automática de hospedeiros (DHCP);
 +
**Estabelecer um serviço de conexão sem fio sobre cada domínio.
 +
**Trabalhar o conceito de ''shell script'' para automatizar tarefas.
 +
 
 +
A arquitetura da rede é mostrada na Figura abaixo.
 +
 
 +
[[Image:RCO3-TrabalhoFinal-2017-2.png|500px]]
 +
 
 +
===Especificações do Projeto===
 +
 
 +
#Fazer um desenho da '''topologia''' do domínio com todos IPs alocados e apresentar os cálculos das subredes conforme restrições abaixo.
 +
##Construir as tabelas de roteamento para que a rede fique plenamente operacional. Apresentar as '''tabelas de roteamento na página WEB do projeto''';
 +
##Apresentar o desenho da '''topologia na página WEB do projeto'''. Utilize o modelo ao lado. Observe que o modelo está propositalmente incompleto; [[Image:Modelo_de_diagrama_do_projeto.png|300px]]
 +
##Enlaces ponto-a-ponto devem obrigatoriamente ter máscara /30;
 +
##Enlaces multiponto devem obrigatoriamente comportar no mínimo 50 hospedeiros;
 +
##Todas as rotas devem ser colocadas no arquivo '''projeto.conf''' do netkit. Apresentar esse arquivo na '''página WEB do projeto''';
 +
#Na sub-rede onde existe um cliente (notebook) acrescentar um servidor '''[[Netkit2#Usando_DHCP | DHCP]]''' (máquina adicional) com os seguintes requisitos:
 +
##Com uma faixa de aluguel de pelo menos 5 números IP;
 +
##Explicar a configuração do '''DHCP na página WEB do projeto''';
 +
#Estabelecer o serviço '''Apache''' no servidor previsto no domínio com os seguintes requisitos:
 +
##uma página WEB com a descrição integral do projeto;
 +
##uma segunda página WEB com conteúdo de sua preferência com os seguintes requisitos:
 +
###a página deve ser em inglês ou espanhol;
 +
###texto com no  mínimo 500 palavras;
 +
###no mínimo uma figura deve aparecer;
 +
###no mínimo um link para uma página WEB de uma outra equipe.
 +
##Todas as páginas devem devem ser mantidas em um diretório de nome ''/home/aluno/lab/shared/WEB''.
 +
##Elaborar um ''shell script'' para automação do serviço WEB. Sítio para treinamento de [http://www.compileonline.com/execute_bash_online.php shell script].
 +
#O '''roteamento global''' deve permitir conectividade entre todas as equipes. Para evitar possíveis erros advindos de filtros do Netkit2, execute os seguintes comandos em todos os seus roteadores (copie e cole): <syntaxhighlight lang=bash>
 +
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
 +
echo 0 > /proc/sys/net/ipv4/conf/eth3/rp_filter </syntaxhighlight>
 +
 
 +
* Exemplo de arquivo '''projeto.conf'''.
 +
**No roteiro do '''Laboratório 16''' também é apresentado um arquivo de configuração de uma rede plenamente funcional para o Netkit, utilize-o como exemplo para entendimento das configurações requisitadas.
 +
**O arquivo deverá ser adaptado para a topologia de cada equipe.
 +
<syntaxhighlight lang=bash>
 +
H1[type]=generic
 +
H2[type]=generic
 +
 
 +
R1[type]=gateway
 +
R2[type]=gateway
 +
R3[type]=gateway
 +
 
 +
H1[eth0]=SR2:ip=10.9.2.2/24
 +
H1[default_gateway]=10.9.2.1
 +
 
 +
H2[eth0]=SR4:ip=10.9.4.2/24
 +
H2[default_gateway]=10.9.4.1
 +
 
 +
R1[eth0]=uplink:bridge=eth0:ip=192.168.1.190/24
 +
R1[eth1]=SR1:ip=10.9.1.1/24
 +
R1[eth2]=SR5:ip=10.9.5.1/24
 +
R1[route]=10.9.2.0/24:gateway=10.9.1.2
 +
R1[route]=10.9.4.0/24:gateway=10.9.5.2
 +
 
 +
R2[eth0]=SR1:ip=10.9.1.2/24
 +
R2[eth1]=SR2:ip=10.9.2.1/24
 +
R2[eth2]=SR3:ip=10.9.3.1/24
 +
R2[default_gateway]=10.9.1.1
 +
 
 +
R3[eth0]=SR3:ip=10.9.3.2/24
 +
R3[eth1]=SR4:ip=10.9.4.1/24
 +
R3[eth2]=SR5:ip=10.9.5.2/24
 +
R3[default_gateway]=10.9.5.1
 +
</syntaxhighlight>
 +
 
 +
*Como trabalhar com o shell script
 +
 
 +
#O shell script será executado na máquina virtual do apache, e portanto deverá ser copiado para o /home/aluno/shared/lab/config_apache.sh
 +
##Na máquina virtual do apache deve-se tornar o arquivo do script executável e em seguida executá-lo:<syntaxhighlight lang=bash>
 +
chmod +x /hostlab/shared/config_apache.sh
 +
/hostlab/shared/config_apache.sh
 +
</syntaxhighlight>
 +
 
 +
* Exemplo de arquivo ''shell script''. Este arquivo deve ser adaptado para a topologia de cada equipe.
 +
 
 +
#Editar o arquivo com gedit com nome ''config_apache.sh''. Qualquer comando executado no terminal pode ser colocado com exata sintaxe no ''shell script'', e vários comandos podem ser colocados em várias linhas.
 +
#Construir o arquivo da forma:
 +
<syntaxhighlight lang=bash>
 +
#!/bin/bash
 +
#comentario: copiar um arquivo
 +
cp /home/aluno/teste.txt /var/www
 +
 
 +
#renomeando o arquivo copiado teste.txt para index.html
 +
mv /var/www/teste.txt /var/www/index.html
 +
 
 +
#iniciando um serviço
 +
/etc/init.d/ssh start
 +
</syntaxhighlight>
 +
 
 +
*Dar permissão de execução do script no Apache
 +
 
 +
Copiar o script para o /home/aluno/lab/shared e apartir do Apache fazer:
 +
Dar direito de execução do script:
 +
 
 +
  chmod 777 /hostlab/shared/config_apache.sh
 +
 
 +
*Executar o script no apache
 +
  /hostlab/shared/config_apache.sh
 +
 
 +
 
 +
* Teste do acesso ao Servidor Apache a partir da linha de comando:
 +
 
 +
Note que como todas as máquinas virtuais do netkit são em modo de comando (não tem interface gráfica) então o uso de browsers para teste
 +
do acesso a páginas html fica limitado. Entretanto, para teste rápido é possível usar o comando lynx:
 +
 
 +
  lynx IP_SERVIDOR_APACHE
 +
 
 +
Note que o servidor deve ter conectividade IP (faça ping antes para testar);
 +
 
 +
* Acesso pleno as páginas html a partir da Virtualbox
 +
 
 +
Um problema que nos deparamos ao usar o netkit para acesso de páginas hospedadas em suas Máquinas Virtuais é o fato de não termos a interface gráfica. Uma interface gráfica é necessária para um browser do tipo Firefox. Uma alternativa é o uso de browser em modo texo do tipo "lynx". Para testes rápidos pode ser interessante mas para visualizarmos em plenitude a página não é a melhor solução.
 +
 
 +
Para contornar este problema vamos usar uma máquina VirtualBox que estará conectada na rede do laboratório. Faremos o default gateway desta máquina apontar para o roteador de borda do domínio da equipe garantindo que a mesma conduza todo o tráfego indireto para este roteador. Para garantir que exista rota reversa vamos colocar em cada roteador do domínio uma rota default gateway para o roteador de borda. Vamos elaborar passo a passo estes procedimentos:
 +
 
 +
#Iniciar na máquina real uma VirtualBox com Ubuntu e Interface Gráfica;
 +
#Abrir um terminal e verificar a rota para o default gateway usando:<syntaxhighlight lang=bash>route -n </syntaxhighlight>
 +
#Adicionar uma rota para a sua rede: <syntaxhighlight lang=bash> sudo route add -net 10.X.0.0/16 gw 192.168.1.XX </syntaxhighlight> onde  192.168.1.XX é o endereço externo do roteador de borda do domínio onde está o servidor APACHE.
 +
#Para garantir a rota reversa vamos colocar rotas ''default'' também nos roteadores dos domínios (roteadores no netkit). Para tanto coloque no projeto.conf esta informação de rota para cada roteador que não está na borda: <syntaxhighlight lang=bash> Rx[route]=default:gateway=Y.Y.Y.Y
 +
ou
 +
Rx[default_gateway]=Y.Y.Y.Y
 +
</syntaxhighlight>onde Y.Y.Y.Y é uma interface do roteador de borda ligado a Rx ou, caso não esteja diretamente ligado a este, deve ser um endereço de roteador vizinho que tenha rota para o roteador de borda.
 +
{{Collapse bottom}}
 
-->
 
-->
{{collapse top| bg=lightgreen | expandir=true |Semestre 2013-1}}
 
{{Cronograma-top}}
 
{{Cl|1 |12/04 | 4 | Apresentação da Disciplina  | Aula expositiva}}
 
{{cronograma-botton-int |36}}
 
{{collapse bottom}}
 
  
 +
==Listas de Exercícios==
 +
{{Collapse top |Lista de exercícios 1 - Introdução}}
 +
 +
#Qual é a diferença entre um hospedeiro e um sistema final? Cite os tipos de sistemas finais. Um servidor web é um sistema final?
 +
#O que caracteriza um protocolo? Dê um exemplo de um protocolo.
 +
#Por que os padrões são importantes para os protocolos?
 +
#O que é um programa cliente? O que é um programa servidor? Um programa servidor requisita e recebe serviços de um programa cliente?
 +
#Quais são os dois tipos de serviços de transporte que a Internet provê às suas aplicações? Cite algumas características de cada um desses serviços. (pg.38)
 +
#Explique o que é e quais são as vantagens de uma rede de comutação de circuitos em relação a uma rede de comutação de pacotes?
 +
#O que é uma rede de acesso?
 +
#FTTH, HFC e ADSL são usados para acesso residencial. Para cada uma dessas tecnologias de acesso, cite uma faixa de taxas de transmissão e comente se a largura de banda é compartilhada ou dedicada.
 +
#Cite tecnologias de acesso residencial disponíveis na grande Florianópolis. Para cada tipo de acesso, apresente a taxa de ''downstream'', a taxa de ''upstream'' e o preço mensal anunciados.
 +
#Qual é a taxa de transmissão de LANs Ethernet?
 +
#Porque dividimos a arquitetura da Internet (e de redes de comutação de pacotes em geral) em camadas? Por que dizemos que uma camada inferior presta um serviço a camada superior?
 +
#Quais são as cinco camadas da pilha de protocolo da Internet? Quais as principais responsabilidades de cada uma dessas camadas?
 +
#O que significa o processo de encapsulamento e desencapsulamento de pacotes no contexto da rede organizada em camadas?
 +
#O que é uma mensagem de camada de aplicação? Um segmento da camada de transporte? Um datagrama da camada de rede? Um quadro de camada de enlace? Qual a relação entre eles?
 +
#Que camadas da pilha de protocolo da Internet um roteador implementa? Que camadas um comutador de enlace implementa? Que camadas um sistema final implementa?
 +
#Imagine que você queira enviar, com urgência, 40 terabytes de dados de São José a Manaus. Você tem disponível um enlace dedicado de 100 Mbps para a transferência de dados. Você escolheria transferir os dados pelo enlace ou mandar mídias por Sedex 10? Explique.
 +
#Para pensar I: um celular tipo smartphone acessa normalmente quantas redes? Quais tecnologias sao usadas? Elas são de comutação de pacotes ou de circuitos?
 +
{{Collapse bottom}}
 +
 +
{{Collapse top |Lista de exercícios 2 - Camada de Aplicação}}
 +
#Relacione cinco aplicações da Internet não proprietárias e os protocolos da camada de aplicação que elas usam.
 +
#Qual é a diferença entre arquitetura de rede e arquitetura de aplicação?
 +
#De que modo um mensageiro instantâneo é um híbrido das arquiteturas cliente-servidor e P2P?
 +
#Para uma sessão de comunicação entre um par de processos, qual processo é o cliente e qual é o servidor?
 +
#Que informação é usada por um processo que está rodando em um hospedeiro para identificar um processo que está rodando em outro hospedeiro?
 +
#Porque o HTTP, FTP, SMTP, POP3 e IMAP rodam sobre TCP e não sobre UDP?
 +
#Por que se diz que o FTP envia informações de controle “fora da banda”?
 +
#Suponha que Aline envie uma mensagem a Eduardo por meio de uma conta de e-mail da web (como o gmail), e que Eduardo acesse seu e-mail por seu servidor utilizando POP3. Descreva como a mensagem vai do hospedeiro Aline até o hospedeiro de Eduardo. Não se esqueça de relacionar a série de protocolos de camada de aplicação usados para movimentar as mensagens entre os hospedeiros.
 +
#Em uma aplicação de compartilhamento de arquivos P2P, você concorda com a afirmação: ”não existe nenhuma noção de lados cliente e servidor de uma sessão de comunicação”? Por que sim ou por que não?
 +
#Relacione alguns agentes de usuário de aplicação de rede que você utiliza no dia-a-dia.
 +
#Considere um site de comércio eletrônico que quer manter um registro de compras para cada um de seus clientes. Descreva como isso pode ser feito com cookies.
 +
#Descreva uma aplicação que requeira “não perda de dados” e seja também altamente sensível ao atraso.
 +
#Quais informações básicas estão em um cabeçalho do pacote IP?
 +
#Um pacote IP pode ser colocado diretamente na rede física? Ele chegará a seu destino?
 +
#Os pacotes ECHO request e ECHO reply são de que protocolo? Eles trafegam dentro de qual pacote?
 +
#Para pensar II: Quando você usa o uma aplicação tipo whatsapp para conversação você está usando rede de comutação de circuitos ou de pacote?
 +
 +
ADICIONAIS PARTE 2- HTTP
 +
 +
#Cite pelo menos dois clientes http.
 +
#O que é o servidor Apache?
 +
#O protocolo http deve se executar em todos os roteadores do caminho entre cliente e servidor? Explique.
 +
#Se um hospedeiro colocar um pacote de aplicação HTTP diretamente na rede física ele chegará a seu destino?
 +
#Considere que um cliente acessa uma página HTML de servidor WEB e nesta página existem dois links para dois objetos JPG que residem no mesmo servidor. Quantos comandos GETS no total deveriam ser realizados pelo cliente? Todos eles serão realizados sobre a mesma conexão TCP?
 +
#Em uma página HTML pode existir um link para um objeto que esteja armazenado em outro site? O que o browser deve fazer neste caso? 
 +
#No pacote http de resposta de um servidor normalmente existem duas partes. Quais são elas?
 +
#Imagine que uma página html está sendo mostrada para o usuário cliente. Se o usuário pedir para que a página seja atualizada, o browser vai requisitar o objeto novamente? O servidor vai retornar o objeto mesmo que ele não tenha sido alterado?
 +
#O que é um cookie? Considere um site de comércio eletrônico que quer manter um registro de compras para cada um de seus clientes. Descreva como isso pode ser feito com cookies.
 +
#Qual é a diferença entre HTTP persistente com ''pipelining'' e HTTP persistente sem ''pipelining''. Qual dos dois é utilizado pelo HTTP/1.1?
 +
#Descreva como o cache Web pode reduzir o atraso na recepção de um objeto desejado. O cachê Web reduzirá o atraso para todos os objetos requisitados por um usuário ou somente para alguns objetos? Por quê?
 +
#Um servidor Web, quando recebe uma requisição necessita saber para qual porta deve responder na máquina requisitante? Se positivo, esta porta seria sempre a mesma?
 +
#Por que um servidor Web espera na porta TCP número 80 em geral?
 +
#O que é um proxy Web server?
 +
#Um browser pode fazer cache local? Qual a diferença entre cache local e cache em um servidor proxy?
 +
 +
ADICIONAIS PARTE 3- DNS
 +
#Porque o DNS não é centralizado?
 +
#O que são consultas recursivas e interativas em uma consulta DNS?
 +
#Quais os três tipos de servidores DNS?
 +
#Em um hospedeiro normalmente existe pelo menos um servidor DNS configurado. Que servidor deve estar configurado? Onde ele se localiza normalmente?
 +
#Quando um servidor local não consegue resolver um endereço IP olhando em seu cache, para quem ele deve encaminhar a consulta?
 +
#Um servidor sempre sabe resolver um nome solicitado? Explique.
 +
#É possível que um servidor DNS local seja um servidor com autoridade?
 +
#O que é um nome canônico e um apelido no contexto de DNS?
 +
#O que é e qual o formato de uma RR?
 +
#Explique os seguintes tipos de RR: A, NS, CNAME, MX e PTR.
 +
#Em um comando ping www.ifsc.edu.br quantas transações no mínimo serão realizadas até o último ECHO REPLY?
 +
#Por que um ping normalmente realiza uma consulta PTR?
 +
#Faça um esquema mostrando uma consulta de um cliente a um servidor local mostrando uma consulta interativa entre o servidor raiz e recursiva com um servidor de autoridade.
 +
#Cite o nome de servidor DNS bastante utilizado.
 +
#Quantos servidores raízes temos no mundo? Qual comando permite que possamos "ver" estes servidores em um hospedeiro?
 +
#Foi realizado um comando '''dig www.ifsc.edu.br''' tendo sido retornado:
 +
#:
 +
#:  www.ifsc.edu.br.        240    IN      A      200.135.190.95
 +
#:
 +
#Em seguida foi realizado um '''dig ifsc.edu.br MX''' com resposta:
 +
#:
 +
#:  ;; ANSWER SECTION:
 +
#:  ifsc.edu.br.            1327    IN      MX      15 zimbra.ifsc.edu.br.
 +
#:
 +
#:  ;; AUTHORITY SECTION:
 +
#:  ifsc.edu.br.            2082    IN      NS      ns1.ifsc.edu.br.
 +
#:  ifsc.edu.br.            2082    IN      NS      adns1.pop-sc.rnp.br.
 +
#:  ifsc.edu.br.            2082    IN      NS      ns2.ifsc.edu.br.
 +
#:  ifsc.edu.br.            2082    IN      NS      adns2.pop-sc.rnp.br.
 +
#:
 +
#:  ;; ADDITIONAL SECTION:
 +
#:  zimbra.ifsc.edu.br.    78      IN      A      200.135.190.2
 +
#:
 +
#O que se pode concluir sobre a resolução do nome baseando-se nestas respostas?
 +
 +
<!--RESPOSTAS
 +
 +
#Qual é a diferença entre um hospedeiro e um sistema final? Cite os tipos de sistemas finais. Um servidor web é um sistema final?
 +
R.Segundo Kurose[1] os sistemas hospedeiros são  sistemas finais, ou seja são considerados sinônimos. São os computadores do nosso dia a dia e que se encontram na periferia da rede executando aplicações que usufruem dos serviços da rede. Estas aplicações executam protocolos específicos para seu funcionamento (protocolos de aplicação).
 +
#O que caracteriza um protocolo? Dê um exemplo de um protocolo.
 +
R.Um conjunto de regras e formatos que viabilizam a comunicação entre duas ou mais entidades comunicantes. No caso de uma rede define as regras para troca de mensagens entre processos da rede (ações a serem realizadas no envio e no recebimento de mensagens), bem como o formato das mensagens trocadas. Em uma rede, as entidades comunicantes se encontram em uma mesma camada.
 +
#Por que os padrões são importantes para os protocolos?
 +
R.Para que exista compatibilidade na comunicação entre processos e equipamentos de rede, além de facilitar a implementação dos mesmos.
 +
#O que é um programa cliente? O que é um programa servidor? Um programa servidor requisita e recebe serviços de um programa cliente?
 +
R.Um programa cliente é uma parte de uma aplicação distribuída que requisita serviços de um outro programa chamado servidor. Tanto cliente como servidor se executam em sistemas finais. O servidor normalmente fica aguardando por uma requisição de algum recurso solicitado por um cliente. Ex: servidor Web e cliente Mozilla ou Chrome.
 +
#Quais são os dois tipos de serviços de transporte que a Internet provê às suas aplicações? Cite algumas características de cada um desses serviços.
 +
Os dois tipos básicos são serviços com conexão e sem conexão. Um serviço com conexão faz com que (em geral) duas entidades de aplicação que pretendem se comunicar, troquem mensagens de controle no sentido de manter informações mútuas de forma a permitir a execução de serviços adicionais do tipo: transferência confiável de dados, controle de fluxo de dados para não sobrecarregar o receptor e controle de congestionamento para evitar o congestionamento de pacotes na rede. Fluxos de pacotes podem ser direcionados a uma determinada conexão. Importante notar que os componentes intermediários da rede desconhecem as conexões. Na Internet, o protocolo que garante o serviço com conexão é o TCP.
 +
Já no serviço sem conexão as entidades comunicantes enviam pacotes (datagramas) sem nenhuma apresentação prévia (troca de mensagens de controle). Cada pacote é enviado de forma independente não tendo garantia de entrega. Na internet o protocolo associado a este comportamento é o UDP. Vale lembrar que por não ter nenhum procedimento associado, a troca de mensagens com UDP tem maior desempenho do que o TCP.
 +
#Quais são as vantagens de uma rede de comutação de circuitos em relação a uma rede de comutação de pacotes?
 +
Em uma rede de comutação de circuitos (ex: rede telefônica clássica) é estabelecido um canal dedicado para a a comunicação entre entidades comunicantes. Normalmente a alocação do canal dedicado é precedido de um processo de sinalização (discar o número, verificar se o destino está disponível, conectar). Uma canal dedicado não pode ser compartilhado por outras comunicações, mesmo quando fica ocioso (ex: duas pessoas na linha telefônica sem conversar). Já em uma rede de pacotes a informação é organizada em pacotes que podem compartilhar canais. Pacotes são comutados para seus destino por equipamentos do tipo roteadores. O roteamento é baseado em informações do cabeçalho do pacote.
 +
#Cite 5 tecnologias de acesso. Classifique cada uma delas nas categorias acesso residencial, acesso corporativo ou acesso móvel.
 +
#FTTH, HFC e ADSL são usados para acesso residencial. Para cada uma dessas tecnologias de acesso, cite uma faixa de taxas de transmissão e comente se a largura de banda é compartilhada ou dedicada.
 +
#Cite tecnologias de acesso residencial disponíveis na grande Florianópolis. Para cada tipo de acesso, apresente a taxa de ''downstream'', a taxa de ''upstream'' e o preço mensal anunciados.
 +
#Qual é a taxa de transmissão de LANs Ethernet?
 +
#Qual é a vantagem de uma rede de comutação de circuitos em relação a uma de comutação de pacotes?
 +
#Porque dividimos a arquitetura da Internet (e de redes de comutação de pacotes em geral) em camadas? Por que dizemos que uma camada inferior presta um serviço a camada superior?
 +
#Quais são as cinco camadas da pilha de protocolo da Internet? Quais as principais responsabilidades de cada uma dessas camadas?
 +
#O que significa o processo de encapsulamento e desencapsulamento de pacotes no contexto da rede organizada em camadas?
 +
#O que é uma mensagem de camada de aplicação? Um segmento da camada de transporte? Um datagrama da camada de rede? Um quadro de camada de enlace? Qual a relação entre eles?
 +
#Que camadas da pilha de protocolo da Internet um roteador implementa? Que camadas um comutador de enlace implementa? Que camadas um sistema final implementa?
 +
#A noção de portas é criada pela camada de transporte na arquitetura TCP/IP. Qual a funcionalidade que as portas permitem implementar?
 +
#Descreva todo o processo de ''download'' de um arquivo utilizando a ferramenta Bittorrent. Considere que o usuário acabou de instalar a mesma.
 +
#Imagine que você queira enviar, com urgência, 40 terabytes de dados de São José a Manaus. Você tem disponível um enlace dedicado de 100 Mbps para a transferência de dados. Você escolheria transferir os dados pelo enlace ou mandar mídias por Sedex 10? Explique.
 +
#Para pensar I: um celular tipo smartphone acessa normalmente quantas redes? Quais tecnologias sao usadas? Elas são de comutação de pacotes ou de circuitos?
 +
-->
 +
{{Collapse bottom}}
 +
{{Collapse top |Lista de exercícios 3 - Camada de Transporte}}
 +
#Considere uma conexão TCP entre o hospedeiro A e o hospedeiro B. Suponha que os segmentos TCP que trafegam do hospedeiro A para o hospedeiro B tenham número de porta fonte x e número de porta destino y. Quais são os números de porta fonte e do destino para os segmentos que trafegam do hospedeiro B para o hospedeiro A?
 +
#Descreva porque um desenvolvedor de aplicação pode escolher rodar uma aplicação sobre UDP em vez de sobre TCP.
 +
#O que são os serviços de multiplexação e demultiplexação implementados pela camada de transporte?
 +
#Porque se diz que o UDP é um protocolo não orientado para conexão?
 +
#Qual o papel das informações de porta origem e destino contidas nos segmentos TCP e UDP?
 +
#Porque é dito que o TCP fornece transferência confiável de dados sobre um canal não confiável?
 +
#Cite 3 diferenças entre os serviços oferecidos pelo TCP e UDP.
 +
#Para que serve um ''checksum'' em um segmento TCP ou UDP? Como ele é formado?
 +
#Cite um motivo para um protocolo de transmissão confiável adicionar um número de seqüência em cada pacote transmitido. Justifique o uso dessa informação explicando o problema que ocorreria caso ela não fosse usada.
 +
#Para que serve um ''timeout'' em um protocolo de transmissão confiável?
 +
#O que é uma reconhecimento cumulativo? [[Arquivo:WiresharkUDP.png |thumb | 600px| Figura 1 -- Captura 1 - Wireshark]]
 +
#Baseado na Figura 1, responda as seguintes perguntas:
 +
##Quais os IP fonte e destino?
 +
##Qual o protocolo da camada de transporte utilizado?
 +
##Quais as portas fonte e destino.
 +
##Qual o conteúdo do campo de tamanho (anote o tamanho) e ''checksum'' no pacote (datagrama)?
 +
##Quantos bits possui o ''checksum''? Como você calculou?
 +
##Qual o significado do campo '''Data: 74657374650a'''? Qual é a mensagem contida? Como você chegou a essa conclusão? [[Arquivo:WiresharkTCP.png |thumb | 600px| Figura 2 -- Captura 2 - Wireshark]]
 +
#Baseado na Figura 2, responda as seguintes perguntas:
 +
##Quais os IP fonte e destino?
 +
##Qual o protocolo da camada de transporte utilizado?
 +
##Quais as portas fonte e destino.
 +
##Qual o conteúdo do campo de tamanho (anote o tamanho) no pacote (datagrama)? O tamanho apresentado significa bits ou bytes?
 +
##Qual o significado do campo '''Data: 74657374650a'''? Qual é a mensagem contida? Como você chegou a essa conclusão? [[Arquivo:WiresharkTCPPerdaDePacotes.png |thumb | 600px| Figura 3 -- Captura 3 - Wireshark]]
 +
#Baseado na Figura 3, responda as seguintes perguntas:
 +
##Quais os IP fonte e destino?
 +
##Qual o protocolo da camada de transporte utilizado?
 +
##Quais as portas fonte e destino.
 +
##Qual o número de sequência (normalizado pelo Wireshark) de cada segmento de dados transmitido, e qual o significado do número de reconhecimento em cada um deles?
 +
##Como foi reconhecido cada segmento enviado?
 +
##Qual o significado do conjunto de mensagens de número (No.) 1 à 3? Explique essas 3 mensagens.
 +
##Qual o significado do conjunto de mensagens de número (No.) 17 à 19?  Explique essas 3 mensagens.
 +
##Qual o significado do conjunto de mensagens de número (No.) 6, 11 e 16?  Explique essas 3 mensagens.
 +
##Qual é o tamanho "médio" de janela de cado um dos ''hosts''?
 +
##Qual a utilizade das mensagens com fundo preto?
 +
{{Collapse bottom}}
  
==Material de Aula==
+
{{Collapse top |Lista de exercícios 4 - Camada de Rede}}
 +
#Quais são as principais características de uma rede de datagramas?
 +
#Roteadores possuem endereços IP? Quantos endereços IP um roteador possui?
 +
#Para que serve o protocolo ICMP?
 +
#Para que serve o campo “Time to Live” (sobrevida) em um datagrama IP?
 +
#Quantos hosts podem ser endereçados com um bloco IP 200.23.16.0/20? Como podemos montar 8 sub-redes a partir deste bloco de endereços IP?
 +
#Um provedor de serviços ISP possui cerca de 2000 clientes cadastrados atualmente. Porém um levantamento realizado recentemente pelo administrador da rede constatou que nunca mais do que 450 clientes estão on-line ao mesmo tempo. Qual o bloco de endereços IP na forma CIDR (a.b.c.d/x) deve ser contratado pelo ISP, considerando o estudo realizado pelo administrador da rede?
 +
#Um administrador precisa montar uma rede experimental conforme mostrada na figura. Na sub-rede 1 ele precisará instalar cerca 25 hosts, e nas sub-redes 2 e 3 ele precisará instalar cerca de 12 hosts. O administrador dispõe do bloco de endereços IP 192.168.10.0/24 para ser utilizado no endereçamento da rede experimental. Faça uma proposta para alocação de endereços IP para cada sub-rede (rede 1, 2 e 3), incluindo também as sub-redes relativas aos enlaces ponto-a-ponto (rede AB, AC e BC). Responda ainda:
 +
##Qual o endereço identificador de rede de cada sub-rede (1, 2 e 3)?
 +
##Qual o a máscara de rede de cada sub-rede (1, 2 e 3)?
 +
##Quais os endereços IP que serão atribuídos a cada interface de rede nos enlaces ponto-a-ponto dos roteadores (enlaces relativos as redes AB, AC e BC)[[Arquivo:CdrEx.png]]
 +
#Suponha que um administrador de rede tenha recebido o bloco de endereços 200.40.8.0/21 e que deseja dividir este bloco em 8 blocos de endereços iguais, de menor tamanho, para ser alocado a 8 sub-redes administradas por ele.
 +
##Determine o tamanho total do bloco de endereços.
 +
##Determine o tamanho de cada sub-bloco.
 +
##Determine o endereço/máscara de rede de cada sub-rede.
 +
#Um provedor de acesso a Internet possui o seguinte bloco de endereços IP: 12.17.192.0/18. Os endereços IP de 12.17.192.1 até 12.17.207.255 já estão alocados para clientes deste provedor. Este provedor precisa atender a quatro novos clientes, um deles necessita de rede com pelo menos 1000 endereços de IP válidos e os outros três necessitam de rede com pelo menos 30 IP válidos. Faça uma proposta para alocação de endereços IP para estes clientes. Os endereços reservados para estes novos clientes devem ser alocados a partir da numeração mais baixa disponível. Procure também responder as questões abaixo:
 +
##Qual o total de endereços que dispõe o provedor em questão?
 +
##Quantos endereços IP já estão utilizados?
 +
##Quantos endereços IP este provedor possui livres para alocar aos novos clientes?
 +
##Qual o endereço identificador de cada sub-rede dos novos clientes?
 +
##Qual o a máscara de rede de cada sub-rede dos novos clientes?
 +
##Qual o endereço de broadcast de cada sub-rede dos novos clientes?
 +
##Quantos endereços IP ainda sobrarão ao provedor após atender a estes clientes?
 +
#Quantas estações uma rede 223.1.10.0/24 suporta?
 +
#Uma rede com bloco de IPs 200.23.16.0/20 deseja montar 8 subredes. Mostre como isso é possível e como ficaria os endereços de cada uma dessas subredes.
 +
#Um datagrama enviado para uma estação da mesma rede precisa passar por um roteador?
 +
#Suponha que entre o hospedeiro de origem A e o hospedeiro de destino B os datagramas estejam limitados a 1500 bytes (incluindo cabeçalho). Admitindo um cabeçalho IP de 20 bytes, quantos datagramas seriam necessários para enviar um arquivo MP3 de 5 milhões de bytes? Explique como você obteve a resposta.
 +
#Descreva e detalhe o processo de obtenção de um endereço IP através do protocolo DHCP.  [[Image:ExercicioConfEstaticaZebra.png]]
 +
#Considere a rede apresetanda na Figura, onde todas as sub-redes apresentam máscara de rede /24 (255.255.255.0), e tendo os dados do Host1 e Roteador 4 apresentados no quadro abaixo, responda: <syntaxhighlight lang=bash>
 +
root@H1:~# ifconfig
 +
eth0      Link encap:Ethernet  HWaddr 7a:a6:f4:ca:51:0e 
 +
          inet addr:200.10.1.1  Bcast:200.10.1.255  Mask:255.255.255.0
  
Aqui pode ser incluído o material de aula referente à disciplina.
+
root@H1:~# route -n
 +
Kernel IP routing table
 +
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
 +
0.0.0.0        200.10.1.254    0.0.0.0        UG    0      0        0 eth0
 +
200.10.1.0      0.0.0.0        255.255.255.0  U    0      0        0 eth0
  
{{INTTELECO}}
+
root@R4:~# route -n
 +
Kernel IP routing table
 +
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
 +
200.10.1.0      200.10.3.1      255.255.255.0  UG    0      0        0 eth0
 +
200.10.3.0      0.0.0.0        255.255.255.0  U    0      0        0 eth0
 +
200.10.5.0      0.0.0.0        255.255.255.0  U    0      0        0 eth1
 +
200.10.6.0      0.0.0.0        255.255.255.0  U    0      0        0 eth2
 +
200.10.8.0      200.10.6.1      255.255.255.0  UG    0      0        0 eth2 </syntaxhighlight>
 +
##Observando a tabela do hospedeiro (H1) é possível dizer quem é seu roteador default?
 +
##Se o hospedeiro (H1) tiver um pacote para entregar para o IP 200.10.1.20 ele utilizará entrega direta ou utilizará seu roteador padrão? Explique o significado da entrega direta e indireta (via roteador).
 +
##Se o hospedeiro (H1) tiver um pacote para entregar para o IP 200.10.8.1 ele utilizará entrega direta ou utilizará seu roteador padrão?
 +
##Se o roteador (R4) receber um pacote cujo IP de destino é 200.10.1.10 para qual roteador ele entregará tal pacote e por qual interface? Será uma entrega direta ou indireta?
 +
##Se o roteador (R4) receber um pacote cujo IP de destino é 200.10.6.1 para qual roteador ele entregará tal pacote e por qual interface? Será uma entrega direta ou indireta?
 +
##Se o roteador (R4) receber um pacote cujo IP de destino é 200.10.1.10, cuja carga segmento TCP com destino a porta 80, para qual roteador ele entregará tal pacote e por qual interface? Será uma entrega direta ou indireta?
 +
##Se o roteador (R4) receber um pacote cujo IP de destino é 122.10.4.7 para qual roteador ele entregará tal pacote e por qual interface? Explique.
 +
##Qual comando que você executaria no roteador (R4) para acrescentar uma rota para a rede SN2? Explique seu comando.
 +
##Considerando a pergunta anterior, a rota acrescentada garantiria que se você fizer um ping para um host da rede SN2 você obteria sucesso? Explique todas as possibilidades.
 +
##Explique o significado dos campos das colunas 1, 2, 3 e 8 da última linha da tabela do roteador (R4).
 +
{{Collapse bottom}}

Edição atual tal como às 13h05min de 15 de fevereiro de 2024

MURAL DE AVISOS E OPORTUNIDADES DA ÁREA DE TELECOMUNICAÇÕES


Informações Gerais

Edições

Material de apoio

Applets do Kurose

Vários aplicativos com representação dinâmica de características das redes de computadores.

Transparências utilizadas durante as aulas

Capítulo 1 - Introdução

Capítulo 2 - Camada de Aplicação

Capítulo 2 - Camada de Aplicação - FTP + EMAIL + P2P

Capítulo 3 - Camada de Transporte

Capítulo 4 - Camada de Rede

Slides de Outras Universidades

Curiosidades


Listas de Exercícios

Lista de exercícios 1 - Introdução
  1. Qual é a diferença entre um hospedeiro e um sistema final? Cite os tipos de sistemas finais. Um servidor web é um sistema final?
  2. O que caracteriza um protocolo? Dê um exemplo de um protocolo.
  3. Por que os padrões são importantes para os protocolos?
  4. O que é um programa cliente? O que é um programa servidor? Um programa servidor requisita e recebe serviços de um programa cliente?
  5. Quais são os dois tipos de serviços de transporte que a Internet provê às suas aplicações? Cite algumas características de cada um desses serviços. (pg.38)
  6. Explique o que é e quais são as vantagens de uma rede de comutação de circuitos em relação a uma rede de comutação de pacotes?
  7. O que é uma rede de acesso?
  8. FTTH, HFC e ADSL são usados para acesso residencial. Para cada uma dessas tecnologias de acesso, cite uma faixa de taxas de transmissão e comente se a largura de banda é compartilhada ou dedicada.
  9. Cite tecnologias de acesso residencial disponíveis na grande Florianópolis. Para cada tipo de acesso, apresente a taxa de downstream, a taxa de upstream e o preço mensal anunciados.
  10. Qual é a taxa de transmissão de LANs Ethernet?
  11. Porque dividimos a arquitetura da Internet (e de redes de comutação de pacotes em geral) em camadas? Por que dizemos que uma camada inferior presta um serviço a camada superior?
  12. Quais são as cinco camadas da pilha de protocolo da Internet? Quais as principais responsabilidades de cada uma dessas camadas?
  13. O que significa o processo de encapsulamento e desencapsulamento de pacotes no contexto da rede organizada em camadas?
  14. O que é uma mensagem de camada de aplicação? Um segmento da camada de transporte? Um datagrama da camada de rede? Um quadro de camada de enlace? Qual a relação entre eles?
  15. Que camadas da pilha de protocolo da Internet um roteador implementa? Que camadas um comutador de enlace implementa? Que camadas um sistema final implementa?
  16. Imagine que você queira enviar, com urgência, 40 terabytes de dados de São José a Manaus. Você tem disponível um enlace dedicado de 100 Mbps para a transferência de dados. Você escolheria transferir os dados pelo enlace ou mandar mídias por Sedex 10? Explique.
  17. Para pensar I: um celular tipo smartphone acessa normalmente quantas redes? Quais tecnologias sao usadas? Elas são de comutação de pacotes ou de circuitos?
Lista de exercícios 2 - Camada de Aplicação
  1. Relacione cinco aplicações da Internet não proprietárias e os protocolos da camada de aplicação que elas usam.
  2. Qual é a diferença entre arquitetura de rede e arquitetura de aplicação?
  3. De que modo um mensageiro instantâneo é um híbrido das arquiteturas cliente-servidor e P2P?
  4. Para uma sessão de comunicação entre um par de processos, qual processo é o cliente e qual é o servidor?
  5. Que informação é usada por um processo que está rodando em um hospedeiro para identificar um processo que está rodando em outro hospedeiro?
  6. Porque o HTTP, FTP, SMTP, POP3 e IMAP rodam sobre TCP e não sobre UDP?
  7. Por que se diz que o FTP envia informações de controle “fora da banda”?
  8. Suponha que Aline envie uma mensagem a Eduardo por meio de uma conta de e-mail da web (como o gmail), e que Eduardo acesse seu e-mail por seu servidor utilizando POP3. Descreva como a mensagem vai do hospedeiro Aline até o hospedeiro de Eduardo. Não se esqueça de relacionar a série de protocolos de camada de aplicação usados para movimentar as mensagens entre os hospedeiros.
  9. Em uma aplicação de compartilhamento de arquivos P2P, você concorda com a afirmação: ”não existe nenhuma noção de lados cliente e servidor de uma sessão de comunicação”? Por que sim ou por que não?
  10. Relacione alguns agentes de usuário de aplicação de rede que você utiliza no dia-a-dia.
  11. Considere um site de comércio eletrônico que quer manter um registro de compras para cada um de seus clientes. Descreva como isso pode ser feito com cookies.
  12. Descreva uma aplicação que requeira “não perda de dados” e seja também altamente sensível ao atraso.
  13. Quais informações básicas estão em um cabeçalho do pacote IP?
  14. Um pacote IP pode ser colocado diretamente na rede física? Ele chegará a seu destino?
  15. Os pacotes ECHO request e ECHO reply são de que protocolo? Eles trafegam dentro de qual pacote?
  16. Para pensar II: Quando você usa o uma aplicação tipo whatsapp para conversação você está usando rede de comutação de circuitos ou de pacote?

ADICIONAIS PARTE 2- HTTP

  1. Cite pelo menos dois clientes http.
  2. O que é o servidor Apache?
  3. O protocolo http deve se executar em todos os roteadores do caminho entre cliente e servidor? Explique.
  4. Se um hospedeiro colocar um pacote de aplicação HTTP diretamente na rede física ele chegará a seu destino?
  5. Considere que um cliente acessa uma página HTML de servidor WEB e nesta página existem dois links para dois objetos JPG que residem no mesmo servidor. Quantos comandos GETS no total deveriam ser realizados pelo cliente? Todos eles serão realizados sobre a mesma conexão TCP?
  6. Em uma página HTML pode existir um link para um objeto que esteja armazenado em outro site? O que o browser deve fazer neste caso?
  7. No pacote http de resposta de um servidor normalmente existem duas partes. Quais são elas?
  8. Imagine que uma página html está sendo mostrada para o usuário cliente. Se o usuário pedir para que a página seja atualizada, o browser vai requisitar o objeto novamente? O servidor vai retornar o objeto mesmo que ele não tenha sido alterado?
  9. O que é um cookie? Considere um site de comércio eletrônico que quer manter um registro de compras para cada um de seus clientes. Descreva como isso pode ser feito com cookies.
  10. Qual é a diferença entre HTTP persistente com pipelining e HTTP persistente sem pipelining. Qual dos dois é utilizado pelo HTTP/1.1?
  11. Descreva como o cache Web pode reduzir o atraso na recepção de um objeto desejado. O cachê Web reduzirá o atraso para todos os objetos requisitados por um usuário ou somente para alguns objetos? Por quê?
  12. Um servidor Web, quando recebe uma requisição necessita saber para qual porta deve responder na máquina requisitante? Se positivo, esta porta seria sempre a mesma?
  13. Por que um servidor Web espera na porta TCP número 80 em geral?
  14. O que é um proxy Web server?
  15. Um browser pode fazer cache local? Qual a diferença entre cache local e cache em um servidor proxy?

ADICIONAIS PARTE 3- DNS

  1. Porque o DNS não é centralizado?
  2. O que são consultas recursivas e interativas em uma consulta DNS?
  3. Quais os três tipos de servidores DNS?
  4. Em um hospedeiro normalmente existe pelo menos um servidor DNS configurado. Que servidor deve estar configurado? Onde ele se localiza normalmente?
  5. Quando um servidor local não consegue resolver um endereço IP olhando em seu cache, para quem ele deve encaminhar a consulta?
  6. Um servidor sempre sabe resolver um nome solicitado? Explique.
  7. É possível que um servidor DNS local seja um servidor com autoridade?
  8. O que é um nome canônico e um apelido no contexto de DNS?
  9. O que é e qual o formato de uma RR?
  10. Explique os seguintes tipos de RR: A, NS, CNAME, MX e PTR.
  11. Em um comando ping www.ifsc.edu.br quantas transações no mínimo serão realizadas até o último ECHO REPLY?
  12. Por que um ping normalmente realiza uma consulta PTR?
  13. Faça um esquema mostrando uma consulta de um cliente a um servidor local mostrando uma consulta interativa entre o servidor raiz e recursiva com um servidor de autoridade.
  14. Cite o nome de servidor DNS bastante utilizado.
  15. Quantos servidores raízes temos no mundo? Qual comando permite que possamos "ver" estes servidores em um hospedeiro?
  16. Foi realizado um comando dig www.ifsc.edu.br tendo sido retornado:
    www.ifsc.edu.br. 240 IN A 200.135.190.95
  17. Em seguida foi realizado um dig ifsc.edu.br MX com resposta:
    ;; ANSWER SECTION:
    ifsc.edu.br. 1327 IN MX 15 zimbra.ifsc.edu.br.
    ;; AUTHORITY SECTION:
    ifsc.edu.br. 2082 IN NS ns1.ifsc.edu.br.
    ifsc.edu.br. 2082 IN NS adns1.pop-sc.rnp.br.
    ifsc.edu.br. 2082 IN NS ns2.ifsc.edu.br.
    ifsc.edu.br. 2082 IN NS adns2.pop-sc.rnp.br.
    ;; ADDITIONAL SECTION:
    zimbra.ifsc.edu.br. 78 IN A 200.135.190.2
  18. O que se pode concluir sobre a resolução do nome baseando-se nestas respostas?
Lista de exercícios 3 - Camada de Transporte
  1. Considere uma conexão TCP entre o hospedeiro A e o hospedeiro B. Suponha que os segmentos TCP que trafegam do hospedeiro A para o hospedeiro B tenham número de porta fonte x e número de porta destino y. Quais são os números de porta fonte e do destino para os segmentos que trafegam do hospedeiro B para o hospedeiro A?
  2. Descreva porque um desenvolvedor de aplicação pode escolher rodar uma aplicação sobre UDP em vez de sobre TCP.
  3. O que são os serviços de multiplexação e demultiplexação implementados pela camada de transporte?
  4. Porque se diz que o UDP é um protocolo não orientado para conexão?
  5. Qual o papel das informações de porta origem e destino contidas nos segmentos TCP e UDP?
  6. Porque é dito que o TCP fornece transferência confiável de dados sobre um canal não confiável?
  7. Cite 3 diferenças entre os serviços oferecidos pelo TCP e UDP.
  8. Para que serve um checksum em um segmento TCP ou UDP? Como ele é formado?
  9. Cite um motivo para um protocolo de transmissão confiável adicionar um número de seqüência em cada pacote transmitido. Justifique o uso dessa informação explicando o problema que ocorreria caso ela não fosse usada.
  10. Para que serve um timeout em um protocolo de transmissão confiável?
  11. O que é uma reconhecimento cumulativo?
    Figura 1 -- Captura 1 - Wireshark
  12. Baseado na Figura 1, responda as seguintes perguntas:
    1. Quais os IP fonte e destino?
    2. Qual o protocolo da camada de transporte utilizado?
    3. Quais as portas fonte e destino.
    4. Qual o conteúdo do campo de tamanho (anote o tamanho) e checksum no pacote (datagrama)?
    5. Quantos bits possui o checksum? Como você calculou?
    6. Qual o significado do campo Data: 74657374650a? Qual é a mensagem contida? Como você chegou a essa conclusão?
      Figura 2 -- Captura 2 - Wireshark
  13. Baseado na Figura 2, responda as seguintes perguntas:
    1. Quais os IP fonte e destino?
    2. Qual o protocolo da camada de transporte utilizado?
    3. Quais as portas fonte e destino.
    4. Qual o conteúdo do campo de tamanho (anote o tamanho) no pacote (datagrama)? O tamanho apresentado significa bits ou bytes?
    5. Qual o significado do campo Data: 74657374650a? Qual é a mensagem contida? Como você chegou a essa conclusão?
      Figura 3 -- Captura 3 - Wireshark
  14. Baseado na Figura 3, responda as seguintes perguntas:
    1. Quais os IP fonte e destino?
    2. Qual o protocolo da camada de transporte utilizado?
    3. Quais as portas fonte e destino.
    4. Qual o número de sequência (normalizado pelo Wireshark) de cada segmento de dados transmitido, e qual o significado do número de reconhecimento em cada um deles?
    5. Como foi reconhecido cada segmento enviado?
    6. Qual o significado do conjunto de mensagens de número (No.) 1 à 3? Explique essas 3 mensagens.
    7. Qual o significado do conjunto de mensagens de número (No.) 17 à 19? Explique essas 3 mensagens.
    8. Qual o significado do conjunto de mensagens de número (No.) 6, 11 e 16? Explique essas 3 mensagens.
    9. Qual é o tamanho "médio" de janela de cado um dos hosts?
    10. Qual a utilizade das mensagens com fundo preto?
Lista de exercícios 4 - Camada de Rede
  1. Quais são as principais características de uma rede de datagramas?
  2. Roteadores possuem endereços IP? Quantos endereços IP um roteador possui?
  3. Para que serve o protocolo ICMP?
  4. Para que serve o campo “Time to Live” (sobrevida) em um datagrama IP?
  5. Quantos hosts podem ser endereçados com um bloco IP 200.23.16.0/20? Como podemos montar 8 sub-redes a partir deste bloco de endereços IP?
  6. Um provedor de serviços ISP possui cerca de 2000 clientes cadastrados atualmente. Porém um levantamento realizado recentemente pelo administrador da rede constatou que nunca mais do que 450 clientes estão on-line ao mesmo tempo. Qual o bloco de endereços IP na forma CIDR (a.b.c.d/x) deve ser contratado pelo ISP, considerando o estudo realizado pelo administrador da rede?
  7. Um administrador precisa montar uma rede experimental conforme mostrada na figura. Na sub-rede 1 ele precisará instalar cerca 25 hosts, e nas sub-redes 2 e 3 ele precisará instalar cerca de 12 hosts. O administrador dispõe do bloco de endereços IP 192.168.10.0/24 para ser utilizado no endereçamento da rede experimental. Faça uma proposta para alocação de endereços IP para cada sub-rede (rede 1, 2 e 3), incluindo também as sub-redes relativas aos enlaces ponto-a-ponto (rede AB, AC e BC). Responda ainda:
    1. Qual o endereço identificador de rede de cada sub-rede (1, 2 e 3)?
    2. Qual o a máscara de rede de cada sub-rede (1, 2 e 3)?
    3. Quais os endereços IP que serão atribuídos a cada interface de rede nos enlaces ponto-a-ponto dos roteadores (enlaces relativos as redes AB, AC e BC)CdrEx.png
  8. Suponha que um administrador de rede tenha recebido o bloco de endereços 200.40.8.0/21 e que deseja dividir este bloco em 8 blocos de endereços iguais, de menor tamanho, para ser alocado a 8 sub-redes administradas por ele.
    1. Determine o tamanho total do bloco de endereços.
    2. Determine o tamanho de cada sub-bloco.
    3. Determine o endereço/máscara de rede de cada sub-rede.
  9. Um provedor de acesso a Internet possui o seguinte bloco de endereços IP: 12.17.192.0/18. Os endereços IP de 12.17.192.1 até 12.17.207.255 já estão alocados para clientes deste provedor. Este provedor precisa atender a quatro novos clientes, um deles necessita de rede com pelo menos 1000 endereços de IP válidos e os outros três necessitam de rede com pelo menos 30 IP válidos. Faça uma proposta para alocação de endereços IP para estes clientes. Os endereços reservados para estes novos clientes devem ser alocados a partir da numeração mais baixa disponível. Procure também responder as questões abaixo:
    1. Qual o total de endereços que dispõe o provedor em questão?
    2. Quantos endereços IP já estão utilizados?
    3. Quantos endereços IP este provedor possui livres para alocar aos novos clientes?
    4. Qual o endereço identificador de cada sub-rede dos novos clientes?
    5. Qual o a máscara de rede de cada sub-rede dos novos clientes?
    6. Qual o endereço de broadcast de cada sub-rede dos novos clientes?
    7. Quantos endereços IP ainda sobrarão ao provedor após atender a estes clientes?
  10. Quantas estações uma rede 223.1.10.0/24 suporta?
  11. Uma rede com bloco de IPs 200.23.16.0/20 deseja montar 8 subredes. Mostre como isso é possível e como ficaria os endereços de cada uma dessas subredes.
  12. Um datagrama enviado para uma estação da mesma rede precisa passar por um roteador?
  13. Suponha que entre o hospedeiro de origem A e o hospedeiro de destino B os datagramas estejam limitados a 1500 bytes (incluindo cabeçalho). Admitindo um cabeçalho IP de 20 bytes, quantos datagramas seriam necessários para enviar um arquivo MP3 de 5 milhões de bytes? Explique como você obteve a resposta.
  14. Descreva e detalhe o processo de obtenção de um endereço IP através do protocolo DHCP. ExercicioConfEstaticaZebra.png
  15. Considere a rede apresetanda na Figura, onde todas as sub-redes apresentam máscara de rede /24 (255.255.255.0), e tendo os dados do Host1 e Roteador 4 apresentados no quadro abaixo, responda:
    root@H1:~# ifconfig 
    eth0      Link encap:Ethernet  HWaddr 7a:a6:f4:ca:51:0e  
              inet addr:200.10.1.1  Bcast:200.10.1.255  Mask:255.255.255.0
    
    root@H1:~# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         200.10.1.254    0.0.0.0         UG    0      0        0 eth0
    200.10.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
    
    root@R4:~# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    200.10.1.0      200.10.3.1      255.255.255.0   UG    0      0        0 eth0
    200.10.3.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
    200.10.5.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
    200.10.6.0      0.0.0.0         255.255.255.0   U     0      0        0 eth2
    200.10.8.0      200.10.6.1      255.255.255.0   UG    0      0        0 eth2
    
    1. Observando a tabela do hospedeiro (H1) é possível dizer quem é seu roteador default?
    2. Se o hospedeiro (H1) tiver um pacote para entregar para o IP 200.10.1.20 ele utilizará entrega direta ou utilizará seu roteador padrão? Explique o significado da entrega direta e indireta (via roteador).
    3. Se o hospedeiro (H1) tiver um pacote para entregar para o IP 200.10.8.1 ele utilizará entrega direta ou utilizará seu roteador padrão?
    4. Se o roteador (R4) receber um pacote cujo IP de destino é 200.10.1.10 para qual roteador ele entregará tal pacote e por qual interface? Será uma entrega direta ou indireta?
    5. Se o roteador (R4) receber um pacote cujo IP de destino é 200.10.6.1 para qual roteador ele entregará tal pacote e por qual interface? Será uma entrega direta ou indireta?
    6. Se o roteador (R4) receber um pacote cujo IP de destino é 200.10.1.10, cuja carga segmento TCP com destino a porta 80, para qual roteador ele entregará tal pacote e por qual interface? Será uma entrega direta ou indireta?
    7. Se o roteador (R4) receber um pacote cujo IP de destino é 122.10.4.7 para qual roteador ele entregará tal pacote e por qual interface? Explique.
    8. Qual comando que você executaria no roteador (R4) para acrescentar uma rota para a rede SN2? Explique seu comando.
    9. Considerando a pergunta anterior, a rota acrescentada garantiria que se você fizer um ping para um host da rede SN2 você obteria sucesso? Explique todas as possibilidades.
    10. Explique o significado dos campos das colunas 1, 2, 3 e 8 da última linha da tabela do roteador (R4).