Prévia do material em texto
09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 1/15 Gerência e Análise de Redes Aula 7 - Estudo e depuração de protocolos da camada de rede INTRODUÇÃO Nesta aula, aplicaremos o conceito de modelagem em camadas de redes para estudarmos a análise e depuração de protocolos da camada de rede, como o ICMP. Estudaremos o funcionamento do encapsulamento IP. Para a análise de cada um desses protocolos será usado o software Tcpdump. Com ele, capturaremos PDUs (packet data units) ICMP e realizaremos uma depuração passo a passo do signi�cado de cada PDU (Packet Data Unit – Unidade de pacote de dados), bem como de sua relação com os comandos dados pelos usuários/clientes. Por �m, faremos um estudo de caso com o aplicativo traceroute. Bons estudos! 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 2/15 OBJETIVOS Analisar o ICMP e o Tcpdump; Aplicar os conceitos de modelos de camadas para depurar o protocolo ICMP; Aplicar os conceitos de modelos de camadas para depurar a aplicação traceroute/tracert. 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 3/15 ICMP O ICMP (glossário), especi�cado no [RFC (glossário) 792], é usado por hospedeiros e roteadores para comunicar informações de camada de rede entre si. A utilização mais comum do ICMP é para comunicação de erros. Fonte da Imagem: Shutterstock Por exemplo, ao rodar uma sessão Telnet, FTP ou HTTP, é possível que você já tenha encontrado uma mensagem de erro como “Rede de destino inalcançável”. Essa mensagem teve sua origem no ICMP. Em algum ponto, um roteador IP (glossário) não conseguiu descobrir um caminho para o hospedeiro especi�cado em sua aplicação Telnet, FTP ou HTTP. O roteador, então, criou e enviou uma mensagem ICMP do tipo 3 a seu hospedeiro indicando o erro. O ICMP é, com frequência, considerado parte do IP, mas, em termos de arquitetura, está logo acima, pois mensagens ICMP são carregadas dentro de datagramas IP. Isto é, mensagens ICMP são carregadas como carga útil IP, exatamente como segmentos TCP ou UDP, que também o são. Por essa razão, o ICMP é considerado um protocolo de camada de rede, mas que roda na parte superior da camada de rede (sobre o IP), conforme mostrado na �gura abaixo. Quando um hospedeiro recebe um datagrama IP com ICMP especi�cado como protocolo de camada superior, ele demultiplexa o conteúdo do datagrama para ICMP, exatamente como demultiplexaria o conteúdo de um datagrama para TCP ou UDP. Mensagens ICMP têm um campo de tipo e um campo de código. Além disso, contêm o cabeçalho e os primeiros 8 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 4/15 bytes do datagrama IP que causou a criação da mensagem ICMP em primeiro lugar (de modo que o remetente pode determinar o datagrama que causou o erro). Alguns tipos de mensagens ICMP selecionadas são mostrados na tabela abaixo. Fonte da Imagem: Note que mensagens ICMP não são usadas somente para sinalizar condições de erro. Exemplo , Um exemplo interessante de mensagem ICMP é a de repressão da origem. Essa mensagem é pouco usada na prática. Sua �nalidade original era realizar controle de congestionamento (permitir que um roteador congestionado enviasse uma mensagem ICMP de repressão da origem a um hospedeiro para obrigá-lo a reduzir sua velocidade de transmissão). O desuso desse tipo de mensagem ICMP se deu pelo fato de que o próprio TCP, na camada de transporte, já inclui um algoritmo de controle de congestionamento. Os programas mais conhecidos de uso prático do ICMP são: Programa ping Talvez seja o exemplo mais amplamente conhecido de uso prático do ICMP. Quando um usuário inicia um comando ping informando o endereço IP do host destino, o processo ping do host remetente envia uma mensagem ICMP do tipo 8 código 0 para o hospedeiro 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 5/15 especi�cado. O hospedeiro de destino, ao ver a solicitação de eco, devolve uma resposta de eco ICMP do tipo 0 código 0. A maior parte das execuções de TCP/IP suporta o servidor ping diretamente no sistema operacional. Isto é, o servidor não é um processo. Note que o programa cliente tem de ser capaz de instruir o sistema operacional para que ele gere uma mensagem ICMP do tipo 8 código 0. Programa traceroute Outro aplicativo interessante que utiliza o ICMP é o programa traceroute (Linux) ou tracert (Windows), que nos permite acompanhar a rota de um hospedeiro a qualquer outro hospedeiro no mundo. O interessante é que o traceroute é executado com mensagens ICMP. TCPDUMP O Tcpdump é um dos mais difundidos softwares sniffers disponíveis para a família de sistemas operacionais GNU/Linux. Ele é chamado via linha de comando e começa a monitorar todos os pacotes que passam pela interface de rede selecionada. Então, o Tcpdump imprime uma descrição do conteúdo dos cabeçalhos dos pacotes que atendam à expressão boleana fornecida. O Tcpdump imprime na tela uma linha descrevendo cada pacote. A primeira coluna contém o timestamp (instante de captura do pacote) expresso em horas, minutos, segundos e frações de segundos desde a meia-noite. Na imagem, a seguir, você pode visualizar um exemplo simpli�cado do uso do Tcpdump. 1 - Dois terminais de comando foram usados. No terminal apresentado no meio, em uma janela menor, foi dado o comando “telnet 192.162.10.240”. 2 - No terminal maior, ao fundo, o comando “tcpdump –i eth0 port 23” aguardava por pacotes gerados pelo telnet. Após a captura do primeiro pacote, às 17h47m32s, abortamos a captura de pacotes através do comando “ctrl+c”. 3 - A opção “-i eth0” do Tcpdump informa qual é a interface em que o Tcpdump deve realizar a captura de pacotes. No Linux “eth0”, é, em geral, o nome dado à primeira interface de rede detectada. Se o host possui apenas uma interface de rede, muito provavelmente ela será designada pelo Linux como “eth0”. 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 6/15 4 - A opção “port 23” ordena que o Tcpdump capture apenas pacotes vindos de ou destinados à porta 23 (porta Telnet). O Tcpdump também pode ser chamado com a opção –w, o que faz com que os pacotes capturados sejam salvos em um arquivo para análise posterior. Quando chamado com a opção –r, o Tcpdump lê os dados de um arquivo de captura salvo para apresentar a captura ao usuário. 5 - Note que o pacote foi capturado às 17h47m32s. Conforme os dados apresentados pelo Tpcdump, é possível observar que o pacote capturado é um pacote IP, partindo do host local (ien) na porta 38954, com destino ao host 192.192.10.240 na porta 23 (telnet). 6 - Na camada de transporte, a �ag SYN (S) está habilitada. O que indica que esse pacote é um pedido de estabelecimento de conexão TCP, com número de sequência (seq) 2985101472 e janela de congestionamento (win) 29200. CONCEITOS DE MODELOS DE CAMADAS PARA DEPURAR O PROTOCOLO ICMP Para analisarmos os pacotes de uma sessão ICMP, usaremos um exemplo simples considerando que o usuário dá o comando “ping www.google.com”, conforme mostrado na parte direita da �gura abaixo. Fonte da Imagem: 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 7/15 No lado direito da �gura, temos um terminal de comandos onde foi dado o comando ping. Note que aguardávamos o envio e retorno de 6 pings, enquantoobservávamos, no terminal mostrado no lado esquerdo da �gura, a captura dos pacotes relativos a cada um dos 6 pings trocados entre o host local e www.google.com. Na �gura acima, enumeramos cada um dos pings gerados (lado direito) e os relacionamos aos pacotes capturados (lado esquerdo) pelo Tcpdump. Note que, para cada ping enviado, dois pacotes foram capturados: echo request (solicitação eco) e echo reply (resposta eco). No lado esquerdo da �gura, na seta indicada com o número 1, vemos que a primeira solicitação eco foi emitida às 17h19m52.911s. Vamos analisar os campos dos cabeçalhos. Observe: Cabeçalho IP • TOS=0x0 – Tipo de serviço padrão; • TTL=64 – Número máximo de canais de comunicação pelos quais a solicitação eco em questão pode passar até chegar ao destino; • ID=36598 – Identi�cação única de datagrama. Cada datagrama que sai do host é carimbado com um ID único. Esse campo é importante quando há fragmentação, pois quando um host destino recebe vários datagramas com o mesmo ID, então ele sabe que são fragmentos de um datagrama original que foi fragmentado em algum ponto no caminho origem-destino; • OFFset=0 – O offset é usado para remontagem do datagrama no destino, caso haja fragmentação no caminho origem-destino. O valor de zero signi�ca que esse seria o primeiro fragmento (quando um datagrama não é fragmentado, como nesse caso, então o único datagrama é também o primeiro); • Flag=DF – Quando ocorre fragmentação de datagramas, o campo �ag é usado para informar ao host destino qual é o último fragmento gerado. Dessa forma, o host destino saberá quando tiver terminado de remontar todos os fragmentos de volta ao datagrama original. O programa ping preenche esse campo com o valor DF, que signi�ca que esse datagrama não deve ser fragmentado; • Protocol=1 (ICMP) – Esse campo do cabeçalho IP é de fundamental importância, pois, ao ser preenchido com o valor 1 (ICMP), informa ao host destino que esse pacote carrega uma mensagem ICMP. Assim, o host destino sabe que esse não é um pacote de dados contendo e-mail, nem um pacote relativo à navegação web, mas, sim, um pacote ICMP. Então, o sistema operacional do host destino (camada de rede) sabe a qual processo esse pacote deve ser entregue: ao ping; • Length=84 – O comprimento total do pacote é de 84 bytes; • IP remetente=192.168.10.162 - Host em que o comando ping foi dado; • IP Destino=216.58.222.100 - Host destino informado no comando ping. 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 8/15 Cabeçalho ICMP • ICMP echo request (Lembre-se: tipo 8, código 0) – Solicitação eco; • Seq=1 – Essa é a primeira solicitação eco. Logo em seguida, no instante 17h59m53.045s, o Tcpdump acusou a captura da resposta eco. Agora, vamos analisar em detalhes os principais campos destes pacotes: Cabeçalho IP • TOS=0x0 – Tipo de serviço padrão; • TTL=54 – O host destino (www.google.com) emitiu uma resposta eco com TTL=64. Como o campo TTL chegou no host remetente com TTL=54, podemos inferir que, no caminho entre o google e o host local, o pacote passou por 10 saltos (canais de comunicação); • OFFset=0 – O offset é usado para remontagem do datagrama no destino, caso haja fragmentação no caminho origem-destino. O valor de zero signi�ca que esse seria o primeiro fragmento (quando um datagrama não é fragmentado, como nesse caso, então o único datagrama é também o primeiro); • Flag=0 – Quando ocorre fragmentação de datagramas, o campo �ag é usado para informar ao host destino qual é o último fragmento gerado. Dessa forma, o host destino saberá quando tiver terminado de remontar todos os fragmentos de volta ao datagrama original. A resposta ping veio com valor vazio, indicando que, caso tenha havido fragmentação, esse seria o último fragmento (como o offset=0 indica que esse também é o primeiro fragmento, então concluímos que não houve fragmentação, pois o primeiro é também último, sendo, portanto, único); • Proto=1 (ICMP) – Esse campo do cabeçalho IP é de fundamental importância, pois, ao ser preenchido com o valor 1 (ICMP), informa ao host destino que esse pacote carrega uma mensagem ICMP. Assim, o host destino sabe que esse não é um pacote de dados contendo e-mail, nem um pacote relativo à navegação web, mas, sim, um pacote ICMP. Então, o sistema operacional do host destino (camada de rede) sabe a qual processo esse pacote deve ser entregue: ao ping; • Length=84: Comprimento total do pacote é de 84 bytes; • IP remetente=216.58.222.100 – O campo desse pacote foi emitido pelo host www.google.com (destino de nosso comando ping); • IP Destino: 192.168.10.162 – O campo end. IP destino está preenchido com o endereço do host onde o comando ping foi dado; 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMess… 9/15 Analisando esses dois campos, vemos que esse é um pacote IP emitido pelo google com destino ao host que emitiu o comando ping. Cabeçalho ICMP • ICMP echo request (Lembre-se: tipo 0, código 0) – Resposta eco; • Seq=1 – Essa é uma resposta eco relativa à solicitação eco de número de sequência igual a 1, ou seja, é a resposta do primeiro ping. Ainda relativo ao primeiro ping, marcado com o número 1 na �gura acima, o primeiro retorno dado pelo comando ping informa que o tempo medido (time) entre o envio da solicitação eco e o recebimento da resposta eco foi de 134ms. Mas como isso é calculado? Felizmente, a captura de pacotes nos permite analisar como essa medição de tempo é feita. Assim, o aplicativo ping registra o momento em que a solicitação ping é enviada (T ) e o momento em que a resposta ping chega (T ). Observe: Para os outros 5 pings gerados em nosso exemplo, note que a resposta ping sempre informa o número sequência de qual solicitação ping está sendo respondida. Essa informação é importante, pois o comando ping permite (no Linux, como root) que o tempo entre solicitações eco seja informado. Exemplo , Por exemplo, um usuário pode enviar 1000 pings por segundo. Como sabemos que o roteamento na Internet ocorre de maneira independente para cada pacote, pode ocorrer troca de ordem entre os pacotes transmitidos. Com isso, por exemplo, a primeira resposta eco recebida pode não ser relativa à primeira solicitação eco enviada, pois a resposta eco seq=1 pode ter dado o azar de tomar um caminho menos e�ciente. Então, ao receber uma primeira resposta eco marcada com seq=2, o programa ping sabe que é uma resposta para a segunda solicitação ping enviada e não para a primeira. Dessa maneira, o tempo de ida e volta pode ser corretamente calculado. req reply 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMe… 10/15 CONCEITOS DE MODELOS DE CAMADAS PARA DEPURAR A APLICAÇÃO TRACEROUTE/TRACERT O traceroute (Linux) ou tracert (Windows) é um aplicativo muito útil para administradores de redes de computadores, pois permite realizar uma listagem dos roteadores (interface de rede por qual o pacote chega) pelos quais o pacote passa até chegar a um dado destino. A ideia sob a qual essa aplicação se apoia é muito simples: A maneira como o traceroute alcança esse objetivo é muito interessante para quem estuda redes de computadores. Para entender como o traceroute funciona, primeiramente precisamos recordar como funciona o campo TTL do cabeçalho IP. O tempo TTL é decrementado sempre que o pacote passa por um roteador. Caso um roteador decremente o campo TTL de um pacote que está sendo processado e notar que o novo valor é igual a zero, então o pacote expirou. Isso quer dizer que o roteador não pode seguir encaminhando o pacote. Ao contrário, ele deve emitir umamensagem ICMP TTL Exceeded (Time To Live Exceeded – Tempo de Vida Excedido) ao host remetente. 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMe… 11/15 Fonte da Imagem: No exemplo da �gura acima, usamos o terminal da direita para dar o comando “traceroute –icmp 192.168.1.34” com o objetivo de descobrir quais são os roteadores entre o host em que o comando foi dado e o destino 192.168.1.34. Ainda na janela da direita, o primeiro resultado apresentado na tela (A) informa que a primeira interface de roteador a receber o pacote em questão foi 192.168.10.1. Também é fornecido três estimativas de tempo de ida e volta entre o host remetente e esse roteador (2.602ms, 2.576ms e 2.578ms). Na parte superior esquerda da �gura, vemos quais foram os pacotes emitidos pelo programa traceroute para mostrar o resultado (A) ao usuário. Campos de cabeçalho mais importantes para o traceroute/tracert Vamos deixar o detalhamento do signi�cado de cada campo do cabeçalho IP e ICMP (já os estudamos no exemplo anterior sobre o ICMP) e nos concentrar apenas nos campos de cabeçalho mais importantes para o entendimento de como funciona o traceroute/tracert. Esses campos estão destacados em amarelo no canto superior esquerdo da �gura. Note que o host remetente emitiu um pacote ICMP echo request destinado a 192.168.1.34. Ou seja, um ping está sendo enviado ao host informado no comando traceroute. 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMe… 12/15 Saiba mais , Ainda na parte superior esquerda da �gura, notamos que o host remetente, na verdade, enviou três ICMP echo request destinados a 192.168.1.34 com TTL=1. Isso é feito para que sejam recebidas três respostas ICMP time exceeded de modo que o programa traceroute possa realizar as três medições de tempo de ida e volta até o primeiro roteador e apresentar os resultados ao usuário, conforme vimos na linha (A) da parte direita da �gura. Após ter descoberto o IP do primeiro roteador no caminho até o destino e apresentado três medições de tempo de ida e volta a esse roteador, o programa traceroute prossegue com a tentativa de descobrir o endereço IP do segundo roteador no caminho origem-destino. Para isso, serão enviados outros três ICMP echo requests destinados ao host informado no comando (192.168.1.34) com o campo TTL cuidadosamente preenchido com o valor 2. 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMe… 13/15 1 Esses pacotes terão seu TTL decrementado para 1 no primeiro roteador no caminho até o destino e, em seguida, decrementados para zero pelo segundo roteador no caminho origem-destino. 2 O segundo roteador, então, enviará mensagens ICMP time exceeded ao host remetente informando que os pacotes expiraram, e o programa traceroute será capaz de descobrir que é o segundo roteador no caminho origem-destino, bem como medir e apresentar ao usuário três estimativas de tempo de ida e volta entre o host remetente e o segundo roteador no caminho. 3 Esse processo seguirá com o traceroute emitindo três ICMP echo request com o TTL cuidadosamente preenchido com 3, para descobrir o terceiro roteador, e assim por diante. Atenção , No momento em que o programa traceroute notar que, ao invés de receber mensagens ICMP time exceeded, recebeu mensagens ICMP echo reply, então o destino desejado já foi alcançado, e todos os roteadores no caminho origem-destino já foram descobertos. Um exemplo disso é mostrado na segunda linha apresentada pelo comando traceroute fornecido no terminal do lado direito (B) da �gura acima. A parte inferior esquerda da �gura mostra que os três ICMP echo request com TTL=2 enviados pelo host remetente com destino a 192.168.1.34 geraram respostas destinadas a 192.168.10.162 contendo mensagens ICMP echo reply. Nesse momento, em nosso exemplo, o comando traceroute sabia que o destino já havia sido alcançado e que apenas o roteador 192.168.10.1 está no caminho entre a origem e o destino. Chegou a hora de exercitar o que você aprendeu! Suponha que você está rodando o comando traceroute, que gerou pacotes ICMP echo request até o destino 8.8.8.8. Ao tentar descobrir o terceiro roteador no caminho origem-destino, qual é o valor que irá preenchido no campo TTL dos pacotes ICMP echo request destinados a 8.8.8.8? 0 1 2 3 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMe… 14/15 4 Justi�cativa Exercícios , Você poderá, também, exercitar os conhecimentos que aprendeu nesta aula através de uma lista de exercícios que preparamos. Para acessar à lista de exercícios, clique aqui (galeria/aula7/docs/A7_t6.pdf). Glossário ICMP Internet Control Message Protocol – Protocolo de Mensagens de Controle da Internet. RFC 09/04/2019 Disciplina Portal http://estacio.webaula.com.br/Classroom/index.html?id=1979387&classId=1118909&topicId=0&enableForum=S&enableMe… 15/15 Request For Comments – Documentos de domínio público que de�nem cada padrão/protocolo usado pela Internet. Esses documentos estão gratuitamente disponíveis na Internet. IP Internet protocolo – Protocolo de Internet.