Ana Sofia Bernardo Gonçalves
Licenciada em Engenharia Informática
Monitorização de Sistemas Distribuídos em
Redes WiFi
Dissertação para obtenção do Grau de
Mestre em Engenharia Informática
Orientador: Prof. Doutor Vitor Manuel Alves Duarte,
Prof. Auxiliar, Universidade Nova de Lisboa
Presidente:
Arguente:
Vogal:
Júri:
Prof. Doutor Fernando Pedro Reino da Silva Birra
Prof. Doutor Rodolfo Alexandre Duarte Oliveira
Prof. Doutor Vitor Manuel Alves Duarte
Junho, 2015
Monitorização de Sistemas Distribuídos em Redes WiFi
c Ana Sofia Bernardo Gonçalves, Faculdade de Ciências e Tecnologia, UniverCopyright sidade Nova de Lisboa
A Faculdade de Ciências e Tecnologia e a Universidade Nova de Lisboa têm o direito,
perpétuo e sem limites geográficos, de arquivar e publicar esta dissertação através de
exemplares impressos reproduzidos em papel ou de forma digital, ou por qualquer outro
meio conhecido ou que venha a ser inventado, e de a divulgar através de repositórios
científicos e de admitir a sua cópia e distribuição com objectivos educacionais ou de
investigação, não comerciais, desde que seja dado crédito ao autor e editor.
Aos meus pais
A GRADECIMENTOS
Gostaria desde já apresentar os meus agradecimentos aos que me apoiaram durante a
elaboração desta dissertação.
Em primeiro lugar, gostaria de agradecer ao meu orientador, Prof. Doutor Vitor Manuel
Alves Duarte, pela disponibilidade e paciência demonstradas ao longo deste tempo. O seu
apoio foi crucial para a conclusão deste trabalho.
À Faculdade de Ciências e Tecnologia da Universidade Nova de Lisboa, em particular
ao Departamento de Informática, por me ter fornecido as bases essenciais para a minha
formação, pelas pessoas que aqui conheci e onde passei a grande parte do meu tempo
nestes últimos anos.
À minha família, principalmente aos meus pais, pelo tempo, dedicação e esforço que
despenderam para me proporcionar melhores oportunidades de vida.
Aos meus amigos, pelas trocas de ideias, apoio e diversão nos bons e maus momentos.
Em especial ao Alexandre, pelo apoio e pela paciência necessária nestes últimos meses.
vii
R ESUMO
As aplicações distribuídas são particularmente difíceis de depurar pelo facto da sua
execução necessitar de interações, de redes de computadores, assíncronas. Acresce ainda o
facto de o seu desempenho depender, não só de fatores internos a cada um dos processos,
mas também a problemas de comunicação da rede, como congestionamento, fraca ou
elevada latência ou perda de pacotes. Esta dificuldade agrava-se quando uma aplicação
distribuída executa através de uma rede WiFi, acrescentando desafios à gestão da qualidade da rede por serem mais instáveis e lentas que as redes cabladas. Esta problemática
pode ser ultrapassada através de ferramentas que, através da monitorização das interações
da rede, e sem as perturbar, possibilitem a depuração e avaliação do desempenho da
aplicação distribuída que está em execução.
Existem já diversas ferramentas de monitorização e análise de tráfego, porém estas
ferramentas não possibilitam a fácil análise das interações geradas apenas pela aplicação e
não têm em consideração os desafios inerentes à compreensão da comunicação através de
redes sem fios, mais concretamente a norma IEEE 802.11
O objetivo desta dissertação consiste em apresentar um conjunto de metodologias
para avaliação de um algoritmo distribuído, através da monitorização de pacotes 802.11
gerados pela aplicação distribuída.
Palavras-chave: Monitorização, redes Wifi, depuração, avaliação, aplicações distribuídas
ix
A BSTRACT
Distributed applications are particularly difficult to debug because their implementation requires asynchronous computer network interactions, and their performance
depends not only on internal factors to each of the processes, but also depends on the
network problems, such as traffic congestion, low or high latency or packet loss. This
difficulty is aggravated when a distributed application is running over a wireless network, given to the fact that WiFi networks are more unstable and slower than wired
networks, adding challenges to the management of network quality. This problem can be
overcome through tools that, by monitoring network interactions and without disturbing
them, enable debugging and performance evaluation of the distributed application that is
executing.
There are already several tools for traffic monitoring and analysis, but these existing
tools do not allow an easy analysis of network interactions generated by the application
and do not help to undertand wireless communication patterns.
The goal of this thesis is to present a set of methods to evaluate a distributed algorithm,
by monitoring 802.11 packets generated by the interactions of a distributed application.
Keywords: Monitoring, wifi networks, debugging, evaluation, distributed applications
xi
C ONTEÚDO
Conteúdo
xiii
Lista de Figuras
xv
Lista de Tabelas
xvii
1
Introdução
1
1.1
Contexto e motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.2.1
Implementação de um sistema de análise . . . . . . . . . . . . . . .
5
1.2.2
Estudo de um algoritmo . . . . . . . . . . . . . . . . . . . . . . . . .
5
Estrutura do documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.3
2
Monitorização de Redes
7
2.1
Redes WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.1.1
Serviços de Sistema de Distribuição . . . . . . . . . . . . . . . . . .
8
2.1.2
Serviços de Estação . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.1.3
Controlo de Acesso ao Meio . . . . . . . . . . . . . . . . . . . . . . .
10
2.1.4
Gestão de Energia . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.1.5
Tipos de Pacotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
Monitorização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
2.2.1
Biblioteca PCap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
Ferramentas de Captura . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.3.1
TCPDump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.3.2
Wireshark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.3.3
Wireshark para Sistemas Distribuídos . . . . . . . . . . . . . . . . .
22
2.3.4
Monitorização de tráfego de rede de um processo com base no PCap 22
2.3.5
Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
2.3
3
23
Algoritmos de Consenso
25
3.1
Definição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.2
Paxos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.3
Turquois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.4
Consenso Multi-Valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
xiii
CONTEÚDO
3.5
4
6
30
Sistema de Análise
33
4.1
Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.2
Captura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
4.3
Análise de Tráfego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.3.1
Classificação de Tráfego . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.3.2
Informação sumária . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
Visualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.4.1
Versão Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.4.2
Versão Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.4
5
Análise do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Análises Efetuadas
43
5.1
Ambiente de testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.2
Análise de capturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
5.3
Análise de tempos de execução . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.4
Análise de tráfego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
5.5
Análise de tráfego extra . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
Conclusões
57
6.1
Objetivos e metas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
6.2
Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
6.3
Trabalho Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
Bibliografia
63
xiv
L ISTA DE F IGURAS
2.1
Exemplificação de um conjunto de serviços estendido . . . . . . . . . . . . . .
8
2.2
Exemplificação de um conjunto de serviços independente . . . . . . . . . . . .
9
2.3
Representação do protocolo CSMA/CA1 . . . . . . . . . . . . . . . . . . . . .
12
2.4
2.5
Exemplificação do protocolo
RTS/CTS2
. . . . . . . . . . . . . . . . . . . . . .
DCF com implementação dos protocolos CSMA/CA e
superframe4
RTS/CTS3
13
. . . . . . .
14
2.6
Estrutura de uma
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.7
Estrutura de um pacote ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.8
Elementos envolvidos na captura de pacotes5 . . . . . . . . . . . . . . . . . . .
19
3.1
Execução correta do algoritmo Paxos . . . . . . . . . . . . . . . . . . . . . . . .
28
4.1
Arquitetura da rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.2
Exemplo de tráfego de rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.3
Versão Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.4
Versão Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.5
Gráfico da versão web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.6
Informação agregada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.7
Diagrama do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.8
Gráfico temporal da execução do algoritmo para cada tipo de pacote . . . . .
41
4.9
Gráfico temporal da execução do algoritmo para cada nó interveniente . . . .
41
4.10 Gráficos de tráfego acumulado . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5.1
Falha na receção do pacote INIT no nó 192.168.1.101 . . . . . . . . . . . . . . .
45
5.2
Falha na receção do pacote INIT no nó 192.168.1.101, com inclusão da porta 12347 45
5.3
Falha na receção do pacote VALUE nos nós 192.168.1.101 e 192.168.1.107 . . .
45
5.4
Caso de erro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.5
Caso de retransmissão de pacote . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.6
Gráfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5.7
Gráfico com inclusão da porta 12345 . . . . . . . . . . . . . . . . . . . . . . . .
47
5.8
Gráfico com zoom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.9
Gráfico com perda de pacotes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
5.10 Gráfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.11 Evolução dos tempos médios de execução, sem broadcast adicional . . . . . . .
50
xv
L ISTA DE F IGURAS
5.12 Evolução dos tempos médios de execução, com broadcast adicional . . . . . .
50
5.13 Evolução dos tempos mínimos de execução, sem broadcast adicional . . . . . .
51
5.14 Evolução dos tempos mínimos de execução, com broadcast adicional . . . . . .
51
5.15 Execução do algoritmo com 6 nós e 10ms de intervalo, sem broadcast adicional
54
5.16 Execução do algoritmo com 6 nós e 40ms de intervalo, sem broadcast adicional
54
xvi
L ISTA DE TABELAS
2.1
Tipo de informação apresentada sobre cada pacote . . . . . . . . . . . . . . . .
21
5.1
Melhores tempos entre envio de mensagens . . . . . . . . . . . . . . . . . . . .
51
5.2
5.3
Tráfego total para cada tempo entre envio de mensagens e respetivo
no
de nós
Tráfego da aplicação para cada tempo entre envio de mensagens e respetivo
52
no
de nós . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
5.4
Tráfego de uma execução com 5ms, com broadcast adicional . . . . . . . . . . .
53
5.5
Tráfego da aplicação, com injeção de tráfego extra, sem broadcast adicional . .
53
6.1
Tráfego da aplicação, sem broadcast adicional . . . . . . . . . . . . . . . . . . .
59
6.2
Tráfego da aplicação com injeção de tráfego extra, sem broadcast adicional . .
60
xvii
CAPÍTULO
1
I NTRODUÇÃO
1.1
Contexto e motivação
Com o aparecimento e crescimento das redes de computadores e da Internet, existe
uma crescente necessidade de modelos de cooperação e de mecanismos que permitam
o acesso e a partilha de recursos, independentemente da sua localização. Os sistemas
distribuídos surgem com a intenção de tirar partido dessa partilha. Permite-se assim
que utilizadores e aplicações acedam e partilhem recursos remotos de forma eficiente e
controlada, beneficiando também de maior capacidade computacional e armazenamento
disponibilizado.
Por definição, um sistema distribuído é uma coleção de computadores independentes
que o utilizador, idealmente, perceciona como um sistema único e coerente [33]. Isto é,
apesar da heterogeneidade e variedade de computadores, um sistema distribuído tem
que ser capaz de executar de modo determinístico e fiável, e a ser percecionado como
um só. Para tal, é necessário que os computadores intervenientes colaborem entre si.
Esta colaboração poderá ser feita, por exemplo, através de modelos de programação ou
middlewares que permitam a troca de informação.
Um sistema distribuído visa cumprir diversos objetivos. Contudo, apesar de apresentarem vantagens, comparativamente aos sistemas centralizados, estes objetivos aumentam a
complexidade dos sistemas distribuídos. Desta forma, existem novos desafios e problemas
que necessitam ser resolvidos. Neste contexto, surgem então os algoritmos distribuídos,
para resolver as problemáticas inerentes à computação e sistemas distribuídos. Um algoritmo distribuído consiste num algoritmo que executa em computadores independentes
que colaboram entre si. Estes computadores poderão executar considerando a possibilidade de falhas de alguns dos intervenientes. Alguns dos problemas que são resolvidos
com algoritmos distribuídos são, por exemplo, a eleição de líder, pesquisa distribuída,
geração de spanning-tree, exclusão mútua e alocação de recursos [21].
1
CAPÍTULO 1. INTRODUÇÃO
Um dos maiores problemas de computação distribuída é o estabelecimento de consenso. O problema de consenso requer que um conjunto de processos concorde com um
determinado valor. Para tal, é necessário que exista um quórum de processos a decidir um
dado valor v. Um algoritmo de consenso terá assim que funcionar por várias fases, garantindo que à medida que o algoritmo avança, exista um quórum de processos em sintonia.
Para tal é necessário que cada processo comunique o seu estado aos restantes, tendo que
comunicar periodicamente e/ou à medida que avança para cada fase do algoritmo. Este
facto leva a que haja um número significativo de interações na rede.
O comportamento de um algoritmo distribuído é, por norma, difícil de prever e verificar. Isto porque, mesmo que a sua implementação seja simples, o facto da sua execução
correr paralelamente em diversos processos, com fases intercaladas de forma indeterminada, implica que possam haver diferentes comportamentos do algoritmo para os mesmos
valores de entrada. Além disso, estes algoritmos enfrentam algumas incertezas que envolvem as condições da rede, como por exemplo a) falhas de comunicação; b) ordem de
mensagens desconhecida; c) incerteza no tempo de entrega de mensagens; e d) vários nós
a executar em simultâneo, começando em tempos diferentes e a trabalhar em velocidades
diferentes [21]. Devido a estas incertezas, ao não-determinismo, e às inúmeras interações
que passam pela rede, torna-se difícil verificar o funcionamento, correto ou incorreto,
de um algoritmo. Isto é, torna-se difícil avaliar o desempenho ou a causa de erros de
um algoritmo. Entre estas situações encontram-se problemas provocados por fenómenos
de saturação, ou interferências entre diversos sistemas que partilham a rede. Este facto
dificulta o processo de desenvolvimento e monitorização das aplicações.
Considere-se o exemplo do trabalho de Almeida[1]. Este trabalho consistiu no desenho
de um protocolo de encaminhamento, tolerante a intrusões, com consenso de dados numa
rede de sensores sem fios. Este trabalho recorreu a um protocolo de encaminhamento,
MINSENS++ [34], que introduz tolerância a intrusões através da existência de múltiplos
caminhos disjuntos, para que, em caso de um nó corrompido, esse nó não prejudique a
restante rede. As redes de sensores são constituídas por diferentes tipos de nós, existindo
um tipo de nós, denominado estações de base, que contém maior capacidade computacional que os restantes. No âmbito deste trabalho, são estes os nós responsáveis por calcular
as árvores de encaminhamento. O protocolo MINSENS++ pressupõe que estes nós podem
ficar comprometidos, pelo que é necessário recorrer a resoluções por consenso para casos
de divergência de valores entre estações de base da mesma rede de sensores.
Parte do desenvolvimento deste trabalho foi dedicado a um estudo do desempenho
do algoritmo de consenso utilizado. Neste estudo foram apontadas diversas dificuldades
em avaliar a solução e o impacto que esta tem na rede. Nas conclusões deste estudo são
apresentados problemas de performance e de escalabilidade que se mantêm inexplicáveis.
Isto porque não existem métodos que permitam analisar as interações, via rede, à medida
que o algoritmo é desenvolvido. Nota-se então a necessidade de depurar as comunicações
de rede, de forma a perceber o impacto que esta poderá ter no algoritmo, ou vice-versa. A
mesma necessidade é notada nas mais variadas situações e já foi alvo de alguns trabalhos
2
1.1. CONTEXTO E MOTIVAÇÃO
no Departamento de Informática [7], [23].
A par com a evolução dos sistemas e algoritmos distribuídos, o uso das redes sem fios
também tem vindo a aumentar. Com o aparecimento de dispositivos móveis, como computadores portáteis, sensores, telemóveis e tablets, existe a necessidade destes dispositivos
se ligarem a uma rede independentemente da sua localização. Com velocidades cada vez
maiores, o uso de redes WiFi, é de importância cada vez maior. No entanto, ao satisfazer
esta necessidade, existe um acréscimo na complexidade da rede e a importância de lidar
com os problemas antes apontados aos sistemas distribuídos.
Uma rede WiFi funciona através do uso de ondas rádio, pelo que este meio de comunicação tem a particularidade de ser partilhado. Como tal, é possível que vários dispositivos
tentem aceder ao mesmo meio. Devido a este facto, uma rede WiFi é suscetível de sofrer
interferências internas, assim como externas à rede e que prejudicam o desempenho da
mesma. Estas interferências podem ser provocadas por outros dispositivos rádio (telefones sem fios ou micro-ondas1 , por exemplo) ou outras redes que comuniquem através
do mesmo canal de rádio. Numa rede WiFi podem também ocorrer colisões de pacotes,
provocadas pelos nós da mesma. Estas colisões ocorrem quando mais do que um nó tenta
aceder ao meio em simultâneo. Apesar de não ser possível controlar as interferências
externas, existem mecanismos de controlo de acesso ao meio, de modo a evitar que dois
dispositivos, da mesma rede, acedam em simultâneo. Estes mecanismos têm como objetivo
minimizar as colisões, sendo responsáveis por decidir que estação pode aceder ao meio.
No entanto, este processo cria um certo overhead na rede. Este overhead e as interferências
externas, tornam uma rede 802.11 mais lenta do que seria expectável, degradando-se com
a utilização.
Uma rede WiFi pode também ser alvo de um ou mais clientes maliciosos. Estes clientes
podem alterar as suas definições de modo a consumirem grande parte da largura de
banda da rede, prejudicando os restantes clientes e o desempenho total da rede. Há que
considerar também o facto de uma rede 802.11 ser mais volátil, devido à movimentação
das estações, existe uma alteração constante do grafo da rede. Estes fatores tornam as
redes 802.11 mais imprevisíveis e instáveis, podendo ter períodos de inúmeras perdas de
pacotes, devido a colisões ou congestionamento da rede.
Considere-se assim um algoritmo de consenso executado num sistema distribuído
numa rede WiFi. As incertezas que este enfrenta são agravadas pela instabilidade e
imprevisibilidade da rede.
Este acréscimo na complexidade da rede dificulta ainda mais a verificação e avaliação
da execução real de um algoritmo distribuído. Em muitos casos, estes fatores não podem
ser resolvidos com técnicas já conhecidas de verificação do código. Isto deve-se ao facto
do desempenho observado pode ser degradado por fenómenos externos aos próprios
algoritmos que se pretendem avaliar. Uma abordagem passa por monitorizar as próprias
interações e o tráfego nessas redes. Esta monitorização não deverá, idealmente, interferir
1 Os
telefones sem fios e micro-ondas funcionam no mesmo intervalo de frequências que algumas redes
WiFi
3
CAPÍTULO 1. INTRODUÇÃO
na rede ou nos programas em execução. Desta forma, será possível compreender melhor e
avaliar o que realmente ocorre durante o funcionamento desses algoritmos, e despistar
situações que de outro modo se não seriam detetadas.
Existem trabalhos feitos com o intuito de controlar e melhorar a utilização e qualidade
das redes WiFi que mostram a necessidade que existe de gerir a instabilidade deste tipo de
redes. WiFox [9], por exemplo, conclui que os pontos de acesso constituem um bottleneck na
rede, por não terem vazão para tratar dos pedidos de todas as estações. Com esta conclusão
os autores propuseram a priorização dos pacotes do ponto de acesso. Naturalmente, após
completar a solução proposta, os autores necessitaram de voltar a estudar o rendimento
da rede, utilizando novamente a monitorização de tráfego.
Nota-se assim, uma vez mais, a necessidade de um ambiente e regime controlado que
permita a análise do impacto que um algoritmo distribuído tem na rede, principalmente
no contexto das redes 802.11 pela sua instabilidade e imprevisibilidade. Um elemento
importante deste regime, será uma ferramenta capaz de monitorizar e distinguir o tráfego
gerado pelo algoritmo do restante, assim como o tráfego gerado pelo protocolo 802.11. Para
tal, terá que se considerar todo o tráfego gerado numa rede WiFi para controlo do meio,
filtrando este tráfego que se torna desnecessário para a compreensão do comportamento
da rede, mas que poderá ser útil, a nível da aplicação, para obter alguns dados sobre o
estado da rede. Através desta ferramenta será então possível angariar um conjunto de
dados que possam dar uma visão generalizada do impacto que o algoritmo poderá ter
na rede, ou vice-versa, e o seu desempenho, assim como das influências externas ou de
outros nós da rede.
1.2
Objetivos
Através das necessidades e dificuldades passadas em alguns dos trabalhos anteriormente
referidos, justifica-se a existência de um conjunto de metodologias que ajude na depuração,
e avaliação de um algoritmo e do seu impacto na rede. Devido ao uso recorrente de redes
WiFi e das complicações que lhes são inerentes, esta dissertação propõe focar-se, como caso
de estudo, em algoritmos distribuídos que usufruem de uma rede sem fios, recorrendo a
técnicas de monitorização de tráfego WiFi. No entanto, qualquer sistema que gere tráfego
na rede poderá beneficiar deste trabalho.
O objetivo desta dissertação passa por auxiliar a implementação de algoritmos distribuídos com um conjunto de métodos que permitam avaliar e melhorar os tempos de
execução do mesmo, recorrendo a técnicas de monitorização sem perturbar o sistema avaliado. Para tal, pretende-se focar na captura de pacotes 802.11, proporcionando um meio
de avaliação das condições do algoritmo e da rede. Como complemento a este conjunto de
métodos, pretende-se desenvolver um sistema de análise do tráfego da rede. Desta forma,
existem duas fases de elaboração desta dissertação. Estas fases são explicadas de seguida.
4
1.2. OBJETIVOS
1.2.1
Implementação de um sistema de análise
Pretende-se criar um sistema de análise que permita avaliar as condições da rede. Isto
é, através da monitorização das execuções do algoritmo, pretende-se que seja possível
analisar o estado da rede e, consequentemente, tirar conclusões em relação aos tempos
de execução vs condições da rede. Com este objetivo em mente, este sistema requer a
existência de três componentes:
Captura de Tráfego.
Este componente deverá ser responsável pela captura de pacotes, por nós independentes do sistema em análise. Mais especificamente, este componente deverá
ser capaz de capturar a informação do tráfego relevante, possivelmente baseado
em ferramentas já existentes, como o TCPDump e/ou a biblioteca PCap [36], sem
interferir e perturbar a rede e aplicação.
Análise de Tráfego.
O componente de análise de tráfego deverá ser responsável pela classificação e
análise da informação recolhida. Esta análise terá como vista a identificação dos
vários tipos de mensagens, seu número, volume e latência, ao longo do tempo.
Visualização.
Este componente deverá ser responsável pela apresentação da análise efetuada
e correlação com a aplicação. Esta correlação, ao longo da execução do algoritmo
distribuído e suas mensagens, tem como vista a explicação do desempenho e latência
observada pela aplicação. Deverá ainda ser possível detetar as perturbações sofridas
devido a outro tráfego, interferências ou fenómenos de saturação.
1.2.2
Estudo de um algoritmo
O trabalho de Almeida refere como trabalho futuro a elaboração de testes mais exaustivos
ao algoritmo de consenso. Deste modo, e aproveitando esta necessidade, pretende-se
estudar a implementação de um algoritmo base deste trabalho [25]. Este algoritmo será
utilizado para avaliação do sistema de análise implementado, mas também como base de
estudo para o conjunto de metodologias futuramente apresentados.
Tem-se como objetivo apresentar um conjunto de métodos que, podendo recorrer ao
sistema de análise, consigam avaliar o funcionamento do algoritmo de consenso. Pretendese estudar o comportamento e desempenho do algoritmo em várias das configurações
que antes foram deficientemente avaliadas. Através deste conjunto de metodologias
tenciona-se completar os seguintes estudos:
1. Estudo do comportamento do algoritmo com recurso ao sistema de análise. Este
estudo tenciona mostrar como é que o comportamento do algoritmo varia, dependendo do tempo de execução.
5
CAPÍTULO 1. INTRODUÇÃO
2. Estudo do desempenho do algoritmo com recurso à execução do algoritmo com diferentes parametrizações. Através destas execuções pretende-se comparar o impacto
que as diferentes configurações do algoritmo podem ter.
3. Estudo do impacto do algoritmo na rede. Perante diferentes condições de rede,
pretende-se determinar se o algoritmo prejudica outro tráfego que esteja a decorrer,
ou se o tráfego extra prejudica a execução do algoritmo.
1.3
Estrutura do documento
Este documento divide-se em seis capítulos. No capítulo 1 fez-se uma introdução ao
problema que esta dissertação pretende resolver, mostrando o contexto e a motivação,
descrevendo-se também os objetivos para este trabalhos.
No capítulo 2 serão apresentados e introduzidos conceitos importantes para a compreensão dos desafios que esta dissertação encontra. Primeiro são introduzidos alguns
detalhes do funcionamento das redes de computadores, com foco nas redes da norma IEEE
802.11 e os desafios que existem neste tipo de redes. No fim deste capítulo são referidos
conceitos de monitorização de tráfego, mais uma vez, com foco na captura de tráfego WiFi
e, de seguida, são apresentadas algumas ferramentas existentes para monitorização de
redes de computadores. No fim deste capítulo são apresentadas as conclusões tiradas após
este estudo.
No capítulo 3 são introduzidos conceitos e a noção de algoritmos de consenso, devido
ao uso de um algoritmo de consenso para avaliação da solução proposta. Este capítulo
exemplifica os algoritmos de consenso através da explicação dos algoritmos Turquois [25]
e Multi-Valued Consensus [34], explicados nas secções 3.3 e 3.4.
No capítulo 4 é apresentado o sistema de análise desenvolvido. Primeiro são explicados
os requisitos necessários, passando ao detalhe dos componentes que constituem o sistema.
No capítulo 5 é então exposto o conjunto de métodos de estudo. Começando por
explicar a implementação do algoritmo Turquois usada e o ambiente de testes utilizado.
De seguida são apresentadas as análises efetuadas ao algoritmo e os respetivos resultados.
Por fim, no capítulo 6 são apresentadas as conclusões retiradas da elaboração desta
dissertação e trabalho futuro.
6
CAPÍTULO
2
M ONITORIZAÇÃO DE R EDES
Este capítulo abordará alguns conceitos do escopo desta dissertação que serão importantes
para a sua compreensão. Serão também abordados e referenciados alguns trabalhos já
existentes de monitorização de tráfego.
Na secção 2.1 serão introduzidos conceitos referentes ao funcionamento das redes
sem fios, mais concretamente à norma IEEE 802.11 e aos problemas que estão inerentes
a este tipo de redes. Na secção 2.2 serão introduzidos conceitos relacionados com a
monitorização e captura de tráfego de rede, assim como referências às especificações
necessárias para a captura de tráfego numa rede sem fios. Por fim, na secção 2.3 serão
apresentadas algumas ferramentas de captura de tráfego, e alguns casos de estudo onde se
recorre à monitorização de tráfego específico de uma aplicação distribuída ou de somente
um processo, para compreender ou melhorar o funcionamento de determinado sistema.
Na secção 2.3.5 serão apresentadas as conclusões do estudo feito às ferramentas de captura
apresentadas.
2.1
Redes WiFi
Uma rede local sem fios, Wireless Local Area Network (WLAN), consiste num conjunto
de computadores, fixos ou portáteis, que comunicam entre si através de ondas rádio. No
contexto das WLAN, cada computador ligado em rede é denominado de estação e várias
estações ligadas entre si constituem um conjunto de serviços básico.
Uma rede WiFi poderá conter vários conjuntos de serviços básicos de forma a aumentar
a cobertura de rede. Para tal, este tipo de redes mantém dois ou mais conjuntos de serviços
básicos ligados entre si, através de um sistema de distribuição. A comunicação entre
o conjunto de serviços básico e o sistema de distribuição estabelece-se através de um
ponto de acesso. O ponto de acesso é o dispositivo responsável por passar a informação
do conjunto de serviços básicos para o respetivo sistema de distribuição, tal como é
7
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
responsável por estabelecer a comunicação entre estações. Quando uma rede funciona
através desta arquitetura, a rede executa em modo infraestrutura. Desta forma, à medida
que se movimenta, uma estação estará ligada ao ponto de acesso mais próximo, sem
perder acesso à rede. A norma 802.11 determina que o sistema de distribuição forneça
um conjunto de serviços que podem ser divididos em serviços de estação e serviços de
sistema de distribuição.
Em suma, para dois conjuntos de serviços básicos existem dois pontos de acesso, um
para cada, e ambos os pontos de acesso comunicam entre si através de um sistema de
distribuição. Este sistema de distribuição poderá ser, por exemplo, uma rede ethernet.
A este conjunto, no seu todo, denomina-se conjunto de serviços estendido. A figura 2.1
ilustra um exemplo de uma estrutura de um conjunto de serviços estendido.
Sistema de Distribuição
Ponto de Acesso
Estação
Ponto de Acesso
Estação
Estação
Estação
Estação
Estação
Conjunto de Serviços Básico
Conjunto de Serviços Básico
Figura 2.1: Exemplificação de um conjunto de serviços estendido
No entanto, uma rede WiFi não requer sempre a existência de um ponto de acesso. Uma
WLAN é considerada uma rede ad-hoc, ou um conjunto de serviços básicos independente,
quando o conjunto de serviços básico não tem acesso a redes exteriores e as estações
comunicam entre si ponto-a-ponto. A figura 2.2 ilusta uma rede ad-hoc.
2.1.1
Serviços de Sistema de Distribuição
Os cinco serviços de sistema fornecidos pelo sistema de distribuição são:
Associação. Quando uma estação pretende ligar-se a uma WLAN necessita juntar-se
à infra-estrutura de um conjunto de serviços básico. Para tal, existe o serviço de
associação que permite que uma estação se associe a um dado ponto de acesso.
Reassociação. Um dos requisitos de uma rede WiFi é que permita a transição das estações
entre conjuntos de serviços básicos da mesma rede. Este serviço permite que a
estação se associe a outro ponto de acesso da mesma rede, sem perder conectividade.
8
2.1. REDES WIFI
Estação
Rede ad-hoc
Estação
Estação
Figura 2.2: Exemplificação de um conjunto de serviços independente
Dissociação. Este serviço consiste na terminação da associação entre uma estação e um
ponto de acesso, deixando de ser possível a comunicação entre a estação e o ponto
de acesso.
Distribuição. Este serviço consiste na distribuição da informação. Quando uma estação
A pretende enviar um pacote à estação B é enviado um pedido para o ponto de
acesso do conjunto de serviços básico. De seguida, o pedido é transmitido através
do sistema de distribuição até ao ponto de acesso a que a estação B se encontra
associada.
Integração. Este serviço é utilizado para permitir a comunicação com outro tipo de redes.
Este serviço executa as alterações necessárias para que o pacote esteja de acordo com
o protocolo da rede destino, e vice-versa. [3]
2.1.2
Serviços de Estação
Uma rede WiFi tem a particularidade de não se encontrar fisicamente limitada como no
caso de uma rede ethernet. As redes IEEE 802.11 utilizam ondas rádio para estabelecer
a comunicação e como tal existe o problema de vários dispositivos utilizarem a mesma
frequência de rádio quer tenham, ou não, o objetivo de enviar informação. Esta particularidade leva então à necessidade de identificar, autorizar e proteger a transmissão entre
duas estações ou entre uma estação e um ponto de acesso. Para tal existem os seguintes
serviços de estação:
Autenticação. Este serviço consiste na verificação de que a estação é reconhecida e autorizada a comunicar com outra estação ou um ponto de acesso. Assim que a estação se
encontra autenticada, esta pode prosseguir com o serviço de associação descrito anteriormente. Existem dois tipos de serviço de autenticação: Autenticação de Sistema
Aberto, em que qualquer estação que se tenta autenticar pode comunicar na rede, e
Autenticação de Chave Partilhada, em que as estações que se pretendem associar
necessitam de ter uma chave secreta partilhada.
9
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
Revogação de Autenticação. Consiste na terminação do serviço de autenticação, deixando a estação de estar autenticada perante um ponto de acesso, a associação entre
ambos deixa de existir.
Privacidade. Este serviço consiste na garantia de privacidade da comunicação entre
estação e ponto de acesso. Este serviço é garantido através da cifra do conteúdo
dos pedidos, através de Wired Equivalent Privary (WEP) [12] ou Wireless Application
Protocol (WAP) [26]. Este serviço poderá não ser utilizado, deixando a comunicação
ser transmitida em claro e passível de sofrer ataques de eavesdropping1 .
Serviço de entrega de unidade de dados MAC. Este serviço é responsável por garantir
que os dados chegam ao seu destino. [8]
2.1.3
Controlo de Acesso ao Meio
Genericamente, a comunicação dos protocolos de rede pode ser feita através de dois tipos
de ligação: 1) ligação ponto a ponto e 2) ligação por difusão. A ligação ponto a ponto
permite conectar dois nós diretamente, havendo somente dois intervenientes na comunicação. A ligação por difusão permite que vários nós recebam e enviem pacotes através
de um canal de comunicação partilhado. Neste caso, quando um pacote é transmitido,
todos os nós recebem. As redes WiFi e Ethernet são exemplos de redes que utilizam ligação
por difusão. No entanto, neste tipo de ligação ocorre o problema de múltiplo acesso. Este
problema ocorre quando mais que um nó tenta aceder ao meio de comunicação. Nesta
situação, existindo vários pacotes a ser transmitidos na rede, ocorre uma colisão e nenhum
dos pacotes envolvidos chega corretamente ao destino.
Considerando o exemplo da norma IEEE 802.11, esta recorre a ondas rádio para
comunicar informação, utilizando o ar como meio de transmissão. Este facto possibilita
que qualquer dispositivo rádio possa, potencialmente, emitir para este meio de difusão.
O problema de múltiplo acesso encontra-se mais uma vez presente, estendendo-se até
aos nós externos à rede. Isto porque, existindo duas redes 802.11 a transmitir no mesmo
canal rádio, as estações de ambas as redes competem pelo acesso ao mesmo meio de
comunicação.
De modo a combater o problema de múltiplo acesso foram criados protocolos de
controlo de acesso ao meio. Estes protocolos visam controlar e coordenar os nós que
acedem à rede, na tentativa de minimizar a ocorrência de colisões.
De seguida são apresentados os mecanismos de controlo de acesso ao meio, tanto das
redes Ethernet como das redes WiFi.
1 Eavesdropping consiste num ataque de redes de computadores em a informação que passa entre dois principais é
"ouvida"por terceiros não autorizados
10
2.1. REDES WIFI
2.1.3.1
CSMA/CD
Como é sabido, as estações de uma rede 802.3 comunicam através de uma ligação de
difusão. Como tal, este protocolo recorre a um mecanismo de controlo de acesso ao meio.
As redes ethernet executam um protocolo de deteção de colisões, denominado Carrier Sense
Multiple Access with Collision Detection, vulgarmente conhecido como CSMA/CD [11]. Este
protocolo pretende prevenir a ocorrência de colisões recorrendo a duas características
das estações: a) percecionar quando outra estação se encontra a transmitir e b) detetar a
colisão enquanto está a transmitir [16]. O protocolo CSMA/CD define que:
1. Uma estação nunca começa a transmissão de um pacote caso detete que existe outro
nó da rede a transmitir.
2. Durante a transmissão de um pacote, se a estação detetar que existe mais atividade
no meio, interrompe a sua transmissão.
3. Antes de retransmitir, é necessário esperar um tempo adicional para garantir que o
meio não está a ser usado.
2.1.3.2
CSMA/CA
Como referido anteriormente, o protocolo CSMA/CD requer que uma estação seja capaz
de ouvir e transmitir para a rede em simultâneo, sendo capaz de interromper a transmissão
em caso de colisão. Contudo, os dispositivos rádio de uma rede WiFi não possuem esta
capacidade, pois se escutarem durante uma transmissão o seu próprio sinal será tão forte
que só ouvem a sua própria emissão, impossibilitando a deteção de colisões. Para colmatar
este problema, as redes 802.11 utilizam uma versão modificada do protocolo CSMA/CD,
o protocolo Carrier Sense Multiple Access with Collision Avoidance, vulgarmente conhecido
como (CSMA/CA) [12].
A base da filosofia deste protocolo é semelhante à utilizada no protocolo CSMA/CD.
Este novo protocolo utiliza a capacidade das estações analisarem o estado de utilização do
canal. Contudo, como não é possível detetar a utilização do canal durante a transmissão,
este protocolo foca-se em evitar a ocorrência de colisões, ao invés de as detetar. Desta
forma, o protocolo CSMA/CA define que:
1. Quando a estação pressente que o canal está inativo, transmite o pacote após esperar
um tempo adicional conhecido como DIFS (Distributed Inter-frame Space).
2. Caso o canal se encontre ativo, a estação espera um tempo aleatório para repetir a
tentativa de envio.
3. Ao fim do tempo aleatório, quando o canal se encontra inativo, a estação transmite o
pacote e espera pela chegada de um pacote ACK.
11
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
4. Ao receber o pacote ACK, a estação reconhece que o seu pacote foi recebido no
nó destino. Se a estação tiver mais pacotes para transmitir, recomeça o processo
no passo 2. Caso o pacote ACK não seja recebido, é estabelecido mais um tempo
aleatório para recomeçar a fase 2, desta vez com um intervalo de tempo maior.
No caso do nó destino, quando este recebe um pacote de dados, e após verificar a
integridade do pacote, espera um intervalo de tempo conhecido como SIFS (Short Interframe Space), para depois enviar o respetivo ACK. Este processo é descrito na figura
2.3.
A
DIFS
{
B
Dados
ACK
} SIFS
Figura 2.3: Representação do protocolo CSMA/CA2
2.1.3.3
RTS/CTS e O Problema do Nó Escondido
Ao contrário das redes ethernet em que todas as estações se ouvem entre si, as redes WiFi,
devido ao uso de ondas de rádio, não garante que todas as estações da rede sejam capazes
de ouvir as restantes. Apesar de implementação do protocolo CSMA/CA, este facto
leva a que este protocolo não seja capaz de evitar ou detetar todas as colisões possíveis.
Reconhece-se assim um problema adicional, conhecido como o Problema do Nó Escondido.
Este problema ocorre, por exemplo, quando numa rede existem três estações A, B e C e,
sendo B o ponto de acesso, por exemplo. Devido à distância entre as estações A e C, a
estação B consegue alcançar ambas A e C mas A não alcança C nem C alcança A. Esta
situação está predisposta à ocorrência de colisões, visto que quando A quiser transmitir
não conseguirá detetar se C está ou não a transmitir, e vice-versa.
De modo a resolver este problema foi criado o protocolo Request To Send/Clear to Send
(RTS/CTS) [12] na camada MAC. Este protocolo define que, quando uma estação quer
transmitir, seja enviado um pacote de pedido de envio, conhecido como Request to Send
(RTS), ao ponto de acesso. A estação emissora terá assim que esperar pela receção de um
2 Figura
baseada em [16]
12
2.1. REDES WIFI
pacote de autorização de envio, Clear to Send (CTS). Só após a receção de um pacote CTS é
que a estação estará autorizada a enviar o seu pacote. Como todas as estações conseguem
ouvir a atividade do ponto de acesso, quando um CTS é enviado todas as estações ficam
cientes de que o meio está ocupado. Este processo garante que o meio fica reservado,
deixando as restantes estações em espera durante a transmissão do pacote. Deste modo
existem garantias de que, mesmo que a estação C não consiga ouvir a estação A, a estação
C é notificada por B e não corre o risco de transmitir ao mesmo tempo que a estação A.
Este processo é exemplificado na figura 2.4.
RTS
Área notificada
após RTS
A
B
CTS
C
Área notificada
após CTS
Figura 2.4: Exemplificação do protocolo RTS/CTS3
2.1.3.4
Funções de Coordenação
As redes WiFi utilizam vários protocolos para partilha do meio de comunicação. Estes protocolos são denominados funções de coordenação. Existem duas funções de coordenação,
sendo estas a função de coordenação distribuída, Distributed Coordination Function (DCF),
e a função de coordenação central, Point Coordination Function (PCF).
DCF
A função DCF, sendo um algoritmo distribuído executado por todas as estações, pode
ser utilizado tanto por redes ad-hoc como por redes em modo infra-estrutura. Esta função
executa os protocolos CSMA/CA e RTS/CTS apresentados nas secções 2.1.3.2 e 2.1.3.3,
respetivamente. A figura 2.5 ilustra o funcionamento da função DCF.
PCF
A função PCF é somente utilizada em redes em modo infra-estrutura, devido à sua
necessidade de uma estação central executar o algoritmo de coordenação. Nesta função
de coordenação o tempo é dividido em superframes. Cada superframe é dividida entre um
periodo de contenção, Contention Period (CP), em que é utilizada a função DCF, e um
período livre de contenção, Contention Free Period (CFP), em que é utilizada a função PCF.
3 Figura
4 Figura
baseada em [6]
baseada em [16]
13
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
A
DIFS
{
RTS
} SIFS
CTS
SIFS
Restantes nós
da rede
B
{
Dados
Acesso
diferido
} SIFS
ACK
Figura 2.5: DCF com implementação dos protocolos CSMA/CA e RTS/CTS4
Como o nome indica, o período livre de contenção elimina a necessidade das estações
competirem pelo meio, sendo o ponto de acesso responsável por coordenar as estações.
O ponto de acesso elege, à vez, a estação autorizada a transmitir. Através de uma lista
ordenada por prioridade, o ponto de acesso envia um pacote do tipo CF-Poll à estação
eleita. Após a receção deste pacote, se a estação eleita tiver dados para transmitir, prossegue
com a transmissão do pacote e ACK respetivo ao pacote CF-Poll. Este processo repete-se
para todas as estações da lista.
Para garantir que as estações a transmitir através da função DCF não interfiram com a
função PCF, antes de se dar início a este período, existe um tempo de espera denominado
PCF Inter-frame Space (PIFS). Após este tempo de espera, a função PCF dá início ao período
CFP quando o ponto de acesso envia um pacote beacon. O período livre de contenção
terminado quando o ponto de acesso envia um pacote do tipo CF-End. A estrutura de
uma superframe é ilustrada pela figura 2.6.
Superframe
Período livre de contenção - CFP
Dados +
CF-Poll
Beacon
PA
Dados + CF-Ack
+ CF-Poll
Período de
contenção - CP
Dados + CF-Ack
+ CF-Poll
Dados +
CF-Poll
CF-End
Dados +
CF-Ack
EST 1
Dados +
CF-Ack
EST 2
DCF
EST 3
Dados +
CF-Ack
EST 4
PIFS
SIFS
SIFS
SIFS
SIFS
SIFS
PIFS
SIFS
PA não obteve resposta de EST 3
Figura 2.6: Estrutura de uma superframe5
14
SIFS
2.1. REDES WIFI
2.1.4
Gestão de Energia
Uma rede sem fios pode ser constituída por vários dispositivos móveis, podendo estes ser
portáteis, telemóveis, tablets, etc. Para estes dispositivos a gestão de energia é importante
para aumentar o tempo útil de bateria. Como tal, o protocolo 802.11 possibilita que as
estações alternem entre os estados ativo e inativo, de modo a pouparem energia durante
os períodos inativos.
O modo de poupança de energia começa quando a estação A notifica o ponto de acesso
que irá alterar o seu estado para inativo. Com esta notificação, o ponto de acesso sabe
quais são as estações que se encontram no período de poupança de energia. Durante este
período, se o ponto de acesso receber um pacote que seja destinado à estação A, sabendo
que esta se encontra em modo inativo, em vez de transmitir o pacote, este é mantido em
espera num buffer.
O ponto de acesso envia periodicamente pacotes beacon (tipicamente a cada 100ms
[16]). Estes pacotes contêm a lista de estações com pacotes em espera para serem enviados.
Quando a estação A retorna ao estado ativo, ao receber um beacon verifica se existem
pacotes para receber. Caso verifique que não, retorna ao estado inativo. Caso verifique que
sim, envia um pacote ao ponto de acesso a pedir que lhe sejam transmitidos os pacotes em
espera. Deste modo, uma estação não necessita estar em modo ativo durante períodos em
que não hajam pacotes que lhe sejam destinados.
Este método de gestão de energia é utilizado em redes em modo infraestrutura. Considerando redes ad-hoc, o método anterior não poderá ser aplicado pela inexistência de
um nó centralizado. Por este motivo, o método de gestão de energia em redes ad-hoc
é diferente. No caso destas redes, todas as estações emitem pacotes beacon. O tempo é
dividido em intervalos de beacon, e cada intervalo de beacon é dividido em dois intervalos,
a janela ATIM (Announcement Traffic Indication Message Window) e a janela de dados. Se
uma estação pretender transmitir dados, é necessário emitir um pacote ATIM durante o
período de uma janela ATIM, para então estar autorizada a competir pela transmissão do
pacote durante o período da janela de dados. Caso contrário, se a estação não emitir um
pacote ATIM, durante o período de uma janela ATIM, entra em estado inativo durante o
período da janela de dados [32]. No caso de estações que se encontrem em modo inativo, é
necessário que a estação passa para modo ativo ao receber um pacote beacon, mantendo-se
em estado ativo durante o período da janela ATIM. Caso esta estação receba um pacote
ATIM, terá que se manter ativa, durante o período da janela de dados, para receber o
pacote que lhe é destinado.
2.1.5
Tipos de Pacotes
Face ao exposto anteriormente, o tráfego 802.11 consiste em três tipos de pacotes: pacotes
de dados, pacotes de gestão e pacotes de controlo. De seguida serão listados os sub-tipos
de pacotes presentes no tráfego de uma rede WiFi.
5 Figura
baseada em [41]
15
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
2.1.5.1
Pacotes de Dados
Estes pacotes transportam os dados da rede. Tipicamente, estes pacotes são provenientes
de outros protocolos (por exemplo IP, TCP, UDP, etc) e são encapsulados para que as
estações e pontos de acesso possam interpretar os pedidos que provêm destes pacotes. Os
pacotes de dados podem também ser aproveitados para fazer piggyback6 de outro tipo de
informação, como por exemplo, pacotes ACK.
Dados: pacote utilizado para enviar dados
CF-ACK: pacote de reconhecimento utilizado durante o período livre de contenção
CF-Poll: pacote de eleição utilizado durante o período livre de contenção
Dados+CF-ACK: pacote de dados com piggyback do pacote CF-ACK
Dados+CF-Poll: pacote de dados com piggyback do pacote CF-ACK
Dados+CF-ACK+CF-Poll: pacote de dados com piggyback dos pacotes CF-ACK e CF-Poll
CF-ACK+CF-Poll: pacote CF-ACK com piggyback do pacote CF-Poll
Função nula: pacote enviado pela estação para anunciar que entrará em modo de poupança de energia
2.1.5.2
Pacotes de Gestão
Os pacotes de gestão estão associados aos serviços de sistema de distribuição e de estação.
Estes pacotes são enviados quando uma estação se pretende associar, autenticar, dissociar,
reassociar ou terminar a autenticação. Dentro desta classificação encontram-se também os
pacotes que as estações e os pontos de acesso enviam para determinar a acessibilidade dos
nós e da rede (os pacotes beacon, por exemplo, são enviados esporadicamente pelos pontos
de acesso para anunciar às estações que se encontram ativos e acessíveis). Os subtipos dos
pacotes de gestão são:
Beacon: pacote enviado pelo ponto de acesso para anunciar a sua presença
Pedido de sondagem: pacote é enviado pelas estações que procuram os pontos de acesso
disponíveis
Resposta de sondagem: pacote é enviado pelos pontos de acesso após a receção de um
pedido de sondagem
Autenticação: pacote enviado quando uma estação pretende autenticar-se perante um
ponto de acesso
6 Mecanismo que tenta minimizar os pacotes enviados, acrescentando informação dos pacotes de reconhecimento, por exemplo, a pacotes de dados
16
2.2. MONITORIZAÇÃO
Revogação de Autenticação: pacote enviado para anunciar a terminação de autenticação
Pedido e Resposta de Associação: pacotes enviados durante o serviço de associação de
uma estação a um ponto de acesso
Pedido e Resposta de Reassociação: pacotes enviados durante o serviço de reassociação
de uma estação a um ponto de acesso
Dissociação: pacote enviado para anunciar a terminação da associação entre estações
Mensagem de anúncio da indicação de tráfego: pacote enviado durante o período da
janela ATIM, para indicar que a estação pretende enviar um pacote de dados.
2.1.5.3
Pacotes de Controlo
Estes pacotes são responsáveis pelo controlo de acesso ao meio, informando as estações e
os pontos de acesso quando é que podem, ou não, enviar informação. Os pacotes Request
to Send e Clear to Send, por exemplo, fazem parte do mecanismo de controlo de acesso ao
meio, RTS/CTS, já referido anteriormente na secção 2.1.3.3. Os subtipos dos pacotes de
controlo são:
RTS: pacote de pedido de envio
CTS: pacote de autorização de envio
ACK: pacote de reconhecimento
CF-End: pacote de terminação do período livre de contenção
CF-End+ACK: pacote CF-End com piggyback do pacote ACK
Power Save Poll: pacote enviado pela estação para pedir que lhe sejam transmitidos os
pacotes que ficaram em espera durante o período de poupança de energia
2.2
Monitorização
A monitorização da rede é baseada na escuta ou captura do tráfego de rede que circula no
meio de comunicação. Este método consiste em capturar os pacotes que são recebidos e
enviados pelo dispositivo que se pretende monitorizar, ou por outro que tenha acesso ao
meio e possa obter essa informação. Para explicar o processo de monitorização é preciso
explicar antes o que acontece no dispositivo quando este recebe um pacote. Quando
um dispositivo recebe um pacote ethernet, por exemplo, a placa de rede verifica se o
endereço MAC corresponde ao dispositivo, em caso positivo o pacote é encaminhado para
o controlador de rede.
A este ponto é preciso identificar os protocolos do pacote para este ser encaminhado
à camada de protocolos suportados pelo SO e suas aplicações. Para tal é preciso ter em
17
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
consideração que um pacote contém informação sobre os diversos protocolos a que se
rege. A figura 2.7 mostra o exemplo de um pacote TCP, assim para concluir que este é um
pacote TCP é necessário interpretar os diferentes cabeçalhos. Esta tarefa está encarregue
ao controlador de rede e pilha de protocolos. A partir do momento em que um pacote é
recebido pelo controlador de rede, os cabeçalhos são vistos um a um para identificar o
protocolo e encaminhar o pacote ao devido handler da pilha de protocolos. Este processo
acaba quando se consegue obter os dados do pacote e encaminhá-los à camada de aplicação
para que sejam devidamente processados ao nível do processo utilizador.
Cabeçalho
Ethernet
Cabeçalho
IP
Cabeçalho
TCP
Dados
Ethernet
Checksum
Figura 2.7: Estrutura de um pacote ethernet
Quando um programa de monitorização da rede se encontra a correr num dispositivo,
o controlador de rede, para além do processo antes descrito, transfere uma cópia dos
pacotes para um mecanismo de captura de pacotes. Em sistemas Unix, por exemplo, existe
um módulo no núcleo do sistema, chamado Packet Filter que aplica filtros na captura, como
exemplifica a figura 2.8. A biblioteca PCap [36], referida na secção 2.2.1, permite aceder
a estes mecanismos, em particular os mecanismos baseados no Berkeley Packet Filtering
(BPF) [24] ou suas variantes. Este mecanismo é o componente que permite controlar os
tipos de pacotes que são recolhidos durante a monitorização. Este componente torna-se
bastante importante em casos em que o administrador da rede não queira ver todos os
pacotes que estão a passar na rede e quer limitar-se, por exemplo, a visualizar pacotes
UDP, ou só os que envolvem determinado protocolo/porto. O Packet Filter permite assim
especificar filtros de captura, minimizando a quantidade de dados que passam do núcleo
para o nível de utilizador, que depois fará o processamento que acha necessário.
2.2.1
Biblioteca PCap
Os sistemas operativos oferecem um mecanismo de monitorização de tráfego, não sendo
necessário o uso de ferramentas externas para o mesmo. A biblioteca, de código aberto,
PCap [36] oferece uma interface de alto nível que permite aceder a este mecanismo
independentemente do sistema operativo usado.
Esta biblioteca foi criada com o intuito de haver uma abstração de alto nível que
permita ao programador aceder ao mecanismo de captura de pacotes, sem se preocupar
com as particularidades do sistema operativo. Existindo em diferentes versões para
Windows e Unix, WinPCap [38] e LibPCap [36], respetivamente. Esta ferramenta permite
assim a elaboração de um programa, numa linguagem de alto nível (C/C++), com o intuito
de capturar o tráfego da rede permitindo também a escolha de uma interface de rede,
7 Figura
baseada em [22]
18
2.3. FERRAMENTAS DE CAPTURA
Sniffer
Pacote
Recebido / Transmitido
Packet Filter
Monitor de Rede
Placa de Rede
Pacotes
Driver de Rede
Navegador
Pilha de Protocolo
Servidor FTP
Hardware
Núcleo de SO
Utilizador
Figura 2.8: Elementos envolvidos na captura de pacotes7
filtros de pacotes e modos de captura (os modos promíscuo e monitor são suportados pela
biblioteca).
Como mencionado anteriormente, o mecanismo de captura suporta diferentes filtros
para minimizar, logo à partida, a quantidade de dados que é passada do núcleo para o
nível de utilizador. Os filtros são definidos a alto nível e convertidos para filtros reconhecidos pelo núcleo do sistema. No caso do sistema Unix, como referido anteriormente, o
filtro reconhecido é o Berkeley Packet Filtering [24], existindo uma implementação para os
sistema Linux denominado Linux Socket Filtering (LSF). Contudo, caso seja definido um
filtro que não seja suportado diretamente pelo núcleo, a biblioteca PCap implementa o
filtro internamente, em nível utilizador, oferecendo ao utilizador/programador a mesma
interface, independentemente do sistema operativo.
Esta biblioteca permite também guardar as capturas em ficheiros, no formato pcap, de
modo a poderem ser consultadas a partir de programas de análise ou visualização gráfica,
como por exemplo Wireshark.
2.3
Ferramentas de Captura
As ferramentas baseadas na captura de tráfego podem operar de diferentes formas, consoante os seus objetivos, assim como as relações entre desempenho, uso de memória
e perturbação do sistema monitorizado. Para além do processo da captura de pacotes
anteriormente explicado, a monitorização de tráfego pode ser classificada como online,
offline, ativa e passiva.
Online. A visualização dos pacotes capturados é feita em tempo real, durante a monitorização.
Offline. A visualização e análise dos pacotes só é possível após a terminação da captura.
19
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
Activa. Permite que o utilizador altere os parâmetros e os filtros da monitorização enquanto esta se encontra a decorrer.
Passiva. A monitorização é levada a cabo sem qualquer intervenção no sistema, só sendo
possível visualizar os dados.
Independentemente do modo de funcionamento destas ferramentas, existem diferentes
modos de captura. Os modos de captura disponíveis dependem das interfaces de rede,
e respetivos controladores no núcleo do sistema. Estes modos definem o tipo e quais os
pacotes que a ferramenta consegue capturar. Considerando o foco desta dissertação em
redes 802.11, é necessário considerar a particularidade dos pacotes deste protocolo terem
cabeçalhos específicos. Dependendo do modo de captura, poderá ser possível visualizar e
analisar, ou não, os cabeçalhos do protocolo 802.11. Para estes pacotes existem dois modos
de processamento, ou são processados e traduzidos para falsos pacotes ethernet, ignorando
a informação do protocolo 802.11, ou podem conter os cabeçalhos específicos do protocolo.
Estes cabeçalhos contêm, por exemplo, informação referente ao tipo de pacote 802.11
(gestão, controlo ou dados), tal como informação de nível rádio, como a força do sinal da
rede ou o canal em que está a decorrer a transmissão.
Modo Promíscuo. O modo promíscuo permite que o programa capture todos os pacotes
que chegam ao controlador do dispositivo, mesmo que os pacotes não sejam destinados ao mesmo. Este modo permite assim apanhar todos os pacotes que estão a passar
na rede. No contexto de redes sem fios, este modo de captura só permite capturar os
pacotes a partir do momento em que o dispositivo se encontra autenticado perante
um ponto de acesso. Os pacotes 802.11 capturados neste modo serão traduzidos
para falsos pacotes ethernet.
Modo Monitor. Este modo de captura permite que o dispositivo apanhe o tráfego de
todos os pontos de acesso que estiverem a transmitir no canal. A particularidade do
modo monitor é que o dispositivo não necessita estar associado e autenticado a um
ponto de acesso ou rede ad-hoc. Quando este modo se encontra ativo, o dispositivo é
dissociado do ponto de acesso. Se o dispositivo só possuir um adaptador de rede,
este modo impossibilita o dispositivo de comunicar em rede e só permite a receção
de pacotes para que estes sejam passados ao programa de monitorização. Caso o
dispositivo possua mais que um adaptador de rede, consegue comunicar com os
restantes nós através do adaptador de rede adicional. O modo monitor só pode
ser ativado em redes sem fios e permite a captura de cabeçalhos rádio. Este modo
é assim o mais indicado no contexto desta dissertação, sendo a única maneira de
capturar dados do protocolo 802.11.
Existem inúmeras ferramentas de monitorização de tráfego de rede, na sua maioria
baseadas na biblioteca PCap, contudo, existem duas que merecem algum destaque sendo
20
2.3. FERRAMENTAS DE CAPTURA
elas Wireshark e TCPDump [36], a seguir descritas. Serão também referidos alguns trabalhos antes realizados no Departamento de Informática com base nestas ferramentas e
biblioteca.
2.3.1
TCPDump
TCPDump [36] é uma ferramenta de monitorização de rede executada através da linha
de comandos do sistema Unix, ou Windows. No caso do sistema Windows, a versão da
ferramenta chama-se WinDump [37]. Esta ferramenta utiliza a biblioteca LibPCap para
captura de tráfego e permite a aplicação de diversos tipos de filtros. É possível visualizar
os resultados no terminal ou guardá-los em ficheiro.
O TCPDump serve como base e referência para muitos outros sistemas de monitorização e análise de tráfego [35], como por exemplo: capinfo, tcpstat, tcptrace, etc. A ferramenta
Wireshark, explicada na secção 2.3.2, permite a obtenção de estatísticas do tráfego e tem
como base o TCPDump.
2.3.2
Wireshark
Wireshark [39] é uma ferramenta de monitorização passiva de tráfego que permite capturar,
visualizar e analisar os pacotes de que passam por uma dada interface de rede. Sendo
uma ferramenta de código aberto, permite expandir as suas funcionalidades através do
desenvolvimento de plug-ins e extensões.
Para a monitorização da rede, o programa apresenta as diversas interfaces de rede
existentes no dispositivo, para que o utilizador possa indicar qual usar. Após a escolha
da interface de rede, o utilizador tem diversas opções ao seu dispor, como, por exemplo,
filtros de captura, modos de captura e tipos de cabeçalhos que pretende visualizar. Durante
a monitorização é apresentada uma lista, que mostra a captura de pacotes em tempo real
(modo online), e que para pacote mostra a informação da Tabela 2.1.
No Sequência
Tempo
Origem
Destino
Protocolo
Tamanho
Informação
Tabela 2.1: Tipo de informação apresentada sobre cada pacote
Ao aceder à informação de cada pacote é possível aceder aos campos que estão nos
vários cabeçalhos do pacote (por exemplo, IP - IPv4 - TCP - HTTP). A ferramenta faz a
interpretação dos pacotes de modo a, à medida que são apresentados, indicar o protocolo a
que estes correspondem e fornece vários tipos de visualização de estatísticas e informações
sumárias da captura num todo. Através desta ferramenta é possível fazer capturas tanto
em modo promíscuo como em modo monitor, com o pormenor de que esta capacidade
estará dependente do adaptador de rede do dispositivo.
21
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
2.3.3
Wireshark para Sistemas Distribuídos
O trabalho de Farruca [7] focou-se na monitorização de sistemas distribuídos, isto é,
na monitorização dos processos que se encontram a executar nos computadores que
constituem o sistema distribuído. Considerando o Wireshark, esta ferramenta atualmente
não permite filtrar o tráfego de rede por aplicação, nem de capturar o tráfego a partir de
diversos computadores. Assim, a principal motivação deste trabalho foi contribuir com
uma ferramenta que permita monitorizar uma aplicação distribuída em concreto.
Para tal, este trabalho recorreu à biblioteca PCap, igualmente utilizada pelo Wireshark,
para captura do tráfego. De modo a monitorizar o tráfego do processo, o mesmo é identificado para que o seu descritivo seja usado para obter os sockets em uso. É assim possível
criar um filtro para a ferramenta PCap, com base nas portas usadas pelo processo. De
modo a que a captura não necessite de ser iniciada manualmente em cada computador, um
a um, o processo de monitorização é iniciado num computador que, ao detetar o processo
a ser monitorizado, consegue detetar os computadores que se encontram a comunicar
com este, e propagar o processo de monitorização por todos os intervenientes do sistema
distribuído.
Após a monitorização de todos os processos estar concluída, existe um elemento
central que recolhe os resultados de cada monitorização para elaborar o relatório final. Este
relatório apresenta os pacotes que passaram na rede durante a monitorização, devidamente
ordenados, dando a possibilidade de filtrá-los e ainda de mostrar o grafo do sistema
distribuído.
2.3.4
Monitorização de tráfego de rede de um processo com base no PCap
O trabalho de Farruca [7] recorre à monitorização de processos de modo a garantir a
captura do tráfego gerado por uma aplicação distribuída. Contudo, o resultado produzido
faz uso de filtros a nível do utilizador para identificar e filtrar o tráfego da aplicação,
aumentando a carga do programa de captura. O trabalho de Martins [23] focou-se na
otimização da monitorização do tráfego de rede de somente um processo.
Tendo em conta os objetivos deste trabalho, pretende-se assim em utilizar mecanismos
internos ao núcleo do sistema para monitorizar e filtrar o tráfego gerado por um processo
sem causar perturbações no sistema. Ao focar a monitorização para o tráfego gerado por
um programa e ao centrar a análise desse tráfego no núcleo do sistema, este trabalho
pretende simplificar o processo de filtragem do tráfego e minimizar o conhecimento
necessário sobre a aplicação para levar a cabo a mesma.
A implementação deste trabalho focou-se no desenvolvimento de um módulo do
núcleo que fosse uma extensão do Linux Socket Filtering, uma implementação do Berkeley
Socket Filter referido anteriormente. O módulo desenvolvido acrescenta a opção de monitorizar o tráfego gerado por um processo e, o facto deste módulo ter sido implementado a
nível do núcleo, permite que qualquer aplicação possa ser monitorizada sem alterações
ao seu código. O facto deste módulo ser uma extensão do LSF permite também que as
22
2.3. FERRAMENTAS DE CAPTURA
ferramentas de monitorização baseadas no LipPcap possam beneficiar deste módulo.
Deste modo, foi possível desenvolver uma solução que permitisse a captura do tráfego
gerado por um processo e, pelo facto desta monitorização ser levada a cabo a nível do
núcleo, não se observam perturbações no sistema nem na aplicação a ser analisada.
2.3.5
Conclusões
Face aos objetivos expostos na secção 1.2, as ferramentas anteriormente apresentadas
foram alvo de estudo.
Na secção 2.3.2 é apresentado o Wireshark, uma ferramenta de monitorização de rede
que possibilita a captura de pacotes 802.11 e a visualização de pacotes de dados, gestão e
de controlo. Esta ferramenta permite assim distinguir os diferentes tipos de pacotes, desencapsular os pacotes de dados e apresentar os diferentes protocolos que destes fazem parte.
No entanto, não possibilita a distinção do tráfego gerado pelo algoritmo, impossibilitando
a análise do tráfego útil para a avaliação do funcionamento e desempenho do algoritmo
distribuído. Esta ferramenta também não permite uma clara análise da utilização da rede
pelo algoritmo ou pelos vários tipos de pacotes WiFi. Tal como não permite identificar
fenómenos de congestionamento ou interferências que estejam a reduzir o desempenho
da rede.
O trabalho de Farruca, “Wireshark para Sistemas Distribuídos”, [7] é apresentado na
secção 2.3.3. Esta ferramenta, baseada no Wireshark para colmatar as suas limitações,
permite monitorizar um sistema distribuído. Isto é, esta ferramenta é capaz de distinguir e filtrar o tráfego gerado por uma aplicação distribuída e, correndo instâncias das
ferramentas em todos os nós, capturar as interações que ocorrem durante a execução
da mesma. No entanto, a solução implementada causa perturbações no sistema onde
decorre a monitorização e, no contexto desta dissertação, não captura pacotes específicos
do protocolo 802.11, sendo incapaz de distinguir, perante o tráfego de uma rede WiFi, os
tipos de pacotes que estão a ser transmitidos na rede.
Na secção 2.3.4 é apresentado o trabalho de Martins, “Monitorização de tráfego de
rede de um processo com base no PCap” [23] que por sua vez foca-se em colmatar as
limitações do trabalho de Farruca, mitigando as perturbações que a monitorização de
um processo pode causar no sistema. Este trabalho foca-se somente nesta problemática,
como tal não oferece meios automatizados de monitorizar todos os nós que executam a
aplicação distribuída, e assim obter as interações que ocorrem durante a execução desta.
Esta ferramenta limita-se a identificar o tráfego de um processo, não ajudando na captura
de outro tráfego (WiFi ou outro) nem na identificação dos problemas já apresentados que
ocorram durante o funcionamento de uma aplicação distribuída.
Nota-se, mais uma vez, uma lacuna nas ferramentas desta índole e no modo como
lidam com o tráfego 802.11, que, como referido por Schulman et al. [31], tem problemáticas
inexistentes na monitorização de tráfego 802.3 (por exemplo). A acrescentar a estes desafios,
não existem ferramentas que possibilitem a monitorização e distinção de tráfego de uma
23
CAPÍTULO 2. MONITORIZAÇÃO DE REDES
aplicação distribuída da do restante tráfego da rede. Este facto dificulta a avaliação e
depuração do funcionamento e desempenho de um algoritmo distribuído, aliado à falta
de um regime de estudo controlado, não existem métodos a que o programador possa
recorrer durante o desenho, ou avaliação do funcionamento, de um algoritmo ou aplicação
distribuídos.
24
CAPÍTULO
3
A LGORITMOS DE C ONSENSO
Este capítulo abordará conceitos para a compreensão de algoritmos de consenso, seguidos
de alguns algoritmos de exemplo. A secção 3.1 apresenta os conceitos necessários para a
compreensão de algoritmos de consenso. De seguida a secção 3.2 apresenta o algoritmo
de referência Paxos. As secções 3.4 e 3.3 apresentam os algoritmos utilizados no trabalho
de motivação a esta dissertação.
3.1
Definição
“Algoritmos distribuídos são algoritmos desenhados para correr em vários processadores ligados entre si. Partes de um algoritmo distribuído correm concorrente
e independentemente, cada uma com uma quantidade de dados limitada. Os algoritmos são supostos correr corretamente, mesmo que um dos processadores ou canais de
comunicação operem em velocidade diferentes e até em caso de falha.” [21]
Um algoritmo de consenso é um algoritmo distribuído que visa resolver o problema
de consenso. Esta classe de algoritmos serve de base à resolução de muitos dos problemas
específicos dos ambientes distribuídos, como, por exemplo, a eleição de processos líder,
coordenação entre os processos, sincronização, etc. O problema de consenso requer que
processos distribuídos cheguem a acordo quanto a um determinado valor. Para tal, este
problema requer que sejam cumpridas as seguintes propriedades:
Validade. Se todos os processos propõem um valor v, então v será o valor acordado.
Acordo. Dois processos corretos não podem decidir valores diferentes.
Terminação. Todos os processos corretos decidem eventualmente1 um valor.
1 Do
inglês eventually, que implica que irá acontecer algures no tempo
25
CAPÍTULO 3. ALGORITMOS DE CONSENSO
Integridade. Se um processo correto decide v, então v foi a proposta inicial de algum
processo.
O algoritmo de consenso começa com a proposta de valores dos processos, sendo, no
final, acordado um desses valores propostos. Considera-se que se chegou a um consenso
quando um quórum de processos decide o mesmo valor, sendo o quórum (n/2) + 1, em n
processos. Durante este processo é necessário tolerar a falha de processos, podendo estes
falhar por paragem ou por serem corrompidos. Existindo assim dois tipos de falhas:
Falhas por Paragem. Denominam-se falhas por paragem, os casos em que um processo
deixa de executar, cessando todas as suas operações.
Falhas Bizantinas. Consideram-se falhas bizantinas quando um processo toma um comportamento inesperado. Este comportamento pode passar por enviar mensagens
erradas, incompletas, a enviar informação diferente a processos diferentes ou processos a deixar de responder temporariamente (simulando uma falha por paragem).
Este tipo de falhas são mais difíceis de detetar. Neste contexto, só é possível chegar a
um consenso quando se limitam a f falhas bizantinas, com f < n3 .
O funcionamento do algoritmo altera também consoante o modelo temporal que
assume. Os tipos de sincronismo que se podem considerar em algoritmos de consenso são:
Síncrono. Assume-se um modelo síncrono quando a interação ocorre num intervalo de
tempo limitado, sendo o envio e a receção bloqueantes.
Assíncrono. Assume-se um modelo assíncrono quando não se conseguem assumir limites
de tempo na interação, não podendo o envio e a receção bloquear o processo, sob
pena de nunca se conseguir desbloquear.
O tipo de falhas que o algoritmo tolera terá impacto no funcionamento do mesmo [27]
[19], alterando as especificações necessárias para calcular o quórum do consenso.
Existem diversos algoritmos de consenso consoante os modelos de falhas e sincronismo. Existem protocolos deterministas (Paxos [17], por exemplo) que são os protocolos
considerados previsíveis, em que valores de entrada iguais geram sempre os mesmos
valores de saída, e que permitem assumir um tempo limite para a sua terminação. Existem
também protocolos probabilísticos, que recorrem a processos estocásticos, tornando-se
em algoritmos imprevisíveis. Neste caso os valores de saída nem sempre são os mesmos
para valores de entrada iguais e, em oposição aos algoritmos deterministas, não permitem
assumir tempo limite para a sua terminação.
O algoritmo Turquois [25], explicado na secção 3.3 é considerado um algoritmo probabilístico.
26
3.2. PAXOS
3.2
Paxos
Paxos [17] é um algoritmo de consenso assíncrono com modelo de falhas por paragem.
Neste algoritmo os processos são classificados em três agentes a) proposers b) acceptors e
c) learners , podendo um processo assumir o papel dos três agentes. O algoritmo executa
em vários rondas em que cada ronda é dividida por duas fases. A figura 3.1 ilustra a
execução correta do algoritmo Paxos.
Fase 1a: Preparação O proposer, cria uma proposta identificada por um número n. Este
valor n terá que ser maior do que qualquer outro número de proposta por este
proposer. De seguida, o proposer envia uma mensagem do tipo prepare, contendo o
valor proposto, para um quórum de acceptors. O proposer é quem decide que acceptors
constituem o quórum.
Fase 1b: Promessa O acceptor, ao receber uma mensagem do tipo prepare, verifica se o
valor n é o maior valor que já recebeu de qualquer proposer. Se o valor for o mais
elevado até à data recebido, o acceptor envia uma promessa de que irá ignorar
propostas futuras que sejam menores que o valor n recebido. Se o acceptor já tiver
aceite um valor anteriormente, terá que enviar o valor da proposta e o número
correspondente à proposta na mensagem de promessa. Caso o valor n não seja o
mais elevado recebido até à data, a mensagem de prepare é ignorada.
Fase 2a: Aceitação Pedido Após o proposer receber um quórum de mensagens de promessa, necessita definir um valor de proposta. Se, até à data, qualquer acceptor tiver
aceite uma proposta, o proposer terá recebido os valor aceites anteriormente pelos
acceptors, tendo que definir o valor da sua proposta como o maior valor aceite pelos
acceptors. Se nenhum dos acceptors tiver aceite um valor anteriormente, o proposer
pode definir qualquer valor de proposta. Após definir o valor de proposta, o proposer
envia uma mensagem to tipo accept request para um quórum de acceptor, que contém
o valor da sua proposta.
Fase 2b: Aceitação Se um acceptor receber uma mensagem to tipo accept request para uma
proposta n, o acceptor aceita a proposta somente se não tiver prometido considerar
apenas propostas de número maior que n. Neste caso, o acceptor regista o valor v da
proposta e envia uma mensagem to tipo accept ao proposer e a todos os learners. Caso
contrário ignora a mensagem accept request.
Este algoritmo original de Paxos serve como base para diversas variantes, como por
exemplo a versão Byzantine Paxos [18] que assume um modelo de falhas bizantinas.
3.3
Turquois
Turquois [25] é um protocolo de consenso binário e probabilístico desenhado para redes
ad-hoc sem fios com modelo de falhas bizantinas. Este protocolo permite que k, de n
27
CAPÍTULO 3. ALGORITMOS DE CONSENSO
Proposer
Acceptor
Acceptor
Acceptor
prepare(n)
promise(n, v1)
accept
request(n, v2)
accept(n)
Figura 3.1: Execução correta do algoritmo Paxos
processos, sendo k ⊆ n, decidam um valor v, sendo v ∈ {0, 1} ou ⊥, caso não cheguem a
um consenso. O estado inicial de um processo é composto por três variáveis internas:
1. Fase φi ≥ 1.
2. Valor proposto vi ∈ {0, 1}.
3. Estado da decisão statusi ∈ {decided, undecided}.
No início do protocolo, as variáveis internas encontram-se com os seguintes valores:
φi = 1, statusi = undecided e vi = proposali . O algoritmo encontra-se dividido em duas
tarefas que são executadas em paralelo por cada processo, sendo elas:
Receção. Esta tarefa recebe as mensagens, do formato hi, φi , vi , statusi i de todos os restantes processos. É esta tarefa que está encarregue de validar e processar a mensagem
consoante a fase em que o ciclo se encontra.
Emissão. Esta tarefa envia as mensagens broadcast com o formato hi, φi , vi , statusi i aos
restantes processos. Estas mensagens são enviadas periodicamente, sendo a tarefa
ativa por um relógio interno.
Como referido, a tarefa de receção dos pacotes é responsável por processar a mensagem
consoante a fase em que o ciclo se encontra. Isto deve-se ao facto deste protocolo de
consenso funcionar em ciclos, em que cada ciclo está dividido em três fases:
CONVERGE. Fase em que os processos tentam convergir para o valor mais observado
entre todos os processos, (φi mod 3 = 1).
28
3.4. CONSENSO MULTI-VALOR
LOCK. Fase em que os processos tentam bloquear um valor vi ∈ {0, 1} ou ⊥, se não
conseguirem decidir, (φi mod 3 = 2).
DECIDE. Fase em que os processos tentam decidem o valor que foi bloqueado na fase
anterior, (φi mod 3 = 0).
Caso os processos não consigam decidir um valor, começa um novo ciclo em que cada
processo propõe valores aleatórios.
Devido ao modelo de falhas bizantinas, este protocolo necessita validar as mensagens
que são recebidas. Esta validação de mensagens é feita através da validação de autenticidade e de semântica das mensagens. Para a validação de autenticidade, é necessária a
troca de chaves entre os intervenientes do algoritmo, para que, na receção de uma mensagem, esta possa ser devidamente autenticada de modo a validar a origem da mensagem.
A validação da semântica das mensagens é levada a cabo para garantir que os dados
recebidos estão congruentes com o estado do algoritmo.
3.4
Consenso Multi-Valor
O trabalho de motivação desta dissertação [1], baseou-se num protocolo de consenso multi
valor, com modelo de falhas bizantino e assíncrono, denominado Multi-Valued Consensus
[34]. Este algoritmo, por sua vez, necessita de recorrer a um algoritmo de consenso binário,
tendo sido, neste âmbito, escolhido o algoritmo Turquois [25].
O protocolo executa em três fases distintas: proposta de um valor, deteção do valor
mais votado e decisão do valor.
O protocolo começa com todos os processos a proporem um valor v através de mensagens com o formato hINIT, i, vi i, sendo i o identificador do processo e vi o seu valor
proposto. Cada processo guarda as mensagens INIT recebidas num vetor V, na posição
i e espera até receber (n − f ) mensagens, sendo n o total de processos e f o número de
falhas admissíveis. Quando um processo recebe (n − 2 f ) mensagens com o mesmo valor
v, envia uma mensagem do formato hVECT, i, vi a todos os restantes processos. Caso o
processo não consiga decidir um valor v, envia um valor ⊥.
A dada altura todos os processos terão difundido mensagens do tipo hVECT, i, vi,
assim, um processo espera até receber (n − f ) mensagens VECT. Quando são recebidas
(n − 2 f ) mensagens VECT com o mesmo valor v proposto, o processo inicia o consenso
binário propondo o valor 1, para que todos os processos se possam decidir pelo valor v. O
valor v só é aceite quando o protocolo de consenso binário decidir 1, caso contrário o valor
decidido, pelo consenso multi-valor, é ⊥.
29
CAPÍTULO 3. ALGORITMOS DE CONSENSO
3.5
Análise do sistema
O trabalho de Almeida [1] atravessou algumas dificuldades no estudo da solução implementada. No processo de avaliação da solução, foram feitos diversos testes, nomeadamente à latência da rede. Estes testes tiveram em consideração diferentes números
de nós da rede (4, 7, 10 e 13), protocolos de comunicação (TCP, TCP persistente, UDP e
UDP multicast), presença de falhas e algumas parametrizações adicionais. Os testes de
latência foram feitos com temporizadores em cada nó que no fim da execução do protocolo
retornam o tempo total calculado.
No contexto das parametrizações adicionais, foram considerados vários intervalos
e tempos de espera. Um dos parâmetros considerados, por exemplo, foi o intervalo de
tempo entre o envio de mensagens. Este intervalo pode ser malicioso se assumir um
valor demasiado baixo, podendo congestionar a rede e levar à perda de pacotes e ao
aumento da latência da rede. O aumento da latência da rede poderá levar ao aumento de
falhas, dificultando o consenso entre os processos. Por outro lado, caso o valor assumido
seja muito alto, este pode atrasar a execução do protocolo. Os ajustes a estes parâmetros
foram feitos por experimentação, não havendo um controlo e conhecimento total do
comportamento do protocolo de modo a se conseguir calcular parâmetros favoráveis.
Este pormenor leva a uma das questões levantadas na avaliação deste trabalho, será
que os intervalos e tempos de espera utilizados podem ser relaxados e mesmo assim obter
bons tempos de latência? Esta será uma questão que só poderá ser respondida através
da monitorização detalhada e controlada da rede durante a execução do protocolo, ao
contrário do método por tentativa e erro.
A avaliação feita com diferentes números de nós começou com uma rede mais pequena,
de 4 nós, até chegar a uma rede de 13 nós. No caso de uma rede de 13 nós o protocolo
de consenso mostrou ser bastante instável. A execução do mesmo tornava-se demorada,
causando até a falha de todo o sistema. Foi colocada em questão a combinação de hardware
e rede usados. No entanto, não é percetível se o problema se prende com o facto do
protocolo não ser escalável ou se está presente no tipo de dispositivos utilizados. Uma
possível causa deste problema é o intervalo de tempo já referido anteriormente. O mesmo
intervalo de tempo terá um impacto diferente à medida que se aumenta o tamanho da rede.
Isto porque, proporcionalmente ao tamanho da rede, o número de mensagens trocadas
aumenta. Assim, um tempo favorável para uma rede de 4 nós poderá ser demasiado baixo
para uma rede de 13 nós, estando a congestionar o tráfego da rede. No entanto, a dúvida
mantém-se sem resposta. Não havendo metodologias e ferramentas destinadas a perceber
o que está a acontecer na rede para causar esta instabilidade.
As metodologias de avaliação usadas mostram que existe uma lacuna, não só, nas ferramentas de depuração e gestão de aplicações distribuídas, mas como na falta de métodos
controlados de análise da rede. Pelos problemas indicados, nota-se a necessidade de haver
um sistema que favoreça a monitorização do tráfego gerado por um sistema distribuído,
sem perturbar o mesmo, de modo a compreender melhor o seu comportamento, e perceber
30
3.5. ANÁLISE DO SISTEMA
se o protocolo a ser desenvolvido tem impacto positivo ou negativo no desempenho da
rede.
31
CAPÍTULO
4
S ISTEMA DE A NÁLISE
Este capítulo abordará o sistema implementado no contexto desta dissertação. Na secção
4.1 serão apresentados os requisitos necessários para a implementação do sistema. Nas
secções 4.2, 4.3 e 4.4 serão explicados os diferentes componentes que cumprem os requisitos
do sistema.
4.1
Requisitos
Para prosseguir com a implementação de um sistema de monitorização, de um algoritmo
distribuído a executar numa rede WiFi, é necessário fazer o levantamento dos requisitos
deste mesmo sistema. Após a análise dos objetivos pretendidos e as particularidades da
norma 802.11, foram definidos os seguintes requisitos:
Captura sem interferências. Com o objetivo de obter resultados reais e fidedignos é
necessário que a captura de tráfego não interfira na rede e/ou nos dispositivos
intervenientes.
Classificação de tráfego. De modo a ser possível analisar o tráfego de um algoritmo
específico é essencial fazer a classificação do tráfego, distinguindo a origem do
tráfego e o seu impacto na rede. Este sistema precisa assim de ser capaz de identificar
os diferentes tipos de tráfego:
• Pacotes de Gestão, secção 2.1.5.2
• Pacotes de Controlo, secção 2.1.5.3
• Pacotes de Dados, secção 2.1.5.1
• Pacotes desconhecidos
33
CAPÍTULO 4. SISTEMA DE ANÁLISE
Considerando os pacotes de dados, é ainda possível separar em duas sub-categorias:
tráfego da aplicação e tráfego extra. Os pacotes desconhecidos constituem pacotes
mal formados que não permitem identificar a sua origem.
Modo monitor. Para que o requisito anterior seja possível, é necessário que a captura de
tráfego seja efetuada em modo monitor. Só neste modo é que será possível obter
todo o tráfego da rede, incluindo pacotes do protocolo 802.11.
Análise da evolução. Para uma melhor compreensão do algoritmo, é necessário ter uma
visualização da sua evolução ao longo do tempo. Deste modo, poderá ser possível
identificar períodos de maior congestionamento ou falhas do sistema.
Agregação de informação. Considerando que o meio WiFi não é estável, é de esperar que
a execução de um algoritmo distribuído neste meio não seja estável e previsível.
Como tal, é necessário processar a informação de várias capturas de modo a agregar
a informação e obter dados estatísticos.
De modo a cumprir estes requisitos, o sistema terá que contar com três componentes distintos. O sistema será assim dividido por captura, análise e visualização. Estes
componentes serão explicados de seguida.
4.2
Captura
Este componente é responsável por cumprir dois dos requisitos enumerados: captura
sem interferências e captura com modo monitor. Como existem programas de captura
de tráfego simples e eficientes, não existe a necessidade de implementar de raiz este
componente. Tendo como objetivo agregar diversas capturas, pretende-se utilizar um
programa de captura já existente. A título de experimentação, a primeira opção foi o uso
da ferramenta Wireshark [39].
Primeiramente, o processo de captura passou por executar a ferramenta Wireshark em
simultâneo com o tráfego em estudo. No entanto, após alguma análise dos resultados obtidos, concluiu-se que desta forma se perturba e altera os resultados obtidos. Considerando
que esta ferramenta necessita processar cada pacote que captura, este processamento
introduz um atraso no atendimento dos pacotes que chegam ao Packet Filter. Caso a ferramenta não consiga processar pacotes ao mesmo ritmo com que estes passam na rede, os
resultados apresentados na captura não serão representativos do que realmente se passa
na rede. Esta situação observou-se em execuções mais rápidas do algoritmo, em que, no
ficheiro resultante da captura, não eram apresentados pacotes gerados pelo algoritmo.
Assim sendo, como substituto da ferramenta Wireshark, passou-se a utilizar TCPDump
[36], com a particularidade de colocar o processo a executar em segundo plano e sem
geração de output em tempo real. Deste modo minimiza-se o processamento de pacotes,
limitando a ferramenta a capturar e guardar a informação dos mesmos.
34
4.3. ANÁLISE DE TRÁFEGO
Uma das particularidades do modo monitor é que o dispositivo dissocia-se do ponto
de acesso no momento da captura. Assim, este modo não permite comunicações com a
rede, caso o dispositivo não tenha adaptadores de rede adicionais.
Mesmo que o dispositivo de captura seja capaz de monitorizar e produzir tráfego
em simultâneo, é importante considerar que tal poderá prejudicar as condições tanto
da captura, como da execução do algoritmo. Isto porque o overhead introduzido pelo
processamento de pacotes para o algoritmo pode prejudicar o processamento de pacotes
da captura, e vice-versa. Estes factos levam à escolha de manter um nó monitor externo à
execução do algoritmo. Considerando o exemplo da figura 4.1, com um algoritmo a correr
entre os nós A, B e C, a captura do tráfego é efetuada num quarto nó D.
Ponto de Acesso
Estação A
Estação C
Estação
Monitora D
Estação B
Figura 4.1: Arquitetura da rede
Em suma, este componente limita-se à utilização da ferramenta TCPDump e da produção de um ficheiro pcap. A captura de tráfego executa-se, em modo monitor, através de
um computador externo, que não intervém no algoritmo a estudar.
4.3
Análise de Tráfego
Este componente é responsável por processar os resultados da captura de tráfego e produzir os dados que são consumidos pelo componente de visualização. Este componente é
assim responsável por cumprir o requisito de classificação de tráfego e parte dos requisitos
análise da evolução e agregação de informação.
A implementação deste componente recorre à utilização da biblioteca Pcap [36], mais
concretamente a versão LibPcap [36], com uso da linguagem de programação C. Na
prática este componente divide-se em dois programas que, consumindo a mesma captura,
originam tipos de dados diferentes.
4.3.1
Classificação de Tráfego
Este programa é o que permite fazer a distinção dos tipos de pacotes que ocorrem na
rede sem fios. A nível da classificação dos tipos de pacotes (gestão, controlo e dados), esta
informação encontra-se disponível no cabeçalho 802.11. De modo a poder caracterizar
35
CAPÍTULO 4. SISTEMA DE ANÁLISE
o tráfego da aplicação é necessário introduzir quais os endereços IP intervenientes no
algoritmo. E, caso sejam conhecidas, é possível limitar mais os resultados, indicando as
portas utilizadas pelo algoritmo. Assim, se o utilizador definir que pretende analisar o
tráfego entre as máquinas 192.168.1.100, 192.168.1.101 e 192.168.1.102, é considerado pacote
da aplicação qualquer pacote que tenha como origem e destino dois destes endereços
IP. Considerando que estas três máquinas poderão comunicar entre si, fora da execução
do algoritmo, o tráfego útil da aplicação pode ser filtrado através das portas utilizadas.
Utilizando o exemplo da figura 4.2, limitar a classificação de tráfego aos endereços IP
levaria a que os pacotes do protocolo ICMP fossem classificados como tráfego útil. Existe
assim a possibilidade de introduzir um conjunto de portas para restringir o filtro de
pacotes. Os restantes pacotes de dados são classificados como tráfego extra.
mp
te ic
2345
paco
rta 1
, po
p
d
te u
paco
34
rta
p,
pa
12
co
rta
te
po
ud
p,
pa
ud
po
te
co
te
co
pa
icm
p
12
34
5
192.168.1.100
192.168.1.101
5
192.168.1.102
Figura 4.2: Exemplo de tráfego de rede
De modo a cumprir o requisito de análise da evolução, é guardado o estado da rede de
tempos a tempos. Numa captura de dez segundos, por exemplo, se o utilizador pedir uma
análise de 200 em 200 milissegundos, é guardado o número de pacotes e o total de bytes
das mensagens para cada intervalo de tempo. Após o processamento, é produzido um
ficheiro no formato csv que contém a evolução dos tipos de tráfego ao longo do tempo.
4.3.2
Informação sumária
Este programa é em parte responsável pelo requisito de agregação de informação. O
processamento dos pacotes é semelhante ao do programa anterior. Neste caso a classificação de tráfego é simplificada, limitando a distinguir tráfego da aplicação e tráfego extra.
No entanto, ao contrário da implementação anterior, este programa acumula os dados,
apresentando no final um sumário das condições da rede. Os resultados são, mais uma
vez, disponibilizados em formato csv. Neste caso, são produzidos dois ficheiros, separando
a informação do tráfego da aplicação e do tráfego extra. A informação apresentada em
ambos é a seguinte:
• Tempo de execução
36
4.4. VISUALIZAÇÃO
• Número de pacotes
• Número de bytes
• Número de pacotes/segundo
• Número de bytes/segundo
4.4
Visualização
Este componente é responsável por parte dos requisitos de análise da evolução do algoritmo e agregação de informação. Como já referido, este componente consome os
resultados produzidos pelo componente anterior. Para o utilizador gerir as capturas que
pretende analisar e visualizar, é necessário que o sistema disponibilize uma interface
gráfica. De seguida são apresentadas as duas versões da interface gráfica que foram
implementadas.
4.4.1
Versão Java
Inicialmente, foi escolhida a linguagem de programação Java [13] para a implementação
desta interface gráfica. Esta implementação foi feita com recurso ao pacote Java Swing [14]
e à biblioteca XChart [40]. A base desta implementação passa por receber um ficheiro pcap
ou csv e os devidos parâmetros: endereços IP, portas (opcional) e intervalo de tempo (em
milissegundos). Caso o ficheiro introduzido tenha sido em formato pcap, os parâmetros são
usados para executar o programa de classificação de tráfego. Este programa de classificação
produz um ficheiro csv que é processado posteriormente para gerar um gráfico. Caso seja
introduzido um ficheiro csv, não é necessário executar o programa de classificação de
tráfego, sendo possível passar diretamente à produção do gráfico. O utilizador pode então
escolher que informação que pretende visualizar, assim como o tipo de gráfico que prefere
usar. A figura 4.3 mostra a primeira versão da interface gráfica, implementada em Java.
4.4.2
Versão Web
Durante a implementação da versão Java, houve algumas dificuldades em acrescentar
interatividade aos gráficos. Chegando à conclusão que, para acrescentar funcionalidades
aos gráficos, teria que ser despendido muito tempo, optou-se por procurar uma alternativa.
Considerando a familiaridade com as tecnologias, e a vasta oferta de bibliotecas de geração
de gráficos, optou-se por procurar uma alternativa web em Javascript [15]. Tomou-se assim
conhecimento da biblioteca CanvasJS [4] que oferece uma API com as funcionalidades
pretendidas. Alterando a interface gráfica para uma implementação web, é necessária
a implementação de um servidor, sendo escolhida a linguagem Ruby [29], com uso da
framework Ruby on Rails [30]. De modo a agilizar a criação da interface gráfica, foi usada a
framework Bootstrap [2]. Em suma, a versão web é constituída por uma parte de servidor,
37
CAPÍTULO 4. SISTEMA DE ANÁLISE
(a) Ecrã inicial
(b) Opções do gráfico
(c) Gráfico
Figura 4.3: Versão Java
implementada em Ruby on Rails, e por uma parte de cliente, implementada em HTML5
[10], CSS [5] e Javascript com recurso à framework Bootstrap e à biblioteca CanvasJS.
Esta alteração permitiu assim criar uma alternativa à versão Java, em menos tempo de
implementação, acrescentando algumas características interessantes aos gráficos:
• Zoom
• Interatividade com o gráfico, obtendo os valores dos pontos
• Exportação para imagem JPG/PNG
• Ativação/desativação de conjuntos de dados
Considerando a versão anterior, o mesmo ficheiro (pcap ou csv) era processado de todas
as vezes que era submetido. Com recurso a uma base de dados, a versão web guarda os
resultados da captura, aquando da primeira submissão do ficheiro. Deste modo é mantido
um histórico de ficheiros, facilitando o acesso a gráficos anteriormente observados. As
figuras 4.4 e 4.5 mostram a interface gráfica que possibilita a visualização de gráficos.
Para além da visualização de gráficos, esta versão permite, com o uso do programa de
informação sumária, agregar a informação de várias capturas. Neste caso, com a submissão
38
4.4. VISUALIZAÇÃO
(a) Página inicial
(b) Opções do gráfico
Figura 4.4: Versão Web
Figura 4.5: Gráfico da versão web
de várias capturas, e respetivos parâmetros, a aplicação processa a informação sumária
resultante de todas as capturas e produz o seguinte resultado:
• Média do tempo de execução
• Média do número de pacotes
• Média do número de pacotes/segundo
• Média de bytes
• Média de bytes/segundo
39
CAPÍTULO 4. SISTEMA DE ANÁLISE
Figura 4.6: Informação agregada
• Menor tempo de execução
• No de pacotes, correspondente à captura de menor tempo de execução
• No de pacotes/segundo, correspondente à captura de menor tempo de execução
• No de bytes, correspondente à captura de menor tempo de execução
• No de bytes/segundo, correspondente à captura de menor execução
Esta informação é apresentada tanto para o tráfego de aplicação como para o tráfego
extra, podendo destes dados calcular os valores do tráfego total. A figura 4.6 mostra o
resultado da agregação de informação das capturas.
Através deste conjunto de ferramentas, é possível obter um sistema que fornece vários
tipos de informação que podem ser posteriormente utilizados para análise. A figura 4.7
mostra o diagrama de funcionamento deste sistema.
O componente de captura é responsável por fazer a monitorização do algoritmo e
produzir um ficheiro pcap, que contém os dados da captura. O ficheiro pcap, e respetivos
parâmetros, é passado ao componente de análise, através do uso da interface gráfica, de
modo a processar os dados. O componente de análise por sua vez produz dois ficheiros
csv, com a classificação do tráfego e informação sumária, respetivamente, do ficheiro pcap
inserido. Estes ficheiros csv são então utilizados pelo componente de visualização para
produção de gráficos e obtenção da informação agregada. Os gráficos e a informação
agregada são por fim apresentados ao utilizador através da interface gráfica.
Interface Gráfica
csv
Análise
Captura
Visualização
pcap
csv
Figura 4.7: Diagrama do sistema
Os gráficos produzidos pelo sistema podem ser obtidos por um utilizador que, ao
estudar um algoritmo, se depara com uma execução mais demorada. Visualizando os
gráficos, o utilizador pode assim perceber se há problemas com a comunicação dos nós,
40
4.4. VISUALIZAÇÃO
como se poderá ver na secção 5.2. Pode ainda tentar perceber se, no momento daquela
execução, houve tráfego extra acima do normal. A título de exemplo, os gráficos 4.8 e 4.9
representam a mesma execução do algoritmo Turquois. O gráfico 4.10 ilustra a evolução,
ao longo do tempo, do número de pacotes para pacotes de gestão, controlo e dados, sendo
feita a distinção entre os pacotes da aplicação e os pacotes de tráfego adicional. O gráfico
4.9 ilustra a evolução, ao longo do tempo, do número de pacotes para cada nó que executa
o algoritmo.
Figura 4.8: Gráfico temporal da execução do algoritmo para cada tipo de pacote
Figura 4.9: Gráfico temporal da execução do algoritmo para cada nó interveniente
É também possível estudar várias capturas, comparando a informação sumária obtida
em cada uma. Por exemplo, o cenário da figura 4.10, em que foram feitas várias execuções
com 4 e 7 nós. Através das capturas destas execuções, pôde-se obter uma média do
tráfego da aplicação e tráfego extra, indicando o tráfego da rede. Esta informação permite
a formação de gráficos, com uso de Excel, por exemplo. É possível observar que, com
o aumento do número de nós da rede, não só aumenta o tráfego da aplicação como
aumenta o tráfego extra. Assim, num caso de estudo, em que seja necessário testar o
41
CAPÍTULO 4. SISTEMA DE ANÁLISE
(a) Tráfego médio acumulado, com 4 nós
(b) Tráfego médio acumulado, com 7 nós
Figura 4.10: Gráficos de tráfego acumulado
comportamento do algoritmo em diferentes cenários, é interessante poder obter o tráfego
da rede, observando o rácio de tráfego de aplicação e tráfego extra.
A ferramenta implementada servirá assim como auxílio às análises que serão apresentadas no capítulo 5.
42
CAPÍTULO
5
A NÁLISES E FETUADAS
Este capítulo abordará a análise efetuada ao algoritmo em estudo no âmbito desta dissertação. Na secção 5.1 é apresentado o ambiente de testes. De seguida, a secção 5.2 apresenta
a análise feita a capturas, através da visualização de gráficos gerados pelo sistema de
análise. Na secção 5.3 é apresentada a análise aos tempos entre envio de mensagens, feita
com o propósito de encontrar os tempos favoráveis à execução do algoritmo. A secção
5.4 representa a análise ao tráfego da rede, sendo feita a comparação entre os valores
obtidos na secção anterior, de modo a perceber quais os níveis de tráfego desejáveis. Por
fim, a secção 5.5 apresenta a análise do tráfego extra. Nesta análise, o comportamento do
algoritmo é testado com a injeção de tráfego adicional na rede, de modo a perceber as
influência que o tráfego extra poderá ter na execução do algoritmo, ou vice-versa.
5.1
Ambiente de testes
No contexto da avaliação, utilizou-se uma implementação do algoritmo Turquois [25].
Esta implementação foi utilizada no contexto da avaliação de um algoritmo de consenso,
tolerante a falhas bizantinas, em redes ad-hoc. [20]
Esta versão recorre à existência de um nó que controla a experiência e como tal
coordena os intervenientes do consenso. Este nó começa por enviar uma mensagem (INIT),
com a parametrização do algoritmo, dando início à troca de chaves entre os restantes
nós. Após a troca de chaves estar concluída, o nó coordenador envia outra mensagem
(VALUE) a indicar o valor a decidir, dando sinal aos restantes nós para iniciar o consenso.
O nó coordenador mantém-se a par do desenvolvimento do processo de consenso, sendo
responsável por detetar quando é que um quórum de processos chega a consenso.
No âmbito dos testes, este algoritmo foi executado sem falhas, por paragem ou bizantinas, sendo necessário um quórum de k, em n, processos, sendo k = n −
43
n −1
3 .
CAPÍTULO 5. ANÁLISES EFETUADAS
Os dispositivos usados para correr o algoritmo foram Raspberry Pi [28], modelo B,
com sistema Unix, tendo sido usados para redes com 5 a 9 nós. Sendo o principal objetivo
perceber o impacto do algoritmo com diferentes tempos entre envio de mensagens, foram
feitas várias execuções com cada tempo de espera e com diferentes números de nós. Os
tempos entre envio de mensagens usados foram 5, 10, 20, 40 60, 80, 100, 120, 160 e 200
milissegundos. Esta implementação define que de cada vez que um nó muda de fase é
enviada uma mensagem broadcast. Assim, para avaliar se este broadcast terá algum impacto,
optou-se por testar execuções com e sem este broadcast adicional.
Em primeira instância, a rede sem fios consistiu numa rede aberta com um ponto
de acesso. De modo a minimizar a possibilidade de colisões, a rede em uso foi mantida
num canal inutilizado por redes vizinhas. Além disso há que considerar a inexistência de
pacotes do protocolo RTS/CTS [12], pelo facto de todos os nós serem capazes de ouvir os
restantes nós da rede.
5.2
Análise de capturas
Para a análise dos resultados obtidos é necessário considerar algumas particularidades
do algoritmo. No caso da implementação do algoritmo Turquois em questão, é sabido
que a troca de chaves e o consenso executam através do envio de mensagens em portas
diferentes. Mais concretamente, a troca de chaves é feita através de pacotes recebidos pela
porta 12347 e a fase de consenso recebe pacotes pela porta 12345. Para além destas duas
portas, os pacotes de pedido de retransmissão, enviados ao nó coordenador, são recebidos
pela porta 12346. Tendo este conhecimento, é possível identificar as diferentes fases do
algoritmo através da visualização dos gráficos gerados pela ferramenta.
As capturas iniciais, feitas a este algoritmo, serviram como meio de avaliação à ferramenta de análise. Através das capturas, e da sua análise através da ferramenta Wireshark
[39], foi possível verificar a autenticidade dos resultados produzidos pela ferramenta
implementada. Estas capturas permitiram também detetar que a implementação do algoritmo Turquois continha alguns problemas que não garantiam que os nós atingissem o
consenso.
Considere-se o gráfico 5.1, que ilustra a evolução do número de pacotes de cada
nó, ao longo do tempo. Neste caso, existem quatro nós com endereços 192.168.1.101,
192.168.1.103, 192.168.1.105 e 192.168.1.107, a executar o algoritmo, sendo 192.168.1.109 o
nó coordenador, e o tráfego das portas 12345 e 12347. Pode-se observar na figura 5.2 que
os nós não entram na fase de consenso pelo facto que não existir tráfego na porta 12345.
É também possível observar que, a determinada altura, somente os nós 192.168.1.103,
192.168.1.105 e 192.168.1.107 continuam a enviar pacotes. Sendo estes pacotes enviados
para a porta 12347, concluiu-se que estes nós ainda se encontram na fase de troca de
chaves. Este cenário repete-se em várias execuções do algoritmo, dando indicação de que
existem problemas na implementação do algoritmo.
44
5.2. ANÁLISE DE CAPTURAS
Figura 5.1: Falha na receção do pacote INIT no nó 192.168.1.101
Figura 5.2: Falha na receção do pacote INIT no nó 192.168.1.101, com inclusão da porta
12347
Figura 5.3: Falha na receção do pacote VALUE nos nós 192.168.1.101 e 192.168.1.107
45
CAPÍTULO 5. ANÁLISES EFETUADAS
Após identificar as fases problemáticas, foi possível identificar as partes da implementação que deviam ser corrigidas. Devido à não fiabilidade do protocolo UDP e do envio de
mensagens por difusão, caso a mensagem INIT se perdesse e o nó B não o recebesse, este
nó não seria capaz de iniciar o algoritmo, figura 5.4. O mesmo caso acontecia no início do
consenso, caso a mensagem VALUE não chegasse a todos os nós, estes não seriam capazes
de participar no consenso. As capturas permitiram observar que, por vezes, numa rede de
quatro nós, por exemplo, enquanto três comunicavam entre si, um dos nós não participava
na troca de chaves. Não sendo possível efetuar a troca de chaves entre os quatro nós, o
processo de decisão nem sequer era iniciado. O mesmo acontecia no envio da mensagem
VALUE, em caso de falha do envio da mensagem para dois nós, era possível observar
que somente dois nós tentavam chegar a consenso, sem sucesso. Este tipo de falha pode
ser observado na figura 5.3, em que a fase de consenso é identificada pelo acréscimo de
tráfego dos nós 192.168.1.103 e 192.168.1.105.
A
B
C
…
Figura 5.4: Caso de erro
Para a resolução deste problema, foi necessário implementar um mecanismo de retransmissão destes dois pacotes. No caso da mensagem INIT, o nó B ao detetar que os
restantes nós iniciaram a troca de chaves, pede ao nó coordenador para retransmitir a
mensagem, figura 5.5. Na situação da mensagem VALUE, é necessário um valor de timeout.
Completando a troca de chaves, os nós têm um tempo limitado para esperar pela mensagem VALUE. Ultrapassando esse valor, o nó pede ao nó coordenador para reenviar a
mensagem.
Utilizando como exemplo uma execução com quatro nós 192.168.1.108, 192.168.1.109,
192.168.1.151 e 192.168.1.152 e o nó coordenador 192.168.1.100. Ao observar o gráfico da
figura 5.6, pode-se ter a perceção do tráfego gerado por cada nó, em número de pacotes.
Nota-se, por exemplo, que o nó coordenador (192.168.1.100) gera muito menos tráfego que
os restantes, sendo um elemento passivo que não está envolvido na troca de mensagens
por difusão.
Se, ao gráfico anterior, se juntar a informação referente ao tráfego recebido na porta
12345, correspondente ao processo de decisão, pode-se identificar o momento em que o
consenso começa, como se pode observar na figura 5.7. De modo a facilitar a análise do
tráfego do consenso, é ainda possível ampliar o gráfico na zona pretendida e desativar os
46
5.2. ANÁLISE DE CAPTURAS
A
B
C
são
transmis
pedido re
…
Figura 5.5: Caso de retransmissão de pacote
Figura 5.6: Gráfico
Figura 5.7: Gráfico com inclusão da porta 12345
dados da porta 12345, como é possível ver na figura 5.8.
47
CAPÍTULO 5. ANÁLISES EFETUADAS
Figura 5.8: Gráfico com zoom
Figura 5.9: Gráfico com perda de pacotes
O exemplo do gráfico da figura 5.8 mostra também o caso de uma execução que
correu sem percalços. Pode-se observar que assim que a fase de consenso começa, os
quatro nós enviam mensagens a um ritmo semelhante. O gráfico da figura 5.9, por outro
lado, mostra que os nós não iniciaram o consenso na mesma altura. Neste gráfico pode
observar-se com clareza que os nós 192.168.1.108 e 192.168.1.151 começam imediatamente
o consenso, enquanto que os nós 192.168.1.109 e 192.168.1.152 estão inicialmente sem
atividade. Este gráfico permite ainda identificar o momento em que a mensagem VALUE
foi retransmitida. É possível ver, após o período de inatividade dos dois nós, que o nó
coordenador estabelece comunicação e que, de seguida, ambos os nós começam a sua
participação no consenso.
Através da visualização de gráficos é ainda possível relacionar a evolução dos diferentes tipos de pacotes. Na figura 5.10 pode-se observar a evolução do número de pacotes
de gestão, controlo, da aplicação e extra. Neste exemplo e possível ver que o tráfego dos
48
5.3. ANÁLISE DE TEMPOS DE EXECUÇÃO
Figura 5.10: Gráfico
pacotes de dados é acompanhado pelo tráfego dos pacotes de controlo, sendo este constituído, maioritariamente, por pacotes de reconhecimento. O tráfego de gestão mantém-se
mínimo por ser constituído, na sua maioria, por pacotes beacon enviados pelo ponto de
acesso. O tráfego de dados extra constitui pacotes mal formados e pacotes de função nula.
5.3
Análise de tempos de execução
Considerando a instabilidade e imprevisibilidade do meio das redes sem fios, de modo
a avaliar os diversos tempos entre envio de mensagens, foi necessário obter uma amostragem de capturas das execuções do algoritmo. Mais concretamente, foi extraída uma
amostragem de 15 execuções do algoritmo. Devido à grande variação dos tempos de
execução dos 15 valores observados, foi retirado o valor de maior duração de forma a
descartar valores demasiado dispares. Para fins de análise, foram observados os tempos
de execução da fase de consenso, extraindo o tempo de troca de chaves.
Os gráficos, das figuras 5.11 e 5.12, mostram uma evolução imprevisível dos tempos de
execução médios da fase de consenso. Mais uma vez, considerando o meio de comunicação
instável, os tempos de execução do algoritmo variam bastante, mesmo em execuções do
mesmo caso de estudo.
No entanto, se se observar os melhores tempos de execução de cada caso de estudo, os
valores encontrados são mais expectáveis. Pode-se observar nos gráficos das figuras 5.13
e 5.14 a evolução do algoritmo à medida que o intervalo de tempo entre mensagens aumenta. Os valores apresentados nos gráficos correspondem à execução de menor duração,
para cada caso de estudo. Pela observação destes gráficos pode-se concluir três aspetos
interessantes:
1. Como seria de esperar, tempos de espera baixos levam a tempos de execução elevados. Este facto leva a que se pretenda aumentar este valor. No entanto, após
49
CAPÍTULO 5. ANÁLISES EFETUADAS
Figura 5.11: Evolução dos tempos médios de execução, sem broadcast adicional
Figura 5.12: Evolução dos tempos médios de execução, com broadcast adicional
atingir uma fase favorável, o aumento do tempo entre mensagens enviadas, torna a
execução do algoritmo mais lenta.
2. O aspeto anterior torna-se mais visível na figura 5.13, mostrando que a existência
de um broadcast adicional acaba por beneficiar o algoritmo, nos casos com maiores
tempos entre envio de mensagens. Este broadcast acelera a execução do algoritmo
quando o intervalo de tempo é mais elevado. Há que notar, porém, que baixos
tempos entre envio de mensagens, tornam as execuções mais demoradas, aquando
do uso deste broadcast.
3. Para cada número de nós existe um conjunto de intervalos de tempo favoráveis. No
gráfico figura 5.13, por exemplo, pode-se reparar que o melhor tempo de execução
para 4 nós encontra-se com um tempo entre envio de mensagens a 20 ms. Ao observar
os valores dos tempos de execução para 8 nós, pode-se reparar que o melhor caso
encontra-se com um tempo entre envio de mensagens a 80 ms. Estes dados são
expectáveis, considerando que com o aumento do tamanho da rede, é de esperar que
o número de mensagens aumente e seja necessário aumentar o tempo entre envio de
50
5.3. ANÁLISE DE TEMPOS DE EXECUÇÃO
Figura 5.13: Evolução dos tempos mínimos de execução, sem broadcast adicional
Figura 5.14: Evolução dos tempos mínimos de execução, com broadcast adicional
mensagens, para não congestionar a rede.
O objetivo deste caso de estudo prende-se em encontrar um, ou mais, intervalos de
tempo entre envio de mensagens que otimizem a execução do algoritmo em estudo.
Através dos tempos de execução obtidos pôde-se extrair as conclusões da tabela 5.1.
No de nós
Tempos
4
20 - 40
5
20 - 40
6
20 - 40
7
40 - 80
8
80 - 100
Tabela 5.1: Melhores tempos entre envio de mensagens
É importante referir mais uma vez que os tempos de execução do algoritmo não são
valores previsíveis, podendo variar os melhores tempos de execução, fazendo oscilar os
melhores tempos entre envio de mensagens.
51
CAPÍTULO 5. ANÁLISES EFETUADAS
No
nós
4
5
6
7
8
C/ broadcast adicional
Tempo KBytes/seg Pacotes/seg
40
80
400
20
200
900
40
120
600
80
80
500
100
80
500
S/ broadcast adiconal
Tempo KBytes/seg Pacotes/seg
20
130
600
20
200
900
20
210
1000
80
90
500
800
110
700
Tabela 5.2: Tráfego total para cada tempo entre envio de mensagens e respetivo no de nós
No
nós
4
5
6
7
8
C/ broadcast adicional
Tempo KBytes/seg Pacotes/seg
40
60
180
20
180
500
40
90
300
80
60
160
100
60
160
S/ broadcast adicional
Tempo KBytes/seg Pacotes/seg
20
100
300
20
180
500
20
180
500
80
70
190
100
70
190
Tabela 5.3: Tráfego da aplicação para cada tempo entre envio de mensagens e respetivo no
de nós
5.4
Análise de tráfego
Resumindo o processo que levou aos valores apresentados anteriormente. Através de
várias execuções do algoritmo, foi possível extrair os melhores tempos entre envio de
mensagens. Com a informação da tabela 5.1, e as capturas de todas as execuções efetuadas,
recorreu-se assim ao sistema de análise. Com uso deste sistema foi possível avaliar o
tráfego das capturas, fazendo a agregação dos dados por casos de estudo. Desta forma,
para cada número de nós e vários tempos entre envio de mensagens, obteve-se o tráfego
médio e os valores correspondentes à execução de menor duração. Com a obtenção destes
valores, fez-se a relação entre os melhores tempos entre envio de mensagens e o tráfego
da rede. Os tempos, utilizados para fazer esta relação, foram os melhores tempos de
execução de todas as capturas para o respetivo número de nós. Foi assim possível obter
os dados representados pelas tabelas 5.2 e 5.3. Em termos de comparação, a tabela 5.4
mostra execuções com durações consideradas longas, comparativamente às restantes.
Comparando as tabelas 5.2, 5.3 com a tabela 5.4 pode-se notar na diferença de tráfego
entre uma execução considerada favorável e uma execução mais longa.
Através destes dados, pretendeu-se extrair um intervalo que seja representativo dos
melhores tempos entre envio de mensagens. Considere-se o caso da implementação sem
broadcast adicional. Pela observação dos dados da tabela 5.3, pode-se depreender que,
um bom tempo de execução deverá encontrar-se quando o tráfego da aplicação está
compreendido entre [70; 180] KBytes/segundo e [190; 500] pacotes/segundo.
Após esta observação, pretende-se continuar com testes de modo a determinar se é
possível deduzir quais os valores desejáveis para os tempos entre envio de mensagens.
0 Tempo
entre envio de mensagens, em milissegundos
52
5.5. ANÁLISE DE TRÁFEGO EXTRA
No
Aplicação
KBytes/seg Pacotes/seg
220
600
250
700
260
700
230
650
330
900
nós
4
5
6
7
8
Total
KBytes/seg Pacotes/seg
280
1200
300
1300
310
1350
295
1250
400
1800
Tabela 5.4: Tráfego de uma execução com 5ms, com broadcast adicional
5.5
Análise de tráfego extra
No contexto dos resultados obtidos anteriormente, pretende-se modificar o ambiente de
testes em uso. Neste caso, pretende-se executar o algoritmo num ambiente com tráfego
extra. Para tal, as capturas serão feitas durante execução do algoritmo em paralelo com a
transferência de um ficheiro de cerca de 300Mb. Pela observação da tabela 5.3, notou-se
que existe uma quebra brusca no tráfego, ao passar de 6 para 7 nós. Considerando ainda
que o tempo entre envio de mensagens para 6 nós é [20; 40], e para 7 nós é [40; 80], optouse por acrescentar um tempo intermédio de 60 ms. Foram feitos os testes e respetivas
capturas, obtendo os seguintes valores representados na tabela 6.2.
Com recurso aos valores deduzidos anteriormente, conclui-se que as zonas sombreadas
da tabela 6.2 representam os tempos entre envio de mensagens com melhores tempos de
execução.
5 nós
6 nós
7 nós
Tempo
KBytes/seg
Pacotes/seg
KBytes/seg
Pacotes/seg
KBytes/seg
Pacotes/seg
10
20
40
60
80
230
170
90
-
650
450
250
-
280
170
105
75
50
760
470
290
200
140
260
220
115
85
63
720
600
320
230
170
Tabela 5.5: Tráfego da aplicação, com injeção de tráfego extra, sem broadcast adicional
Comparando os tempos de execução obtidos com os intervalos de tempo calculados,
pode-se confirmar que os menores tempos de execução observados se encontram nos
intervalos definidos. Mais concretamente, os melhores tempos observados foram 20 ms
para 5 nós, 40 ms para 6 nós e 40 ms para 7 nós.
Recorrendo à visualização de gráficos produzidos pelo sistema de análise, é possível
observar a relação do tráfego da aplicação com o tráfego extra. Os gráficos das figuras 5.15
e 5.16 mostram dois cenários diferentes:
1. O gráfico da figura 5.15 mostra que, com o uso de um tempo entre envio de mensagens baixo, o tráfego de aplicação é capaz de sobrepor o tráfego da transferência de
ficheiro. Pode-se observar que o tráfego da transferência de ficheiro piora assim que
53
CAPÍTULO 5. ANÁLISES EFETUADAS
Figura 5.15: Execução do algoritmo com 6 nós e 10ms de intervalo, sem broadcast adicional
Figura 5.16: Execução do algoritmo com 6 nós e 40ms de intervalo, sem broadcast adicional
o algoritmo começa. Provavelmente, neste caso, o tráfego da aplicação é a causa do
congestionamento da rede, prejudicando a execução tanto para o algoritmo como
para a transferência.
2. O gráfico da figura 5.16 ilustra o melhor tempo de execução observado. Neste caso,
nota-se que existe uma diferença grande entre o tráfego da aplicação e o tráfego da
transferência. Contudo, sabendo à partida que esta é uma execução ótima, concluiuse que ambos os tráfegos chegam a um equilíbrio que se torna benéfico para a
execução que ambos.
Através desta experiência é possível reparar que, apesar de a injeção de tráfego extra
ter influência no tráfego da aplicação, os tempos de execução ótimos não variam muito
dos tempos observados numa rede sem perturbações. Nota-se também que, os valores
de tráfego, anteriormente definidos, aplicam-se para a identificação de execuções ótimas.
54
5.5. ANÁLISE DE TRÁFEGO EXTRA
Estes resultados mostram ainda que não existe um tempo entre envio de mensagens ideal,
pois os tempos de execução são imprevisíveis. No entanto, permitem detetar um intervalo
de valores favorável, comparativamente a outros que podem provocar o congestionamento
da rede.
55
CAPÍTULO
6
C ONCLUSÕES
Este capítulo apresentará as conclusões desta dissertação. A secção 6.1 começa por apresentar os objetivos iniciais desta dissertação, finalizando com os objetivos que foram
cumpridos. De seguida, a secção 6.2 disponibiliza os resultados obtidos durante o estudo
feito a uma implementação do algoritmo Turquois [20][25]. Por fim, a secção 6.3 apresenta
medidas em que o trabalho desta dissertação poderá ser continuado e melhorado.
6.1
Objetivos e metas
Esta dissertação pretende apresentar um conjunto de metodologias que sejam capazes de
ajudar a observar o funcionamento e compreender um algoritmo distribuído, em meio
WiFi. Para tal, definiram-se como objetivos a implementação de um sistema de análise
de tráfego e a sua aplicação a um caso de estudo de um algoritmo de consenso. Com o
propósito da implementação de um sistema de análise, definiu-se que este deveria ser
capaz de capturar tráfego 802.11 de modo a este poder ser classificado. Na componente de
análise de um algoritmo, definiu-se que o sistema de análise deveria possibilitar o estudo
da execução do algoritmo ao longo do tempo, sendo possível observar o comportamento
e a latência do mesmo.
As metodologias apresentadas pretendem facilitar o estudo do desempenho de um
algoritmo. Para este meio, tenciona-se avaliar várias parametrizações do mesmo, de modo
a apontar as suas condições ideais. Em paralelo, pretende-se estudar o impacto que o
algoritmo pode ter na rede, podendo avaliar se o algoritmo prejudica o tráfego, ou viceversa. O impacto do algoritmo deve ser estudado através da observação do tráfego por
este gerado. Pretende-se que estes estudos sejam levados a cabo com recurso ao sistema
de análise implementado, sendo este sistema uma ferramenta importante para alcançar
uma melhor compreensão do algoritmo.
57
CAPÍTULO 6. CONCLUSÕES
Face aos objetivos apresentados, no decorrer desta dissertação foi possível atingir as
seguintes metas:
1. Visualização da evolução do algoritmo com recurso a gráficos temporais, produzidos
pelo sistema de análise de tráfego. Os gráficos permitem observar a evolução, e respetivo rácio, de cada tipo de tráfego da rede. O tipo de tráfego da rede é classificado
consoante os tipos de pacotes, endereço de origem, endereço de destino e porta.
Para cada tipo de tráfego é possível observar a evolução tanto de número de pacotes
como o número de bytes enviados. O sistema possibilita a análise de capturas, de
modo a compreender o comportamento que o algoritmo toma em cada execução.
2. Captura sistemática de execuções do algoritmo com diferentes parametrizações,
permitindo ter uma amostragem de valores, e de capturas, representativa do desempenho do algoritmo. Através da amostragem de valores, é possível iniciar um
estudo às várias execuções do algoritmo, permitindo comparar os resultados das
diferentes parametrizações e identificar padrões.
3. Através da amostragem de valores, e capturas, é possível, com recurso ao sistema de
análise, obter a informação agregada das execuções para cada caso de estudo. Esta
informação permite estudar as condições da rede, em termos do valor do número
de pacotes ou de bytes a decorrer na rede. Com estes valores é possível comparar o
desempenho do algoritmo em diferentes condições da rede. Com experiências que
introduzam tráfego extra na rede, é possível determinar o impacto que o algoritmo
tem na rede, ou vice-versa, assim como o overhead devido ao protocolo da própria
rede WiFi.
Através do cumprimento destes objetivos, foi possível realizar um estudo a uma
implementação do algoritmo Turquois [20]. Os resultados deste estudo serão apresentados
de seguida.
6.2
Resultados
No âmbito desta dissertação foi levado a cabo um estudo a uma implementação do
algoritmo Turquois. Este estudo seguiu uma estratégia de análise com objetivo a detetar
os melhores parâmetros de execução. Conseguindo obter estes dados, pretendeu-se que
fosse possível, através do estudo do tráfego da rede, depreender se se estava perante uma
parametrização favorável.
Antes de iniciar a estratégia de análise foram realizadas capturas à execução do algoritmo de modo a validar os resultados produzidos pela ferramenta de análise. Por
consequência, destas capturas, foi possível concluir que a ferramenta auxilia na compreensão de um algoritmo, podendo identificar falhas na execução do mesmo. As capturas
da implementação do algoritmo Turquois ajudou a identificar falhas no envio e receção
58
6.2. RESULTADOS
de mensagens essenciais para o funcionamento do algoritmo, como foi apresentado na
secção 5.2.
Dando início à estratégia de análise, começou-se por definir os possíveis parâmetros
de execução do algoritmo. Tendo conhecimento da problemática da definição do melhor
tempo entre envio de mensagens, secção 3.5, optou-se por estudar este valor. Concretamente, utilizaram-se os tempos 5, 10, 20, 40, 80, 100 e 120 milissegundos. Além disto,
optou-se também por estudar o impacto do algoritmo com diferentes números de nós,
para avaliar a escalabilidade do mesmo. Foram feitos testes com 4, 5, 6, 7 e 8 nós.
De seguida, iniciou-se a execução o algoritmo. O algoritmo foi executado num ambiente
sem tráfego extra e com diferentes valores de tempo e números de nós. Em simultâneo
à execução do algoritmo, deu-se inicio à monitorização da rede. Esta monitorização foi
levada a cabo por um nó externo à execução do algoritmo, com recurso ao modo monitor
para obter todo o tráfego 802.11. Desta forma, obteve-se amostra de 15 capturas para
cada parametrização do algoritmo. Através destas capturas, observou-se que tempos
entre envio de mensagens produziam os tempos de execução ótimos. Mais concretamente,
concluiu-se que existe um conjunto de tempos favoráveis, tabela 5.1 da secção 5.3, ao
invés de um valor único, e que os valores observados alteram consoante o número de nós,
como seria de esperar. Foi assim possível perceber o desempenho do algoritmo e a sua
evolução. No entanto, é importante referir que, devido ao ambiente imprevisível e instável
das redes WiFi, os tempos de execução observados variam bastante, mesmo em execuções
com os mesmos parâmetros, como se pode ver nos gráficos 5.11 e 5.12 da secção 5.3. Desta
forma, os valores, daqui para a frente apresentados, são referentes aos melhores casos de
execução.
Utilizando os tempos obtidos, deu-se início ao estudo do tráfego da rede. Com recurso
ao sistema de análise, obteve-se a informação agregada para cada possível parametrização
do algoritmo, podendo ter a perceção do tráfego (em número de mensagens/segundo
e KBytes/segundo) da aplicação e da rede, no total, para cada caso de estudo, tabela 6.1.
Tendo conhecimento dos tempos entre envio de mensagens favoráveis e o tráfego da rede,
foi feita a relação entre estes valores de modo a tentar depreender os valores de tráfego
favoráveis.
No nós
4
5
6
7
8
Tempo
20
20
20
80
100
KBytes/seg
100
180
180
70
70
Pacotes/seg
300
500
500
190
190
Tabela 6.1: Tráfego da aplicação, sem broadcast adicional
Nesta fase do estudo, definiram-se dois intervalos de valores como sendo os possíveis
valores de tráfego favoráveis. Os intervalos definidos correspondem ao tráfego em número
de mensagens/segundo e KBytes/segundo. Estes intervalos são [70; 180] KBytes/segundo
59
CAPÍTULO 6. CONCLUSÕES
No nós
5
6
7
Tempo
20
40
40
KBytes/seg
170
105
115
Pacotes/seg
450
290
320
Tabela 6.2: Tráfego da aplicação com injeção de tráfego extra, sem broadcast adicional
e [190; 500] pacotes/segundo. Existe agora a necessidade de comprovar estes valores,
partindo assim para outra análise de tráfego. Desta vez optou-se por injetar tráfego na
rede, de modo a observar o impacto do algoritmo na rede (ou vice-versa) e testar os
intervalos de tráfego obtidos.
Este estudo consistiu em capturar a execução do algoritmo enquanto decorria a transferência de um ficheiro de 300Mb. Mais uma vez, estudou-se diferentes parâmetros do
algoritmo, fazendo variar os tempos entre envio de mensagens e o número de nós. Após a
conclusão das capturas, recorreu-se novamente ao sistema de análise para obter os valores
de tráfego da aplicação, e do tráfego extra. Após a obtenção destes valores, procurou-se
definir quais os tempos entre envio de mensagens, para cada número de nós, através
da análise dos valores de tráfego da aplicação. Relembrando os intervalos de tráfego
obtidos anteriormente ([70; 180] KBytes/segundo e [190; 500] pacotes/segundo), a tabela
6.2 identifica as execuções que poderão ser consideradas favoráveis. Comparando os
tempos calculados com os valores reais, obtidos da execução do algoritmo, observou-se
que as execuções ótimas do algoritmo decorriam dentro dos valores de tráfego calculados.
Pôde-se então concluir que é possível identificar execuções favoráveis através dos valores
do tráfego da aplicação.
Para além destas conclusões, a injeção de tráfego extra na rede pode demonstrar o
impacto que o algoritmo tem. Concretamente, observou-se que tempos entre envio de mensagens demasiado baixos causam congestionamento na rede, prejudicando o desempenho
da transferência de ficheiro. No caso de tempos entre envio de mensagens favoráveis,
observou-se que o tráfego da rede adapta-se, sendo distribuído equilibradamente entre a
transferência de ficheiro e a execução do algoritmo. Concluiu-se que esta observação se
deve ao facto do protocolo TCP, usado na transferência, se adaptar para usar a banda que
fica disponível. Esta distribuição permite que ambas as execuções decorram em níveis de
tráfego favoráveis a ambos, sem que a transferência prejudique o algoritmo ou vice-versa.
Em suma, através desta estratégia de estudo, pode-se assim concluir que, com a análise
do tráfego da aplicação e da rede, é possível melhorar a perceção do comportamento do
algoritmo que se pretende estudar. Define-se, assim, um possível conjunto de métodos
que levem à compreensão do impacto do algoritmo, e que medidas se devem tomar para
melhorar a execução do mesmo.
60
6.3. TRABALHO FUTURO
6.3
Trabalho Futuro
As conclusões levadas a cabo por esta dissertação levantam algumas questões que poderão
ser respondidas com algum trabalho futuro. O estudo do algoritmo Turquois, mostra que
é possível, através da utilização das metodologias de estudo, encontrar um intervalo de
tráfego favorável para a execução do algoritmo. Através deste intervalo, deve ser possível,
somente com a observação do tráfego gerado pelo algoritmo, identificar se a presente
execução está a decorrer dentro dos níveis desejados.
Perante esta observação, propõe-se que seja possível implementar um sistema autonómico, que dinamicamente otimize as parametrizações do algoritmo. Este novo sistema
deverá analisar a execução do algoritmo, em tempo real, de modo a observar os níveis
de tráfego gerado. Através desta observação, deverá ser possível deduzir se a execução
se encontra dentro dos níveis desejados. Em caso negativo, o sistema, deverá alterar as
parametrizações do algoritmo de modo a orientá-lo para valores de tráfego favoráveis. Isto
é, o sistema autonómico, ao observar valores de tráfego elevados deverá baixar o tempo
entre envio de mensagens, para aliviar o congestionamento da rede. Ou ainda, caso os
valores de tráfego sejam baixos, elevar o tempo entre envio de mensagens para atingir um
tempo de execução mais desejado. Realizando este tipo de análise dinâmica, propõe-se que
o sistema seja capaz de encontrar e definir a parametrização ideal do algoritmo, somente
através da observação dos níveis de tráfego gerado pelo algoritmo, ou já presente na rede.
Dentro da mesma linha de raciocínio, propõe-se, como trabalho de futuro, realizar
testes com maior número de nós. O objetivo desta proposta é que seja possível extrapolar os
intervalos de tempo entre envio de mensagens, consoante o número de nós interveniente
no algoritmo. Caso seja possível criar uma relação lógica entre o número de nós e o
tempo entre envio de mensagens, propõe-se também que o sistema autonómico possa ser
estendido para alterar a parametrização do algoritmo consoante o número de nós que
forem sendo detetados como participantes do algoritmo.
Propõe-se ainda que, através da utilização da ferramenta de análise implementada,
no contexto desta dissertação, seja possível levar a cabo estudos mais elaborados. A
ferramenta de análise auxilia o estudo da execução de algoritmos através da visualização
de gráficos que representam o comportamento do mesmo. Através destes gráficos, propõese que seja possível identificar outros problemas da rede, para além das observações
feitas na secção 5.5. Estes problemas poderão ser identificados por congestionamento da
rede, ou padrões que indiquem a presença clientes maliciosos que possam estar a atacar a
segurança da rede, ou a consumir grande parte da banda da rede.
61
B IBLIOGRAFIA
[1] Almeida, João. “Intrusion Tolerant Routing with Data Consensus in Wireless Sensor
Networks”. Tese de mestrado. Faculdade de Ciências e Tecnologia da Universidade
Nova de Lisboa, 2013.
[2]
Bootstrap. URL: http://getbootstrap.com.
[3] Calhoun, P. and Montemurro, M. and Stanley, D. Control and Provisioning of Wireless
Access Points (CAPWAP) Protocol Binding for IEEE 802.11. RFC 5416. 2009.
[4]
CanvasJS. URL: http://canvasjs.com.
[5] Cascading Style Sheets. URL: http://www.w3.org/Style/CSS/Overview.en.
html.
[6]
Ergen, Mustafa. IEEE 802.11 Tutorial. Rel. téc. 2002, p. 90.
[7] Farruca, Nuno. “Wireshark para Sistemas Distribuídos”. Tese de mestrado. Faculdade de Ciências e Tecnologia da Universidade Nova de Lisboa, 2009.
[8] Gast, Matthew. 802.11 Wireless Networks: The Definitive Guide. O’Reilly Media, Inc,
2005.
[9] Gupta, Arpit and Min, Jeongki and Rhee, Injong. “WiFox: Scaling WiFi Performance
for Large Audience Environments”. Em: Proceedings of the 8th International Conference
on Emerging Networking Experiments and Technologies. CoNEXT ’12. Nice, France:
ACM, 2012, pp. 217–228. ISBN: 978-1-4503-1775-7.
[10]
HTML5. URL: http://www.w3.org/TR/html5/.
[11] IEEE Computer Society. IEEE Standards for Local Area Networks: Carrier Sense Multiple Access With Collision Detection (CSMA/CD) Access Method and Physical Layer
Specifications. 1985.
[12] IEEE Computer Society. Wireless LAN Medium Access Control and Physical Layer
Specifications. 2012.
[13]
Java. URL: https://www.java.net.
[14] Java SE 7 Swing APIs and Developer Guides. URL: http://docs.oracle.com/
javase/7/docs/technotes/guides/swing/.
[15]
Javascript. URL: http://www.ecmascript.org.
63
BIBLIOGRAFIA
[16]
Kurose, James F. and Ross, Keith W. Computer Networking A Top-Down Approach.
2008.
[17]
Lamport, Leslie. “Paxos Made Simple”. Em: ACM SIGACT News 32 (2001), pp. 18–25.
[18]
Lamport, Leslie. “Byzantizing Paxos by Refinement”. Em: (2010).
[19]
Lamport, Leslie, Shostak, Robert and Pease, Marshall. “The Byzantine Generals
Problem”. Em: ACM 4 (1982), pp. 382–401.
[20]
Libório, João. Design, implementation and evaluation of a Byzantine Fault Tolerant Consensus Protocol, in an Ad-Hoc 802.11 Wireless Environment. Rel. téc. 2014.
[21]
Lynch, Nancy. Distributed Algorithms. San Francisco: CA: Morgan Kaufmann Publishers, 1996. ISBN: 978-1-55860-348-6.
[22]
Martin Garcia, Luis. “Programming with Libpcap - Sniffing the Network From Our
Own Application”. Em: In Hacking (2008), pp. 38–46.
[23]
Martins, Nuno. “Captura de tráfego de rede de um processo com base no PCAP”.
Tese de mestrado. Faculdade de Ciências e Tecnologia da Universidade Nova de
Lisboa, 2011.
[24]
McCanne, Steven and Jacobson, Van. “The BSD Packet Filter: A new architecture for
user-level packet capture”. Em: USENIX Winter 1993 Conference Proceedings (1993).
[25]
Moniz, Henrique and Neves, Nuno Ferreira and Correia, Miguel. Turquois: Byzantine
consensus in wireless ad hoc networks. IEEE, 2010, pp. 537–546. ISBN: 978-1-4244-7501-8.
[26]
Open Mobile Alliance. Wireless Application Protocol Architecture Specification. Rel. téc.
2001, p. 20.
[27]
Peaser, Marshall and Shostak, Robert and Lamport, Leslie. “Reaching agreement in
the presence of faults”. Em: J. ACM 27 (1980), pp. 228–134.
[28]
Raspberry Pi. URL: http://www.raspberrypi.org.
[29]
Ruby. URL: http://www.ruby-lang.org/en.
[30]
Ruby on Rails. URL: http://rubyonrails.org.
[31]
Schulman, Aaron and Levin, Dave and Spring, Neil. “On the Fidelity of 802.11
Packet Traces”. Em: PAM (2008).
[32]
Swain, Pravati and Chakraborty, Sandip and Nandi, Sukumar and Bhaduri, Purandar. “Performance Modeling and Evaluation of IEEE 802.11 IBSS Power Save Mode”.
Em: (2013).
[33]
Tanenbaum, Andrew S. and van Steen, Maarten. Distributed Systems, Principles and
Paradigms. 2007.
[34]
Tavares, João. “Encaminhamento e disseminação de dados tolerantes a instruses para
redes de sensores sem fios”. Tese de mestrado. Faculdade de Ciências e Tecnologia
da Universidade Nova de Lisboa, 2012.
64
BIBLIOGRAFIA
[35] TCPDump & LibPCap Related Work. URL: http://www.tcpdump.org/related.
html.
[36]
TCPDump & LipPcap. URL: "http://www.tcpdump.org".
[37]
WinDump. URL: http://www.winpcap.org/windump/.
[38]
WinPcap. URL: "http://www.winpcap.org".
[39]
Wireshark. URL: "http://www.wireshark.org".
[40]
XChart. URL: http://xeiam.com/xchart/.
[41] Youssef, Moustafa A. and Vasan, Arunchandar and Miller, Raymond E. “Specification and Analysis of the DCF and PCF Protocols in the 802.11 Standard Using
Systems of Communicating Machines”. Em: ().
65
2015
Ana Gonçalves
Monitorização de Sistemas Distribuídos em Redes WiFi
Download

Monitorização de Sistemas Distribuídos em Redes WiFi