• Nenhum resultado encontrado

2009.1MONOGRAFIA JOÃO LUIZ C CARVALHO PUBLICADA

N/A
N/A
Protected

Academic year: 2021

Share "2009.1MONOGRAFIA JOÃO LUIZ C CARVALHO PUBLICADA"

Copied!
72
0
0

Texto

(1)

UNIVERSIDADE ESTADUAL DE FEIRA DE SANTANA – UEFS

JOÃO LUIZ CARNEIRO CARVALHO

SNIFFANDLEARN: UMA ALTERNATIVA VISUAL PARA

MONITORAMENTO DE PACOTES, IDENTIFICAÇÃO AUTOMÁTICA

DE COMUNICAÇÕES E SUPORTE AO ENSINO DE PROTOCOLOS

FEIRA DE SANTANA

2010

(2)

JOÃO LUIZ CARNEIRO CARVALHO

SNIFFANDLEARN: UMA ALTERNATIVA VISUAL PARA

MONITORAMENTO DE PACOTES, IDENTIFICAÇÃO AUTOMÁTICA

DE COMUNICAÇÕES E SUPORTE AO ENSINO DE PROTOCOLOS

Trabalho de Conclusão do Curso Engenharia de Computação da Universidade Estadual de Feira de Santana, requisito parcial para a obtenção do título de Bacharel em Engenharia de Computação

Orientador: Me. Daniel Gouveia Costa.

FEIRA DE SANTANA

2010

(3)

FOLHA DE JULGAMENTO

JOÃO LUIZ CARNEIRO CARVALHO

Monografia apresentada e julgada em 18 de janeiro de 2010 sob o título “SniffAndLearn: uma alternativa visual para monitoramento de pacotes, identificação automática de comunicações e suporte ao ensino de protocolos” perante a banca examinadora:

______________________________________ Prof. Ms. Daniel Gouveia Costa

Departamento de Tecnologia – UEFS Orientador

______________________________________ Prof. Dr. Ângelo Amâncio Duarte Departamento de Tecnologia – UEFS

Examinador

______________________________________ Prof. Ms. Rogério Guaraci dos Santos Departamento de Tecnologia – UEFS

(4)

À minha avó, Adalgisa, em memória, que me ensinou princípios de vida como respeito e humildade, e à Aylla, pessoa com quem compartilho os momentos mais emocionantes da minha vida.

(5)

AGRADECIMENTO

(6)

RESUMO

A concepção das redes de computadores e da Internet proporcionou uma revolução em todas as áreas do conhecimento. Devido a sua grande utilidade, o emprego dos computadores e da Internet para diversas finalidades (como pesquisa científica, economia, entretenimento e educação, entre outras) tornou-se intenso e progressivo, transformando as redes de computadores em um recurso indispensável no mundo contemporâneo. Sendo estruturas de comunicação bastante complexas, as redes de computadores vêm demandando um significativo esforço por parte de estudantes e profissionais para que seu mecanismo operacional seja compreendido, mesmo que parcialmente. Assim, para dar apoio ao ensino e aprendizagem de protocolos da Internet, foi desenvolvida uma ferramenta que pretende auxiliar, através do processo de monitoramento de pacotes, o estudo da arquitetura e dos padrões utilizados na Internet. Essa ferramenta atende aos requisitos deste trabalho, e tarefas futuras estão relacionados com a sua utilização em um ambiente real de ensino.

Palavras-chave: Monitoramento de pacotes. Protocolos de Internet. Ferramenta de apoio ao ensino-aprendizagem.

(7)

ABSTRACT

The conceiving of computer networks and the Internet has provided a revolution in all areas of knowledge. Because of its great utility, the use of computers and the Internet for various purposes (such as scientific research, business, entertainment and education, among others) became intense and progressive, making computer networks an indispensable resource in the contemporary world. Because communication structures are quite complex, computer networks have been demanding a significant effort by students and professionals for its operating mechanism being understood, even partially. Thus, to support the teaching and learning of Internet protocols, a tool intended to assist through the process of tracking packages, the study of architecture and patterns used on the Internet was developed. This tool meets the requirements of this work and future tasks are related to their use in a real classroom environment.

(8)

LISTA DE FIGURAS

Figura 1: Camadas do TCP/IP. ... 21

Figura 2: Formato de um pacote ARP. ... 24

Figura 3: Formato do cabeçalho de um datagrama IP. ... 27

Figura 4: Formato do cabeçalho do pacote UDP. ... 29

Figura 5: Three-way handshake do TCP. ... 30

Figura 6: Formato do cabeçalho de um segmento TCP... 31

Figura 7: Formato de uma mensagem DNS. ... 33

Figura 8: Formato de um registro de nome DNS. ... 34

Figura 9: Formato de um registro de resposta DNS. ... 34

Figura 10. Ferramenta Wireshark em execução. ... 37

Figura 11: Ferramenta VisualSniffer em execução. ... 38

Figura 12: Fluxo de informações no SniffAndLearn. ... 39

Figura 13: Ciclo de desenvolvimento de software incremental. ... 40

Figura 14: Etapas de desenvolvimento do SniffAndLearn. ... 41

Figura 15: Diagrama de caso de uso para iniciar uma captura ... 42

Figura 16: Diagrama de caso de uso para visualizar um pacote ... 42

Figura 17: Rascunho de uma janela que apresenta um pacote capturado. ... 42

Figura 18: Representação da troca de mensagens no SniffAndLearn. ... 43

Figura 19: Caso de uso para visualizar as trocas de mensagens. ... 43

Figura 20: Diagrama de pacotes do SniffAndLearn. ... 44

Figura 21: Implementação do PacketReceiver. ... 46

Figura 22: Trecho de código que finaliza a captura. ... 46

Figura 23: Instruções que inicia e finaliza a captura. ... 46

Figura 24: Trechos de código do método que identifica o pacote. ... 47

Figura 25: Trecho de código que identifica o tipo da mensagem HTTP. ... 48

Figura 26: Trecho de código do método que identifica as comunicações. ... 49

Figura 27: Atributos da classe Communication. ... 49

Figura 28: Trecho de código do método que atribui um rótulo a um pacote ICMP. ... 49

Figura 29: Representação de um grafo através do prefuse. ... 50

Figura 30: Exemplo de código para criação de um grafo representando uma comunicação. .. 50

(9)

Figura 32: Comando executado no console para iniciar o SniffAndLearn. ... 53

Figura 33: Ambiente de teste do SniffAndLearn. ... 54

Figura 34: Janela inicial do SniffAndLearn. ... 55

Figura 35: Janela de escolha do dispositivo e configurações. ... 55

Figura 36: Janela de adição de filtros. ... 56

Figura 37: Janela de configuração avançada de filtros. ... 56

Figura 38: Janela principal do SniffAndLearn durante a captura. ... 57

Figura 39: Janela de visualização de um pacote ICMP, mostrando o cabeçalho IP. ... 58

Figura 40: Janela de visualização de um pacote, mostrando o cabeçalho ICMP. ... 58

Figura 41: Janela de informação sobre o campo "Versão" do cabeçalho IP. ... 59

Figura 42: Janela de visualização de um pacote, mostrando a mensagem DNS. ... 59

Figura 43: Cabeçalho de uma requisição HTTP. ... 60

Figura 44: Janela de seleção de comunicação. ... 60

Figura 45: Grafo representando as trocas de mensagens realizadas durante a captura. ... 61

Figura 46: Log de todas as comunicações realizadas durante a captura. ... 61

Figura 47. Troca de mensagens ARP no SniffAndLearn. ... 62

Figura 48: Troca de mensagens ICMP no SniffAndLearn. ... 62

Figura 49: Troca de datagramas IP no SniffAndLearn. ... 63

Figura 50: Troca de pacotes UDP no SniffAndLearn. ... 63

Figura 51: Troca de mensagens DNS no SniffAndLearn. ... 64

Figura 52: Troca de segmentos TCP no SniffAndLearn. ... 64

Figura 53: Troca de mensagens HTTP no SniffAndLearn. ... 65

Figura 54. Representação de uma Mensagem DNS no Wireshark. ... 65

(10)

LISTA DE TABELAS

Tabela 1: Tipos de mensagem ICMP. ... 28

Tabela 2: Bits de código do cabeçalho TCP. ... 31

Tabela 3: Campos do cabeçalho de uma mensagem DNS. ... 33

(11)

LISTA DE SIGLAS

ARP – Address Resolution Protocol DNS – Domain Name System

HTTP – Hypertext Transfer Protocol ICMP – Internet Control Message Protocol IP – Internet Protocol

