Mudanças entre as edições de "Curso Técnico Integrado de Telecomunicações - Redes de Computadores (RCO)"
Ir para navegação
Ir para pesquisar
(102 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | |||
− | |||
{{DivulgueEngtelecom}} | {{DivulgueEngtelecom}} | ||
==Informações Gerais== | ==Informações Gerais== | ||
*[[RCO-IntTel|Carga horária, Ementas, Bibliografia]] | *[[RCO-IntTel|Carga horária, Ementas, Bibliografia]] | ||
*[[RCO-IntTel (Plano de Ensino) | Plano de Ensino]] | *[[RCO-IntTel (Plano de Ensino) | Plano de Ensino]] | ||
− | |||
==Edições== | ==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 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-2|RCO60803 2017-2 - Prof. Odilson Tadeu Valle / Prof. Eraldo Silveira e Silva]] | ||
Linha 24: | Linha 22: | ||
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. | 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== | ==Transparências utilizadas durante as aulas== | ||
− | [http://docente.ifsc.edu.br/odilson/ | + | [http://docente.ifsc.edu.br/odilson/RDC60803/slides-kurose-cap1.pdf Capítulo 1 - Introdução] |
− | [http://docente.ifsc.edu.br/odilson/ | + | [http://docente.ifsc.edu.br/odilson/RDC60803/slides-kurose-cap2.pdf Capítulo 2 - Camada de Aplicação] |
− | [http://docente.ifsc.edu.br/odilson/ | + | [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/ | + | [http://docente.ifsc.edu.br/odilson/RDC60803/slides-kurose-cap3.pdf Capítulo 3 - Camada de Transporte] |
− | [http://docente.ifsc.edu.br/odilson/ | + | [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== | ==Slides de Outras Universidades== | ||
Linha 44: | Linha 42: | ||
* [http://www.pop-sc.rnp.br/publico/monitoramento.php Monitoramento do tráfego RNP - PoP-SC] | * [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- | + | * [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://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://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=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=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=1G3SUTmioQE ''Browser Wars'' - legendado] | ||
* [https://www.youtube.com/watch?v=0nz-lcuv3TM ''Browser Wars'' - dublado] | * [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] | * [https://db-ip.com/200.135.37.65 Localização geográfica de IPs] | ||
* [http://ipv6.br/ '''IPv6 no Brasil'''] | * [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] | * [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://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] | ||
+ | |||
+ | <!-- | ||
+ | =Laboratórios= | ||
− | |||
{{Collapse top |Laboratório 1 - Ferramentas de Rede e Conceitos Básicos}} | {{Collapse top |Laboratório 1 - Ferramentas de Rede e Conceitos Básicos}} | ||
Linha 64: | Linha 72: | ||
===Objetivos=== | ===Objetivos=== | ||
− | *Familiarização com a infraestrutura dos laboratórios de redes | + | *Familiarização com a infraestrutura dos laboratórios de redes |
*Familiarização com ferramentas de rede: ifconfig, ping, traceroute; | *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 endereçamentos de rede IP e de endereço de hardware (MAC) | ||
*Desenvolver a noção de rotas em redes IP | *Desenvolver a noção de rotas em redes IP | ||
− | * | + | *Testar a conectividade IP com ping |
===Conceitos introdutórios para uso do laboratório=== | ===Conceitos introdutórios para uso do laboratório=== | ||
Linha 75: | Linha 83: | ||
====Estrutura do Laboratório==== | ====Estrutura do Laboratório==== | ||
− | [http://docente.ifsc.edu.br/odilson/ | + | [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). | A rede do laboratório em uso segue o modelo apresentado no diagrama da Figura 1 (endereçamento pode ser diferente). | ||
Linha 81: | Linha 91: | ||
[[Arquivo:Diagrama_rede_IFSC_lab_redes_I.jpeg |thumb | 400px| Figura 1 - Diagrama da rede do laboratório]] | [[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 | + | 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=== | ===Roteiro de atividades=== | ||
====Parte 1: Observando interfaces do sistema com ifconfig==== | ====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. | 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. | 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 < | + | #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 | 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 | inet end.: 172.18.18.14 Bcast:172.18.63.255 Masc:255.255.192.0 | ||
Linha 134: | Linha 146: | ||
Consultar as páginas ''man'' do ping para verificar as possibilidades de uso deste aplicativo. | Consultar as páginas ''man'' do ping para verificar as possibilidades de uso deste aplicativo. | ||
− | #Exemplo 1: < | + | #Exemplo 1: <syntaxhighlight lang=bash> |
− | PING | + | ping 191.36.0.94 |
− | 64 bytes from | + | PING 191.36.0.94 (191.36.0.94) 56(84) bytes of data. |
− | 64 bytes from | + | 64 bytes from 191.36.0.94: icmp_seq=1 ttl=60 time=2.46 ms |
− | 64 bytes from | + | 64 bytes from 191.36.0.94: icmp_seq=2 ttl=60 time=0.513 ms |
− | 64 bytes from | + | 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 | ^C | ||
− | --- | + | --- 191.36.0.94 ping statistics --- |
− | 4 packets transmitted, 4 received, 0% packet loss, time | + | 4 packets transmitted, 4 received, 0% packet loss, time 3001ms |
− | rtt min/avg/max/mdev = 0. | + | 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'') | ##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 | ##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 | ||
Linha 152: | Linha 166: | ||
##máquina de um colega do laboratório; | ##máquina de um colega do laboratório; | ||
##servidor e roteador da rede da escola; | ##servidor e roteador da rede da escola; | ||
− | ##servidores externos: < | + | ##servidores externos: <syntaxhighlight lang=bash> |
www.ifsc.edu.br | www.ifsc.edu.br | ||
www.uol.com.br | www.uol.com.br | ||
Linha 161: | Linha 175: | ||
##-s packetsize | ##-s packetsize | ||
##-t ttl (para um site distante inicie com 1 e vá incrementando, observe as mensagens) | ##-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: < | + | #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. | #Tente o ping6 para outros sites. | ||
Linha 169: | Linha 183: | ||
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. | 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: < | + | #Exemplo: <syntaxhighlight lang=bash> |
− | sudo traceroute - | + | sudo traceroute -I 200.135.37.65 |
traceroute to 200.135.37.65 (200.135.37.65), 30 hops max, 60 byte packets | 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 | 1 192.168.1.1 (192.168.1.1) 0.225 ms 0.216 ms 0.368 ms | ||
Linha 183: | Linha 197: | ||
#Explique as linhas com o caracter *. | #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. | #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: < | + | #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. | #Tente o traceroute no IPv6 para outros sites. | ||
Linha 202: | Linha 216: | ||
2005 KUROSE, J.F & ROSS, K. W. Todos os direitos reservados | 2005 KUROSE, J.F & ROSS, K. W. Todos os direitos reservados | ||
− | [http://docente.ifsc.edu.br/odilson/ | + | [http://docente.ifsc.edu.br/odilson/RDC60803/Wireshark%20e%20encapsulamento.pdf Wireshark e encapsulamento] |
*Introdução | *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. | 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. | ||
Linha 232: | Linha 246: | ||
#Inicie o navegador web; | #Inicie o navegador web; | ||
#Inicie o Wireshark. Inicialmente as janelas estarão vazias, pois não há captura de pacotes em progresso; | #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. | + | #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]] | #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; | + | #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; | #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):< | + | #Execute um comando ping (endereço na saída da nossa rede - ver aula anterior):<syntaxhighlight lang=bash> |
ping 200.237.201.153</syntaxhighlight> | ping 200.237.201.153</syntaxhighlight> | ||
#Ao voltar para a janela do Wireshark, houve a captura de todos os pacotes envolvidos no process; | #Ao voltar para a janela do Wireshark, houve a captura de todos os pacotes envolvidos no process; | ||
Linha 252: | Linha 266: | ||
#Teste outros filtros, por exemplo, mostre somente pacotes originados e/ou destinados a um determinado ''host'' ('''ip.addr == 192.168...''', ip.src, ip.dst). | #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? | #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 bottom}} | ||
Linha 263: | Linha 284: | ||
===Introdução=== | ===Introdução=== | ||
− | [http://docente.ifsc.edu.br/odilson/ | + | [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. | 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. | ||
Linha 278: | Linha 299: | ||
[[Arquivo:AppRCO.png | 500px | Estrutura Applicação'']] | [[Arquivo:AppRCO.png | 500px | Estrutura Applicação'']] | ||
+ | ===Procedimento do Laboratório=== | ||
− | A | + | *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: | Para auxiliar na interpretação das mensagens utilize: | ||
Linha 295: | Linha 322: | ||
##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. | ##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. | ##Um desafio matemático, por exemplo: 2+2. | ||
− | #Envie essa mensagem através do comando '''ping''' com a ''flag'' ''pattern''. Um exemplo de mensagem é: < | + | #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. | ##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. | #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. | ##Monte uma resposta e utilize o comando '''ping''' para responder ao emitente. | ||
##Certifique-se que o colega conseguiu interpretar a mensagem | ##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 bottom}} | ||
Linha 310: | Linha 340: | ||
===Fonte base=== | ===Fonte base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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] | *[http://www.ebah.com.br/content/ABAAABZ6QAD/wireshark-http Wireshark - HTTP] | ||
*[https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP na Wikipedia] | *[https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP na Wikipedia] | ||
Linha 379: | Linha 409: | ||
#* 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? | #* 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) | #* 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? | + | #* 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 |
− | #* Refaça um pedido para o recurso ''default'' e veja o código de resposta:<syntaxhighlight lang=bash> | + | 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> | 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> | #* 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 | GET /~odilson/RED29004//RED29004.html HTTP/1.1 | ||
Host: tele.sj.ifsc.edu.br</syntaxhighlight> | 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> | + | #'''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 | GET /~odilson/RED29004//RED29004_arq2.html HTTP/1.1 | ||
Host: tele.sj.ifsc.edu.br | Host: tele.sj.ifsc.edu.br | ||
Linha 402: | Linha 434: | ||
===Fonte base=== | ===Fonte base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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] | *[http://www.ebah.com.br/content/ABAAABZ6QAD/wireshark-http Wireshark - HTTP] | ||
*[https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP na Wikipedia] | *[https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol HTTP na Wikipedia] | ||
Linha 462: | Linha 494: | ||
*Configurando o servidor Apache para disponibilizar páginas HTML. | *Configurando o servidor Apache para disponibilizar páginas HTML. | ||
*Construindo e disponibilizando páginas HTML. | *Construindo e disponibilizando páginas HTML. | ||
+ | *Noções de ''shell script'' para automatizar tarefas. | ||
===Fonte base=== | ===Fonte base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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] | *[https://www.apache.org/ Apache] | ||
===Máquinas Virtuais UML / Netkit2=== | ===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'''. | 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'''. | ||
Linha 479: | Linha 514: | ||
===PARTE 1 - Colocando o servidor Apache no ar no Netkit=== | ===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 '''lab.conf''' | + | #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[type]=generic | ||
pc1[eth0]=uplink:bridge=eth0:ip=dhcp | pc1[eth0]=uplink:bridge=eth0:ip=dhcp | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | #Rode o '''netKit''' em seu computador. Em um terminal digite: < | + | #Rode o '''netKit''' em seu computador. Em um terminal digite: <syntaxhighlight lang=bash> mkdir .netkit |
netkit2 & </syntaxhighlight> | 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. | #Caso surja uma mensagem recomendando atualizar o Netkit, faça-o através do menu: '''<General> <Update>'''. Aguarde a finalização do processo. | ||
Linha 490: | Linha 525: | ||
#Ao clicar no menu '''<File> <Graph>''', pode-se ter uma visão da rede a ser simulada e conferir se é equivalente ao diagrama proposto. | #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'''''. | #Identifique o IP da VM usando o comando '''ifconfig'''. Esse será, doravante, seu '''''endereço_IP'''''. | ||
− | #Teste a conectividade entre a máquina virtual e a máquina hospedeira com o comando ping. Na VM execute: < | + | #*<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> | 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: < | + | #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. | #Inicie o Wireshark em sua máquina. | ||
− | #Abra o Firefox na sua máquina (hospedeira) e coloque como endereço: < | + | #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. | #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: < | + | #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. | #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. | ##Localize os comandos GET e a resposta do servidor. | ||
Linha 508: | Linha 544: | ||
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. | 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 | + | #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> | <!DOCTYPE html> | ||
<html> | <html> | ||
Linha 519: | Linha 555: | ||
</body> | </body> | ||
</syntaxhighlight> | </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> | |
− | #Agora você deve ser capaz de acessar a página recém criada através do seu navegador no hospedeiro usando o endereço: < | + | #O shell script será executado na máquina virtual do apache, portanto, abra o terminal da mesma no Netkit e digite: <syntaxhighlight lang=bash> |
− | #Personalize a página HTML acrescentando novas frases de sua preferência. Para isso repita os passos: 1, 3 e | + | /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. | #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. | #Acesse as páginas HTML personalizadas dos demais colegas. | ||
Linha 547: | Linha 586: | ||
===Fonte Base=== | ===Fonte Base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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=== | ===PARTE 1: Consulta simples ao DNS gerada a partir de um comando ping=== | ||
Linha 553: | Linha 592: | ||
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. | 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:< | + | #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> | cat /etc/resolv.conf</syntaxhighlight> | ||
#Prepare o wireshark para capturar pacotes. | #Prepare o wireshark para capturar pacotes. | ||
− | #Execute o ping para um endereço de host conhecido < | + | #Execute o ping para um endereço de host conhecido <syntaxhighlight lang=bash> |
ping www.ifsc.edu.br</syntaxhighlight> | 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< | + | #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> | 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. | #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. | ||
Linha 601: | Linha 640: | ||
# 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> | # 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 | 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> ... 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 | dig -x 200.135.37.65 +short | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 620: | Linha 659: | ||
host -v -t a www.sj.ifsc.edu.br. j.root-servers.net. | 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. | </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: < | + | ## 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> | host -v -t a www.sj.ifsc.edu.br. b.dns.br </syntaxhighlight> | ||
## Quantos servidores DNS foram necessários consultar no total? | ## Quantos servidores DNS foram necessários consultar no total? | ||
Linha 626: | Linha 665: | ||
===Algumas consultas AAAA=== | ===Algumas consultas AAAA=== | ||
Vamos expandir um pouco nossos horizontes e fazer algumas consultas envolvendo IPv6. | 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: < | + | #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 | dig AAAA google.com | ||
host -t AAAA google.com </syntaxhighlight> | host -t AAAA google.com </syntaxhighlight> | ||
Linha 634: | Linha 673: | ||
##ipv6.br | ##ipv6.br | ||
##www.microsoft.com | ##www.microsoft.com | ||
− | #Agora vamos fazer a consulta reversa. Qual é o nome de host dos seguintes endereços? Por exemplo: < | + | #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 | ||
dig -x 2001:12ff::10 +short | dig -x 2001:12ff::10 +short | ||
Linha 667: | Linha 706: | ||
===Exemplos de arquivos de um ''Second Level Domain'' fictício=== | ===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] | *Exemplo de arquivos de configuração de um servidor [https://www.isc.org/downloads/bind/ BIND] | ||
− | /etc/bind/db.redes < | + | /etc/bind/db.redes <syntaxhighlight lang=bash> |
$TTL 86400 | $TTL 86400 | ||
@ IN SOA ns.redes.edu.br. root ( | @ IN SOA ns.redes.edu.br. root ( | ||
Linha 689: | Linha 728: | ||
mail A 192.168.1.109 </syntaxhighlight> | mail A 192.168.1.109 </syntaxhighlight> | ||
− | /etc/bind/db.2.168.192 (Zona reversa) < | + | /etc/bind/db.2.168.192 (Zona reversa) <syntaxhighlight lang=bash> |
$TTL 86400 | $TTL 86400 | ||
@ IN SOA ns.redes.edu.br. root ( | @ IN SOA ns.redes.edu.br. root ( | ||
Linha 714: | Linha 753: | ||
*Entender o conceito de multiplexação | *Entender o conceito de multiplexação | ||
===Fonte Base=== | ===Fonte Base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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=== | ===Parte 1 - Fluxo único UDP=== | ||
#Combinar equipes com dois computadores para execução do experimento. | #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. | + | #*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 identificar os IPs ('''IP_DEST''') das máquinas de seus pares. | ||
#Cada equipe deve abrir uma Janela de terminal. | #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:< | + | #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> | udp.port==5000</syntaxhighlight> | ||
− | #A equipe da escuta na porta 5000 executa no terminal: < | + | #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: < | + | #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 | #*O wireshark deve ter capturado os pacotes UDP | ||
#Identifique e anote os seguintes dados na captura do wireshark: | #Identifique e anote os seguintes dados na captura do wireshark: | ||
Linha 764: | Linha 803: | ||
**Finalização da Conexão | **Finalização da Conexão | ||
===Fonte Base=== | ===Fonte Base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[http://docente.ifsc.edu.br/odilson/RDC60803/TCP%20Basico.pdf Camada de transporte: TCP básico] |
==Configuração do Laboratório== | ==Configuração do Laboratório== | ||
− | O roteiro será executado sobre máquinas virtuais, através do uso do [[Netkit2 | Netkit2]]. Copie o texto abaixo e | + | 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 | PC1[type]=generic | ||
PC2[type]=generic | PC2[type]=generic | ||
Linha 781: | Linha 829: | ||
===Verificando o estabelecimento, troca de dados e finalização da conexão=== | ===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: < | + | #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> | 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. | #*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: < | + | #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. | #*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 | #*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: < | + | #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> | |
− | #Executar no PC1 um cliente TCP que solicita uma conexão ao servidor: < | + | #Enviar uma pequena mensagem de 5 caracteres, e no final teclar ENTER e depois CTRL+D. |
− | #Enviar uma pequena mensagem de 5 caracteres, e no final teclar ENTER e depois CTRL | ||
#*O CTRL-D encerra a conexão no netcat | #*O CTRL-D encerra a conexão no netcat | ||
− | #Vá até o terminal do PC3 e encerre a captura | + | #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]] | [[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. | #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] | #*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 foram as portas de origem e destino usadas? | ||
##Quais os tamanhos das janelas informadas, tanto pelo cliente quanto pelo servidor? | ##Quais os tamanhos das janelas informadas, tanto pelo cliente quanto pelo servidor? | ||
− | ##Quais os números de sequência informado pelo | + | ##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? | ##Em qual mensagem (número) aparece a texto que você digitou? | ||
##Qual o número identificador de protocolo TCP no pacote IP? | ##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]) | + | #*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. |
− | #Volte ao wireshark e analise o processo de termino da conexão (iniciado pelo cliente neste caso, no momento do CTRL | + | #*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. | #*Note que qualquer uma das partes pode realizar esta finalização. | ||
#*Pode ser observado que o cliente envia um pacote TCP com flag FIN. | #*Pode ser observado que o cliente envia um pacote TCP com flag FIN. | ||
#*O servidor responde com um FIN-ACK. | #*O servidor responde com um FIN-ACK. | ||
#*Finalmente o cliente faz um 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] | + | #*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 | #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 bottom}} | ||
Linha 825: | Linha 875: | ||
===Fonte Base=== | ===Fonte Base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[http://docente.ifsc.edu.br/odilson/RDC60803/TCP%20controle%20de%20erros.pdf TCP - Controle de Erros] |
==Configuração do Laboratório== | ==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. | 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 | PC1[type]=generic | ||
PC2[type]=generic | PC2[type]=generic | ||
Linha 841: | Linha 891: | ||
===PARTE 1 - Transmissão sem erros: Verificação de Número de Sequência, Reconhecimentos e Controle de Fluxo=== | ===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: < | + | #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> | 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. | #*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''' < | + | #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> | ABCDEFGHIJKLMNOPQRSTUVXZW1234 </syntaxhighlight> | ||
− | #Execute o tcpdump no PC3 < | + | #Execute o tcpdump no PC3 <syntaxhighlight lang=bash> |
− | tcpdump -i eth0 tcp port 5555 -s 1024 -U -w /hostlab/shared/pc3. | + | tcpdump -i eth0 tcp port 5555 -s 1024 -U -w /hostlab/shared/pc3.pcap </syntaxhighlight> |
− | #Execute | + | #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' | sysctl -w net.ipv4.tcp_rmem='20 20 20' | ||
netcat -l 5555 > arq.rx </syntaxhighlight> | netcat -l 5555 > arq.rx </syntaxhighlight> | ||
− | #Envie o arquivo arq.tx a partir do PC1 < | + | #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> | netcat 10.0.0.2 5555 < /hostlab/shared/arq.tx </syntaxhighlight> | ||
− | #No PC3 faça CTRL | + | #No PC3 faça CTRL+C, para parar a captura de pacotes. |
− | #Abra o arquivo | + | #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. | #Analise como os dados foram transmitidos e reconhecidos. | ||
− | Perguntas | + | ====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? | #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? | #Como foi reconhecido cada segmento enviado? | ||
− | #*Relate esta análise por segmento usando os timestamps como referência. | + | #*Relate esta análise por segmento usando os timestamps (coluna Time) como referência. |
====Arquivo CAP deste experimento==== | ====Arquivo CAP deste experimento==== | ||
Linha 867: | Linha 921: | ||
===PARTE 2 - Transmissão com erros: retransmissões=== | ===PARTE 2 - Transmissão com erros: retransmissões=== | ||
− | #Repetir todo a parte 1 mas substituir o item 4 por: < | + | #Repetir todo a parte 1 mas substituir o item 4 por: <syntaxhighlight lang=bash> |
sysctl -w net.ipv4.tcp_rmem='20 20 20' | sysctl -w net.ipv4.tcp_rmem='20 20 20' | ||
tc qdisc add dev eth0 root netem loss 50% | tc qdisc add dev eth0 root netem loss 50% | ||
Linha 883: | Linha 937: | ||
===PARTE 3 - Testando a capacidade do TCP de enviar dados de forma duplex=== | ===PARTE 3 - Testando a capacidade do TCP de enviar dados de forma duplex=== | ||
− | *Agora vamos deixar de lado o netkit | + | *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. | *No experimento, o arquivo de um aluno será transmitido para outro e vice-versa. | ||
− | #Em um terminal, crie um diretório de trabalho e entre no mesmo < | + | #Em um terminal da máquina real, crie um diretório de trabalho e entre no mesmo <syntaxhighlight lang=bash> |
mkdir teste | mkdir teste | ||
cd teste </syntaxhighlight> | 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'''. | #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. | + | #Escolha um colega para transferir o arquivo. |
− | #O servidor deve fazer < | + | ##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> | 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< | + | #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> | 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. | #Abra o arquivo recebido do colega (arq.rx) com o '''gedit''' e confira o conteúdo. | ||
Perguntas: | Perguntas: | ||
Linha 910: | Linha 967: | ||
===Fonte Base=== | ===Fonte Base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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] | *[https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/tcp-congestion/index.html Animação do controle de congestinamento] | ||
Linha 918: | Linha 975: | ||
[[Arquivo:TCP_Rede_Controle_de_Fluxo.png |thumb | 200px| Figura 1 - Rede ara testes]] | [[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.< | + | #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 | # Definição das máquinas | ||
R1[type]=router | R1[type]=router | ||
Linha 939: | Linha 996: | ||
PC3[eth0]=lan1:ip=10.0.1.3/24:rate=10000 </syntaxhighlight> | PC3[eth0]=lan1:ip=10.0.1.3/24:rate=10000 </syntaxhighlight> | ||
#Execute o NetKit2. | #Execute o NetKit2. | ||
− | #Carregue o arquivo de configuração: < | + | #Carregue o arquivo de configuração: <syntaxhighlight lang=bash> |
File > Load and Run </syntaxhighlight> | 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. | #*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. | #*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: < | + | #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> | 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. | #*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: < | + | #No PC1 (servidor) execute: <syntaxhighlight lang=bash> |
iperf -s -p 2000 & iperf -s -p 2001 & iperf -s -p 2002 & </syntaxhighlight> | 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>): < | + | #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 & \ | 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 20; iperf -c 10.0.0.1 -f m -i 1 -t 70 -p 2001 -l 1300) & \ | ||
Linha 955: | Linha 1 012: | ||
#Pare os processos nos três PCs utilizando CTRL-C. | #Pare os processos nos três PCs utilizando CTRL-C. | ||
#Abra o Wireshark. | #Abra o Wireshark. | ||
− | #Abra o arquivo < | + | #Abra o arquivo <syntaxhighlight lang=bash> |
File > Open > /home/aluno/lab/shared/pc3.cap </syntaxhighlight> | 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. | #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. | ||
Linha 972: | Linha 1 029: | ||
=====Incluindo UDP===== | =====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. | 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'': < | + | #Deslique o NetKit2, para limpar todos os processos e ''buffers'': <syntaxhighlight lang=bash> |
File > Quit </syntaxhighlight> | File > Quit </syntaxhighlight> | ||
− | #Copie o texto abaixo e crie um arquivo, salve-o como /home/aluno/TCPxUDP.conf: < | + | #Copie o texto abaixo e crie um arquivo, salve-o como /home/aluno/TCPxUDP.conf: <syntaxhighlight lang=bash> |
# Definição das máquinas | # Definição das máquinas | ||
R1[type]=router | R1[type]=router | ||
Linha 998: | Linha 1 055: | ||
PC4[eth0]=lan1:ip=10.0.1.4/24:rate=10000 </syntaxhighlight> | PC4[eth0]=lan1:ip=10.0.1.4/24:rate=10000 </syntaxhighlight> | ||
#Execute o NetKit2 e carregue o arquivo de configuração. | #Execute o NetKit2 e carregue o arquivo de configuração. | ||
− | #No PC4 execute: < | + | #No PC4 execute: <syntaxhighlight lang=bash> |
tcpdump -i eth0 -w /hostlab/shared/pc4.cap </syntaxhighlight> | tcpdump -i eth0 -w /hostlab/shared/pc4.cap </syntaxhighlight> | ||
− | #No PC1 execute: < | + | #No PC1 execute: <syntaxhighlight lang=bash> |
iperf -s -u -p 2000 & iperf -s -p 2001 & </syntaxhighlight> | iperf -s -u -p 2000 & iperf -s -p 2001 & </syntaxhighlight> | ||
#A próxima etapa deve ser executada "simultaneamente" nos PC2 e PC3. | #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>: < | + | ##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> | 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>: < | + | ##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> | 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". | ##Tecle <Enter> no PC3 e PC2, NESSA ORDEM, "simultaneamente". | ||
#Fique monitorando o PC3 a tela parar de ser atualizada, aproximadamente 90 s. | #Fique monitorando o PC3 a tela parar de ser atualizada, aproximadamente 90 s. | ||
#Pare os processos nos quatro PCs utilizando CTRL-C. | #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. | #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]] | [[Arquivo:TCPxUDP_Wireshark.png |thumb | 400px| Figura 3 - Captura de 2 fluxos de dados TCP e UDP]] | ||
Linha 1 025: | Linha 1 083: | ||
==== Experimento 1 ==== | ==== 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> | <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? | O que aconteceria se um arquivo fosse transferido de um computador a outro com ambos protocolos? | ||
Linha 1 035: | Linha 1 093: | ||
# 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'''. | # 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===== | =====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: < | + | #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> | 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> | #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> | ||
Linha 1 044: | Linha 1 102: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#Quando completar a transferência, pare o Wireshark. | #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: < | + | #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> | ls -l </syntaxhighlight> | ||
#Analisando a captura de pacotes do WireShark responda: | #Analisando a captura de pacotes do WireShark responda: | ||
Linha 1 065: | Linha 1 123: | ||
wget http://tele.sj.ifsc.edu.br/~odilson/RED29004/transmissor | wget http://tele.sj.ifsc.edu.br/~odilson/RED29004/transmissor | ||
chmod +x transmissor </syntaxhighlight> | chmod +x transmissor </syntaxhighlight> | ||
− | #Inicie a transferência do arquivo ('''adeque o ip_do_receptor para o número IP do colega'''): < | + | #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 | ./transmissor ip_do_receptor 5555 < jogo.exe | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 1 074: | Linha 1 132: | ||
##Quanto tempo levou para transmiti-lo? | ##Quanto tempo levou para transmiti-lo? | ||
#Analisando a captura de pacotes do WireShark responda: | #Analisando a captura de pacotes do WireShark responda: | ||
− | ## Qual é o | + | ## 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? | ## É 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? | ## Há segmentos de controle ou somente segmentos de dados? | ||
Linha 1 094: | Linha 1 152: | ||
===Fonte Base=== | ===Fonte Base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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=== | ===Procedimento=== | ||
Linha 1 122: | Linha 1 181: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#Chamar o netkit2 (Aplicativos >> Educativo >> Netkit2) | #Chamar o netkit2 (Aplicativos >> Educativo >> Netkit2) | ||
− | #Carregar o arquivo lab.conf a partir do Netkit2:<syntaxhighlight lang=bash> | + | #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 | File >> Load Only | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 1 131: | Linha 1 191: | ||
Network >> Start | Network >> Start | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | #Observar os endereços de hardware (ou MAC) e IP de cada dispositivo na rede. < | + | #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> | ifconfig </syntaxhighlight> | ||
− | #Observar e interpretar a tabela de roteamento nos hospedeiros pc1 e pc4. Identificar os default gateways em cada pc.<syntaxhighlight lang=bash> | + | #Observar e interpretar a tabela de roteamento nos hospedeiros '''pc1''' e '''pc4'''. Identificar os ''default gateways'' em cada '''pc'''.<syntaxhighlight lang=bash> |
route -n | route -n | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | #Observar e interpretar a tabela de roteamento no roteador<syntaxhighlight lang=bash> | + | #Observar e interpretar a tabela de roteamento no roteador ('''r1''')<syntaxhighlight lang=bash> |
exit | exit | ||
route -n | route -n | ||
</syntaxhighlight> | </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> | |
− | #Observar e "provar" que pacotes indo de | ||
− | #*Use o ping, tcpdump e seu diagrama de rede como apoio. | ||
− | #* | ||
− | |||
− | #*Num primeiro momento em | ||
tcpdump -i eth0 -n -e</syntaxhighlight> | tcpdump -i eth0 -n -e</syntaxhighlight> | ||
− | #*Em seguida, ainda em | + | #**Em seguida, ainda em '''r1''': <syntaxhighlight lang=bash> |
tcpdump -i eth1 -n -e</syntaxhighlight> | tcpdump -i eth1 -n -e</syntaxhighlight> | ||
− | #*Ver: [http://www.tcpdump.org/tcpdump_man.html manpage do tcpdump] | + | #**Ver: [http://www.tcpdump.org/tcpdump_man.html manpage do tcpdump] |
− | #Observar e "provar" que pacotes indo de | + | #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. | + | #*Use o '''ping''' e '''tcpdump''' como apoio, adequando os comandos apresentados no item anterior. |
===Configuração básica de interface de rede=== | ===Configuração básica de interface de rede=== | ||
− | #Configure a interface de rede no | + | #Configure a interface de rede no '''pc3'''. |
#*O mesmo deverá ser capaz de "pingar" para qualquer outro PC ou ser "pingado". | #*O mesmo deverá ser capaz de "pingar" para qualquer outro PC ou ser "pingado". | ||
− | #*Dica: observe a configuração de rede do | + | #*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. | #*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 | + | #Execute o comando ping do '''pc3''' para o '''pc4'''. Obteve sucesso? |
− | #Execute o comando ping do | + | #Execute o comando ping do '''pc3''' para o '''pc1'''. Obteve sucesso? |
− | #Execute o comando ping do | + | #Execute o comando ping do '''pc2''' para o '''pc3'''. Obteve sucesso? |
====Referências adicionais==== | ====Referências adicionais==== | ||
Linha 1 179: | Linha 1 238: | ||
===Fonte Base=== | ===Fonte Base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[http://docente.ifsc.edu.br/odilson/RDC60803/IP%20Roteamento.pdf Introdução ao Roteamento] |
====PARTE 1 - Rede com 3 roteadores==== | ====PARTE 1 - Rede com 3 roteadores==== | ||
Linha 1 196: | Linha 1 255: | ||
## SN7 : 200.10.7.0/24 | ## SN7 : 200.10.7.0/24 | ||
## SN8 : 200.10.8.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'''.< | + | #Abaixo o arquivo de configuração para o NetKit. Copie e salve como '''/home/aluno/roteamento.conf'''.<syntaxhighlight lang=text> |
H1[type]=generic | H1[type]=generic | ||
Linha 1 225: | Linha 1 284: | ||
##O ping entre interfaces/equipamentos de sub-redes distintas não 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: | #Usando como apoio os comandos de inserção de rota insira as rotas default em H1 e H2: | ||
− | ##H1: < | + | ##H1: <syntaxhighlight lang=bash> route add default gw 200.10.1.254 </syntaxhighlight> |
− | ##H2: < | + | ##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. | #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: < | + | ##R1: <syntaxhighlight lang=bash> |
echo 1 > /proc/sys/net/ipv4/ip_forward | 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/all/rp_filter | ||
Linha 1 235: | Linha 1 294: | ||
echo 0 > /proc/sys/net/ipv4/conf/eth2/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> | route add -net 200.10.8.0/24 gw 200.10.2.2 </syntaxhighlight> | ||
− | ##R2: < | + | ##R2: <syntaxhighlight lang=bash> |
echo 1 > /proc/sys/net/ipv4/ip_forward | 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/all/rp_filter | ||
Linha 1 242: | Linha 1 301: | ||
echo 0 > /proc/sys/net/ipv4/conf/eth2/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> | route add -net 200.10.1.0/24 gw 200.10.4.1 </syntaxhighlight> | ||
− | ##R3: < | + | ##R3: <syntaxhighlight lang=bash> |
echo 1 > /proc/sys/net/ipv4/ip_forward | 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/all/rp_filter | ||
Linha 1 257: | Linha 1 316: | ||
====PARTE 2 - Desafio: Rede com 4 roteadores==== | ====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 | * SN1 : 200.10.1.0/24 | ||
Linha 1 272: | Linha 1 336: | ||
====PARTE 3 - Criando loop para verificar o campo TTL==== | ====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. | + | #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. |
− | Rastreie com o tcpdump o pacote em loop e verifique o momento em que o pacote sai de circulação. | + | #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== | ==Links de Referência== | ||
Linha 1 333: | Linha 1 398: | ||
===Fonte Básica=== | ===Fonte Básica=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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] | *[http://www.davidc.net/sites/default/subnets/subnets.html Cálculo de sub-redes] | ||
===Roteiro=== | ===Roteiro=== | ||
− | #Um administrador precisa montar uma rede experimental conforme mostrada na Figura 1. Na sub-rede 1 ele precisará instalar cerca | + | #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 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)? | ##Qual o a máscara de rede de cada sub-rede (1, 2, 3, AB, AC e BC)? | ||
Linha 1 346: | Linha 1 411: | ||
##Demostre para o professor o perfeito funcionamento de sua rede. | ##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]] | *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 | # Hosts definitions | ||
pc1[type]=generic | pc1[type]=generic | ||
Linha 1 396: | Linha 1 461: | ||
*[http://www.davidc.net/sites/default/subnets/subnets.html Link Calculador Online de Subnets] | *[http://www.davidc.net/sites/default/subnets/subnets.html Link Calculador Online de Subnets] | ||
− | |||
{{Collapse bottom}} | {{Collapse bottom}} | ||
− | {{Collapse top |Laboratório 17 - | + | {{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=== | ===Fonte Base=== | ||
− | *[http://docente.ifsc.edu.br/odilson/ | + | *[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 | pc1[type]=generic | ||
pc2[type]=generic | pc2[type]=generic | ||
pc3[type]=generic | pc3[type]=generic | ||
pc4[type]=generic | pc4[type]=generic | ||
− | + | ||
− | + | pc1[eth0]=lan0 | |
− | pc1[eth0]= | + | pc2[eth0]=lan0 |
− | pc2[eth0]= | + | pc3[eth0]=lan0 |
− | pc3[eth0]= | + | pc4[eth0]=lan0 |
− | pc4[eth0]= | + | </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 | |
− | #No | + | |
− | + | 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> | |
− | #Rode o wireshark no ''' | + | #No PC1 enviar uma mensagem em broadcast (endereço FF:FF:FF:FF:FF:FF)<syntaxhighlight lang=bash> |
− | ##Clique sobre a aba do ''' | + | 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 | ##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 bottom}} | ||
− | {{Collapse top |Laboratório 18 - | + | {{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: | + | [[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 | pc1[type]=generic | ||
pc2[type]=generic | pc2[type]=generic | ||
pc3[type]=generic | pc3[type]=generic | ||
pc4[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 | |
− | pc1[ | + | |
− | pc2[ | + | #Default Gateways definitions |
− | pc3[ | + | 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 | |
− | #No | + | 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> | |
− | #Rode o wireshark no ''' | + | netkit2 & </syntaxhighlight> |
− | ##Clique sobre a aba do ''' | + | #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 | ##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) | |
− | {{Collapse bottom}} | + | ##*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}} | {{Collapse top |Laboratório 19 - Configurando uma Rede Doméstica}} | ||
Linha 1 678: | Linha 1 750: | ||
##Wireless. 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. | #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. < | + | #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: | #Reconfigure o WiFi de seu roteador: | ||
##Troque o SSID (''Service Set IDentifier'') de seu roteador, colocando seu primeiro nome como nome de rede. | ##Troque o SSID (''Service Set IDentifier'') de seu roteador, colocando seu primeiro nome como nome de rede. | ||
Linha 1 705: | Linha 1 777: | ||
A arquitetura da rede é mostrada na Figura abaixo. | A arquitetura da rede é mostrada na Figura abaixo. | ||
− | [[Image:RCO3-TrabalhoFinal-2017-2.png| | + | [[Image:RCO3-TrabalhoFinal-2017-2.png|500px]] |
===Especificações do Projeto=== | ===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. | #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; | + | ##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; | + | ##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 ponto-a-ponto devem obrigatoriamente ter máscara /30; | ||
− | ##Todas as rotas devem ser colocadas no arquivo projeto.conf do netkit. Apresentar esse | + | ##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: | #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; | ##Com uma faixa de aluguel de pelo menos 5 números IP; | ||
− | ##Explicar a configuração do DHCP na página WEB do projeto; | + | ##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: | #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 página WEB com a descrição integral do projeto; | ||
− | ##uma página WEB com conteúdo de sua preferência com os seguintes requisitos: | + | ##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; | ###a página deve ser em inglês ou espanhol; | ||
###texto com no mínimo 500 palavras; | ###texto com no mínimo 500 palavras; | ||
Linha 1 725: | Linha 1 798: | ||
###no mínimo um link para uma página WEB de uma outra equipe. | ###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''. | ##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. | + | ##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. | + | #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. | + | * 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 | H1[type]=generic | ||
H2[type]=generic | H2[type]=generic | ||
Linha 1 763: | Linha 1 843: | ||
#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 | #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:< | + | ##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 / | + | chmod +x /hostlab/shared/config_apache.sh |
− | / | + | /hostlab/shared/config_apache.sh |
</syntaxhighlight> | </syntaxhighlight> | ||
Linha 1 772: | Linha 1 852: | ||
#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. | #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: | #Construir o arquivo da forma: | ||
− | < | + | <syntaxhighlight lang=bash> |
#!/bin/bash | #!/bin/bash | ||
− | |||
#comentario: copiar um arquivo | #comentario: copiar um arquivo | ||
− | |||
cp /home/aluno/teste.txt /var/www | cp /home/aluno/teste.txt /var/www | ||
#renomeando o arquivo copiado teste.txt para index.html | #renomeando o arquivo copiado teste.txt para index.html | ||
− | |||
mv /var/www/teste.txt /var/www/index.html | mv /var/www/teste.txt /var/www/index.html | ||
#iniciando um serviço | #iniciando um serviço | ||
− | |||
/etc/init.d/ssh start | /etc/init.d/ssh start | ||
</syntaxhighlight> | </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 bottom}} | ||
+ | --> | ||
==Listas de Exercícios== | ==Listas de Exercícios== | ||
Linha 1 980: | Linha 2 091: | ||
#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. | #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]] | #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: < | + | #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 | root@H1:~# ifconfig | ||
eth0 Link encap:Ethernet HWaddr 7a:a6:f4:ca:51:0e | eth0 Link encap:Ethernet HWaddr 7a:a6:f4:ca:51:0e |
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
- RCO60803 2021 em diante - Prof. Odilson Tadeu Valle - Roteiros de laboratórios
- RCO60803 2019-1 - Trabalho dirigido - Prof. Odilson Tadeu Valle
- RCO60803 2018-2 - Prof. Odilson Tadeu Valle / Prof. Eraldo Silveira e Silva
- RCO60803 2018-1 - Prof. Odilson Tadeu Valle / Prof. Eraldo Silveira e Silva
- RCO60803 2017-2 - Prof. Odilson Tadeu Valle / Prof. Eraldo Silveira e Silva
- RCO60803 2017-1 - Prof. Juliano de Souza / Prof. Eraldo Silveira e Silva
- RCO60803 2016-2 - Prof. Juliano de Souza / Prof. Luciano Barreto
- RCO60803 2016-1 - Prof. Fernando Rodrigues Santos / Prof. Juliano de Souza
- RCO60803 2015-2 - Prof. Simara Sonaglio
- RCO60803 2015-1 - Prof. Arliones Hoeller / Prof. Túlio Ribeiro
- RCO60803 2014-2 - Prof. Arliones Hoeller / Prof. Tomás Grimm / Prof. José Clair
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 2 - Camada de Aplicação
Capítulo 2 - Camada de Aplicação - FTP + EMAIL + P2P
Capítulo 3 - Camada de Transporte
Slides de Outras Universidades
- TCP Error Control- EECS - LASSONDE
- TCP- Flow and Error Control - LASSONDE
- Congestion Control - LASSONDE
- Slides/Aula Faculty of Engineering, Kasetsart University
Curiosidades
- Monitoramento do tráfego RNP - PoP-SC
- Monitoramento do tráfego RNP - Nacional
- Rede Clara Internacional
- Futura infraestrutura de rede da RNP
- Comparativo HTTP/1.1 vs HTTP/2
- Animated map shows the undersea cables that power the internet
- Submarine Cable Map 2019
- A pré-história da internet
- History of the Internet
- History of the Internet - legendado
- Warriors of the Net
- Warriors of the Net - legendado
- Browser Wars
- Browser Wars - legendado
- Browser Wars - dublado
- Localização geográfica de IPs
- IPv6 no Brasil
- Fragmentação no IPv4 e IPv6
- Laboratório de IPv6 - Livro didático contendo vários roteiros para entendimento do IPv6
- Estatísticas Google sobre IPv6
- HTTP/2 Frequently Asked Questions
- Iniciação à máquinas de estados
Listas de Exercícios
Lista de exercícios 1 - Introdução |
---|
|
Lista de exercícios 2 - Camada de Aplicação |
---|
ADICIONAIS PARTE 2- HTTP
ADICIONAIS PARTE 3- DNS
|
Lista de exercícios 3 - Camada de Transporte |
---|
|