anÁlise de desempenho da biblioteca libpcap Área de …siaibib01.univali.br/pdf/ramices dos santos...

139
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

Upload: others

Post on 04-Feb-2021

4 views

Category:

Documents


0 download

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