MAC – Media Access Control RFC – Request for Comments SO – Sistema Operacional

TCP – Transmission Control Protocol TTL – Time to Live

UDP – User Datagram Protocol UML – Unified Modeling Language URL – Uniform Resource Locator

(12)

SUMÁRIO

1 INTRODUÇÃO

... 13

2 MONITORAMENTO DE REDES E SUPORTE AO ENSINO

. 16

2.1 Ferramentas de Apoio ao Ensino de Computação ... 16

2.2 Comunicações em Rede ... 17

2.2.1 Tecnologias de Rede ... 18

2.2.2 Arquitetura TCP/IP ... 20

2.2.2.1 Endereçamento IP ... 21

2.2.2.2 Camada Inter-redes ... 24

2.2.2.3 Camada de Transporte... 29

2.2.2.4 Camada de Aplicação ... 31

2.3 Monitoramento de Pacotes ... 36

3 DESENVOLVIMENTO DA FERRAMENTA

... 39

3.1 Metodologia ... 39

3.2 Especificação Funcional ... 41

3.3 Detalhes de implementação ... 44

3.3.1 Captura ... 45

3.3.2 Processamento do conteúdo dos pacotes ... 47

3.3.3 Manipulação das comunicações ... 48

(13)

3.4 Distribuição e instalação ... 52

4 TESTES E RESULTADOS

... 54

5 CONSIDERAÇÕES FINAIS

... 67

(14)

1

INTRODUÇÃO

A Internet é um ambiente de comunicação rico em heterogeneidade. Formada por uma infra-estrutura não linear e interconectando redes de computadores domésticas, corporativas e governamentais, a Internet foi concebida para permitir a comunicação entre grupos de pessoas de todo o mundo (COSTA, 2007). Nos últimos anos, essa rede mundial de computadores se tornou um recurso essencial para o homem.

A grande demanda por comunicação na Internet vem provocando uma corrida por equipamentos e ferramentas que provêem alta velocidade e confiabilidade de comunicação. Hoje, a Internet é uma rede diversificada, com largura de banda relativamente grande, e que suporta diversos tipos de serviço, desde a navegação web através de um computador tradicional até a telefonia celular, incluindo também sistemas computacionais em automóveis e equipamentos de sensoriamento ambiental, apenas para citar alguns exemplos (KUROSE e ROSS, 2006).

Perante a diversidade de serviços disponíveis na Internet, se tornou necessária a utilização de protocolos que estabelecem padrões de comunicação em meio a tecnologias distintas. Atualmente, uma pilha de protocolos compõe uma parte essencial da Internet e do estudo de redes de computadores.

Os protocolos disponíveis na Internet compõem uma arquitetura de comunicação. Essa arquitetura, também conhecida como pilha de protocolos TCP/IP, é representada por um modelo em camadas, estando cada uma delas dedicada à resolução de um problema específico (SOCOLOFSKY e KALE, 1991). Nesse modelo, as camadas de mais baixo nível estão relacionadas ao meio físico e às tecnologias de comunicação. Já as camadas de mais alto nível estabelecem os procedimentos de comunicação através de enlaces heterogêneos e os serviços disponibilizados aos usuários da rede (TANENBAUM, 2003).

Tipicamente, cada serviço da Internet utiliza um conjunto de protocolos da pilha de protocolos TCP/IP, a exemplo do HTTP para navegação web (FIELDING, GETTYS, et al., 1999), POP3 (Post Office Protocol – Version 3), IMAP (Internet Message Access Protocol) e o SMTP (Simple Mail Transfer Protocol) para comunicação por e-mail (MYERS e ROSE, 1996) (CRISPIN, 2003), (KLENSIN, 2008), e o SNMP (Simple Network Management Protocol) para operações de gerência de rede (CASE, 1989), entre outros. Atualmente, estes serviços podem ser utilizados concorrentemente em qualquer computador ou rede de

(15)

computadores, o que implica em um tráfego de diferentes conteúdos em uma única arquitetura de rede.

Com o aumento do tráfego e a expansão da Internet, a administração de redes, área da computação relacionada à manutenção da funcionalidade adequada das redes de computadores, ganhou destaque. Porém, as tecnologias de infra-estrutura vêm evoluindo a passos largos, e a cada dia surgem novos serviços de Internet, obrigando os administradores de rede a dedicar mais tempo ao estudo e análise das redes de computadores (COSTA, 2007).

Para auxiliar na tarefa de administração de redes, diversas ferramentas de auxílio à depuração, configuração e monitoramento de redes estão disponíveis. Ferramentas como o PING (Linux Man Pages, 2002a), usado para verificar a conectividade de um determinado host, e o NSLOOKUP (Linux Man Pages, 2000), utilizada para se obter informações sobre registros de DNS de um determinado domínio, estão inclusos nas versões mais recentes dos sistemas operacionais Windows (Microsoft Corporation, 2009) e Linux (BR-Linux, 2009).

Uma das formas de se analisar o funcionamento de uma rede de computadores é através de uma ferramenta de monitoramento de pacotes, ou sniffer. Essa ferramenta captura todos os pacotes de rede que chegam à interface de rede da máquina onde o monitoramento está sendo realizado (ATKINS, BUIS, et al., 1996). Um sniffer, a exemplo do Wireshark (Wireshark Foundation, 2009), pode ser útil para examinar problemas de rede, detectar falhas de segurança, depurar implementações de protocolos e ajudar pessoas a aprender sobre detalhes internos de protocolos de rede, entre muitas outras aplicações.

Verifica-se muitas vezes que nas ferramentas de monitoramento atuais, o resultado de uma captura de pacotes é apresentado ao usuário de forma pouco intuitiva. Os critérios de análise presentes nos sniffers convencionais são simplesmente de identificação do conteúdo dos pacotes e disponibilização de dados estatísticos, não existindo uma análise funcional das comunicações realizadas durante a captura. Algumas ferramentas, a exemplo do Tcpdump (TCPDUMP, 2009), apresentam as informações apenas no modo textual, dificultando ainda mais outros tipos de análise sobre esses dados.

Tendo em vista a forma de representação das comunicações nas ferramentas tradicionais de monitoramento de pacotes, aliado ao potencial que o monitoramento de pacotes tem para ser utilizado como recurso complementar de aprendizagem de padrões de Internet, é apresentado nesse trabalho uma ferramenta de suporte à aprendizagem de protocolos e monitoramento de pacotes, o SniffAndLearn. Essa ferramenta possui recursos visuais para a representação dinâmica de comunicações reais entre computadores, além das funcionalidades comuns de um sniffer (como filtragem de pacotes e identificação de conteúdo).

(16)

Diferentemente das ferramentas de monitoramento convencionais, o SniffAndLearn prioriza a visualização da comunicação entre os computadores, identificando e classificando-as de acordo com o seu contexto. O SniffAndLearn também propõe a representação dos pacotes de maneira didática, apresentando-os de forma intuitiva e adicionando comentários relevantes em relação ao conteúdo.

No capítulo dois deste documento é apresentada a fundamentação teórica referente ao trabalho. O capítulo três envolve a discussão sobre o desenvolvimento da ferramenta. Os testes executados e os resultados obtidos são descritos no capítulo quatro. O capítulo cinco apresenta as considerações finais e, por fim, são relacionadas as referências utilizadas.

(17)

2

MONITORAMENTO DE REDES E SUPORTE AO ENSINO

Este trabalho envolve os conceitos fundamentais de redes de computadores e Internet e se justifica pelo desenvolvimento de uma ferramenta de apoio ao ensino e aprendizagem de padrões da Internet utilizando o monitoramento de pacotes. Neste capítulo serão apresentados os conceitos que fundamentaram este trabalho: ferramentas de apoio ao ensino de computação, comunicações em redes e monitoramento de pacotes.

2.1 Ferramentas de Apoio ao Ensino de Computação

O avanço da tecnologia e a introdução do computador no ambiente doméstico e educacional provocaram uma revolução nos métodos e concepções de ensino e aprendizagem (VALENTE, 1993). Atualmente, a informática está sendo amplamente lecionada nos ensinos fundamental e médio, e também em cursos superiores, mesmos aqueles que não são de áreas afins à computação. Essa mudança no processo de ensino-aprendizagem se deve não só pelo fato do computador ser um artefato imprescindível no cotidiano da sociedade, mas por este se tratar de um recurso tecnológico com grande potencial pedagógico para os professores (MENDES, CARVALHO e CARVALHO, 2007).

