anÁlise de desempenho da biblioteca libpcap Área de …siaibib01.univali.br/pdf/ramices dos santos...
TRANSCRIPT
-
UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR
CURSO DE CIÊNCIA DA COMPUTAÇÃO
ANÁLISE DE DESEMPENHO DA BIBLIOTECA LIBPCAP
Área de Redes de Computadores
por
Ramicés dos Santos Silva
Rafael Luiz Cancian, MSc. Orientador
São José (SC), dezembro de 2007
-
UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR
CURSO DE CIÊNCIA DA COMPUTAÇÃO
ANÁLISE DE DESEMPENHO DA BIBLIOTECA LIBPCAP
Área de Redes de Computadores
por
Ramicés dos Santos Silva Relatório apresentado à Banca Examinadora do Trabalho de Conclusão do Curso de Ciência da Computação para análise e aprovação. Orientador: Rafael Luiz Cancian, MSc.
São José (SC), dezembro de 2007
-
DEDICATÓRIA
Este trabalho é dedicado a todas as pessoas que me apoiaram durante esta caminhada. Meus familiares, namorada e amigos que sempre compreenderam os momentos de ausência em função da dedicação necessária ao curso.
-
AGRADECIMENTOS
Ao término desta etapa não poderia deixar de agradecer os meus pais por me apoiarem em
muitos momentos durante o curso, a minha namorada pela paciência e compreensão quanto aos
momentos de ausência relacionados as diversas atividades exercidas durante os cinco anos de curso.
Também não poderia deixar de agradecer o sempre carinhoso apoio recebido pela coordenadora do
curso, a professora Anita, que acabou se tornando uma grande amiga. Agradeço também os meus
amigos que nesta trajetória foram de fundamental importância sendo na troca de experiências ou
nos momento de descontração. Por fim agradeço aos meus dois orientadores, Rivalino e Rafael, que
me apoiaram e auxiliaram no desenvolvimento deste trabalho
-
SUMÁRIO
LISTA DE ABREVIATURAS.................................................................vii LISTA DE FIGURAS..............................................................................viii LISTA DE TABELAS................................................................................x LISTA DE EQUAÇÕES ...........................................................................xi RESUMO...................................................................................................xii ABSTRACT..............................................................................................xiii 1 INTRODUÇÃO......................................................................................1 1.1 PROBLEMATIZAÇÃO ..................................................................................... 1 1.1.1 Formulação do Problema................................................................................. 2 1.1.2 Solução Desenvolvida........................................................................................ 2 1.1.3 Objetivo Geral ................................................................................................... 3 1.1.4 Objetivos Específicos ........................................................................................ 3 1.2 METODOLOGIA................................................................................................ 3 1.3 ESCOPO DO TRABALHO................................................................................ 4 1.4 ESTRUTURA DO TRABALHO ....................................................................... 5
2 FUNDAMENTAÇÃO TEÓRICA........................................................6 2.1 GERENCIAMENTO DE REDES ..................................................................... 7 2.2 CAPTURA E ANÁLISE DE TRÁFEGO.......................................................... 8 2.3 EXEMPLOS DE APLICAÇÕES DE ANÁLISE DE TRÁFEGO....... ......... 12 2.4 FRAMEWORK DE CAPTURA (LIBPCAP)................................................. 19 2.5 FATORES QUE INFLUENCIAM O DESEMPENHO DA LIBPCAP .... ... 25 2.5.1 Arquitetura e características de hardware................................................... 25 2.5.2 Otimizações de software (kernel e método de captura) .............................. 27 2.6 FERRAMENTAS DE GERAÇÃO DE TRÁFEGO....................................... 33 2.6.1 Descrição da ferramenta netperf................................................................... 36 2.7 PROJETO DE EXPERIMENTOS .................................................................. 37 2.7.1 Projeto fatorial ................................................................................................ 41 2.7.2 Projeto fatorial 2k ........................................................................................... 42
3 DESENVOLVIMENTO ......................................................................47 3.1 DESCRIÇÃO DO PROBLEMA...................................................................... 47 3.2 DESENVOLVIMENTO DO PROJETO......................................................... 48 3.2.1 Montagem e configuração do ambiente de testes......................................... 48 3.2.2 Testes de geração de tráfego ..........................................................................52 3.2.3 Aplicação de captura de tráfego .................................................................... 55 3.2.4 O experimento ................................................................................................. 56 3.2.5 Análise dos dados ............................................................................................ 62 3.2.6 Resultados........................................................................................................ 63
-
6�
4 CONCLUSÕES ....................................................................................83 4.1 OBJETIVOS ...................................................................................................... 83 4.2 CONTRIBUIÇÕES ........................................................................................... 84 4.3 PUBLICAÇÕES CIENTÍFICAS..................................................................... 85 4.4 TRABALHOS FUTUROS................................................................................ 85
REFERÊNCIAS BIBLIOGRÁFICAS ...................................................86 A TESTES DE GERAÇÃO DE TRÁFEGO.........................................90 A.1 TESTE DO PATHLOAD.................................................................................. 90 A.2 TESTE DO TCPPERF......................................................................................90 A.3 TESTE DO TCPREPLAY................................................................................ 90 A.4 TESTE DO IPERF ............................................................................................ 91 A.5 TESTE DO NETPERF......................................................................................91
B Primeira Aplicação de captura de tráfego.........................................92 C Aplicação de captura de tráfego versão final ....................................94 D Configuração da otimização PF_RING .............................................99 E Arquivo de resultados das métricas de desempenho......................101 F Tabela com as respostas dos experimentos .....................................102 G FLUXOGRAMA DE EXECUÇÃO DOS EXPERIMENTOS ......116 I Artigo científico publicado nos anais do XXII CRICTE ...............118 II Artigo científico publicado nos anais do III SULCOMP...............123 III Resumo extendido submetido à avaliação da coordenação do curso de computação UNIVALI ......................................................................125
-
LISTA DE ABREVIATURAS
AMP Active Measurement Project BPF Berkeley Packet Filter CGI Common Gateway Interface CPU Central Processing Unit CRC Cyclic Redundancy Check DMA Direct Memory Access DOE Design of Experiments ET Engenharia de Tráfego FDDI Fiber Distributed Data Interface Gbps Gigabits por segundo GMT Greenwich Mean Time HTTPS Hyper Text Transfer Protocol Secure IETF Internet Engineering Task Force IP Internet Protocol LBNL Lawrence Berkeley National Laboratory MINC Multicast-based Inference of Network-internal Characteristics MLFFR Maximum Loss Free Forwarding Rate MTU Maximum Transmit Unit NAPI New Application Programming Interface IDS Intrusion Detection System NIMI National Internet Measurement Infrastructure NP Network Probe NRG Network Research Group OSI Open Systems Interconnection PNG Portable Network Graphics RAM Random Access Memory RMON Remote Monitoring RR Request Response SMP Symmetric Multi-Processing SNMP Simple Network Management Protocol SO Sistema Operacional SSE Sum of Squares Errors SST Sum of Squares Total TCC Trabalho de Conclusão de Curso TCP Transmission Control Protocol UDP User Datagram Protocol UNIVALI Universidade do Vale do Itajaí
-
8�
LISTA DE FIGURAS
Figura 1. Rede compartilhada x Rede Comutada.................................................................................9 Figura 2. Consumo de Banda x Tecnologia .......................................................................................10 Figura 3. Quadro de funcionalidades e benefícios do ntop ................................................................13 Figura 4. Interface principal ntop versão 3.1 .....................................................................................14 Figura 5. Exemplo de uso do tcpdump...............................................................................................15 Figura 6. Diagrama de funcionamento do snort. ................................................................................16 Figura 7. Interface principal do wireshark .........................................................................................16 Figura 8. Sniffer Enterprise Visualizer...............................................................................................17 Figura 9. Sniffer Distributed...............................................................................................................18 Figura 10. Sniffer Portable.................................................................................................................19 Figura 11. Portabilidade x tecnologias de nível 2 para a libpcap.......................................................21 Figura 12. Estrutura do arquivo de gravação da libpcap....................................................................21 Figura 13. Estrutura de dados do campo Global Header...................................................................21 Figura 14. Estrutura de dados do campo Packet Header...................................................................22 Figura 15. Estrutura libpcap x kernel x BPF......................................................................................23 Figura 16. Estruturas definidas para utilização da libpcap.................................................................24 Figura 17. Fragmento de programa utilizando a libpcap ...................................................................25 Figura 18. Diagrama de pedido de interrupção (interrupt moderation).............................................27 Figura 19. Caminho dos dados da técnica NAPI ...............................................................................30 Figura 20. Comparativo de performance de captura: polling vs. non-polling....................................31 Figura 21. Arquitetura do socket PF_RING.......................................................................................32 Figura 22. Gráfico comparativo da geração de tráfego por cada ferramenta.....................................34 Figura 23. Gráfico comparativo de overhead das ferramentas ..........................................................35 Figura 24. Funcionamento do netperf ................................................................................................37 Figura 25. Modelo geral de processo ou sistema ...............................................................................39 Figura 26. Configuração kernel Linux RTL8169...............................................................................49 Figura 27. Laboratório de redes - UNIVALI .....................................................................................49 Figura 28. Diagrama do experimento.................................................................................................50 Figura 29. Diferença interface de rede e gabinete..............................................................................50 Figura 30. Adaptação da placa de rede ..............................................................................................50 Figura 31. Configuração do espelhamento de portas .........................................................................51 Figura 32. Execução do primeiro teste do Netperf.............................................................................52 Figura 33. Script de ajuste dos parâmetros de rede............................................................................53 Figura 34. Script de geração de tráfego com o pktgen.......................................................................54 Figura 35. Execução do teste do Netperf com UDP_STREAM ........................................................54 Figura 36. Execução do teste do Netperf com UDP_STREAM ........................................................55 Figura 37. Diagrama do ambiente de testes .......................................................................................56 Figura 38. Script de execução do experimento ..................................................................................57 Figura 39. Construindo um novo kernel com suporte ao NAPI.........................................................59 Figura 40. Opção para habilitar o NAPI para rtl8169S......................................................................60 Figura 41. Configuração da MTU......................................................................................................61 Figura 42. Gráfico de Pareto para análise dos fatores da métrica GB capturados .............................66 Figura 43. Gráfico Box-Cox para os resultados GB capturados ........................................................67 Figura 44. Gráfico da distribuição dos dados da métrica GB capturados em relação a normal ........67 Figura 45. Gráfico do valor predito e do valor real (A) Para o experimento com replicação, (B) Considerando a média das replicações...............................................................................................68
-
9�
Figura 46. Gráficos de interação (A) Interação AB com MTU de 1500, (B) Interação AB com MTU de 7200, (C) Interação AC com NAPI -1 e (D) Interação AC com NAPI 1......................................69 Figura 47. Gráfico de maximização da equação de previsão para GB capturados ............................70 Figura 48. Gráfico de previsão para GB capturados com MTU de 1500B........................................70 Figura 49. Gráfico de Pareto para análise dos fatores da métrica Throughput ..................................73 Figura 50. Gráfico Box-Cox para os resultados – Throughput ..........................................................74 Figura 51. Gráfico da distribuição dos dados da métrica Throughput em relação a normal .............74 Figura 52. Gráfico do valor predito e do valor real............................................................................75 Figura 53. Gráficos de interação (A) Interação AB com MTU de 1500, (B) Interação AB com MTU de 7200, (C) Interação AC com NAPI -1 e (D) Interação AC com NAPI 1......................................76 Figura 54. Gráfico de superfície da equação de previsão para Throughput.......................................76 Figura 55. Gráfico de superfície para Throughput com MTU de 1500B...........................................77 Figura 56. Gráfico de Pareto para análise dos fatores da métrica Índice de perda ............................79 Figura 57. Gráfico Box-Cox para os resultados – Índice de perda ....................................................80 Figura 58. Gráfico da distribuição dos dados da métrica índice de perda em relação a normal........80 Figura 59. Gráfico do valor predito e do valor real............................................................................81 Figura 60. Gráficos de interação (A) Interação AB com MTU de 1500, (B) Interação AB com MTU de 7200 ...............................................................................................................................................81 Figura 61. Gráfico de superfície da equação de previsão para Índice de perda.................................82
-
LISTA DE TABELAS
Tabela 1: Percentual de captura de pacotes........................................................................................28 Tabela 2: Ferramentas de geração de tráfego.....................................................................................33 Tabela 3: Teste de geração de tráfego................................................................................................36 Tabela 4: Exemplo de tabela de sinais ...............................................................................................44 Tabela 5: Tabela de sinais do experimento ........................................................................................58 Tabela 6: Experimentos sem resultados diretos .................................................................................62 Tabela 7: Análise de variância para a métrica bytes capturados........................................................64 Tabela 8: Coeficientes para equação de previsão – GB capturados...................................................64 Tabela 9: Contribuição dos fatores para a métrica GB capturados ....................................................65 Tabela 10: Análise de variância para a métrica throughput ...............................................................71 Tabela 11: Coeficientes para equação de previsão – Throughput......................................................72 Tabela 12: Contribuição dos fatores para a métrica Throughput .......................................................73 Tabela 13: Análise de variância para a métrica índice de perda. .......................................................78 Tabela 14: Coeficientes para equação de previsão – Índice de perda................................................78 Tabela 15: Contribuição dos fatores para a métrica Índice de perda .................................................79
-
LISTA DE EQUAÇÕES
Equação 1 (Variância α Replicações) ................................................................................................41 Equação 2 (Soma dos quadrados totais).............................................................................................43 Equação 3 (SST Geral).......................................................................................................................43 Equação 4 (Influência do fator)..........................................................................................................43 Equação 5 (Regressão ........................................................................................................................44 Equação 6 (Efeito de todos os fatores)...............................................................................................45 Equação 7 (Soma dos quadrados dos erros).......................................................................................45 Equação 8 (Erro de cada medida) ......................................................................................................45 Equação 9 (Erro experimental) ..........................................................................................................46 Equação 10 (Intervalo de confiança)..................................................................................................46 Equação 11 (Modelo de previsão GB capturados).............................................................................65 Equação 12 (Modelo de previsão Throughput)..................................................................................72 Equação 13 (Modelo de previsão Índice de perda) ............................................................................79
-
RESUMO
SILVA, Ramicés dos Santos. Análise de desempenho da biblioteca libpcap. São José, 2007. 69 f. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)–Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, São José, 2007. Avanços tecnológicos das redes de computadores proporcionaram uma mudança de paradigma para área de computação no qual a informação que antes era restrita passou a ser compartilhada pelo mundo. As redes estão cada vez maiores, complexas e interconectadas através da internet. Toda a facilidade da interconexão mundial proporcionou o aumento da complexidade quanto à administração e gerenciamento destas redes. Além de grandes em número de equipamentos, os dados trafegados e a exigência de disponibilidade também acompanharam o crescimento tornando ainda mais difícil a tarefa de gerenciamento destes ambientes. Ferramentas de apoio ao gerenciamento de redes, assim como a base destas ferramentas (suas bibliotecas), têm papel importante em se tratando das atividades relacionadas à disponibilidade e segurança das redes. Muitas dessas ferramentas de apoio fazem uso de captura passiva de tráfego como forma de obter informações da rede e, em muitos casos, essa captura é feita através da libpcap, biblioteca que implementa captura passiva de tráfego. Como cada vez mais as redes vêm se adaptando à crescente necessidade de recursos como banda disponível e alta disponibilidade, se faz necessário garantir que os sistemas de gerência acompanhem esta adaptação. Portanto foi feita a análise, em um ambiente específico, de quais fatores influenciam o desempenho da libpcap. Para isso fez-se uso da metodologia de projetos de experimentos, garantindo que os resultados obtidos são confiáveis. Com base na técnica de análise e projeto de experimentos foi conduzida a análise da libpcap, tendo alcançado o objetivo de identificar os fatores que influenciam no desempenho dessa biblioteca, além de chegar a um modelo de previsão em função da combinação dos fatores analisados. Palavras-chave: Redes de computadores. Captura passiva de tráfego. Libpcap. DOE. Análise de desempenho.
-
ABSTRACT
The advance of computer networks provided a change of paradigm for the computing area, where the information that was restricted passed to be shared by the world. The computer networks are bigger and much more complex, remaining interconnected through the Internet. Considering all world-wide interconnection facilities, it increases the complexity of their network management. Beyond the great number of equipments, the network throughput and availability requirements have growth and becoming a difficult management task into these environments. The adoption of management tools for network management has important role in those activities related to network availability and security. Several tools use passive traffic capturing to measure data from the network traffic and many applications actually use the libpcap to implement it. Due to the increasing demand in terms of performance and availability requirements of the actual network environments, it becomes necessary to guarantee that the management applications are be adequate to this new demand. This way, this work proposes to evaluate which factors have a significant influence on the libpcap performance. Was accomplished applying an experimental methodology called design of experiments in order to achieve reliable results with objective of the identify factors that influence in the performance of this library. Keywords: Computer networks. Passive capture. Libpcap. DOE. Performance evaluation
-
1 INTRODUÇÃO
Neste capítulo serão expostos o problema que deu origem a este trabalho, a formalização da
solução implementada, objetivos e descrição da organização deste trabalho.
1.1 PROBLEMATIZAÇÃO
É visível que a utilização da Internet, bem como o uso das redes de computadores, vem
crescendo cada dia. Novos serviços, conteúdo e negócios dependem cada vez mais desta tecnologia.
Segundo Chaudet, Fleury e Rivano (2005, p.71, tradução):
O número de usuários de internet está crescendo rápido, assim como o tráfego e a complexidade das redes. Consequentemente, os backbones estão crescendo rapidamente, fazendo uso das novas tecnologias e em função das aplicações que requerem mais e mais largura de banda.
Servidores web, de banco de dados, de aplicações, de multimídia e de e-mail são
responsáveis por grande parte do tráfego dos backbones, alavancando o aumento da necessidade de
largura de banda e de comunicação nas estruturas centrais das redes. Estruturas mais velozes e
complexas trazem consigo dificuldades e problemas de gerenciamento.
Chaudet, Fleury e Rivano (2005, p.71, tradução) afirmam que: “O gerenciamento das redes
se torna essencial para avaliação e melhoria de performance e identificação de problemas
localizados.” Assim como melhoria de performance e identificação de problemas a segurança da
rede também depende diretamente do modelo de gerência utilizado.
O modelo de gerência, voltado para a área funcional de desempenho da comunicação da
rede, depende da forma que se pretende monitorar e adquirir informações pertinentes ao
comportamento e ao tráfego da rede. Duas abordagens são comuns na literatura, são elas: ativa e
passiva. A técnica de captura ativa é descrita por Chaudet, Fleury e Rivano (2005, p.80, tradução)
como sendo uma “forma de monitoramento que recebe mais atenção em toda literatura. [...] porém
implica em um overhead (sobrecusto).” Isso ocorre porque a captura ativa é baseada em agentes os
quais enviam as informações através da própria rede, motivo pelo qual implica neste acréscimo de
carga. Tais agentes de gerenciamento são muitas vezes denominados de probes.
Em contrapartida, a análise passiva de tráfego não acrescenta informações na rede, portanto
não produz overhead de comunicação.
-
2
1.1.1 Formulação do Problema
Muitas aplicações de apoio ao gerenciamento e segurança de redes fazem uso
especificamente de captura passiva de tráfego, fazendo uso de uma biblioteca de software chamada
libpcap (LIBPCAP, 2007). Esta é uma biblioteca open source portável e que provê funcionalidades
para captura de tráfego das interfaces de rede sem que os desenvolvedores de aplicações precisem
implementá-las.
Com base em uma revisão da literatura e de vários projetos na área de redes de
computadores, como o snort, wireshark, tcpdump e ntop respectivamente um detector de intrusão de
redes e três analisadores de protocolos, identificou-se a utilização desta biblioteca por parte dessas
aplicações. Com base nesta avaliação, houve a motivação quanto ao desenvolvimento deste
trabalho, uma vez que a eficácia dos sistemas de monitoramento e segurança, que tem como base a
captura passiva de tráfego através da libpcap, está diretamente relacionada ao desempenho desta
biblioteca.
Tendo por base a identificação descrita anteriormente, buscou-se na literatura material a
respeito de estudos de análise de desempenho desta biblioteca. Encontrou-se apenas um trabalho
(DERI, 2004), o qual não realizou uma avaliação tendo com base uma metodologia ou sistemática
que garanta a qualidade dos seus resultados. Esta ausência de trabalhos sistematizados para a
avaliação do desempenho da libpcap motivou a elaboração deste trabalho para servir de referência à
comunidade usuária da biblioteca, que hoje é composta tanto no âmbito acadêmico-científico,
quanto comercial, congregando desenvolvedores, usuários e administradores de soluções de análise
de tráfego, sejam para gerência ou segurança de redes ou outras áreas afins.
1.1.2 Solução Desenvolvida
Este trabalho realizou um estudo do desempenho da biblioteca libpcap, a partir de um
projeto de experimentos, utilizando fatores e níveis baseados em caracterizações de sua utilização
em um ambiente de testes com três estações rodando sistema operacional Linux. Fatores como:
otimizações de kernel e parâmetros de configuração foram combinados em um ambiente
experimental e resultados como: throughput, quantidade de pacotes capturados e rejeitados foram
analisados resultando na identificação de sua influência no desempenho da libpcap.
-
3
1.1.3 Objetivo Geral
O objetivo deste trabalho foi realizar uma análise experimental do desempenho da biblioteca
de captura de pacotes libpcap aplicando a metodologia de projeto de experimentos, contribuindo
para outros projetos que fazem uso dessa biblioteca.
1.1.4 Objetivos Específicos
Os objetivos específicos deste trabalho foram:
• montagem um ambiente de testes baseado em Linux para execução de testes baseados na
metodologia de projeto de experimentos;
• identificação dos fatores com maior influência no desempenho da libpcap para os
cenários avaliados;
• quantificação, através da análise de variância, dos efeitos dos fatores identificados no
item anterior sobre o desempenho da biblioteca;
• mensuração do desempenho da libpcap, implementação padrão, em relação a outras
abordagens, baseada em otimizações de kernel do Linux e alteração de parâmetros de
configuração; e
• documentação dos resultados e as análises sobre o experimento realizado.
1.2 Metodologia
Toda pesquisa bibliográfica foi baseada em buscas na Internet por meio de ferramentas para
pesquisas científicas, como scholar.google.com, citeseer.ist.psu.edu, portal.acm.org. Além disso,
foram pesquisados sites e documentações de desenvolvedores, aplicações, metodologias presentes
no trabalho assim como utilização de livros e periódicos (journals).
Quanto à compreensão e estudo do funcionamento da libpcap, foram realizados através da
leitura da documentação da biblioteca e desenvolvimento de programas (protótipos) utilizando as
funcionalidades da libpcap além da análise do código de outras aplicações de código aberto que
usam esta biblioteca, tais como ntop, tcpdump e wireshark.
A definição dos fatores relevantes para o experimento foi realizada na segunda etapa deste
trabalho. Contudo, nesta etapa foram pesquisados aspectos relacionados com arquitetura de
-
4
computadores, bem como o projeto de placas de rede e otimizações do kernel do sistema
operacional (Linux), itens estes que influenciaram na etapa de definição dos fatores do projeto
experimental.
Quanto à metodologia para elaboração do experimento foi utilizada a técnica de projeto de
experimentos - DOE (Design of Experiments - projeto de experimentos) (MONTGOMERY, 2001;
JAIN, 1991).
1.3 Escopo do trabalho
Este trabalho teve como foco principal a avaliação de desempenho da biblioteca libpcap com
intuito de determinar quais fatores são relevantes para sua eficácia baseado em um ambiente de
testes e tendo como workload (carga do sistema) tráfego gerado próximo ao limite da interface de
rede (gigabit ethernet). Considerando que a libpcap é multiplataforma, vale mencionar que o
sistema operacional usado foi o Linux1 e a versão da libpcap será a 0.9.5.
O ambiente de testes foi composto por três computadores, sendo um gerador de tráfego2, o
segundo o receptor do tráfego3 e o terceiro responsável pela captura do tráfego gerado4. Todos os
equipamentos citados foram interconectados através de um switch com suporte a espelhamento de
portas e que operou com a mesma capacidade de tráfego das interfaces de rede das estações. Os
resultados da pesquisa são válidos para o ambiente utilizado (hardware e software), contudo
servindo de base para outros ambientes similares. Os fatores avaliados pelo experimento foram:
• Aplicação da otimização do kernel Linux (NAPI) com objetivo de avaliar a melhoria
causada pelo controle da situação de estresse denominada livelock interrupt;
• aplicação da otimização proposta por Deri (2004) denominada PF_RING com objetivo
de melhorar a forma como os dados da interface de rede ficam disponíveis em espaço de
usuário;
• variação do parâmetro MTU (Maximum Transmit Unit – Unidade máxima de
tranferência) fazendo com que junto com essa variação fosse analisado o comportamento
da libpcap quanto a freqüência dos pacotes na interface, uma vez que mantendo o
1 Ubuntu versão 7.04 kernel 2.6.20-1 2 Pentium 4 HT, 512 MB de RAM, Interface de rede Realtec (8169S) 10/100/1000. 3 Pentium 4 HT, 512 MB de RAM, Interface de rede Realtec (8169S) 10/100/1000. 4 Pentium 4 HT, 512 MB de RAM, Interface de rede Realtec (8169S) 10/100/1000.
-
5
tráfego gerado porém trabalhando com uma MTU maior menos pacotes chegam a
interface;
• aplicação ou não da verificação de pacotes no recebimento (RX_Check) para avaliar o
possível overhead causado por esta verificação.
1.4 Estrutura do trabalho
Este trabalho está dividido em quatro capítulos, os quais estão descritos a seguir.
A introdução descreve o problema estudado assim como a justificativa e como foi resolvido.
Também são descritos os objetivos do trabalho, a metodologia utilizada e também a definição do
escopo do trabalho.
Na fundamentação teórica o capítulo é dividido em sete seções, são revisados conteúdo
sobre gerenciamentos de redes, captura e análise de tráfego, aplicações de análise de tráfego, a
biblioteca de captura (libpcap), aspectos que influenciam o desempenho da libpcap, ferramentas de
geração de tráfego e a metodologia de projetos de experimentos (DOE)
No Capítulo de projeto é descrito o experimento, a metodologia utilizada assim como o
cronograma executado e análise de riscos.
Em considerações finais são expostas dificuldades encontradas e contribuições deste
trabalho.
-
2 FUNDAMENTAÇÃO TEÓRICA
Com o avanço tecnológico das últimas décadas ficou visível a mudança de foco quanto às
informações e seu processamento. Segundo Tanenbaum (1997):
As principais conquistas tecnológicas do século XX se deram no campo da informação. [...] A instalação de redes de telefonia em escala mundial, a invenção do rádio e da televisão, o nascimento e o crescimento sem precedentes da indústria de computadores e o lançamento dos satélites de comunicação.
Esse avanço alavancou o crescimento das redes de computadores assim como vem
proporcionando um aumento em sua utilização por conta da popularização destas tecnologias. Com
uma relação custo-benefício favorável, as empresas passaram a considerar as suas redes como setor
estratégico, o que gerou uma demanda ainda maior por tecnologias confiáveis de redes. Sobre este
contexto Oppenheimer (1999) afirma que:
Novas práticas empresariais estão gerando mudanças nas redes das empresas. A transição de uma economia industrial para uma economia de informações [...] e o surgimento de uma economia global de competitividade [...] acelerou a velocidade com que as empresas têm de se adaptar às mudanças tecnológicas e financeiras.
Estes aspectos fazem com que decisões estratégicas, que dependem de informações, tenham
de ser tomadas cada vez mais rapidamente criando uma dependência cada vez maior das empresas
com relação as suas estruturas de interligação, ou seja, suas redes. O termo redes será utilizado
neste trabalho sempre que se fizer referência às redes de computadores, que segundo Tanenbaum
(2003) “o termo redes é utilizado para mencionar um conjunto de computadores autônomos
interconectados por uma única tecnologia. Dois computadores estão interconectados quando podem
trocar informações.”
Todo o crescimento em relação às redes, sua diversidade e complexidade, vêm promovendo
um aumento de complexidade quanto à gerência destes ambientes, conforme afirma Tarouco (1993,
p.1) “o contínuo crescimento em número e diversidade dos componentes das redes de computadores
tem tornado a atividade de gerenciamento de rede cada vez mais complexa.”
O presente trabalho está diretamente relacionado às áreas de gerência e segurança de redes.
Áreas estas que se pretende contribuir com esta pesquisa e que serão conceituadas e expostas na
Seção 2.1. Também serão apresentados os conceitos e métodos de análise e caracterização de
tráfego na Seção 2.2. Na Seção 2.3 serão apresentados alguns exemplos de aplicações que fazem
-
7
uso da libpcap assim como suas funcionalidades. Esse capítulo traz a definição e princípio de
funcionamento da libpcap (Seção 2.4) e na Seção 2.5 os aspectos que influenciam no desempenho
da captura passiva de pacotes pela libpcap.
2.1 Gerenciamento de Redes
Redes maiores e mais complexas carecem de maiores cuidados com isso gerenciá-las torna-
se imprescindível.
Existem muitas definições para o gerenciamento de redes. Dentre elas, destacam-se [...] a da ISO. O gerenciamento de redes provê mecanismos para a monitoração, controle e coordenação de recursos em um ambiente OSI (Open Systems Interconnection - Interconexão de sistemas abertos) e define padrões de protocolo OSI para troca de informações entre estes recursos. (RISO et al, 1993).
O gerenciamento de redes pode ser aplicado em função de algumas áreas sempre com o
objetivo de garantir o perfeito funcionamento da rede. Soares e Lemos (1997) trata o gerenciamento
de redes como “sistemas e aplicativos que permitem detectar e controlar problemas que ocorram em
hardware ou softwares que fazem parte da rede.” Esses sistemas podem abranger uma ou várias
vertentes do gerenciamento de redes, conforme Specialski et al. (1993), no que tange à classificação
em áreas funcionais, tem-se:
• gerenciamento de configuração: Com a função de manutenção e monitoração da
estrutura física e lógica da rede, incluindo a existência de componentes e sua
interconectividade;
• gerenciamento de falhas: É responsável pela monitoração do estado de cada um dos
objetos gerenciados e pelo tempo e ação quanto ao restabelecimento das unidades com
problemas;
• gerenciamento de desempenho: Preocupa-se com o desempenho corrente da rede,
através de parâmetros tais como atrasos, vazão e número de retransmissões; e
• gerenciamento de contabilização: Está relacionado com a utilização dos recursos da
rede.
Já Oppenheimer (1999, p 60-65) aborda a gerência de redes com foco na caracterização da
inter-rede existente e na caracterização do fluxo de tráfego. Quanto à caracterização da rede
Oppenheimer (1999, p 60-110) afirma que se faz necessário:
-
8
• Análise da disponibilidade da rede: baseada nas estatísticas que o cliente possua sobre o
tempo médio entre falhas e o tempo médio para reparação;
• análise da utilização da rede: é a medida da quantidade da largura de banda em uso
durante um intervalo de tempo;
• utilização da largura de banda por protocolo: onde se tem a medição da utilização do
tráfego de difusão em comparação com o tráfego unicast e com o tráfego gerado por
cada protocolo importante; e
• análise da precisão da rede: neste caso a medida a ser feita é com relação a erros de
estruturas (pacotes), porque uma estrutura inteira é considerada incorreta se um único bit
é alterado ou perdido.
Quanto à caracterização e análise de tráfego da rede, segmentos do gerenciamento de redes
relacionados a este trabalho, maiores detalhes são apresentados na próxima seção.
2.2 Captura e análise de tráfego
A análise de tráfego tem como base a caracterização e coleta de tráfego das redes. A
caracterização de tráfego é descrita por Oppenheimer (1999, p79) como a atividade que “envolve a
identificação das origens e dos destinos do tráfego da rede e a análise da direção e simetria dos
dados que trafegam entre origens e destinos”. Já a análise de tráfego, que pode servir de apoio para
as quatro áreas funcionais de gerenciamento de redes é baseada na captura do tráfego em pontos
estratégicos da rede. As técnicas de análise de tráfego são usadas pela engenharia de tráfego (ET) e
implementadas por uma gama de ferramentas. Contudo, técnicas como a predição de tráfego são
pouco usadas na prática, apesar de serem de grande utilidade no gerenciamento de redes. (MATIAS
JR. & SCHUTZ, 2007)
As ferramentas de análise de tráfego são baseadas em princípios de captura de tráfego, ou
seja, são coletados os dados que trafegam na rede em pontos estratégicos das mesmas. Em se
tratando de análise de tráfego em redes comutadas, Matias Jr. e Gonçalves (2005) citam que:
“Atualmente, a popularização de elementos ativos de rede, em especial de switches, tem permitido
uma rápida expansão das redes comutadas. A utilização destes dispositivos, tanto no centro (core)
quanto nas bordas da rede, diminui consideravelmente a latência da comunicação em função do seu
modelo de comunicação ponto a ponto.” Mas esse ganho de segurança e performance trouxe um
aumento de complexidade quanto ao gerenciamento e monitoração dessas redes que até então eram
-
9
baseados em escuta do tráfego por meio de sniffer e fez com que as arquiteturas de análise de
tráfego sofressem alterações, exemplificadas na Figura 1.
Figura 1. Rede compartilhada x Rede Comutada Adaptado de Matias Jr. e Gonçalves (2005)
O lado esquerdo da Figura 1 apresenta o modelo de captura de tráfego em uma rede
compartilhada baseada em um repetidor popularmente conhecido como hub. Simplesmente
conectando o network probe (NP) já se consegue receber todo o tráfego da rede. Mas em se tratando
de redes comutadas, lado direito da Figura 1, a abordagem deve ser diferente, pois neste caso o NP
consegue capturar apenas o tráfego destinado ou originado por ele próprio, o que exige a utilização
de outras tecnologias com intuito de prover a gerência e o monitoramento de redes comutadas. Em
redes dessa natureza atualmente são utilizadas três tecnologias: RMON (Remote monitoring –
monitoramento remoto), sFlow, NetFlow, (MATIAS JR., GONÇALVES, 2005).
As tecnologias RMON, sFlow e NetFlow fazem parte do grupo de agentes baseados em
captura passiva de tráfego, que é conceituada por Lobster (apud ANDREOZZI et al, 2005,
tradução) como “uma técnica de análise e monitoramento de redes que captura e examina os
pacotes que passam através do link monitorado, permitindo, até mesmo análise de impacto de
pacotes.” Estas tecnologias são consideradas sistemas de monitoramento distribuídos que são
conceituados por Oppenheimer (1999, p 150) como a distribuição de sistemas de monitoramento de
rede e agentes por toda inter-rede de uma forma hierárquica distribuída, sendo que os dados
coletados são centralizados em um sistema gerenciador.
Segundo Oppenheimer (1999, p 252), o padrão RMON “foi desenvolvido pela IETF
(Internet Engineering Task Force) no início da década de 90 para solucionar deficiências nas MIBs
padrão que reduziu a capacidade de fornecer estatísticas sobre parâmetros de link de dados e da
camada física. [...]. Os agentes RMON obtêm estatísticas sobre erros de CRC (Cyclic Redundancy
Check – verificação de redundância cíclica), colisões Ethernet, distribuição de tamanhos de pacotes,
número de pacotes de entrada e saída e a taxa de pacotes de difusão.” Já Matias e Gonçalves (2005)
definem RMON como um dispositivo para coleta de dados da rede que mantém tabelas com os
-
10
valores de medição. “Em especial no caso de switches o agente RMON tem acesso a todo o tráfego
das portas de comunicação, tendo, portanto, uma visão global daquele segmento da rede” (MATIAS
JR. & GONÇALVES, 2005).
O NetFlow é uma tecnologia proprietária de monitoramento desenvolvida pela Cisco
Systems5 e é definida em Cisco (2007) como uma tecnologia eficiente que serve de base para um
conjunto de aplicações como monitoramento de tráfego, planejamento de rede assim como
monitoramentos de ataques de negação de serviço. A própria Cisco provê um conjunto de
ferramentas que trabalham com dados coletados no padrão NetFlow. Matias Jr. e Gonçalves, (2005)
ainda complementam que a tecnologia NetFlow é embarcada em ativos de rede e envia seus dados
para um sistema centralizador (central collector) que decodifica estes dados, os armazenam em
tabelas e disponibiliza-os sob a forma de outros padrões como, por exemplo, o SNMP (Simple
Network Mananger Protocol).
Já a tecnologia sFlow tem seu funcionamento similar ao NetFlow. Segundo Inmon (2001)
esta tecnologia combina contadores de pacotes com amostragens de tráfego. As informações
coletadas são enviadas imediatamente para um coletor central para análise, da mesma forma como
no Netflow.
Inmon (2001) apresenta uma análise comparativa entre RMON, NetFlow e sFlow a qual está
representada na Figura 2. Este gráfico compara a utilização de banda por agente em função do
tempo, exemplificando o grau de overhead produzido por cada agente.
Figura 2. Consumo de Banda x Tecnologia Fonte: Adaptado de Inmon (2001).
A Figura 2 mostra que o agente RMON tem um baixo consumo de banda quando está
capturando o tráfego, mas um overhead muito grande é gerado durante o envio das informações
para o gerente SNMP. Quanto ao NetFlow, este apresenta um consumo alto de banda durante o
5 http://www.cisco.com
-
11
período de captura e ainda maior quando ocorre o envio das informações para o sistema
centralizador. Dos agentes analisados o sFlow apresenta os melhores resultados, sendo o mais
otimizado, enviando em média 1 pacote por segundo com possibilidade de ajuste quanto à taxa de
amostragem, (INMON, 2001).
Uma outra abordagem para captura de pacotes é encontrada na literatura como captura ativa
de tráfego, onde, para se obter as medições da rede, gera-se um tráfego extra. Esta abordagem é
descrita em Andreozzi et al (2005, tradução): “Como regra geral, um fim (a probe) gera um padrão
específico de tráfego, enquanto o outro ponto (o alvo) coopera com a resposta a este tráfego
(feedback): O ping é a ferramenta mais comum desta categoria.” Fraleigh et al. (2001, tradução)
contribui com alguns exemplos de sistemas que fazem uso de captura ativa:
• NIMI (National Internet Measurement Infrastructure – infra-estrutura nacional de
monitoramento de internet): Sistema que usa ferramentas como ping, traceroute,
mtrace e treno para medição de performance;
• MINC (Multicast-based Inference of Network-internal Characteristcs –
Características de rede local baseado em inferência multicast) O sistema de medição
transmite mensagens de multicast para muitos destinos e compara taxas de perda em
links, distribuição de atrasos e topologia baseado na observação da correlação entre
os pacotes recebidos; e
• AMP: (Active Measurement Project – projeto de monitoramento ativo): Propõe um
conjunto de estações de monitoramento que medem a performance dos backbones.
As técnicas de captura ativa de tráfego apresentadas nesta seção não são exceção à regra
imposta pela própria tecnologia, onde existe um alto custo computacional e principalmente um
overhead com relação à utilização da banda de rede, pois como já foi citado, tráfego extra é gerado
para se obter medidas de desempenho da rede. A técnica de captura ativa é descrita por Chaudet,
Fleury e Rivano (2005, p. 80, tradução) como sendo uma “forma de monitoramento que recebe
mais atenção em toda literatura. [...], porém implica em um overhead.” Isso ocorre porque a captura
ativa é baseada em agentes os quais geram informações extras através da própria rede, motivo pelo
qual implica neste acréscimo de carga. Tais agentes de gerenciamento são muitas vezes
denominados de probes.
-
12
A utilização de agentes além de adicionar tráfego na rede requer que os dispositivos (ativos
de rede) implementem tais tecnologias o que acaba inviabilizando sua utilização em função do
custo dos equipamentos. Normalmente, só os equipamentos de centro de rede (core) possuem tais
características o que impede o monitoramento dos segmentos de rede após os switches de borda.
(MATIAS JR. & GONÇALVES, 2005). É partindo do problema de custo e overhead que muitas
soluções de apoio ao gerenciamento de redes e segurança são baseadas em captura passiva de
tráfego. Exemplos e descrições de ferramentas de análise de tráfego que fazem uso de captura
passiva de tráfego serão detalhados na Seção 2.3.
2.3 Exemplos de aplicações de análise de tráfego
Como aplicações de apoio ao gerenciamento e segurança de redes que fazem uso de captura
passiva de tráfego através da libpcap, a seguir está uma descrição de algumas aplicações que são
largamente utilizadas:
Ntop6: Uma solução de monitoramento de tráfego que é definida por Deri e Suin (2000,
tradução) como sendo:
Originalmente concebida como uma aplicação de monitoramento e medição de redes de código aberto e baseada em Web. Pode ser usado para análise de padrões de tráfego assim como facilita o reconhecimento e classificação de ataques específicos.
Possui uma interface com o usuário bastante intuitiva e de fácil adaptação sendo que grande
parte das informações disponíveis vem da captura de pacotes através da libpcap, biblioteca que será
detalhada na Seção 2.4. O Ntop tem sido incorporado em produtos comerciais de empresas como a
Cyclades e 3Com. Esta ferramenta é definida em Ntop (2007, tradução) como:
Uma solução de monitoramento de tráfego de redes que ajuda administradores de redes e sistemas a identificar falhas, otimizar a rede e planejar melhorias. NTOP, uma ferramenta de monitoramento e medição simples que traz relatórios ordenados por nível de utilização de usuário permitindo a identificação rápida dos hosts (estações) que mais estão utilizando recursos da rede.
6 www.ntop.org
-
13
As funcionalidades desta ferramenta são descritas na Figura 3.
Funcionalidade Benefício Descrição
Interface web de fácil navegação/compreensão.
Segurança e facilidade de uso.
NTOP oferece análise de tráfego através de uma interface de fácil compreensão protegida por senha incluindo suporte a protocolos de segurança como HTTPS (hyper text transfer protocol security – protocolo seguro de transferência de hiper texto)
Relatórios de análise de fluxo.
Solução rápida de problemas de otimização.
NTOP mostra estatísticas do tráfego das redes, ordenados por vários critérios, incluindo distribuição por protocolo, IP (Internet Protocol) da fonte/destino, matriz de tráfego IP e tipos de protocolos.
Arquitetura Leve. Escalável. NTOP pode coletar o tráfego usando o mínimo de memória e CPU (Central Processing Unit – Unidade Central de Processamento) assim como relatórios de múltiplas interfaces/ fontes em uma rede; a medida de utilização de CPU é menor que 10% para reportar o tráfego de 16 interfaces de rede.
Suporte à captura local e análise de pacotes.
Pode ser administrado remotamente.
NTOP inclui a possibilidade de se analisar a rede mesmo através de uma interface externa remotamente sem a necessidade de um sniffer específico ou ainda um analisador de tráfego para analisar as informações.
Gráficos portáveis. Baixo consumo de banda e imagens de alta qualidade.
Gráficos podem ser gerados diretamente em formato PNG (Portable Network Graphics – Gráficos de Rede Portáteis).
Figura 3. Quadro de funcionalidades e benefícios do ntop Fonte: Adaptada de 3COM, (2007)
Um dos pontos fortes do NTOP está relacionado à sua interface, quanto a sua facilidade de
uso e compreensão. Este ponto pode ser observado na Figura 4 onde se tem a tela principal da
ferramenta demonstrando seu menu principal, interfaces monitoradas, o gráfico de distribuição de
tráfegos pelas interfaces de redes presentes, tempo de atividade entre outras informações que podem
ser observadas no site do fabricante.
-
14
Figura 4. Interface principal ntop versão 3.1
Tcpdump7 é definido como sendo uma “aplicação que captura o tráfego da rede e imprime
na tela os cabeçalhos dos pacotes de uma interface de rede de acordo com expressões boleanas
utilizadas como filtro” (LIBPCAP ,2007). O projeto tcpdump faz parte do projeto da libpcap,
conseqüentemente este faz uso desta biblioteca para captura dos pacotes. Ambos são disponíveis
como open source. Sua interface com o usuário é sob a forma de linha de comando, sendo bastante
flexível e seu funcionamento é mostrado na Figura 5.
7 Tcpdump está disponível em www.tcpdump.org
-
15
Figura 5. Exemplo de uso do tcpdump
O comando tcpdump –i fxp0 faz com que seja capturado todo tráfego que chega e sai da
interface fxp0. O resultado do comando é apresentado na seqüência do comando, indicando o
endereço de origem, destino e hora em que o tráfego foi capturado. Ao final é impresso na tela o
total de pacotes capturados.
Snort8: Uma ferramenta que não é utilizada para gerenciamento mas para segurança de
redes, é definido como “uma tecnologia open source de detecção e prevenção de intrusos que foi
criada em 1998 por Martin Roesch, o fundador da Sourcefire. [..] O Snort tornou-se rapidamente o
mais expressivo sistema de detecção e prevenção de intrusão do mundo.” (SNORT, 2007,
tradução). Todo o funcionamento do Snort tem por princípio identificar ataques através da análise
de padrões do tráfego. Todo tráfego é capturado de forma passiva através da libpcap. Roesch (1999)
conceitua o Snort como:
Um sniffer de pacotes baseado na biblioteca libpcap que pode ser utilizado como um sistema de detecção de intrusão de redes, NIDS (Network intusion detection system – Sistema de detecção de intrusão de redes). Seu funcionamento é baseado em regras, análise de padrões e detecção de ataques, assim como ataques de overflows, port scans, ataques de CGI (Common Gateway Interface) entre outros. Além disso o Snort possui um sistema de alertas em tempo real [...] ou ainda pode ser configurado para executar linhas de comando como comandos de filtragem do tipo BPF (Berkeley Packet Filter).
O diagrama de funcionamento do NIDS Snort é ilustrado na Figura 6.
8 Snort está disponível em www.snort.org
-
16
Figura 6. Diagrama de funcionamento do snort. Fonte: Adaptado de Snort Brasil (2007)
Wireshark9: Uma ferramenta que é a continuidade do projeto Ethereal. Wireshark (2007,
tradução) define a ferramenta como:
Um analisador gráfico de protocolos de redes. Este permite que você navegue interativamente pelos pacotes de uma rede ou pacotes armazenados previamente em um arquivo de captura. O formato nativo de captura de pacotes é o libpcap, que é utilizado pelo tcpdump e várias outras ferramentas.
Esta ferramenta decodifica os frames capturados no formato libpcap e os mostra de forma
gráfica, como ilustra a Figura 7.
Figura 7. Interface principal do wireshark Fonte: Wireshark (2007).
Outro software para análise de tráfego é o Sniffer. Este é um produto da Network General10,
empresa pioneira e líder em aplicações de análise e medição de redes. (Network General, 2005).
9 Wireshark está disponível em www.wireshark.org
-
17
Apesar de não fazer uso da libpcap e ser um produto proprietário, faz-se necessário citar suas
funcionalidades em função de ser atualmente uma das principais aplicações na área de análise de
tráfego de forma passiva. O Sniffer é comercializado sob três versões descritas por Network General
(2007):
• Sniffer InfiniStream: Solução de monitoramento para redes de grande porte e complexidade
que provê a captura de todo tráfego de usuário. Tem como funcionalidade a análise de
protocolos e análise estatística do tráfego capturado através do armazenamento de
informações em uma estrutura flexível de data mining. Com isso tem-se análise em tempo
real e análise histórica através de uma interface administrativa denominada Sniffer
Enterprise Visualizer demonstrada na Figura 8.
Figura 8. Sniffer Enterprise Visualizer Fonte: Network General (2007)
Sniffer Distributed: Combinação de hardware appliance com software. Sniffer Distributed permite
que áreas remotas da rede também sejam monitoradas como se fizessem parte do centro (core) da
rede. Através do uso de decodificadores de protocolos este produto permite a identificação e até a
10 www.networkgeneral.com
-
18
antecipação na solução de problemas de performance e gargalos de rede. É uma ferramenta ideal
para gerenciamento pró-ativo de redes e sua interface é apresentada na Figura 9.
Figura 9. Sniffer Distributed Fonte: Network General (2007)
• Sniffer Portable: Solução baseada em software desenvolvida para resolver o problema de
segmentos de rede que não eram monitorados pelos appliances. Possui funcionalidades
voltadas a analisadores estatísticos de tráfego. Como pode ser visto na Figura 10 suas
informações são disponibilizadas como contadores e percentuais sem a possibilidade de
análise de protocolo, essa funcionalidade é conseguida juntamente com o Sniffer
Distributed.
-
19
Figura 10. Sniffer Portable Fonte: Network General (2007)
Altos investimentos em soluções proprietárias nem sempre são possíveis para empresas de
pequeno e médio porte. Conseguir o gerenciamento e monitoramento de uma rede por completo e
não somente através do monitoramento do centro de rede (core) é possível, como visto nesta seção,
utilizando-se muitas vezes soluções open source baseadas na captura passiva de tráfego através da
libpcap.
2.4 Framework de captura (libpcap)
Como descrito na Seção 2.3, o desempenho e eficácia de muitos sistemas de apoio ao
gerenciamento e segurança de redes dependem diretamente da performance do seu mecanismo de
coleta passiva de pacotes. Tal dependência motivou a realização deste trabalho no que tange a
realização da avaliação de desempenho de uma biblioteca de captura de pacotes de rede, neste caso
a libpcap.
O projeto libpcap nasceu no NRG (Network Research Group – Grupo de Pesquisa de Redes)
que é um grupo de pesquisa em redes do LBNL (Lawrence Berkeley National Laboratory) na
Califórnia (LBNL, 2002) e atualmente faz parte do projeto libpcap/tcpdump que teve início apartir
dos patches e dos programas libpcap e tcpdump do NRG. Seu desenvolvimento é atribuído a Van
Jacbson, Crig Leres e Steven MacCanne e permite a captura de tráfego de rede, recuperação dos
frames e ainda a utilização do BPF (Berkeley Packet Filter – filtro de pacotes Berkeley) (LIBPCAP,
2007). O BPF é definido por McCanne e Jacobson (1992, tradução) como uma nova arquitetura de
kernel Linux para captura de pacotes que oferece um ótimo desempenho em função de alterações
-
20
estruturais na forma como os dados da rede podem ser adquiridos em espaço de usuário através de
mapeamento da memória do kernel.
É fazendo uso dos filtros BPF (em nível de kernel) que a biblioteca libpcap implementa sua
função de captura passiva de tráfego com ótima performance (DERI, 2004). A libpcap é definida
em libpcap (2007, tradução) como:
Uma interface independente de sistema para captura de pacotes em nível de usuário. A libpcap provê um framework portável para monitoramento de redes em baixo nível. É utilizada em aplicações que incluem coleta estatística de rede como: Monitoramento de segurança, debugging de rede, etc. Quase sempre cada desenvolvedor de sistema desenvolvia uma interface diferente para captura de pacotes, e a partir do desenvolvimento de muitas ferramentas que apresentavam essa necessidade foi criada esta API para prover portabilidade e suprir a necessidade dos sistemas de capturas independente de sistema [...].
A libpcap é uma biblioteca desenvolvida em linguagem C e é executada em espaço de
usuário do sistema operacional, sendo desenvolvida para ser portável. A biblioteca cria uma
interface mais amigável para a utilização de funcionalidades de captura passiva e filtragem
disponibilizada pelo kernel de forma que possam ser acessadas pelos usuários. A dificuldade em se
utilizar diretamente com filtro BPF é que se deve trabalhar com assembly (MCCANNE &
JACOBSON, 1992) enquanto a libpcap disponibiliza um encapsulamento para estas expressões
para que possa ser utilizada uma linguagem mais alto nível tipo expressões regulares, (LIBPCAP,
2007).
Como exemplificado na Seção 2.3, a libpcap é utilizada como base de muitas aplicações,
contudo a libpcap vem se tornando um padrão nos sistemas abertos onde é largamente utilizada, não
só pela sua portabilidade como por sua flexibilidade e suporte a tecnologias de rede. Sua
portabilidade e suporte a tecnologia é demonstrada na Figura 11 onde pode-se observar quatro
classificações para o suporte à tecnologia em função do sistema operacional, onde: Sim, significa
que a tecnologia é suportada; Não, a tecnologia não é suportada; N/A, não se aplica pois a
implementação da interface de loopback do Windows é diferente dos sistemas Unix e NT, o suporte
a tecnologia ainda não foi testado. Apesar de algumas das tecnologias suportadas dependerem de
suporte por parte de hardware, driver de dispositivo ou até mesmo configurações de software
independente de tecnologia, a proposta é que se torne transparente para quem está fazendo uso de
suas funcionalidades (ETHEREAL, 2007).
-
21
802.11 ATM Ethernet FDDI Frame Relay Loopback Serial Token Ring AIX NT NT Sim NT NT NT NT Sim FreeBSD Sim NT Sim NT NT Sim NT Sim HP-UX NT NT Sim NT Não Não NT NT Irix NT NT Sim NT Não NT NT Não Linux Sim Sim Sim Sim Sim Sim Sim Sim Mac OS X Sim Não Sim Não Não Sim Sim Não NetBSD Sim NT Sim NT NT Sim NT Sim OpenBSD Sim NT Sim NT NT Sim NT Sim Solaris NT Sim Sim Sim Não Não Não Sim Tru64 UNIX NT NT Sim NT Não Sim NT NT Windows Sim NT Sim NT Não N/A Sim Sim
Figura 11. Portabilidade x tecnologias de nível 2 para a libpcap Fonte: Adaptado de Ethereal (2007)
Em função da facilidade de utilização, portabilidade e suporte a diversas tecnologias, a
libcap se tornou um padrão de captura de dados e seu formato de armazenamento uma referência
para ferramentas que gravam ou importam tráfego capturado. O formato de armazenamento é
simples, porém permite que todos os dados do tráfego capturado sejam utilizados por outras
aplicações de forma a fazer as decodificações dos protocolos encapsulados nos frames. Seu formato
é descrito na Figura 12.
Figura 12. Estrutura do arquivo de gravação da libpcap Fonte: Ethereal (2007)
O arquivo é delimitado por estruturas de dados com informações globais e referentes aos
pacotes. De acordo com Ethereal (2007) o início do arquivo contém o cabeçalho global (Global
Header) que é definido pela estrutura de dados da Figura 13.
typedef struct pcap_hdr_s { guint32 magic_number; /* magic number */ guint16 version_major; /* major version nu mber */ guint16 version_minor; /* minor version nu mber */ gint32 thiszone; /* GMT to local cor rection */ guint32 sigfigs; /* accuracy of time stamps */ guint32 snaplen; /* max length of ca ptured packets, in octets */ guint32 network; /* data link type * /
} pcap_hdr_t;
Figura 13. Estrutura de dados do campo Global Header Fonte: Ethereal (2007)
A estrutura da Figura 13 tem sete atributos de identificação global da captura armazenada no
arquivo e são descritos por Ethereal como:
-
22
• magic_number: Usado para detectar o formato do arquivo e ordenação dos bytes;
• version_major, version_minor: O número da versão do formato do arquivo;
• thiszone: O fator de correção (em segundos) em relação ao GMT (Greenwich Mean Time –
hora média de Greenwich)
• sigfigs: na teoria define a precisão do tempo de captura mas na prática todas as ferramentas
a definem como 0;
• snaplen: o valor máximo de tamanho para cada pacote; e
• network: tipo de tecnologia utilizada (data link layer type) . São exemplos Ethernet, Token
ring, FDDI (Fiber Distributed Data Interface – Interface de Dados Distribuídos em Fibra),
outros.
A segunda estrutura de dados, correspondente ao campo Packet Header (cabeçalho do
pacote), é definida por quatro atributos que compõem a struct pcaprec_hdr_s como mostra a Figura
14.
typedef struct pcaprec_hdr_s { guint32 ts_sec; /* timestamp second s */ guint32 ts_usec; /* timestamp micros econds */ guint32 incl_len; /* number of octets of packet saved in file */ guint32 orig_len; /* actual length of packet */ } pcaprec_hdr_t;
Figura 14. Estrutura de dados do campo Packet Header Fonte: Ethereal (2007)
Seus atributos identificam cada pacote capturado e armazenam as seguintes informações:
• ts_sec: Data e hora de quando o pacote foi capturado;
• ts_usec: Os micro segundos de quando o pacote foi capturado;
• incl_len: A quantidade de bytes que atualmente estão salvos no arquivo; e
• orig_len: O tamanho do pacote que está sendo capturado.
A última estrutura definida é a packet data (dados do pacote) onde são armazenados os
dados capturados da rede referentes ao pacote em uma estrutura de dados de tamanho definido por
orig_len.
-
23
Em sua essência existem duas versões para libcap sendo a libpcap para sistemas baseados
em Unix (Unix like11) e a winpcap para sistemas MS-Windows. A libpcap, em sua implementação
original, apesar de fazer uso das funcionalidades do filtro BPF e do mecanismo de captura de
pacotes do kernel, seu funcionamento em modo usuário está sujeito à concorrência por utilização
dos recursos da máquina com outras aplicações. Esta situação é exemplificada na Figura 15.
Figura 15. Estrutura libpcap x kernel x BPF Fonte: Adaptado de McCanne e Jacobson (1992)
Além das implementações em C, pode se encontrar versões wrapper, ou seja, que
encapsulam as funcionalidades da libpcap para que sejam utilizadas por linguagens de programação
de mais alto nível. É o caso da Net::Pcap, Jpcap, python-libpcap e Ruby/Pcap que são
encapsulamentos da libpcap para linguagem perl, java, python e ruby respectivamente,
(ETHEREAL, 2007). Mas além de implementações com foco em encapsulamento, tem-se trabalhos
voltados a alterações de funcionamento da biblioteca para melhor desempenho e levando em conta
detalhes de hardware, otimizações e configurações quanto ao sistema operacional, os quais serão
detalhados na Seção 2.5.
A estrutura de funcionamento dos métodos e chamadas para a biblioteca libpcap é simples e
bastante transparente. Sua utilização se dá na captura dos dados que estão chegando na camada de
enlace de dados (data link layer). Alguns parâmetros devem ser informados ao criar uma captura
como, por exemplo, o modo de operação da biblioteca (promíscuo ou não promíscuo) ou quanto ao
número de iterações de processamento e recepção dos pacotes. A API (Application Programming
Interface – interface de programação de aplicativos) fornecida pela libpcap define tipos específicos 11 Mais informações em: www.unix.org
-
24
de dados que facilitam a comunicação com a BPF e retornos das funções da API. Todas as
estruturas e definições para utilização da libpcap podem ser encontradas na página do
desenvolvedor12, no entanto estruturas básicas e muito utilizadas serão descritas a seguir de acordo
com Libpcap (2007).
typedef struct pcap pcap_t; typedef struct pcap_dumper pcap_dumper_t; typedef struct pcap_if pcap_if_t; pcap_t *cap; typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *); struct pcap_pkthdr { struct timeval ts; bpf_u_int32 caplen; bpf_u_int32 len; }; struct pcap_stat { u_int ps_recv; u_int ps_drop; u_int ps_ifdrop; }; char ebuf[PCAP_ERRBUF_SIZE];
Figura 16. Estruturas definidas para utilização da libpcap Fonte: Adaptado de Libpcap (2007)
As estruturas apresentadas na Figura 16 são comuns e muito utilizadas em implementações
utilizando a API libpcap. Contudo algumas das estruturas necessitam de um detalhamento em
função de sua importância, o que será feito com base no manual de utilização da biblioteca
(LIBPCAP, 2007):
• pcap_t *cap: Esta estrutura é um descritor de captura obtido através de
pcap_open_live() para que os pacotes da rede estejam disponíveis;
• pcap_pkthdr: É utilizada na recuperação de pacotes capturados tendo como
informações o tempo de recepção e tamanho do pacote;
• pcap_stat: As estatísticas de captura são retornadas através desta estrutura onde se
tem o número de pacotes recebidos e ignorados; e
• PCAP_ERRBUF_SIZE: É um vetor de caracteres utilizado para retornar os erros das
funções.
Como exemplo de utilização da libpcap pode-se observar o código da Figura 17. É um
fragmento de uma aplicação desenvolvida em linguagem C onde se captura 1000 bytes (segundo
parâmetro da função de criação do descritor de captura handle) e ainda se faz uso dos filtros de
12 www.tcpdump.org
-
25
pacotes através da chamada pcap_compile onde a BPF compila o filtro com a expressão passada
como parâmetro.
#include pcap_t *handle; /* Session handle */ char dev[] = "rl0"; /* Device to sniff on */ char errbuf[PCAP_ERRBUF_SIZE]; /* Error string */ struct bpf_program fp; /* The compiled filter ex pression */ char filter_exp[] = "port 23"; /* The filter expr ession */ bpf_u_int32 mask; /* The netmask of our sniffing device */ bpf_u_int32 net; /* The IP of our sniffing devic e */ if (pcap_lookupnet(dev, &net, &mask, errbuf) == - 1) { fprintf(stderr, "Can't get netmask for device %s \n", dev); net = 0; mask = 0; } handle = pcap_open_live(dev, BUFSIZ, 1, 1000, err buf); if (handle == NULL) { fprintf(stderr, "Couldn't open device %s: %s\n", somedev, errbuf); return(2); } if (pcap_compile(handle, &fp, filter_exp, 0, net) == -1) { fprintf(stderr, "Couldn't parse filter %s: %s\n" , filter_exp, pcap_geterr(handle)); return(2); } if (pcap_setfilter(handle, &fp) == -1) { fprintf(stderr, "Couldn't install filter %s: %s\ n", filter_exp,pcap_geterr(handle)); return(2); }
Figura 17. Fragmento de programa utilizando a libpcap Fonte: Adaptado de Libpcap (2007)
Muitos são os fatores que influenciam no desempenho da captura passiva de pacote
utilizando a libpcap. Na próxima Seção serão detalhados, apartir de trabalhos correlatos, alguns
possíveis fatores e características de hardware e software que podem afetar o desempenho da
captura de pacotes.
2.5 Fatores que influenciam o desempenho da libpcap
Com a maior disponibilidade de banda e com o crescente aumento na quantidade de tráfego
causado pela diversidade de conteúdo e aplicações com suporte a multimídia, as estações de
trabalho e os sistemas servidores passaram a produzir mais tráfego exigindo mais desempenho da
libpcap. Muitos podem ser os fatores relevantes em se tratando de melhoria de desempenho de uma
biblioteca de captura passiva de tráfego, sendo alguns destes descritos a seguir.
2.5.1 Arquitetura e características de hardware
Como o foco do trabalho é a captura passiva de pacotes, o desempenho da interface de rede
é um dos fatores a serem observados. A comunicação via rede é caracterizada como uma operação
-
26
de I/O (input/output – Entrada e saída), portanto as características que devem ser consideradas
quanto ao desempenho da libpcap estão ligadas à estrutura de I/O do computador. Segundo
Tanenbaum (2003), o sistema de entrada e saída é uma das partes principais que compõem um
computador o qual concorre pela utilização dos recursos como barramento e processador. Muitos
são os barramentos existentes nos computadores da atualidade, no entanto, o uso do barramento
assim como uso do processador não é de exclusividade do sistema de I/O o que pode representar um
gargalo de acordo com a concorrência em um dado instante.
Em função da possível concorrência, Tanenbaum (2003) trata os barramentos em função de
seus árbitros (controladores) que definem a relação entre utilização do canal de comunicação e
pedidos de interrupção por parte dos dispositivos ao processador. Segundo a definição de
Silberschatz, Galvin e Gagne (2000), uma das formas de acesso a I/O ocorre da seguinte forma:
A CPU carrega os registradores adequados dentro da controladora de dispositivo. A controladora, por sua vez, examina o conteúdo desses registradores para determinar que ação deve ser tomada.[...] Uma vez concluída a ação a controladora de dispositivo informa a CPU que terminou a operação. Essa comunicação é feita disparando uma interrupção.
No entanto esta é uma característica que deve ser observada com cautela pois como atualmente os
computadores dispõem de barramentos internos muito velozes, na ordem de 800MHz (INTEL,
2007a), e os dispositivos de rede na ordem de Gbps (gigabits por segundo) uma interface de rede
operando próximo da sua capacidade de transferência geraria um número enorme de interrupções,
causando com isso um overhead em função das trocas de contexto necessárias. Esta é uma condição
onde o sistema não está em deadlock mas não consegue progredir quanto ao atendimento das
tarefas. Esta condição é conhecida como receive livelock (MOGUL & RAMAKRISNAN, 1996). A
situação conhecida como livelock pode ser evitada com alterações no kernel do sistema operacional,
explicada na próxima seção, ou através de dispositivos que implementem, em hardware, algum
controle para a grande freqüência de interrupções. É o caso de algumas placas da Intel (INTEL,
2007b) que implementam, em nível de hardware, uma tecnologia denominada interrupt moderation
(moderação de interrupção). Segundo Intel (2007b, tradução) “interrupt moderation reduz o número
de interrupções de processamento e permite a partir da tecnologia Gigabit EtherChannel garantir
mais de 16Gb/s de banda em modo half duplex.[...]”. O pedido de interrupção só é gerado para o
processador quando o buffer de recebimento da placa de rede estiver cheio ou no caso de
transmissão de pacotes únicos. A Figura 18 demonstra o funcionamento desta tecnologia.
-
27
Figura 18. Diagrama de pedido de interrupção (interrupt moderation) Fonte: Adaptado de Intel (2007b)
Com a incorporação de recursos avançados aos hardwares de interface de redes, muitas
foram as possibilidades de melhoria quanto às implementações e configurações específicas destes
dispositivos junto ao sistema operacional. Segundo Deri (2004), alguns trabalhos, os quais realizam
otimizações de implementação em nível de kernel, sugerem melhorias quanto ao método de captura
utilizado pela libpcap a partir de mudanças no sistema original de captura. Algumas destas
melhorias e seus respectivos ganhos serão apresentados na próxima seção.
2.5.2 Otimizações de software (kernel e método de captura)
Apesar da libpcap implementar a mesma API em diferentes plataformas existe uma
diferença entre estas com relação ao desempenho. Contudo, existem trabalhos em torno de três
técnicas relacionadas à melhoria de desempenho e aproveitamento da captura passiva de pacotes
baseada na API libpcap. Estas três técnicas são: device polling, NAPI (new API) e PF_RING. Cada
uma destas técnicas serão descritas nesta seção como fatores ligados à melhoria de desempenho da
biblioteca em estudo.
Dependendo do sistema operacional, a libpcap implementa um dispositivo virtual onde os pacotes são lidos de uma aplicação em espaço de usuário concorrendo com demais aplicações.[...] Em condições de pouco tráfego não existem diferenças entre as plataformas, no entanto, em ambientes de alta vazão de tráfego a situação muda significativamente (DERI, 2004, tradução).
Deri (2004) apresenta quadros comparativos em relação a captura de pacotes pela libpcap.
Uma dessas comparações pode ser vista na Tabela 1, no qual o ambiente de testes descrito é
-
28
baseado em computadores padrão de mercado13. Esta é uma comparação importante, pois em um
mesmo ambiente percebe-se o baixo aproveitamento da captura de pacotes conseguido pela
biblioteca.
Tabela 1: Percentual de captura de pacotes
Aplicação de captura de Tráfego Linux 2.4.x FreeBSD 4.8 Windows 2000 libpcap padrão 0,2% 34% 68% libpcap mmap 1,0% - - Módulo de Kernel (Netfilter) 4,0% - -
Fonte: Adaptado de Deri (2004)
Os resultados comparativos apresentados por Deri consistem no percentual de captura de
pacotes em relação ao tráfego experimental gerado. Neste caso, libpcap padrão representa a
implementação padrão da biblioteca, libpcap mmap uma versão especial da biblioteca que faz uso
da chamada de sistema mmap() para passar os pacotes capturados para o espaço de usuário. Esta
implementação difere da implementação padrão por permitir que regiões de memórias, neste caso
utilizadas pelo Kernel, sejam mapeadas e utilizadas em espaço de usuário. A configuração Módulo
de kernel implementa um módulo de kernel baseado no netfilter14. Este módulo difere da
implementação padrão por fazer com que os pacotes sejam filtrados pelo próprio kernel. Ressalta-se
que o experimento com esta opção representou uma melhoria significativa de performance mas com
muitos pacotes perdidos o que mostra que maior parte do tempo ainda é perdido para mover os
pacotes da placa de rede para o kernel e não do kernel para o espaço de usuário. Os resultados para
Windows 2000 foram executados com a winpcap nos quais foram obtidos os melhores resultados
(DERI, 2004). Esse resultado do MS Windows em comparação ao Linux e FreeBSD se dá pela
otimização da Winpcap em termos de estrutura de armazenamento de pacotes em nível de kernel
(DEGIOANNI et al, 2003). O baixo desempenho alcançado pelo sistema operacional linux se deu
em função da utilização do kernel versão 2.4, o qual não contava com as otimizações promovidas
pela NAPI, como device polling e reimplementação da API do sistema para manipulação dos dados
da rede.
Deri (2004) afirma que o baixo desempenho da biblioteca demonstrado na Tabela 1 se deu
em função de uma situação conhecida como livelock interrupt, onde em função da implementação
13 Gerador de pacotes: Dual 1.8 GHz Athlon, rede 3Com 3c59x. e VIA C3 533 MHz, rede Intel 100Mbit como cliente. 14 Informações sobre netfilter em: www.netfilter.org
-
29
do driver de dispositivo da placa de rede é gerada uma interrupção para o processador sempre que
este dispositivo precisar de atenção. Em casos de tráfego elevado o sistema operacional gasta mais
tempo com pedidos de interrupção do que atendendo outras tarefas. Com isso surge uma das
melhorias voltadas ao desempenho da libpcap denominada device polling. Rizzo (2001, tradução)
define device polling como “uma técnica para manipulação de dispositivos que não são confiáveis
quanto aos pedidos de interrupção para utilização de CPU. [...] O modo polling trabalha fazendo
com que o sistema operacional verifique periodicamente os dispositivos para verificar se estes
precisam de atenção e invoca a manipulação de acordo com esta necessidade.” Isso faz com que o
overhead causado pela troca de contexto diminua pois o sistema pode escolher em atender o
dispositivo somente quando já estiver com o contexto correto, ou seja o tempo gasto para
manipulação destes dispositivos podem se manter sob o controle do sistema operacional (RIZZO,
2001). Esta funcionalidade é implementada pelo FreeBSD a partir da versão 4.5, já o Linux
introduziu a melhoria juntamente com NAPI, a partir da versão 2.6 do kernel, no entanto, esta é
dependente do driver de dispositivo de rede que deve possuir suporte a polling para que seja
explorada tal funcionalidade (DERI, 2004). Salim, Networks e Olsson (2001) definem que o
hardware utilizado com intuito de solucionar o problema de livelock interrupt deve possuir suporte
a duas tecnologias:
• Suporte a DMA (Direct memory access – Acesso direto a memória) ou memória RAM
(Random Access Memory – Memória de acesso randômico) disponível para armazenar
os pacotes em pseudo-dispositivos (software devices);
• Permitir desligamento das interrupções do hardware.
A introdução da técnica NAPI no kernel Linux foi essencial para solucionar, de forma
genérica, a situação de baixo desempenho até então encontrada. Seu funcionamento, segundo
Salim, Networks e Olsson (2001), tem por base tratar as seguintes questões:
• remover a reordenação de pacotes em SMP (Symmetric Multi-Processing –
multriprocessamento simétrico);
• reduzir o overhead causado pela troca de contexto com os pedidos de interrupção
tradicionais;
• remover ou reduzir as alocações injustas;
• promover o balanceamento entre latência e throughput; e
-
30
• não depender de hardware específico (apenas de tecnologias já normalmente
encontradas).
Como solução veio a proposta de um sistema misto (Figura 18), na qual é utilizada a
combinação dos mecanismos de interrupção e polling. De forma dinâmica, o primeiro mecanismo é
utilizado em situações de pouca carga enquanto o polling entra em prática em grandes cargas de
requisições da interface de rede. Essa flexibilidade é conseguida em função do MLFFR (Maximum
Loss Free Forwarding Rate – índice máximo de repasse livre de perdas) (SALIM, NETWORKS &
OLSSON, 2001). A Figura 19 demonstra o funcionamento e o caminho dos dados implementado
pela técnica NAPI.
Figura 19. Caminho dos dados da técnica NAPI Fonte: Adaptado de Salim, Networks e Olsson (2001)
A melhoria de desempenho conseguida pela nova implementação proposta (NAPI) pode ser
observada na Figura 20, em que Deri (2004) em seus experimentos montou um gráfico comparativo
entre sistemas de captura de pacotes com a libpcap confrontando polling com non-polling (sistemas
sem polling).
-
31
Figura 20. Comparativo de performance de captura: polling vs. non-polling Fonte: Traduzido de Deri (2004).
Além da implementação NAPI através da técnica de device polling, como proposta de
melhoria de desempenho para interfaces de redes para captura passiva de tráfego através da libpcap,
Deri (2004) propôs melhorias para captura de pacotes através da observação quanto ao tráfego de
informações que se fazia necessário entre a biblioteca libpcap (em espaço de usuário) e as estruturas
em nível de kernel. “Muito tempo é gasto movendo os pacotes do adaptador de rede até o espaço de
usuário através do kernel.” (DERI, 2004, tradução). Com isso um novo modelo de captura de
pacotes foi proposto por Deri (2004) contemplando os