A utilização do computador no processo de ensino-aprendizagem pode se dar de formas diferentes, a depender do contexto. Valente (1993) classifica a utilização do computador na educação em duas finalidades: (i) ensino de computação, (ii) ensino através do computador. Enquanto no segundo o computador é utilizado apenas como um recurso didático multimídia que promove o aprendizado dinâmico e atrativo, no ensino de computação, ou "computer literacy", o computador não é meramente uma ferramenta de facilitação da aprendizagem, mas também o objeto de estudo.

Em ambos os casos anteriores, o computador por si só não se adéqua como um recurso didático, pois o mesmo não foi concebido para ser, puramente, uma solução pedagógica. Necessita-se, então, que o computador disponha de um software educacional, que é responsável pela interação do estudante com a máquina. Um software educacional ou software educativo, de acordo com Mendes, Carvalho e Carvalho (2007, p. 1), é “todo sistema que tem o objetivo de melhorar o processo ensino-aprendizagem de um conteúdo ou assunto educacional”.

(18)

Taylor (1980) classifica os softwares educativos em basicamente três tipos: o tutor, software que “ensina” o aluno; o tutorado, que dá ao aluno o papel de instruir o computador; e a ferramenta, software com o qual o aluno apenas manipula a informação. Valente (1993, p. 13) vai ao encontro da opinião de Taylor quando cita que “o computador pode ser utilizado como ferramenta educacional”, em que o aprendizado ocorre através da execução de uma tarefa por intermédio do computador. O mesmo autor inclui como tais tarefas a pesquisa de banco de dados, resolução de problemas utilizando linguagem de programação e uso de rede de computadores como alguns exemplos de ensino-aprendizagem em computação com o auxílio do computador.

Entretanto, até mesmo na área de computação existe carência de ferramentas educacionais de apoio ao ensino-aprendizagem. A utilização do computador como um recurso didático é bem vindo nessa área, principalmente porque ele mesmo é o objeto de estudo. Por exemplo, a própria infra-estrutura de rede na qual o computador está inserido pode ser aproveitada para criar uma plataforma didática que interaja o aluno com a rede de computadores. Neste mesmo exemplo, alguns princípios podem ser abordados, como as tecnologias de redes de computadores, os padrões de comunicação da Internet e alguns conceitos de concorrência e conectividade em computação, apenas para citar alguns exemplos.

O monitoramento de pacotes pode ser utilizado como um potencial recurso de suporte ao ensino, pois representa em tempo real o funcionamento de uma rede de computadores, apresenta detalhes internos de cada protocolo e é fiel quanto ao conteúdo dos pacotes. Seguindo a opinião de Taylor e Valente, uma ferramenta de monitoramento de pacotes pode ser utilizada como um recurso de aprendizagem, idéia reforçada pela Wireshark Foundation (2009) no seu próprio site, onde afirma que o seu sniffer, o Wireskark, é capaz de ajudar pessoas a aprender sobre detalhes internos de protocolos de rede.

2.2 Comunicações em Rede

O rápido progresso tecnológico presenciado nas últimas décadas foi responsável por transformar os computadores em ferramentas essenciais no processamento e transmissão de informações. O uso do computador nas comunicações influenciou fortemente na forma como os sistemas computacionais eram organizados, dando um grande impulso no crescimento das

(19)

redes de computadores, que hoje representam estruturas imprescindíveis em quase todos os lugares do mundo (TANENBAUM, 2003).

As redes de computadores são conglomerados de máquinas e equipamentos que permitem a transmissão de dados entre terminais, que podem ser computadores pessoais (PCs), impressoras, servidores, Access Points (AP’s) ou qualquer outro equipamento que possa se comunicar em rede. Para que haja a comunicação entre os terminais é preciso que eles concordem com um padrão de comunicação, que é chamado de protocolo. Os protocolos estabelecem padrões imprescindíveis para a operação das redes, inclusive da própria Internet.

A interconectividade entre os computadores através das redes garantiu avanços consideráveis nas organizações que as utilizam. Entre muitas outras vantagens se destacam: o compartilhamento de recursos (como impressoras, scanners, discos de armazenamento), que resultou a redução de custos de informática; a rapidez na transmissão de informações, que proporcionou o acompanhamento em tempo real em serviços cuja informação deve chegar o mais breve possível (como jornalismo, bolsas de valores, emergência hospitalar e etc.); a disponibilização de diversos serviços em lugares remotos, como serviços bancários através do Internet Banking (Banco Santander S.A., 2009), comércio e compras em geral, inscrições em processos seletivos, acompanhamento de processos judiciais, entre muitos outros; entretenimento, cultura e educação através da Internet, que permitiu o contato de populações de todas as partes do mundo e o novo modelo de Educação a Distância (EAD).

A ligação de computadores em rede e, principalmente, a conexão de computadores à Internet, envolve a interoperabilidade de diferentes tecnologias (COMER, 2001). Normalmente, a interligação de um computador a uma rede depende do meio no qual o computador está inserido, tornando as redes potencialmente heterogêneas e complexas. Essa complexidade demanda diretamente o suporte de ferramentas de monitoramento e controle das redes de computadores.

2.2.1 Tecnologias de Rede

Uma das características mais importantes das redes de computadores é o meio de propagação dos dados entre uma máquina e outra. Devido às limitações físicas do transmissor ou do meio, como nível de interferência e velocidade de transmissão, por exemplo, várias tecnologias de transmissão de dados são utilizadas em redes de computadores, moldadas nas limitações de cada canal de transmissão.

(20)

A Internet conecta diferentes tipos de tecnologias de rede. Apesar de serem potencialmente incompatíveis, essas tecnologias, que estão intimamente relacionadas ao hardware utilizado, à técnica de comunicação e à topologia de rede, são capazes de se comunicar graças às convenções estabelecidas nas camadas superiores de seu sistema (COMER, 2001). Dessa forma, redes sem fio podem se conectar a redes cabeadas, redes locais têm acesso a servidores espalhados pelo mundo e usuários podem se conectar a Internet através de uma linha telefônica, apenas para citar alguns exemplos.

Cada tecnologia possui uma peculiaridade, e questões como confiabilidade, velocidade e disponibilidade podem variar, a depender do canal de comunicação. Em relação à confiabilidade, por exemplo, uma tecnologia pode ser confiável, onde o receptor envia uma confirmação ao remetente para cada volume de dados recebido, ou não confiável, onde não é fornecida ao remetente a garantia da entrega dos dados.

Atualmente, a tecnologia de interconexão de rede mais popular é a Ethernet. Desenvolvida no início da década de 70 pela Xerox Palo Alto Research Center (Xerox PARC), essa tecnologia foi concebida para redes locais, se tornando a tecnologia mais utilizada em redes de computadores (SPURGEON, 2000). As redes Ethernet são capazes de transferir a 10 ou 100 Megabits por segundo (Mbps) (conhecidas como redes Fast Ethernet) e até acima 1000 Mbps (em redes Gigabit Ethernet, 10-Gigabit Ethernet e 100-Gigabit Ethernet). Graças a velocidades tão altas as redes Ethernet se tornaram capazes de atender ao tráfego de inúmeros computadores simultaneamente.

A tecnologia Ethernet se baseia na comutação de pacotes. Isso significa que um meio de transmissão, como um fio de par trançado, por exemplo, pode transmitir pacotes de mais de uma origem ou mais de um destino (porém, um pacote por vez), em ambos os sentidos (KUROSE e ROSS, 2006).

Embora a comutação de pacotes seja eficiente, em algumas redes também é empregada comutação de circuitos, caracterizando-se uma tecnologia orientada à conexão. Essa tecnologia permite que dois computadores estabeleçam um enlace virtual persistente para transferência de dados. O ATM (Asynchronous Transfer Mode) é um exemplo de uma tecnologia de rede orientada à conexão, e foi projetado para redes de alta velocidade (GOUVEIA e MAGALHÃES, 2005).

Existe também a tecnologia de rede ponto-a-ponto, onde um canal fica dedicado a apenas dois computadores. Apesar de não permitir o tráfego compartilhado entre computadores, esta tecnologia dispensa o endereçamento de máquinas, pois a comunicação é restrita a apenas as máquinas que compõem o laço (COMER, 2001). Uma tecnologia de rede ponto-a-ponto

(21)

bastante conhecida é a dial-up, que transmite dados por meio de uma linha telefônica convencional utilizando modulação na faixa de frequência reservada à comunicação de voz. Outras tecnologias, apesar de serem menos conhecidas, como a tecnologia ponto-multiponto, por exemplo, também são utilizadas, quando caracterizam um modelo potencialmente viável (TANENBAUM, 2003).

A alta velocidade de transferência de dados e a escolha de tecnologias eficientes viabilizaram a expansão da arquitetura da Internet, que integra diversos tipos de ambientes computacionais, constituindo uma estrutura mista. A partir daí, a rede mundial de computadores se tornou um organismo ativo e auto-regulável que até hoje está em crescimento e continua englobando os mais diversos aparelhos eletrônicos utilizados na vida moderna.

2.2.2 Arquitetura TCP/IP

O TCP/IP surgiu como um modelo de referência para arquitetura de comunicação em camadas, baseado no modelo proposto anteriormente, o OSI (Open Systems Interconnection) (International Telecommunication Union, 1994). O modelo OSI não vigorou porque possuía uma implementação complexa, com muitas camadas e padrões incompreensíveis, além de não agradar a esfera acadêmica, pois foi um modelo desenvolvido dentro de um contexto político (TANENBAUM, 1997). O TCP/IP foi concebido como uma arquitetura simples e flexível à expansão das redes de computadores e dos serviços de rede.

A denominação TCP/IP faz referência a dois de seus principais protocolos: o TCP, que garante um serviço confiável de comunicação em rede, e o IP, que a partir do endereçamento padrão da Internet (o endereçamento IP) provê um formato de datagrama unificado (SOCOLOFSKY e KALE, 1991). Além desses, outros protocolos agregados também compõem o TCP/IP, objetivando priorizar ou prover outros tipos de demanda na rede, a exemplo do ARP, usado para localizar o endereço físico de um computador através do seu endereço IP (PLUMMER, 1982), do ICMP, utilizado no controle e monitoramento da rede (POSTEL, 1981), e do UDP, empregado como alternativa ao TCP para comunicações sem requisitos de confiabilidade (POSTEL, 1980).

A pilha de protocolos TCP/IP representa a arquitetura essencial para um sistema computacional (ou host) se conectar a Internet. Ela foi concebida para a comunicação

(22)

inter-redes, que significa a interligação de estruturas físicas de rede separadas, promovendo uma ilusão de uma rede única, podendo ser chamada de “rede virtual” (COMER, 2001).

A arquitetura TCP/IP é dividida em quatro camadas: aplicação, transporte, inter-redes e a camada de interface de rede, ou host/rede. A Figura 1 mostra a organização das quatro camadas do TCP/IP. A camada de rede está diretamente relacionada com as tecnologias de rede, mencionadas no capítulo anterior. Nos próximos capítulos serão abordadas as demais camadas.

Figura 1: Camadas do TCP/IP.

O TCP/IP trabalha com o conceito de encapsulamento. As mensagens da camada de aplicação são encapsuladas em um pacote, ou segmento, da camada de transporte, que por sua vez são encapsulados em um datagrama, e são distribuídos em frames das diferentes tecnologias de enlace.

A partir da abstração dos detalhes das redes físicas, possível através do conceito de camadas, surgiram os protocolos do TCP/IP para a ligação inter-redes juntamente com o endereçamento padrão de computadores na Internet, o endereçamento IP.

2.2.2.1 Endereçamento IP

As redes locais e a Internet utilizam um endereçamento como forma de identificar exclusivamente cada interface de rede. Este endereçamento é necessário, pois as redes TCP/IP abstraem quaisquer detalhes da tecnologia associada ao hardware das máquinas, e por isso de alguma forma as máquinas precisam ser identificadas, para permitir que as mesmas se comuniquem, identificando umas às outras. Todos os pacotes que trafegam em redes TCP/IP têm os campos “endereço de origem” e “endereço de destino” (TANENBAUM, 2003).

O endereçamento de máquinas (ou hosts) da Internet é feito através do endereço IP, ou simplesmente IP (esta segunda denominação é usada para reduzir a pronúncia, mas pode ser confundida com o Internet Protocol). O endereço tem esse nome porque o protocolo

APLICAÇÃO TRANSPORTE

INTERNET REDE

(23)

responsável pelo endereçamento da Internet é o Internet Protocol (IP). O protocolo IP tem duas versões atualmente em uso, a versão 4 (IPv4) e a versão 6 (IPv6). Por esse motivo, a especificação do endereço IP depende da versão de seu protocolo. Um endereço IPv4 é composto por uma palavra de 32 bits, composta por quatro octetos. Um IPv6 contém 128 bits, formando 16 octetos.

A representação do endereço IP também depende de sua versão. No IPv4, os octetos são escritos em números decimais inteiros, separados por pontos. Nessa representação, o menor endereço IP é “0.0.0.0” (todos os bits em zero) e o maior é “255.255.255.255” (todos os bits em um) . Um endereço IPv6 contém 8 grupos de números de 16 bits, e, devido a sua extensão, é utilizada a notação hexadecimal, com os números sendo separados por dois pontos (“:”). A faixa de endereçamento possível para o endereço IPv6 varia de “0:0:0:0:0:0:0:0” a “FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF”. Para diminuir o tamanho de um endereço IPv6, a representação dos zeros pode ser reduzida a “::”. O primeiro valor de um endereço IPv6 (todos os bits em zero) é representado por “::” (HINDEN, 1998).

Alguns endereços IP são reservados para uma utilização específica, em ambas as versões. Por exemplo, o IPv4 utiliza a faixa de endereços de “127.0.0.0” a “127.255.255.255” para o endereço de loopback. Este endereço útil quando o software IP deseja enviar um pacote para a própria máquina (para comunicação entre processos, por exemplo), sem que precise utilizar uma interface de rede. No IPv6, o loopback é representado por “::1”. O primeiro endereço das versões 4 e 6 do IP também é reservado, e não identifica nenhuma interface de rede. Este endereço serve para computadores que utilizam o DHCP (Dynamic Host Configuration Protocol), protocolo utilizado para passar informações de configuração para hosts em uma rede TCP/IP (DROMS, 1997).

O endereço “255.255.255.255” também é reservado no IPv4, e é utilizado para realizar broadcasting, processo que distribui um pacote a todos os computadores da rede. No IPv6 este endereço não é reservado, e este procedimento é feito utilizando o multicasting (HINDEN, 1998).

Apesar de já existir uma versão mais recente em utilização, o IPv4 ainda é a versão IP mais usada, e por isso esse trabalho dará um enfoque maior nesta versão. O IPv4 perdurou durante o crescimento explosivo da Internet, e apesar de existirem estudos sugerindo que sua capacidade de endereçamento iria se esgotar (SAYER, 2008), (BEAUMONT, 2009), vários mecanismos foram implantados nas redes para “reutilizar” os endereços IP disponíveis. O NAT (Network Address Translator), por exemplo, permite que um endereço IP global (que é único para toda a Internet) seja compartilhado por várias máquinas em uma rede local, que

(24)

têm endereço IP local (reconhecido apenas dentro de sua rede), de forma que esse mapeamento seja transparente para o usuário (SRISURESH e EGEVANG, 2001).

No IPv4, o endereço IP é dividido em duas partes: uma parte, chamada de prefixo de rede, identifica a rede que o host pertence, e a outra parte é o endereço individual do host. O prefixo de rede tem o tamanho variável, definido por uma máscara de sub-rede. Essa máscara possui o mesmo formato de um endereço IPv4, com quatro octetos.

A regra para definir o prefixo de rede de um IP é que os bits em “1” da máscara identificam os bits de rede, e os zeros identificam a parte de host. Por exemplo, a máscara “255.255.0.0” identifica os dois primeiros octetos do IP como o prefixo de rede, e o restante como endereço de host. Neste exemplo, o endereço IP “192.168.254.3” que possui essa máscara tem o prefixo de rede igual a “192.168”, e sua rede é identificada como “192.168.0.0”. Para identificar o endereço IP de uma rede basta realizar a operação lógica “E” (ou “AND”) entre o IP de uma das suas máquinas e sua respectiva máscara de sub-rede.

O endereçamento IP é utilizado pelo protocolo IP, e por isso está constituído na camada de inter-redes, um nível acima da camada de interface de rede. Um endereço IP também pode estar relacionado com um endereço físico, e esta relação é formada através protocolo ARP (Address Resolution Protocol) da camada de enlace (PLUMMER, 1982).

O ARP é um protocolo auxiliar entre as tecnologias de enlace e a camada de inter-redes. A motivação para desenvolver este protocolo foi a necessidade de estabelecer um mapeamento entre o endereço IP de uma interface de rede e o seu respectivo endereço físico, utilizado para a troca de frames da tecnologia de enlace correspondente.

Quando um computador precisa enviar um pacote a outra máquina que está na mesma rede, ele precisa saber o endereço físico de destino, para que o Ethernet possa enviar o pacote diretamente à interface de rede correta. Uma das formas de se fazer isso é perguntar a todos os computadores da rede quem possui o endereço IP de destino do pacote. Essa operação, chamada de “ARP request”, é feita através de um broadcast (PLUMMER, 1982). A máquina que possui o endereço IP requisitado no “ARP request” responde diretamente para a máquina que perguntou, fornecendo seu endereço MAC.

Para evitar que sejam feitas sucessivas requisições semelhantes (perguntando sempre o mesmo endereço IP), o protocolo ARP armazena uma tabela com os IPs e seus respectivos endereços de hardware conhecidos, chamada de cache ARP. O ARP consulta essa tabela antes que sejam enviadas requisições ARP pela rede.

(25)

Figura 2: Formato de um pacote ARP.

O protocolo ARP foi desenvolvido para que outros protocolos de rede (além do IP) também possam fazer mapeamentos de endereços. Para isso, existe o campo “Tipo de Protocolo”, de 16 bits, no pacote ARP que identifica o protocolo do respectivo endereço de rede (PLUMMER, 1982). Da mesma forma, o campo “Tipo de Hardware”, também de 16 bits, sinaliza qual a tecnologia de hardware foi utilizada na requisição ARP. Por exemplo, 1 é equivalente ao Ethernet, 15 se refere ao Frame Relay, e 19/21 são utilizados para o ATM.

Os campos “HLEN” e “PLEN” têm 8 bits e indicam o tamanho, em octetos, do endereço de hardware e o tamanho do endereço do protocolo em octetos, respectivamente.

O campo “Operação” possui 16 bits de extensão e indica qual operação está sendo comunicada dentro do pacote: “ARP request” (1), “ARP reply” (2), “RARP request” (3) ou “RARP reply” (4). As duas últimas operações servem para fazer o processo inverso do ARP: descobrir um endereço IP a partir de um endereço de hardware.

2.2.2.2 Camada Inter-redes

A camada de redes, ou inter-redes, desempenha um papel muito importante na arquitetura TCP/IP. Ela é responsável pelo endereçamento padrão das máquinas, mencionado na seção 2.2.2.1, e pelo encaminhamento de pacotes. Esse último consiste na comunicação entre máquinas através de saltos (hops), em que os pacotes “saltam” entre os dispositivos intermediários que compõem a rede TCP/IP. Os saltos fazem parte do mecanismo de encaminhamento e roteamento dos pacotes, que será abordado mais adiante.

A camada de redes garante à camada superior, a de transporte, a transparência de toda a estrutura da rede, desde a sua topologia até detalhes como o roteamento e fragmentação de pacotes. Determinar a rota que um pacote percorre até chegar a seu destino é responsabilidade

HLEN PLEN

ENDEREÇO MAC DO DESTINATÁRIO (octetos 2 a 5) ENDEREÇO IP DO DESTINATÁRIO

TIPO DE HARDWARE TIPO DE PROTOCOLO OPERAÇÃO ENDEREÇO MAC DO EMISSOR (octetos 0 a 3) END. MAC DO EMIS. (oct. 4 a 5)

END. IP DO EMIS. (oct. 2 e 3)

END. IP DO EMIS. (oct. 0 e 1) END. MAC DO DEST. (oct. 0 e 1)

(26)

da camada de rede. Essas rotas devem se basear nos algoritmos de melhor caminho, que envolvem métricas e prioridade de dados e enlaces (TANENBAUM, 2003). Dessa forma, os protocolos da camada de inter-redes buscam obter o melhor desempenho possível sobre sua rede.

O Internet Protocol, da camada de inter-redes, é uma parte essencial do software de Internet, pois define a unidade básica de transferência de dados usada em uma rede TCP/IP, o datagrama IP. O IP se limita a prover as funções necessárias para o encaminhamento de pacotes na Internet (Information Sciences Institute, 1981a).

O princípio do encaminhamento de pacotes do IP consiste em duas formas de entrega: direta e indireta. Antes de falar de cada uma delas, é preciso conhecer a configuração IP dos hosts em uma rede TCP/IP.

Cada computador possui um endereço IP exclusivo, pelo menos dentro de sua rede local. Este endereço é utilizado para que qualquer outro host possa localizá-lo, em qualquer ponto da Internet (lembrando que o NAT é utilizado nos casos em que um IP global é compartilhado por várias máquinas). Um computador não pode armazenar o endereço IP de todos os computadores da Internet, muito menos as rotas para cada um deles, pois isso tomaria muito tempo e espaço de armazenamento, além de implicar em uma implementação complexa e sujeita a erros. Assim, toda vez que um host de uma rede local precisa enviar um datagrama a um host externo à sua rede, esse datagrama faz o primeiro salto em um computador ou roteador que faz fronteira entre a rede local e a Internet, que é chamado de gateway. Para simplificar o conjunto de registros dos endereços IP das máquinas alheias, chamado de tabela de roteamento, um host registra apenas o gateway de sua rede (gateway padrão) e as suas máquinas vizinhas, que pertencem à mesma rede.

Quando um host deseja se comunicar com hosts externos (ou seja, hosts que não têm entrada na sua tabela de roteamento), ele apenas encaminha os datagramas ao gateway padrão, e esse encaminhamento é chamado de rota default da tabela de roteamento, caracterizando uma entrega indireta.

Um computador sabe se o host de destino do seu datagrama está na mesma rede utilizando a da máscara de sub-rede, já citada anteriormente. Quando os hosts de origem e destino possuem o mesmo prefixo de rede, a origem encaminha o datagrama diretamente, através da interface de rede indicada na tabela de roteamento, constituindo-se a entrega direta.

Um datagrama IP possui treze campos em seu cabeçalho. O primeiro deles, de quatro bits, indica a versão do IP do datagrama, que atualmente pode ser 4 ou 6. O campo “HLEN” também tem quatro bits e armazena o tamanho do cabeçalho, medido em palavras de 32 bits.

(27)

O Campo “Tipo de Serviço” é utilizado quando uma rede utiliza qualidade de serviço (QoS). Esse campo estabelece um esquema de prioridades para os pacotes, de modo que os mais urgentes têm maior precedência. Dessa forma, os pacotes mais urgentes podem ser encaminhados mais rapidamente pelos roteadores que permitem o esquema de prioridades (Information Sciences Institute, 1981a).

O tamanho total do datagrama é armazenado no campo “Tamanho Total”, de 16 bits. Esse campo indica o tamanho do cabeçalho mais o tamanho da área de dados, em octetos. Cada datagrama possui uma identificação de 16 bits, que serve para controle do software IP. Essa identificação fica armazenada no campo “Identificação”.

O campo “Flags” é utilizado para a fragmentação, e possui três bits: o primeiro é reservado para uso futuro, o segundo indica se o datagrama pode ser fragmentado ou não, e o terceiro indica se o datagrama é o último de uma sequência de fragmentos. Para saber a ordem dos fragmentos em uma sequência, o campo “Offset do Fragmento”, de 13 bits, indica qual o deslocamento do fragmento no datagrama original, e é calculado em octetos. O primeiro fragmento tem deslocamento igual a zero.

Para evitar que um pacote fique trafegando em rotas circulares, ou que trafegue por rotas excessivamente longas, o campo “Tempo de vida”, ou Time To Live (TTL) indica quantos saltos foram dados pelo pacote. Quando o TTL, que tem 8 bits, chega a zero, o pacote é descartado. Para que isso aconteça, toda vez que o datagrama passa por um host ou por um roteador, o TTL deve ser decrementado em uma unidade, para contabilizar um salto desse pacote.

O campo “Protocolo” indica para qual protocolo da camada superior o conteúdo do datagrama deve ser encaminhado. Em outras palavras, esse campo define a quem pertence os dados do datagrama.

A integridade dos valores do cabeçalho do datagrama é conferida através da soma de verificação, armazenada no campo “Checksum do Cabeçalho”, de 16 bits. Quando ocorre qualquer alteração no cabeçalho, como a mudança do TTL, por exemplo, o campo “Checksum do Cabeçalho” deve ser recalculado.

Os campos “Endereço IP de Origem” e “Endereço IP de Destino” armazenam o remetente e o destinatário do datagrama IP, respectivamente. Cada um desses campos armazena um endereço IPv4, de quatro octetos.

O campo “Opções IP” pode ou não aparecer nos datagramas IP, pois é opcional. O uso desse campo é restrito, mas todos os softwares IP (hosts e roteadores) precisam implementá-lo. A Figura 3 mostra a organização dos campos em um datagrama IP.

(28)

Figura 3: Formato do cabeçalho de um datagrama IP.

Cada elemento que faz parte da rede TCP/IP opera de forma autônoma, de modo que não há coordenação entre os nós dessa rede. Quando acontecem falhas que precisam ser tratadas ou comunicadas, existe o protocolo específico para realizar essa tarefa, o ICMP.

O ICMP oferece um mecanismo especial que permite que computadores e roteadores informem erros ou ofereçam informações específicas de controle. Esse protocolo está fundamentado na comunicação entre os softwares IP das máquinas, mas os usuários também podem manipular as suas mensagens (COMER, 1999a).

O ICMP transmite mensagens de controle e relatórios de erros, simplesmente. O tratamento pertinente para cada erro deve ser feito pelo software IP ou pela aplicação do usuário. Quando ocorre um erro de encaminhamento de pacote, o roteador ou host que identificou o erro gera uma mensagem ICMP e envia para o host de origem do pacote.

Cada mensagem ICMP tem dois campos que indicam o tipo e o código da mensagem, e um campo adicional que armazena a soma de verificação de integridade do pacote (checksum). A Tabela 1 mostra os tipos e códigos usados nas mensagens ICMP, e seus respectivos significados.

OPÇÕES IP PREENCHIMENTO

VERSÃO HLEN TIPO DE SERVIÇO TAMANHO TOTAL IDENTIFICAÇÃO FLAGS OFFSET DO FRAGMENTO TTL PROTOCOLO CHECKSUM DO CABEÇALHO

ENDEREÇO IP DE ORIGEM ENDEREÇO IP DE DESTINO

(29)

Tabela 1: Tipos de mensagem ICMP.

TIPO CÓDIGO SIGNIFICADO

0 0 Resposta de eco

3

0 A rede não está acessível 1 A máquina não está acessível 2 O protocolo não está acessível 3 A porta não está acessível

4 Fragmentação necessária, mas impossível devido ao flag DF 5 O encaminhamento falhou

6 Rede desconhecida 7 Máquina desconhecida

8 Máquina não ligada à rede (inutilizada) 9 Comunicação com a rede proibida 10 Comunicação com a máquina proibida 11 Rede inacessível para este serviço 12 Máquina inacessível para este serviço 11 Comunicação proibida (filtragem)

4 0 Pede para reduzir a velocidade de transmissão 5

0 Redireciona datagramas para a rede 1 Redireciona datagramas para o host

2 Redireciona datagramas para o Tipo de Serviço e Rede 3 Redireciona datagramas para o Tipo de Serviço e Host

8 0 Envia um datagrama a um destinatário e pede-lhe que o restitua (eco) 11 0 Contador de tempo de vida excedido

1 Tempo de remontagem de fragmento excedido 12 0 Problema de parâmetro

13 0 Requisição de estampa de tempo 14 0 Resposta de estampa de tempo 15 0 Requisição de informações 16 0 Resposta de informações

17 0 Requisição de máscara de endereço 18 0 Resposta de máscara de endereço

30 0 Traceroute

31 0 Erro de conversão de datagrama 32 0 Redirecionar host móvel 33 0 “Onde está você” (IPv6) 34 0 “Eu estou aqui” (IPv6) 35 0 Requisição de registro móvel 36 0 Requisição de nome de domínio 37 0 Resposta de nome de domínio 38 0 Requisição de informações

39 0 SKIP

40 0 Photuris

As mensagens ICMP são formadas basicamente pelos campos tipo, código e checksum. O formato dos demais campos depende do tipo de mensagem transmitida. O ICMP se encontra na camada de rede, mas suas mensagens são encapsuladas em um datagrama IP antes de serem encaminhadas para a camada de interface de rede.

(30)

2.2.2.3 Camada de Transporte

O objetivo básico da camada de transporte é fornecer às aplicações da camada superior um fluxo de dados direto entre dois hosts, como se estivessem conectados diretamente. Essa camada aceita as mensagens da camada de aplicação e divide em unidades menores, se for necessário. Os protocolos dessa camada provêem o serviço básico de multiplexação de portas. As portas são canais de comunicação, providas pelo SO, para comunicação entre processos que utilizam a rede (ainda que seja apenas loopback), e cada protocolo dessa camada possui suas portas específicas (KUROSE e ROSS, 2006). Apesar de existirem outros, os dois protocolos de transporte mais utilizados são o UDP e o TCP.

O UDP é um protocolo de transporte sem conexão e não confiável. Seus pacotes são enviados diretamente ao receptor, mesmo que este não esteja esperando, sem que o emissor precise de uma confirmação de recebimento.

Um pacote UDP possui apenas as portas de origem e destino (de 16 bits cada uma), o tamanho do pacote e o checksum, além da própria área de dados (Figura 4). O checksum do UDP utiliza mais informações do que o próprio cabeçalho UDP. O checksum é calculado com o cabeçalho UDP mais um “pseudocabeçalho” contendo os endereços de origem e destino, o código do protocolo e o tamanho da mensagem UDP. O pseudocabeçalho não é enviado junto com o pacote, mas o receptor também o utiliza para verificar se o checksum está correto.

Figura 4: Formato do cabeçalho do pacote UDP.

O protocolo TCP estabelece um transporte de fluxo confiável, orientado à conexão, sobre uma rede de entrega de dados não confiável e sem conexão. A abstração que o TCP fornece às camadas superiores é de uma conexão persistente entre duas extremidades, e permite a aplicação enviar um fluxo contínuo de bytes (Information Sciences Institute, 1981b). Dessa forma, uma conexão é sempre estabelecida antes da transferência efetiva de pacotes, e finalizada quando o fluxo de dados termina.

Uma conexão TCP é iniciada através do processo chamado de three-way handshake, ou negociação em três vias. Esse processo consiste em estabelecer uma conexão através da troca de três mensagens. A primeira mensagem TCP solicita a abertura de conexão à outra

TAMANHO DO PACOTE CHECKSUM

PORTA ORIGEM PORTA DESTINO

(31)

extremidade, passando um flag (SYN) e um número de sequência para sincronização. A outra extremidade aceita a conexão enviando o mesmo flag SYN e mais um (ACK), indicando que a conexão foi aceita. Uma terceira mensagem com o flag ACK é enviada à outra extremidade, indicando que a conexão foi estabelecida (Figura 5).

SYN

SYN, ACK

ACK

Figura 5: Three-way handshake do TCP.

Em uma conexão TCP, para cada pacote que chega, o receptor precisa enviar uma confirmação de recebimento (ACK) ao emissor. Da mesma forma, o emissor fica esperando cada confirmação de seus pacotes enviados. O emissor espera até um limite de tempo (timeout), e quando esse limite é alcançado, ele reenvia o mesmo pacote.

Cada pacote TCP enviado contém dois campos de identificação. O “Número de Sequência” determina a posição do pacote em um fluxo de bytes, e o “Número de Confirmação” é usado para identificar, nas mensagens ACK, os pacotes que foram recebidos.

Para tornar a transmissão do fluxo eficiente, o emissor não pode esperar a confirmação de um pacote para enviar o próximo. Nesse tipo de comunicação, o overhead resultante torna a transmissão de dados mais lenta do que a rede permite. O TCP estabelece uma janela dentro da sequência de pacotes a serem transmitidos, e envia todos os pacotes dentro desta janela, sem esperar o ACK de cada um. À medida que as confirmações dos primeiros pacotes chegam, a janela “desliza” para os próximos pacotes da sequência e os envia.

O TCP decide quando enviar uma sequência de bytes de acordo com a sua conveniência. Ele pode acumular octetos suficientes para enviar em um grande segmento, diminuindo o overhead da comunicação. Para evitar que o TCP atrase a entrega dos dados existe a operação push, que “força” a saída dos dados contidos no buffer. Essa operação também sinaliza ao

(32)

receptor para que não espere por mais pacotes, entregando o pacote à aplicação assim que for recebido. Essa informação é transmitida no bit PSH no campo “Flags” do pacote TCP (Information Sciences Institute, 1981b).

Um segmento TCP possui 12 campos no seu cabeçalho (Figura 6). Além das portas de origem e destino, número de sequência e número de confirmação, esse pacote contém também os campos: “HLEN”, indicando o tamanho do cabeçalho, em múltiplos de 32 bits; os “bits de código”, que contém flags que serão citados logo em seguida; “Janela”, que indica o quantas confirmações o emissor espera receber dentro da janela de pacotes; “Checksum” do cabeçalho mais um pseudocabeçalho semelhante ao UDP; “Ponteiro de Urgente” aponta para o número de sequência do octeto que contém os dados urgentes; “Opções”, campo de tamanho variável que comunica as opções “final da lista de opções”, “nenhuma operação” ou “tamanho de segmento máximo”. Os campos “Reservado” e “Preenchimento” não são utilizados.

Figura 6: Formato do cabeçalho de um segmento TCP.

Os bits de código são seis campos de um bit, que representam flags específico, como exibido na Tabela 2.

Tabela 2: Bits de código do cabeçalho TCP.

CAMPO SIGNIFICADO

URG O segmento possui dados urgentes;

ACK Indica o número de Acknowledgement do segmento; PSH Usado pela função push

RST Solicita o reinício da conexão

SYN Sincronização de números de sequência FIN Final do fluxo de bytes

2.2.2.4 Camada de Aplicação

Um grande número de protocolos constitui a camada de aplicação. É nesta camada que se encontram diversos protocolos especializados para cada serviço de Internet. A navegação web

JANELA

CHECSUM PONTEIRO DE URGENTE

BITS CÓDIGO HLEN RESERVADO PORTA DE DESTINO PORTA DE ORIGEM NÚMERO E SEQUÊNCIA NÚMERO DE CONFIRMAÇÃO OPÇÕES IP PREENCHIMENTO

(33)

tem seu protocolo específico, o HTTP (FIELDING, GETTYS, et al., 1999), a comunicação por correio eletrônico (e-mail) possui seus protocolos associados, o SMTP, POP3 e o IMAP, e para transferência de arquivos também existe um protocolo especializado, o FTP (File Transfer Protocol) (POSTEL e REYNOLDS, 1985), apenas para citar alguns exemplos.

Discorrer de todos ou da maioria dos protocolos da camada de aplicação não é viável, visto que este trabalho se tornaria demasiadamente extenso. Serão abordados aqui apenas dois protocolos para ilustrar um dos serviços mais utilizados na Internet: a navegação web, que envolve os serviços de registro de nomes (protocolo DNS) e a rede mundial de documentos hipermídia (protocolo HTTP).

Na Internet, o endereçamento IP é utilizado para identificar os pontos de acesso à rede. A representação de endereços IP é conveniente para os computadores, mas para o homem pode ser inadequado, pois não se trata de uma identificação intuitiva. O homem passou a dar nomes às máquinas, e registrar uma tabela com o endereço IP para cada nome, em arquivos locais. Apesar do inconveniente da consulta à tabela, não era mais necessário decorar os endereços IP (COMER, 1999a).

Com a expansão da Internet, a manutenção de uma relação de nomes e IPs em um arquivo se tornou inadequada. Surge então o Sistema de Nomes de Domínios, Domain Name System (DNS), serviço que faz o mapeamento automático de nomes e IPs de forma estruturada. O mecanismo de registro de nomes do DNS foi desenvolvido para ser utilizado em diferentes hosts e redes da arquitetura TCP/IP (MOCKAPETRIS, 1987).

Apesar de existirem milhões de computadores conectados à Internet e uma lista enorme de nomes de hosts existentes, o sistema de resolução de nomes DNS é capaz de traduzir (ou resolver) nomes de forma rápida e eficiente. Tal eficácia deve-se principalmente à arquitetura distribuída. O responsável pela tradução de um nome DNS em um endereço IP é o servidor DNS, que fornece uma ou mais respostas para cada solicitação da máquina cliente.

Uma máquina cliente que deseja resolver um nome contata o seu servidor DNS para realizar a tradução. A requisição de tradução pode ser recursiva, quando o servidor DNS solicita a tradução à autoridade para o nome do domínio, e em seguida retorna a resposta ao cliente, ou iterativa, em que o servidor apenas redireciona o cliente para outra autoridade capaz de traduzir o nome.

Uma resposta DNS só é confiável quando for dada pela autoridade do domínio do nome solicitado. Esse tipo de resposta é chamado de resposta autorizada. Um servidor que não pertence ao domínio do nome dá uma resposta autorizada apenas quando for solicitada a tradução recursiva.

(34)

Um nome DNS é representado por um conjunto de rótulos, com cada rótulo representando um domínio ou subdomínio. No domínio ecomp.uefs.br, por exemplo, uma máquina que tem o nome ecomp está situada no domínio uefs, que por sua vez faz parte do domínio br, sendo esse último o mais alto da hierarquia.

O formato de uma mensagem DNS é semelhante tanto na consulta quanto na resposta. Uma requisição contém uma ou mais perguntas de nomes DNS, e uma resposta contém a(s) pergunta(s) junto com uma ou mais respostas. A mensagem DNS contém um cabeçalho, uma seção de consultas DNS, uma seção para as respostas, uma seção para identificação das autoridades dos nomes, e outra seção para informações adicionais (Figura 7).

Figura 7: Formato de uma mensagem DNS.

O cabeçalho de uma mensagem DNS contém os campos apresentados na Tabela 3.

Tabela 3: Campos do cabeçalho de uma mensagem DNS.

CAMPO SIGNIFICADO

Identificador Campo de 16 bits que estabelece uma relação entra consulta e a resposta; QR Um bit que identifica se a mensagem é uma consulta ou resposta;

Opcode Quatro bits que identificam o tipo da query;

AA Um bit que indica se a resposta foi fornecida pela autoridade do registro DNS; TC Um bit que sinaliza se a mensagem foi truncada;

RD Um bit que solicita a tradução recursiva;

RA Um bit que indica se a tradução recursiva é suportada pelo servidor RCODE Código da resposta, de quatro bits, que identifica se houve algum erro; QDCOUNT Quantidade de registros (nomes) na seção de perguntas, em 16 bits; ANCOUNT Quantidade de registros na seção de respostas, em 16 bits;

NSCOUNT Quantidade de registros na seção de autoridade, em 16 bits; ARCOUNT Quantidade de registros em informações adicionais, em 16 bits;

A seção de perguntas contém um ou mais nomes que o cliente deseja traduzir. Cada registro dessa seção contém um nome, dois octetos que especificam o tipo de consulta, e mais dois octetos que indicam a classe da consulta (Figura 8).

CABEÇALHO SEÇÃO DE CONSULTAS

SEÇÃO DE RESPOSTAS SEÇÃO DE AUTORIDADES SEÇÃO DE INFORMAÇÕES ADICIONAIS

(35)

Figura 8: Formato de um registro de nome DNS.

Um nome DNS é formado por um conjunto de rótulos. O tamanho de cada rótulo é indicado pelo primeiro octeto do mesmo, e os pontos entre os nomes não são armazenados. Por exemplo, o rótulo do nome DNS “uefs.br” seria “4uefs2br0”. O zero no final do nome indica que não há mais rótulos.

Um registro da seção de respostas também contém um nome, um tipo e uma classe, mas ainda existem os campos TTL (16 bits), indicando a validade da resposta em segundos, RDLENGTH e RDATA. RLENGTH indica o tamanho do campo RDATA, que por sua vez armazena a resposta efetiva (Figura 9). Quando a resposta for um endereço IP, RDLENGTH conterá o valor 4, e RDATA um endereço IP.

Figura 9: Formato de um registro de resposta DNS.

Quando um usuário acessa uma página da web, ele primeiro fornece a localização da página, através de uma expressão chamada URL, que contém em sequência, o protocolo de comunicação utilizado (normalmente, HTTP), o nome do servidor, e, se for o caso, o diretório em que se encontra a página dentro desse servidor. Antes que a página seja visualizada pelo usuário, o navegador do usuário primeiro descobre o endereço IP do servidor web, através do DNS, e então estabelece a comunicação com o hospedeiro da página. O HTTP é o protocolo da camada de aplicação utilizado em sistemas hipermídia, como o serviço da WWW (World Wide Web) (W3C, 2010). . . . TIPO DA CONSULTA CLASSE DA CONSULTA NOME DNS . . . TTL RDLENGTH RDATA . . . TIPO DA CONSULTA CLASSE DA CONSULTA NOME DNS

(36)

O HTTP é um protocolo que se baseia na comunicação do tipo requisição/resposta. Para cada requisição do cliente (request message) o servidor retorna uma resposta (response message), que pode ser um conteúdo ou uma mensagem de controle (FIELDING, GETTYS, et al., 1999). As mensagens do HTTP se baseiam no formato MIME, Multipurpose Internet Mail Extension (FREED e BORESTEIN, 1996).

A requisição HTTP tem basicamente três campos: linha de método, cabeçalho e corpo. A linha de método indica a operação que deve ser executada no recurso identificado pela URL, também passada na linha de método. Esse campo também contém a versão do HTTP suportada pelo cliente. Os métodos utilizados para acessar uma página web geralmente são o “GET” e o “POST”, mas existem outros, apresentados na Tabela 4.

Tabela 4: Métodos utilizados em requisições HTTP.

MÉTODO SIGNIFICADO

OPTIONS Requisita informações sobre a comunicação GET Requisita um conteúdo identificado pela URL

HEAD Semelhante ao GET, mas recebe como resposta apenas o cabeçalho POST Utilizado para solicitar que o servidor de origem aceite um entidade encapsulada na requisição PUT Solicita que a entidade fechada seja armazenada sob uma requisição fornecida. DELETE Exclui o recurso no servidor identificado pela requisição

TRACE Usado para invocar um loopback remoto da mensagem de requisição. CONNECT Utilizado para servidor proxy

O cabeçalho de uma requisição HTTP permite que o cliente passe informações sobre a mensagem ou sobre ele mesmo, como os caracteres que ele suporta, por exemplo. Essas informações são passadas de acordo com o formato MIME.

Uma resposta HTTP contém os campos status, cabeçalho e corpo. O status é uma mensagem de controle sobre a resposta fornecida. O status possui um código no formato xxx (x indica um número de 0 a 9) que identifica algum tipo de informação (1xx), ou informa se houve sucesso na operação (2xx), redirecionamento (3xx), se houve erro por parte do cliente (4xx), ou erro por parte do servidor (5xx).

O campo cabeçalho contém informações adicionais sobre a resposta HTTP, e o corpo possui o conteúdo retornado para o cliente.

(37)

2.3 Monitoramento de Pacotes

Conhecido também como sniffing, o monitoramento de pacotes é o processo de observação do tráfego de uma rede de computadores. O termo sniffing, que pode ser traduzido como “farejo”, significa utilizar a interface de rede para receber dados que não são destinados a máquina cuja interface reside. Porém, os dados que são destinados a esta máquina também podem ser capturados (ATKINS, BUIS, et al., 1996). O sniffing é capaz de receber todo o tráfego que passa por uma interface de rede, e por isso é um processo muito útil na análise do funcionamento da Internet.

O monitoramento de pacotes da Internet, procedimento feito utilizando ferramentas conhecidas como Analisadores de Rede, Analisadores de Protocolos, ou ainda sniffers, corresponde à leitura de pacotes que passam pela interface de rede da máquina onde este procedimento está sendo realizado. Diz-se que a interface de rede que captura pacotes destinados a outras máquinas está no modo promíscuo (ATKINS, BUIS, et al., 1996).

O processo de monitoramento de pacotes na Internet envolve basicamente o acesso direto à interface de rede e a manipulação dos pacotes capturados. Entende-se como acesso direto à interface de rede a ação de capturar todo o tráfego transmitido que chega à interface. No acesso indireto, o SO é responsável por capturar e encaminhar os pacotes aos processos devidos, e, neste caso, alguns pacotes podem ser descartados sem que sejam capturados pelo sniffer. Trata-se de manipulação dos pacotes capturados a ação de identificação do conteúdo, filtragem dos dados indesejados e transformação da informação em uma representação compreensível para o usuário.

O objetivo de um analisador de rede é monitorar o tráfego e desempenho de uma estrutura de rede e possibilitar ao usuário diagnosticar eventuais problemas, como falhas de comunicação e indisponibilidade de serviços. Desta forma, o sniffing provê as informações necessárias para a realização deste processo, que são os dados reais transmitidos na rede.

As ferramentas de monitoramento de pacotes disponíveis atualmente, como o Wireshark apresentado na Figura 10, e o VisualSniffer (BVTech Incorporation, 2005) exibido na Figura 11 exibem a estrutura dos pacotes, com os campos e seu conteúdo, mas não faz nenhuma análise adicional para tornar as informações da captura mais intuitivas. Algumas ferramentas, a exemplo do Tcpdump (TCPDUMP, 2009), apresentam as informações apenas no modo textual.

(38)
(39)
(40)

3

DESENVOLVIMENTO DA FERRAMENTA

O SniffAndLearn, ferramenta apresentada neste trabalho, se caracteriza como um sniffer por possuir os recursos tradicionais de um analisador de protocolos convencional. Essa ferramenta remete cópia dos pacotes capturados instantaneamente para o usuário, mas os recursos adicionais de análise das comunicações se destacam em relação a outros sniffers.

O SniffAndLearn apresenta um novo enfoque para visualização da troca de mensagens entre os computadores, representando as informações de forma intuitiva. A ferramenta mantém a fidelidade das informações capturadas, mas as representam de maneira mais “sutil” para o usuário, analisando e ilustrando cada parte da informação.

O escopo do SniffAndLearn se define em quatro componentes: captura, processamento do conteúdo dos pacotes, análise das comunicações e interface com o usuário. Esses componentes definem um fluxo de informações, desde a captura de pacotes até a interface com o usuário (Figura 12). A ferramenta foi desenvolvida de modo que seus componentes estivessem pouco acoplados, para que novos recursos possam ser facilmente acrescentados futuramente, como o processamento do conteúdo de novos protocolos, por exemplo.

Figura 12: Fluxo de informações no SniffAndLearn.

3.1 Metodologia

A estratégia de desenvolvimento do SniffAndLearn consistiu em uma parte inicial, referente a especificação do sistema através da definição dos requisitos e dos rascunhos da interface com usuário, e em uma segunda parte, que foi o projeto e desenvolvimento efetivo do software. A primeira parte teve grande importância porque o SniffAndLearn tem como ponto chave a interação com o usuário, e por isso os rascunhos da interface gráfica são pontos fundamentais da especificação.

(41)

Na etapa de desenvolvimento foi utilizado o processo de desenvolvimento de software incremental. Esse processo consiste em identificar as funções mais importantes e em seguida definir uma série de estágios de entrega, em que cada entrega possui uma funcionalidade adicional em relação à anterior (SOMMERVILLE, 2003). No desenvolvimento incremental estão inseridas as etapas de levantamento de requisitos, projeto da arquitetura do sistema, desenvolvimento, validação e integração dos incrementos e validação do sistema final como um todo (Figura 13).

Figura 13: Ciclo de desenvolvimento de software incremental.

O desenvolvimento incremental permitiu o acompanhamento do projeto com a entrega das versões parciais da ferramenta. Cada componente da ferramenta, com exceção da interface gráfica, constituiu em um incremento do processo de software. O projeto do SniffAndLearn foi composto por quatro incrementos (versões):

1. sniffer convencional (v 0.1);

2. sniffer com visualização intuitiva de pacotes (v 0.2); 3. sniffer com visualização simples das comunicações (v 0.3); 4. SniffAndLearn com todos os requisitos desenvolvidos (v 1.0);

No processo de desenvolvimento de software incremental, foram estabelecidas três etapas de implementação: módulo de captura, módulo de processamento do conteúdo dos pacotes e módulo de manipulação das comunicações. O desenvolvimento da interface gráfica com o usuário acontece paralelamente a cada uma das etapas. As três etapas coincidem com os casos

Referências

Documentos relacionados

O desenvolvimento desta pesquisa está alicerçado ao método Dialético Crítico fundamentado no Materialismo Histórico, que segundo Triviños (1987)permite que se aproxime de

4 Este processo foi discutido de maneira mais detalhada no subtópico 4.2.2... o desvio estequiométrico de lítio provoca mudanças na intensidade, assim como, um pequeno deslocamento

b) Execução dos serviços em período a ser combinado com equipe técnica. c) Orientação para alocação do equipamento no local de instalação. d) Serviço de ligação das

Tendo como parâmetros para análise dos dados, a comparação entre monta natural (MN) e inseminação artificial (IA) em relação ao número de concepções e

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

responsabilizam por todo e qualquer dano ou conseqüência causada pelo uso ou manuseio do produto que não esteja de acordo com as informações desta ficha e as instruções de

A Tabela 3 apresenta os resultados de resistência ao impacto Izod e as caracterizações térmicas apresentadas em função dos ensaios de HDT, temperatura Vicat e a taxa de queima do

Em função de leis ambientais mais restritivas e da busca por máquinas mais eficientes, a indústria global de fluidos frigoríficos tem pesquisado e desenvolvido novas soluções para