Fernanda Andrade Oliveira
Estudo sobre Redes Ad-Hoc Móveis com Suporte à Descoberta
de Serviços
Vitória-ES
28 de março de 2011
Fernanda Andrade Oliveira
Estudo sobre Redes Ad-Hoc Móveis com Suporte à Descoberta
de Serviços
Monografia apresentada para obtenção do Grau
de Bacharel em Ciência da Computação pela
Universidade Federal do Espírito Santo.
Orientadora:
Profa. Dra. Roberta Lima Gomes
DEPARTAMENTO DE INFORMÁTICA
CENTRO TECNOLÓGICO
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO
Vitória-ES
28 de março de 2011
Monografia de Projeto Final de Graduação sob o título “Estudo sobre Redes Ad-Hoc
Móveis com Suporte à Descoberta de Serviços”, defendida por Fernanda Andrade
Oliveira e aprovada em 28 de março de 2011, em Vitória, Estado do Espírito Santo, pela
banca examinadora constituída pelos professores:
______________________________
Profa. Dra. Roberta Lima Gomes
Universidade Federal do Espírito Santo
Orientadora
______________________________
Prof. Dr. Magnos Martinello
Universidade Federal do Espírito Santo
______________________________
Renan Manola
Universidade Federal do Espírito Santo
DEDICATÓRIA
À minha mãe, minha madrinha
e minhas avós (In Memoriam).
AGRADECIMENTOS
Agradeço à minha família pelo amor e suporte em todos esses anos. Em especial à minha
mãe, meu padrasto e minhas irmãs por estarem sempre perto, nos bons e maus momentos.
Agradeço também à minha madrinha e sua família, pelo carinho e incontáveis orações. À
minha grande amiga Mariana que me aguentou e me escutou nos momentos de desespero e
nos momentos de superação.
Agradeço à minha orientadora Roberta, pela paciência, comprometimento e pela
oportunidade que me foi dada, aprendi muito nesse último ano e a isso sou eternamente
grata. Agradeço também ao Magnos e Renan pelo apoio e ensinamentos.
Agradeço aos meus amigos de turma Carol e Julião, pelos 4 anos e meio de luta, vocês
fizeram o percurso ser mais agradável. Ao João Thompson e Aline pela companhia agradável
no laboratório e cantina. E ao João Vitor que inúmeras vezes me ajudou com os problemas
no LPRM.
Por fim, agradeço aos meus amigos de Aruanda, sem vocês eu não teria conseguido chegar
até aqui.
« Il faut être convaincu qu’on est doué pour quelque chose et que
cette chose, quel qu’en soit le prix, doit être atteinte. »
Marie Curie
RESUMO
Este trabalho consiste em um estudo sobre redes ad-hoc e dispositivos móveis dando
enfoque à descoberta de serviços. São discutidos os conceitos, tecnologias e padrões de
redes ad-hoc móveis e descoberta de serviços. O padrão Zero Configuration Networking
(ZeroConf) é apresentado e os seus protocolos componentes são descritos de forma
detalhada. O trabalho também apresenta a plataforma para dispositivos móveis Android,
dando enfoque ao suporte a redes ad-hoc. Através da API JmDNS, que implementa o padrão
ZeroConf em Java, são desenvolvidas duas aplicações: uma de descoberta de serviços e outra
de mensagem instantânea para redes ad-hoc.
ABSTRACT
This work presents a study on ad-hoc networks and mobile devices with focus on service
discovery. Discuss the concepts, technologies and patterns of ad-hoc networks and service
discovery. The pattern Zero Configuration Networking (ZeroConf) is presented and its
protocol components are described in detail. The work also features the Android platform
for mobile devices, focusing on the support of ad-hoc networks. Through the API JmDNS,
which implements the pattern in Java, are developed two applications: a service discovery
and a instant messaging application for ad-hoc networks.
SUMÁRIO
LISTA DE FIGURAS
LISTA DE SIGLAS E ABREVIATURAS
1 INTRODUÇÃO............................................................................................................
1.1 OBJETIVOS...........................................................................................................
1.2 METODOLOGIA...................................................................................................
1.3 ESTRUTURA DA MONOGRAFIA...........................................................................
14
15
15
16
2 FUNDAMENTAÇÃO TEÓRICA...................................................................................
2.1 DISPOSITIVOS PORTÁTEIS...................................................................................
2.1.1 Tecnologias...............................................................................................
2.2 REDES AD-HOC MÓVEIS......................................................................................
2.2.1 WiFi............................................................................................................
2.3 DESCOBERTA DE SERVIÇOS.................................................................................
2.3.1 Arquitetura de Descoberta de Serviços...................................................
2.3.2 Tecnologias de Descoberta de Serviços...................................................
2.4 CONSIDERAÇÕES SOBRE O CAPÍTULO.................................................................
17
17
18
19
22
24
25
27
29
3 ZERO CONFIGURATION NETWORKING....................................................................
3.1 ENDEREÇOS IP SEM DHCP .................................................................................
3.1.1 Atribuição Manual....................................................................................
3.1.2 Servidor DHCP...........................................................................................
3.1.3 Auto-atribuição com IPv4LL.....................................................................
3.2 RESOLUÇÃO DE NOMES SEM DNS......................................................................
3.2.1 Multicast DNS...........................................................................................
3.3 BUSCANDO POR SERVIÇOS.................................................................................
3.4 IMPLEMENTAÇÕES.............................................................................................
3.5 CONSIDERAÇÕES SOBRE O CAPÍTULO................................................................
30
31
31
32
33
34
34
35
38
39
4 IMPLEMENTAÇÃO.................................................................................................... 40
4.1 PLATAFORMA ANDROID..................................................................................... 40
4.1.1 Arquitetura............................................................................................... 41
4.1.2 Ambiente de Desenvolvimento............................................................... 42
4.2 AD-HOC EM ANDROID........................................................................................ 44
4.3 JmDNS................................................................................................................. 46
4.4 APLICAÇÃO DE DESCOBERTA DE SERVIÇOS........................................................ 46
4.4.1 Cenário de Utilização da Aplicação......................................................... 47
4.5 APLICAÇÃO DE MENSAGEM INSTANTÂNEA........................................................ 52
4.5.1 Cenário de Utilização da Aplicação......................................................... 52
4.6 DIFICULDADES NA IMPLEMENTAÇÃO................................................................ 54
4.7 CONSIDERAÇÕES SOBRE O CAPÍTULO................................................................ 55
5 CONCLUSÕES E TRABALHOS FUTUROS ................................................................... 57
5.1 TRABALHOS FUTUROS......................................................................................... 59
REFERÊNCIAS
LISTA DE FIGURAS
Figura 1: Rede ad-hoc multi-hop............................................................................ 20
Figura 2: Arquitetura de camadas MANET............................................................
21
Figura 3: Rede WiFi infraestruturada e ad-hoc...................................................... 23
Figura 4: Registros A, SRV e PTR............................................................................
36
Figura 5: Registros não preenchidos...................................................................... 37
Figura 6: Arquitetura Android................................................................................ 41
Figura 7: (a) Tela inicial da aplicação (b) Tela de registro de serviço (c) Tela de
descoberta de serviços..........................................................................................
47
Figura 8: Alice busca por serviços..........................................................................
48
Figura 9: Nenhum serviço encontrado..................................................................
48
Figura 10: Alice registra serviço de presença........................................................ 49
Figura 11: Bob registra serviço de presença .........................................................
49
Figura 12: Bob busca por serviços de presença.....................................................
50
Figura 13: Resultado de busca de serviços............................................................
50
Figura 14: Resolução de serviço............................................................................. 51
Figura 15: Resultado da resolução de serviço.......................................................
51
Figura 16: Tela de conexão....................................................................................
53
Figura 17: (a) Tela de troca de mensagens (b) Chat..............................................
53
LISTA DE SIGLAS E ABREVIATURAS
AAPT
Android Asset Packaging Tool
ADB
Android Debug Bridge
ADT
Android Development Tools
AODV
Ad-Hoc On-Demand Distance Vector
AP
Access Point
API
Application Programming Interface
CSMA/CA
Carrier Sense Multiple Access with Collision Avoidance
CT
Centro Tecnológico
DCF
Distributed Coordination Function
DDMS
Dalvik Debug Monitor Server
DHCP
Dynamic Host Configuration Protocol
DNS
Domain Name System
DNS-SD
Domain Name System – Service Discovery
DSR
Dynamic Source Routing
DSSS
Direct Sequence Spread Spectrum
FHSS
Frequency Hopping Spread Spectrum
FTP
File Transfer Protocol
GPS
Global Positioning System
HTTP
HyperText Transfer Protocol
IBSS
Independent Basic Service Set
IDE
Integrated Development Environment
IEEE
Institute of Electrical and Electronics Engineers
IETF
Internet Engineering Task Force
IP
Internet Protocol
IPP
Internet Printing Protocol
IPv4LL
Internet Protocol version 4 Link Local
ISM
Industrial, Scientific and Medical
LAN
Local Area Network
LPRM
Laboratório de Pesquisas em Redes e Multimídia
MAC
Media Access Control
MANET
Mobile Ad-Hoc Network
mDNS
Multicast Domain Name System
OHA
Open Handset Alliance
OLSR
Optimized Link State Routing
P2P
Peer-to-Peer
PAN
Personal Area Network
PDA
Personal Digital Assistant
QoS
Quality of Service
RFC
Request for Comments
RREP
Route Reply
RREQ
Route Request
SDK
Software Development Kit
SO
Sistema Operacional
SSDP
Simple Service Discovery Protocol
TBRPF
Topology Broadcast based on Reverse-Path Forwarding
TCP
Transmission Control Protocol
UDP
User Datagram Protocol
UI
User Interface
UPnP
Universal Plug and Play
WiFi
Wireless Fidelity
WiMAX
Worldwide Interoperability for Microwave Access
XML
Extensible Markup Language
XMPP
Extensible Messaging and Presence Protocol
ZeroConf
Zero Configuration Networking
14
1 INTRODUÇÃO
A última década presenciou uma revolução na área de informática denominada computação
móvel. O desenvolvimento de diferentes tecnologias possibilitou que dispositivos móveis
como celulares, se tornassem menores e mais potentes, resultando em uma grande
demanda por aplicações e soluções para tais dispositivos.
Ao mesmo tempo, as redes sem fio se desenvolveram, tornando-se mais confiáveis, mais
seguras e mais populares. No escopo de redes sem fio se destacam as redes ad-hoc, que são
redes que não necessitam de infraestrutura para serem estabelecidas. As redes ad-hoc
caracterizam um vasto assunto de pesquisa e apresentam grandes desafios como, por
exemplo, a implementação de seu roteamento. Entretanto, seu uso ainda é pouco comum
entre os usuários de dispositivos móveis, o que demonstra um potencial de utilização ainda
não explorado e um mercado promissor de aplicações.
Diante da expansão e popularização dos dispositivos móveis, aumentam-se as situações de
uso e aplicações de redes móveis (ou redes de dispositivos móveis) e também a necessidade
de se pesquisar soluções para problemas que envolvam especificamente redes móveis. Tais
pesquisas devem sempre visar o melhor aproveitamento dos recursos dos equipamentos e
praticidade para os usuários.
Junto ao desenvolvimento de dispositivos móveis e redes sem fio, existe também o aumento
da oferta de serviços em redes. Além dos serviços tradicionais que foram definidos com o
estabelecimento da Internet, tais como serviços de Telnet, FTP e serviços de correio
eletrônico, atualmente existem diversos novos serviços e a expectativa de um maior
crescimento do número de serviços disponíveis em uma rede local, por exemplo. Em redes
sem fio móveis os serviços ficam espalhados pela rede e a disponibilidade de serviços é
ainda maior, pois cada dispositivo componente da rede tem a potencialidade de prover
serviços enquanto pertencer à rede.
Com o crescimento do número de serviços e com a dinamicidade com que esses serviços
podem ser disponibilizados ou removidos de uma rede sem fio, tem-se a necessidade de se
utilizar “descoberta de serviços”. Uma aplicação de descoberta de serviço possibilita que o
15
usuário da rede localize os serviços oferecidos pela rede, provendo um maior
aproveitamento dos recursos da rede.
O surgimento de novas tecnologias para dispositivos móveis, principalmente tecnologias
abertas, a possibilidade de se utilizar redes ad-hoc em diversos cenários, o suporte de
mecanismos de descoberta e publicação de serviços nessas redes, e a necessidade de
melhor compreensão e utilização dessas redes, são as principais motivações deste trabalho.
1.1 OBJETIVOS
Este trabalho tem como objetivo geral o estudo de tecnologias de suporte à criação de redes
ad-hoc com dispositivos móveis, com foco nos mecanismos de descoberta de serviços para
este tipo de ambiente. Este objetivo geral desdobra-se nos seguintes objetivos específicos:
•
pesquisar as diversas plataformas de dispositivos móveis disponíveis;
•
estudar os fundamentos e protocolos envolvendo redes ad-hoc móveis;
•
escolher e estudar uma plataforma móvel específica para por em prática os estudos
realizados neste trabalho;
•
estudar e testar o suporte aos mecanismos de redes ad-hoc na plataforma escolhida;
•
estudar protocolos e bibliotecas de descoberta de serviço no contexto de redes adhoc móveis;
•
realizar testes de bibliotecas abertas para implementação de mecanismos de
descoberta de serviços em redes;
•
implementar aplicação móvel que utilize a descoberta de serviços.
1.2 METODOLOGIA
A metodologia utilizada foi a leitura e análise de artigos e livros sobre os assuntos de
dispositivos móveis, redes sem fio, redes ad-hoc e descoberta de serviços. Busca e estudo de
16
protocolos de redes ad-hoc e descoberta de serviços. Também foram pesquisadas
bibliotecas ou APIs que implementassem os protocolos utilizados.
Para testar e por em prática os conceitos estudados, uma plataforma móvel aberta foi
escolhida e estuda. Foi necessário verificar o suporte dessa plataforma quanto à criação de
redes ad-hoc, e solucionar os possíveis problemas relacionados à rede.
Dentre as APIs estudas, foi escolhida uma para servir de base à implementação de duas
aplicações: uma de descoberta/publicação de serviços, e uma de mensagem instantânea que
utiliza informações coletadas pela primeira aplicação.
1.3 ESTRUTURA DA MONOGRAFIA
A presente monografia encontra-se estruturada da seguinte forma:
O CAPÍTULO 2: Apresenta a fundamentação teórica que abrange dispositivos móveis, suas
características e limitações e apresenta algumas tecnologias de celulares e smartphones.
Esse capítulo também discorre sobre redes ad-hoc móveis e a tecnologia de redes sem fio
WiFi. Ainda nesse capítulo, é discutida a descoberta de serviços e são apresentados alguns
protocolos para a localização de serviços.
CAPÍTULO 3: Apresenta uma explicação detalhada das características e do funcionamento do
padrão Zero Configuration Networking. Um padrão que compreende a criação de redes IP e
descoberta de serviços baseada em DNS (Domain Name System).
CAPÍTULO 4: Apresenta a plataforma para celulares Android, expõe a falta de suporte do
Android à redes ad-hoc, trazendo uma solução para essa limitação. Apresenta também a API
JmDNS que é usada na implementação das aplicações de descoberta de serviços e
mensagem instantânea. O capítulo também explica o funcionamento das aplicações,
trazendo ao seu final considerações sobre as dificuldades encontradas nas implementações.
CAPÍTULO 5: Apresenta as conclusões e trabalhos futuros.
17
2 FUNDAMENTAÇÃO TEÓRICA
Este capítulo consiste na explanação dos conceitos de dispositivos portáteis, redes ad-hoc e
descoberta de serviços. Esses conceitos estão interligados e são necessários para o
entendimento das redes ad-hoc móveis habilitadas com descoberta de serviços.
2.1 DISPOSITIVOS PORTÁTEIS
Dispositivos portáteis, também chamados de dispositivos móveis, são diversos
equipamentos que possuem características em comum, como tamanho reduzido, tela
pequena, baixo poder de processamento, pouca memória e limitada autonomia de bateria,
possuindo ainda uma ou mais interfaces de comunicação sem fio. Esses equipamentos
apresentam limitações de recursos computacionais se comparados a computadores desktop
ou notebooks devido ao seu tamanho reduzido. Entretanto desde o surgimento dos
primeiros dispositivos portáteis, verifica-se um aumento expressivo de seu poder
computacional, o que vem possibilitando o desenvolvimento de aplicações que antes só
eram encontradas em desktops. Exemplos comuns são celulares, smartphones, relógios, mp3
players e PDAs (Personal Digital Assistant). No escopo deste trabalho, os dispositivos
portáteis serão representados pelos celulares e smartphones, e doravante referenciados
como celulares.
Além dos serviços básicos de telefonia, os celulares apresentam funcionalidades de
multimídia como câmera de vídeo e fotos, players de áudio, interfaces de rede Bluetooth e
WiFi, sistema de localização por GPS, entre outras. O conjunto de funcionalidades oferecidos
dependem do modelo e marca do dispositivo, sendo os mais populares os que apresentam o
maior número de funcionalidades.
Com o aumento da oferta de serviços e operações possíveis de se realizar com o dispositivo,
cresce também o problema causado pela limitação do recurso de energia. A complexidade
das operações exige uma maior disponibilidade de bateria. As transmissões de rede são um
18
dos processos mais custosos em termos de energia, necessitando uma maior atenção do
desenvolvedor para implementar técnicas que evitam o desperdício desse recurso.
Existem diversos sistemas operacionais para celulares. Alguns são de hardware específico,
como os iPhones da Apple, que é responsável pelo desenvolvimento tanto do dispositivo
quanto do software. Outros como Windows Mobile e Android, são sistemas que aparecem
em diversos tipos de hardware.
2.1.1 Tecnologias
Diante da diversidade de sistemas e plataformas, atualmente se destacam algumas
tecnologias, tanto por número de vendas quanto pela qualidade da estrutura oferecida para
desenvolvedores. Alguns desses sistemas são:
•
iOS: É o sistema operacional do iPhone, iTouch e iPad. Lançado em 2007, apesar de
possuir um SDK (Software Development Kit), somente aplicações autorizadas pela
Apple podem ser instaladas no dispositivo. As aplicações são escritas em Objective-C;
•
Symbian OS: É o sistema operacional dos aparelhos Nokia. Possui também um SDK e
é programado em C++;
•
Windows Mobile: É encontrado em diversas marcas de aparelhos. De código
proprietário, vem sendo substituído pelo Windows Phone 7. Suas aplicações são
programadas em C++;
•
BlackBerry OS: É o sistema de código proprietário dos aparelhos BlackBerry. Não
possui uma SDK, mas fornece uma API (Application Programming Interface) para
desenvolvimento de códigos de terceiros com funcionalidade limitada;
• Android: Lançado em 2007, é uma pilha de software de código aberto para celulares.
Mantido pela Google, procura ser a maior concorrência ao iPhone. As aplicações são
escritas em Java.
19
2.2 REDES AD-HOC MÓVEIS
Conhecidas como MANET (Mobile Ad-Hoc Networks) redes ad-hoc móveis são redes
formadas por dispositivos móveis (nós móveis) equipados com interface de rede sem fio que
se comunicam entre si sem o auxilio de infraestrutura. Neste esquema, cada nó pode ser um
servidor, cliente ou roteador. MANET também é o nome dado ao grupo de trabalho da IETF
responsável pelo desenvolvimento e padronização de tais redes.
Os conceitos de redes ad-hoc remontam à década de 70 com o projeto da DARPA (Defence
Advanced Research Projects Agency), tais redes eram chamadas Packet Radio Networking
naquela época. Inicialmente, portanto, as redes ad-hoc eram utilizadas para fins militares,
possibilitando a comunicação em campos de batalha. A partir da década de 90 com os
avanços nas tecnologias de radio comercial e redes sem fio, as pesquisas em redes ad-hoc se
intensificaram e novos usos, fora do campo militar, surgiram.
Essas redes são úteis em cenários onde não é possível se instalar uma infraestrutura, ou
também onde não há necessidade de infraestrutura devido ao caráter temporário da rede.
Alguns cenários possíveis são interação entre serviços de emergência em desastres naturais,
conferencias e seminários, salas de aulas, ou simples necessidade de troca de arquivos.
A rede ad-hoc mais simples é uma rede peer-to-peer formada por dispositivos que se
encontram dentro de um mesmo alcance, e se auto-configuram numa rede single-hop.
Entretanto, essa rede fica limitada a equipamentos que estão no mesmo alcance de
transmissão, essa limitação pode ser superada pelo paradigma multi-hop.
Numa rede multi-hop, os pacotes são encaminhados da fonte até o destino. Nós próximos
podem se comunicar diretamente através de uma tecnologia sem fio single-hop, nós que
não estão diretamente conectados, se comunicam encaminhando seus pacotes através de
uma sequência de nós intermediários, como pode se verificar na figura 1.
20
Figura 1: Rede ad-hoc multi-hop
Na figura 1, os círculos representam o alcance de cada nó, as setas em azul demonstram a
rota necessária para se atingir os nós periféricos.
A flexibilidade e conveniência das redes ad-hoc móveis trazem alguns novos desafios. Além
dos problemas tradicionais de redes sem fio, falta de estrutura fixa, a mobilidade dos nós e a
natureza multi-hop adicionam novas características, complexidades e dificuldades
específicas dessas redes, como por exemplo, topologia dinâmica da rede dificultando o
roteamento, variação da capacidade dos enlaces e entrada e saída constante de novos nós.
O grupo de trabalho MANET1 da IETF adotou uma visão IP-cêntrica das MANETs que herdam
as camadas da pilha TCP/IP. Conti e Giordano em (CONTI; GIORDANO, 2007) apresentam
uma arquitetura formada pelas seguintes camadas: tecnologias de base (enabling
technologies), rede (networking), middleware e aplicações (applications), como pode ser
visto na figura 2.
1
http://tools.ietf.org/wg/manet
21
Figura 2: Arquitetura de camadas MANET (CONTI; GIORDANO, 2007)
As tecnologias de base garantem a comunicação single-hop entre os dispositivos,
compreendendo a camada MAC e a camada física da pilha TCP/IP. Os seguintes padrões
suportam o paradigma de redes ad-hoc: IEEE 802.15.4 também conhecido como Zigbee para
uso em redes de curto alcance e baixa taxa de dados, IEEE 802.15.1 ou Bluetooth para redes
pessoais, 802.11 ou WiFi para redes de alta velocidade com médio alcance e 802.16 também
chamado de WiMAX para redes de alta velocidade e alto alcance. A tecnologia mais utilizada
é a 802.11 devido a prévia popularidade das redes sem fio WiFi.
Os protocolos de rede utilizam os serviços de single-hop fornecidos pelas tecnologias de
base para oferecer serviços de entrega fim-a-fim, do transmissor ao receptor fora da área de
alcance. Roteamento e encaminhamento são os serviços básicos de rede. Roteamento é a
função de identificar um caminho entre o transmissor e o receptor, encaminhamento é a
função de entregar os pacotes através do caminho identificado. Essas funções estão ligadas
com as características da topologia da rede. Devido à natureza imprevisível e dinâmica das
redes ad-hoc móveis, seu roteamento apresenta grandes desafios.
De acordo com o grupo de trabalho da IETF, os protocolos de roteamento são classificados
em duas categorias principais: protocolos proativos ou reativos (sob demanda).
Os
protocolos proativos tentam manter informações de roteamento consistentes e atualizadas
para cada par de nós da rede através da propagação de mensagens de atualização de rotas
enviadas periodicamente. Por outro lado, protocolos reativos estabelecem rotas para
encaminhamento somente quando necessário. De acordo com (CONTI; GIORDANO, 2007)
22
os quatro principais protocolos implementados são os reativos, AODV (Ad-Hoc On-Demand
Distance Vector) e DSR (Dynamic Source Routing) e os proativos OLSR (Optimized Link State
Routing) e TBRPF (Topology Dissemination Based on Reverse Path Forwarding).
Dentre as questões que envolvem todas as camadas da rede estão controle do consumo de
energia, segurança e qualidade de serviço (QoS). O consumo de energia é uma questão
crucial quando se tratando de dispositivos móveis, faltando energia, os serviços ficam
indisponíveis. A escolha de protocolos que visam a diminuição do consumo de energia é
necessária. A qualidade de serviço não é garantida nativamente, pesquisas e padrões devem
ser desenvolvidos.
Redes ad-hoc são uma evolução importante das redes sem fio. Elas comportam diversas
potencialidades que não estão disponíveis em redes sem fio tradicionais e podem ser
utilizadas em diferentes ambientes. Como os sistemas móveis são relativamente recentes, a
demanda por suporte a redes ad-hoc também é recente, ocasionando uma instabilidade no
suporte a essas redes pelas tecnologias. Assim, apesar dos avanços e da quantidade de
pesquisas, ainda há muito a ser desenvolvido e padrões a serem estabelecidos.
2.2.1 WiFi
IEEE 802.11 2 ou WiFi é um padrão de transmissão de dados sem fio nas frequências de 2.4 e
5 GHz da banda ISM (Industrial Scientific and Medical). O grupo de trabalho responsável pelo
padrão é o “Working Group for WLAN Standards” 3.
O padrão proporciona redes LAN entre computadores, dispositivos móveis e redes físicas
infraestruturadas. Definindo uma camada física e uma camada MAC nas suas especificações.
Três diferentes tecnologias são definidas como interface da camada física: infravermelho,
FHSS (Frequency Hopping Spread Spectrum) e DSSS (Direct Sequence Spread Spectrum). A
tecnologia mais utilizada é a DSSS que oferece uma taxa de bits de 11 Mbps na faixa de
2
3
Disponível em http://standards.ieee.org/about/get/.
http://www.ieee802.org/11/index.shtml
23
2.4GHz e 54 Mbps na faixa de 5 GHz. O método de acesso básico da camada MAC é o
Distributed Coordination Function (DCF) com Carrier Sense Multiple Access with Collision
Avoidance (CSMA/CA).
WiFi pode ser utilizado para implementar LANs infraestruturadas ou ad-hoc. Como pode ser
visto na figura 3 que ilustra uma rede infraestruturada e seus componentes, e uma rede adhoc.
Figura 3: Rede WiFi infraestruturada e ad-hoc (GIORDANDO, 2002)
Em uma rede infraestruturada, existe uma entidade central de controle para cada célula
chamado Access Point. Todo tráfego passa pelo AP, que também é responsável por conectar
a rede sem fio a possíveis redes cabeadas existentes e fornecer o acesso a Internet.
No modo ad-hoc, os dispositivos na mesma célula, chamada Independent Basic Service Set
(IBSS), podem se comunicar diretamente com qualquer outro dispositivo dentro da célula,
sem a interferência de uma entidade centralizadora. Devido à flexibilidade do algoritmo
CSMA/CA, a sincronização dos dispositivos é suficiente para a correta recepção e
transmissão de dados.
O padrão 802.11 apresenta várias versões representadas por letras, em cada versão
diferencia-se frequência de utilização, capacidade de vazão de bits entre outros aspectos.
24
2.3 DESCOBERTA DE SERVIÇOS
A maioria das pesquisas envolvendo MANETs se concentram na conectividade entre os nós
móveis devido às dificuldades impostas pelo dinamismo das redes. O dinamismo é
consequência da mobilidade dos nós, condições adversas do canal sem fio, e limitações de
energia dos dispositivos móveis, o que ocasiona frequentes desconexões e falha nos nós.
Entretanto, para a adoção de MANETs, é necessário mais do que a solução do problema de
conectividade. Como o objetivo dessas redes é possibilitar a troca de dados e serviços entre
usuários móveis, também são necessários arquiteturas, mecanismos e protocolos para
descoberta de serviços.
Descoberta de serviços possibilita aos nós da rede:
•
a publicação de seus serviços;
•
a consulta de serviços fornecidos por outras entidades;
•
a seleção do serviço mais apropriado;
•
a invocação dos serviços.
Inicialmente, descoberta de serviços era utilizada no contexto de redes infraestruturadas.
Em MANETs, novos desafios surgem devido às características da rede, como:
•
Disponibilidade dos serviços, devido à mobilidade dos nós;
•
Frequentes desconexões do servidor ou do cliente ou de nós intermediários,
quebrando ou modificando o acesso ao serviço ou algum parâmetro para sua
seleção, como seu endereço IP por exemplo.
•
Variabilidade do canal, levando a variabilidade de características de comunicação
como taxa de envio de dados e atrasos.
De acordo com (VERVERIDIS; POLYZOS, 2008) MANETs atraíram uma enorme atenção da
comunidade científica nos últimos anos, entretanto a quantidade de aplicações civis
permanece insignificante. Descoberta de serviços eficiente é um dos pontos chaves que
precisam ser resolvidos para a aceitação de MANETs.
25
2.3.1 Arquitetura de Descoberta de Serviços
Os protocolos de descoberta de serviços podem ser classificados devido a características que
apresentam. Características como arquitetura, modo de operação, camada de rede em que
são baseados, entre outras. Existem três arquiteturas básicas que um protocolo de
descoberta de serviços pode adotar: arquitetura baseada em diretórios, arquitetura sem
diretórios e arquitetura híbrida.
Na arquitetura baseada em diretórios, um nó pode apresentar três papeis. Pode ser um
servidor (provedor de serviços, oferecendo serviços para os outros nós), um cliente
(solicitador de serviços, requisitando serviços de outros nós) ou um diretório de serviços
(facilitador de comunicação entre servidores e clientes). Provedores de serviços registram
seus serviços nos diretórios e os solicitadores de serviços são informados dos serviços
disponíveis somente através dos diretórios.
Um diretório pode ser centralizado ou distribuído, sendo que o primeiro é adotado
principalmente em redes infraestruturadas, pois um diretório centralizado representa um
ponto de falha. Em redes ad-hoc, a melhor solução são diretórios distribuídos pois nem
sempre todos os nós estão disponíveis em todos os momentos. Diretórios distribuídos
contribuem também para uma maior escalabilidade da estrutura, um único nó móvel teria
dificuldade de responder a todas as requisições da rede.
É importante ressaltar que a abordagem baseada em diretórios compreende custos
adicionais de comunicação da rede para se manter a estrutura dos diretórios e no caso de
diretórios distribuídos, também para se manter a consistência dos dados entre os
componentes do diretório distribuído.
A arquitetura sem diretórios difere da acima citada pois não há uma entidade mediadora
entre os provedores e solicitadores de serviços. É uma arquitetura mais simples pois não
necessita de mecanismos para seleção e manutenção de diretórios. Provedores publicam
seus serviços e solicitadores requisitam serviços de forma broadcast pela rede.
26
Um problema básico na abordagem sem diretórios é determinar a frequência de mensagens
de anúncio de serviços, de forma a diminuir a carga da rede e evitar transmissões
redundantes. Uma solução encontrada é o scheduling, provedores anunciam os serviços
periodicamente com o auxilio de algoritmo de back-off exponencial, ou seja os anúncios são
cada vez menos frequentes até atingir um limiar determinado pelo algoritmo. Uma outra
forma de se diminuir a carga da rede é utilizar multicasting. Servidores publicam seus
serviços para um grupo multicast, e clientes requisitam serviços da mesma forma.
Na arquitetura híbrida, caso encontrem um diretório, os provedores de serviços registram
seus serviços nesses diretórios, caso contrário, eles simplesmente publicam seus serviços de
forma broadcast. O mesmo acontece para os solicitadores de serviços, se conhecem algum
diretório da rede, buscam por serviços no diretório, se não conhecem, buscam por serviços
de forma broadcast.
Pode-se confirmar em (VERVERIDIS; POLYZOS, 2008) que apesar das muitas publicações
envolvendo cada uma das arquiteturas apresentadas, pesquisadores não chegaram a um
consenso sobre qual arquitetura é melhor. Os critérios para avaliar as arquiteturas são:
disponibilidade dos serviços, overhead de mensagens e latência. A dificuldade de se escolher
uma arquitetura é devido às diferenças das características das MANETs, como número de
nós, mobilidade dos nós, razão entre clientes e servidores, sendo assim cada arquitetura
apropriada para um determinado cenário. Por exemplo, para uma MANET com alto grau de
mobilidade e baixa frequência de requisição de serviços, uma arquitetura sem entidade
mediadora é mais eficiente do que uma arquitetura baseada em diretório, pois a última teria
informações constantemente desatualizadas ou teria um gasto altíssimo para manter a
integridade das informações.
Independente da arquitetura apresentada existem três possíveis modos de operação para
um solicitador de serviços adquirir informações: modo reativo, modo proativo e modo
híbrido.
No modo reativo o cliente envia uma query ou para os servidores ou para o diretório em
busca de serviços. No modo proativo, os servidores anunciam seus serviços em
determinados intervalos de tempo. No modo hibrido, servidores anunciam seus serviços e
clientes buscam serviços através de queries. Novamente, dependendo das características da
27
rede, um modo de operação é mais eficiente que outro. Quando o número de servidores é
maior do que o de clientes, a abordagem mais apropriada é a reativa, no caso contrário, a
mais apropriada é a proativa.
Com relação a camada de rede, temos duas principais abordagens de descoberta de
serviços, baseada na camada de aplicação ou cross-layer. A maioria dos protocolos baseados
na camada de aplicação já eram utilizados em redes infraestruturadas. Mensagens de
anúncio e descoberta são trocadas a nível de aplicação. Já a descoberta de serviços crosslayer, são específicas para redes móveis ad-hoc, e se utilizam das informações de
roteamento para a descoberta de serviços. Descoberta de serviços cross-layer exploram a
capacidade de conseguir informações sobre serviços juntamente com informações sobre
rotas (pelas mesmas mensagens), carregando informações sobre serviços dentro das
mensagens de roteamento. Dessa forma, transmissões redundantes na camada de aplicação
são evitadas.
Em suma, há diversas arquiteturas e características disponíveis. Devido às diferenças de
composição e configuração das MANETs, não se pode classificar como uma arquitetura
sendo melhor que outra, só a que melhor se adapta a uma situação. Na próxima seção são
apresentados algumas tecnologias para implementação ou suporte de descoberta de
serviços.
2.3.2 Tecnologias de Descoberta de Serviços
Tecnologias de descoberta de serviços são desenvolvidas para simplificar o uso de
dispositivos em redes, permitindo que serviços e equipamentos sejam descobertos,
configurados e usados por outros dispositivos com o mínimo de trabalho manual. De acordo
com (RICHARD, 2000), apesar desses padrões de descoberta de serviços apresentarem
funcionalidades similares, nenhuma das tecnologias compreende todas as outras e é madura
o suficiente para dominar o mercado.
28
Como exemplo de protocolos de descoberta de serviços retirados de (VERVERIDIS; POLYZOS,
2008) e (SU; GUO, 2008) temos:
•
Jini: Desenvolvida pela Sun, é uma arquitetura que especifica a descoberta e
invocação de serviços para dispositivos habilitados com Java, uma máquina virtual
Java é obrigatória. Jini possui um servidor de lookup que funciona como um diretório,
armazenando serviços publicados por provedores de serviços e respondendo a
queries de clientes. Os provedores de serviço registram seus serviços no servidor de
lookup enviando objetos de serviços e seus atributos. Objetos de serviços são proxies
escritos em Java que servem de interface para o acesso remoto de clientes ao
serviço. Os clientes recebem esses proxies dos servidores de lookup, através de suas
requisições;
•
Simple Service Discovery Protocol: SSDP é o protocolo de descoberta de serviços
utilizado pelo UPnP (Universal Plug and Play). UPnP é um conjunto de protocolos que
busca expandir o conceito de Plug and Play para os componentes de uma rede,
buscando o reconhecimento e configuração automáticos de novos dispositivos na
rede. O protocolo apresenta estrutura de diretórios opcionais denominados pontos
de controle. A descoberta de serviços se dá utilizando HTTP sobre UDP multicast ou
unicast. SSDP é considerado um protocolo custoso, principalmente em memória,
dificultando
sua
implementação
em
dispositivos
com
limitados
recursos
computacionais.
•
DNS Service Discovery: DNS-SD é o protocolo de descoberta de serviços proposto
pelo padrão Zero Configuration Networking. Desenvolvido para ser utilizado em
diversos dispositivos com interface de rede IP, inclusive pequenos dispositivos como
sensores ou câmeras, é um protocolo simples e leve, adequado ao uso em aparelhos
celulares. A descoberta de serviços é baseada em DNS (Domain Name System),
usando os registros do já estabelecido padrão DNS para efetuar a busca e registro de
serviços.
•
AODV Service Discovery: É a descoberta de serviços cross-layer baseada no
protocolo de roteamento AODV (Ad-Hoc On-Demand Distance Vector). O protocolo
aproveita os mecanismos de roteamento para a descoberta de serviços. AODV-SD
estende o formato das mensagens de RREQ (Route Request) e RREP (Route Reply) do
29
protocolo de roteamento. Assim, cada nó contém uma lista com informações de
serviços. Cada linha da lista contém um identificador único do serviço, seu endereço
IP, a duração do serviço e os atributos do serviço.
2.4 CONSIDERAÇÕES SOBRE O CAPÍTULO
O capítulo discorreu sobre os conceitos fundamentais de redes ad-hoc móveis e descoberta
de serviços. A descoberta de serviços é uma ferramenta essencial para o bom uso e
aproveitamento dos recursos da rede, principalmente redes ad-hoc em que os usuários têm
grande mobilidade, saindo e entrando do alcance da rede, fazendo com que os serviços
disponíveis sejam desconhecidos à maioria dos participantes. Apesar do grande número de
pesquisas e protocolos propostos, não há ainda uma solução definitiva em relação ao
roteamento da rede. Com relação às camadas física e MAC, o protocolo 802.11 se apresenta
como uma tecnologia bem desenvolvida e estável.
O estudo sobre redes ad-hoc se mostra necessário, pois em termos de usuários finais, ainda
são pouco aproveitadas as capacidades que a rede oferece, muito mais do que aplicações de
troca de conteúdo multimídia, redes ad-hoc podem tornar a troca de informações mais
rápida, simples e ubíqua.
O próximo capítulo apresenta-se de forma mais detalhada o conjunto de protocolos Zero
Configuration Networking que se adapta bem ao uso em redes ad-hoc, oferecendo um
protocolo de auto-atribuição de endereços IP e um protocolo de descoberta de serviço, o
DNS-SD.
30
3 ZERO CONFIGURATION NETWORKING
Zero Configuration Networking ou ZeroConf representa um conjunto de protocolos que
envolve três tecnologias com o propósito de se construir redes IP de forma ad-hoc com o
mínimo de configuração possível, buscando a simplicidade e visando ser utilizado também
por periféricos com pouca capacidade computacional como câmeras e impressoras de rede.
Essas tecnologias são: IPv4 Link-Local Address, Multicast DNS e DNS Service Discovery.
Desde 1999 existe um grupo de trabalho da IETF (Internet Engineering Task Force)
responsável por padronizar o ZeroConf. De acordo com seu criador, Stuart Cheshire
(CHESHIRE; STEINBERG, 2005), o objetivo é tornar redes IP tão simples como redes elétricas,
onde é possível se plugar um equipamento e ele já está pronto para usar. Assim, ZeroConf
propõe a criação de redes IP em que os usuários não se deparam com configurações de
endereço IP ou máscaras de subrede, por exemplo. Além disso, ZeroConf também dispensa
a necessidade de infraestrutura de rede. Servidores de DNS e DHCP são substituídos pelas
tecnologias que compõe o protocolo.
ZeroConf compreende endereçamento, nomeação e busca por serviços. O endereçamento é
proposto sem configuração manual ou servidor DHCP e é implementado pelo IPv4 Link-Local
Address (IPv4LL). A resolução de nomes dispensa o uso do servidor DNS, pois é realizada pelo
Multicast DNS (mDNS). A busca por serviços ou descoberta de serviços é baseada em DNS,
realizada também pelo mDNS e chamada de DNS Service Discovery (DNS-SD). É necessário
esclarecer, entretanto, que essas três tecnologias podem ser utilizadas em separado. Podese utilizar mDNS em uma rede onde o endereçamento é realizado por um servidor DHCP por
exemplo. Neste capítulo serão descritas essas tecnologias e o papel das mesmas no
ZeroConf.
31
3.1 ENDEREÇOS IP SEM DHCP
Todo equipamento pertencente a uma rede IP necessita de um endereço IP que seja único
na rede. Assim, para se atribuir um endereço IP é necessário escolher um endereço IP válido
e confirmar sua unicidade na rede.
Existem diferentes formas de se atribuir um endereço IP, sendo estas: atribuição manual,
servidor DHCP ou auto-atribuição com IPv4LL.
3.1.1 Atribuição Manual
Toda plataforma possibilita a configuração manual do endereço IP. Para a configuração são
necessários:
•
endereço de rede: os endereços do tipo IPv4 são formados por 4 octetos formando
um total de 32 bits. Cada octeto pode ser representado de forma decimal, sendo
separados por pontos, como em “192.168.010.005”. O endereço é formado por uma
porção que identifica a rede e outra porção que identifica o host.
•
máscara de subrede: identifica quais bits do endereço IP representam a porção da
rede;
•
endereço de gateway: endereço de um dispositivo da rede que possibilita a conexão
entre hosts de diferentes redes;
•
endereço de DNS padrão: endereço do serviço que possibilita a resolução de nomes
em endereços IP.
Uma autoridade central é responsável pela distribuição dos endereços e por evitar conflitos,
normalmente essa autoridade é o administrador da rede. O administrador da rede é
responsável por determinar a faixa de endereços válidos e quais estão disponíveis.
32
Das atribuições de endereço IP, a manual é a mais trabalhosa e propensa a erros. É mais fácil
atribuir endereços inválidos ou repetidos quando essa atribuição é realizada por um ser
humano. A escalabilidade da rede fica comprometida pela atribuição manual, pois em caso
de reconfiguração da rede (troca da subrede por exemplo), se a rede for composta por
muitas máquinas, essa reconfiguração levará muito tempo para ser executada.
3.1.2 Servidor DHCP
O servidor DHCP (Dynamic Host Configuration Protocol) é uma forma automatizada,
portanto menos propensa a erros, de se atribuir endereços IP aos equipamentos.
O servidor é configurado com uma faixa de endereços válidos que pode distribuir aos
equipamentos requisitantes. Há duas formas básicas de se configurar um servidor para a
distribuição de endereços. A forma mais comum é tratar os equipamentos de forma
anônima e distribuir os endereços com o princípio “primeiro a chegar, primeiro a ser
servido” (first-come, first-served). Outra forma é distribuir um endereço IP específico para
cada equipamento de acordo com uma tabela que liga o endereço IP ao endereço MAC da
máquina. Esta tabela se encontra dentro do servidor.
Algumas vantagens da utilização do servidor DHCP são a confiabilidade, pois os servidor
garante que não haja dois equipamentos com o mesmo endereço IP na rede, e a
automatização na atribuição dos endereços, o que torna uma possível reconfiguração da
rede uma atividade mais veloz.
Uma das desvantagens é que o usuário comum não sabe configurar um servidor DHCP, o
que dificulta o uso de DHCP em redes em que não haja um administrador.
33
3.1.3 Auto-atribuição com IPv4LL
Auto-atribuição com IPv4LL (IPv4 Link Local) é a atribuição de endereço IP proposta pelo
ZeroConf. As atribuições anteriores, manual ou servidor DHCP, necessitam de uma
autoridade central para controlar a distribuição de endereços. Já na auto-atribuição com
IPv4LL, a seleção de endereços é feita de forma distribuída. Cada equipamento é responsável
por escolher um endereço e verificar se é possível utilizá-lo.
IPv4LL é um bloco de endereços definidos pelo RFC 3330 que só são válidos no domínio local
da rede, e tem o propósito de serem utilizados para a auto-atribuição de IP. Os endereços
IPv4LL estão compreendidos na subrede 169.254.0.0/16.
O protocolo ARP (Address Resolution Protocol) é normalmente utilizado para a resolução de
endereços IP em endereços MAC4. Entretanto, o protocolo ZeroConf faz uso de mensagens
ARP para a atribuição de endereços IP.
A atribuição de endereço IP se divide em duas partes: escolha do endereço IP e verificação
da unicidade de tal endereço. A escolha se dá de forma randômica de um endereço
compreendido de 169.254.1.0 a 169.254.254.255. A verificação da unicidade ocorre da
seguinte maneira: envia-se uma mensagem ARP com o endereço intencionado para a rede.
Se houver uma resposta a essa mensagem, significa que alguém já possui esse endereço,
portanto deve-se reiniciar o processo e escolher outro endereço. Se não houver resposta
após o envio de três mensagens ARP, entende-se que o endereço IP não está sendo
utilizado, portanto o endereço escolhido é único. Antes de começar a utilizar o endereço
escolhido, é necessário anunciar que o equipamento está utilizando aquele IP através de
outra mensagem ARP.
O bom funcionamento do protocolo depende da cooperação de todos os equipamentos da
rede. Uma das características do protocolo é ser descentralizado, adequando-o ao uso em
redes ad-hoc.
4
Endereço MAC é um endereço de 6 bytes, único, atribuído pelo fabricante da interface de rede com o
propósito de identificá-lo.
34
3.2 RESOLUÇÃO DE NOMES SEM DNS
Para o funcionamento da rede IP, é necessário que cada equipamento tenha seu endereço
IP, entretanto memorizar endereços IP não é uma atribuição fácil ao ser humano, assim os
endereços IP são normalmente relacionados a nomes. Surge então a necessidade de se
resolver nomes em endereços IP.
DNS (Domain Name System) é um sistema para nomeação de computadores e serviços de
redes usado para localizar computadores e serviços através de nomes de fácil compreensão.
O sistema associa o nome ao endereço IP do serviço.
3.2.1 Multicast DNS
No sistema de servidor DNS, o cliente faz uma requisição de resolução de nome para o
servidor, e esse responde com o endereço IP relativo ao nome. Uma alternativa mais simples
e barata para redes locais é o Multicast DNS (mDNS).
Multicast DNS funciona com a colaboração de todas as máquinas da rede. Quando uma
máquina faz uma query, ao invés de ela enviar para um servidor DNS ela envia para um
endereço IP multicast, assim todas as máquinas envolvidas no processo recebem essa query.
Cada máquina tem uma porção de software denominada Responder, responsável por
escutar as queries. Quando uma máquina escuta uma query que é para si, ela a responde,
como um servidor DNS convencional faria.
A atribuição de nomes com mDNS segue os mesmos princípios da auto-atribuição de
endereços IP. É escolhido um nome, e depois através das queries é verificado a unicidade
dos nomes. Em caso de nomes repetidos, pode-se pedir outro nome ao usuário ou anexar
números ao final do nome para diferenciá-lo do nome já existente.
35
A resolução de nomes ocorre de uma forma colaborativa, todas as queries e respostas são
enviadas ao endereço multicast 224.0.0.251 que é o endereço multicast reservado para o
protocolo mDNS.
3.3 BUSCANDO POR SERVIÇOS
Depois de se ter um endereço IP e um nome que referencia este endereço, tornando-o mais
fácil de se manipular, surge a necessidade de se conhecer os recursos oferecidos pela rede.
Em uma rede com diversos dispositivos é comum a oferta de diferentes serviços. Conhecer e
ter acesso aos serviços de forma automática, garante uma maior usabilidade da rede,
principalmente em redes ad-hoc que são muito dinâmicas, tornando a disponibilidade dos
serviços imprevisível.
Surge assim a descoberta de serviços. Os nomes que representam os serviços aparecem em
uma listagem, não necessitando mais decorar os nomes ou serviços existentes na rede. A
descoberta de serviços proporciona o conhecimento e melhor aproveitamento de todos os
serviços disponíveis na rede. Uma impressora, uma câmera, ou mesmo pessoas disponíveis
para conversar.
ZeroConf opta pela descoberta de serviços ao invés de descoberta de equipamentos, apesar
de ser sutil a diferença, a descoberta por serviços desacopla a necessidade de ser o mesmo
hardware oferecendo um serviço de impressão, por exemplo. Pode-se trocar a impressora,
mas o serviço oferecido é o mesmo. Mantendo-se o mesmo nome do serviço, garante-se ao
usuário que o serviço oferecido é o mesmo.
Outra característica da descoberta de serviço oferecida pelo ZeroConf é a noção de late
binding (ligação tardia). Como em muitos casos, decorre-se um tempo entre descobrir o
serviço e realmente utilizá-lo, o serviço só é associado ao seu endereço IP no momento da
utilização. Associar um serviço a seu endereço IP e porta é chamado de resolução de serviço.
36
A descoberta de serviços proposta pelo ZeroConf é baseada no DNS. As mensagens
envolvidas na descoberta e resolução de serviços são do mesmo formato de queries DNS. As
queries são do tipo SRV,PTR, A e TXT, já utilizadas pelos serviços DNS.
O DNS se utiliza de vários registros ou mensagens para a resolução de nomes. Desses
registros 4 são reutilizados pelo DNS-SD para a descoberta de serviço. O registro SRV contém
nome, porta do serviço e nome do host, é utilizado para o registro e resolução do serviço. O
registro PTR é na verdade um ponteiro, guarda o tipo de serviço e nome do serviço, é
através do registro PTR que é realizada a busca dos nomes dos serviços disponíveis. O
registro A guarda o endereço IP do serviço e o registro TXT é utilizado para informações
adicionais do serviço, como características dos serviços e informações de configurações.
Figura 4: Registros A, SRV e PTR
Na figura 4 temos o exemplo dos três registros principais preenchidos: A, SRV e PTR. No
registro A, observa-se o nome do host e o seu endereço IP. No registro SRV encontra-se o
nome do serviço,a porta e o nome do host. Já no registro PTR, encontra-se o tipo de serviço
e o serviço. Para a busca dessas informações, utiliza-se os registros não preenchidos, os
registros de resposta à busca são da forma preenchida. Os registros não preenchidos podem
ser observados na figura 5.
37
Figura 5: Registros não preenchidos
O mDNS é mecanismo responsável pela descoberta e resolução dos serviços utilizando essas
queries. Portanto, a descoberta de serviços não requisita mais implementação de código,
todo o código utilizado é o da implementação do mDNS.
Os serviços são classificados em tipos de serviços, para facilitar a busca. O tipo de serviço, na
maioria dos casos, é o protocolo utilizado pelo serviço. Alguns exemplos de tipos de serviços
são:
•
presença: Os serviços de presença anunciam a presença de um usuário, como em
uma aplicação de mensagem instantânea, apresentando uma lista de pessoas
disponíveis para conversar;
•
ipp: Para serviços de impressão que utilizam o protocolo de impressão Internet
Printing Protocol.
•
http: Para serviços que funcionam sobre o protocolo HTTP e pode ser visualizado em
um web browser.
Vale ressaltar que é possível registrar mais serviços à medida que são criadas aplicações
diferentes. Em (http://www.dns-sd.org/ServiceTypes.html) é possível acessar o RFC 2782 que
padroniza os nomes de tipos de serviços, e verificar a lista com todos os tipos de serviços já
registrados bem como orientações para o registro de novos tipos.
Qualquer API que implemente a descoberta de serviços precisa fornecer três operações
básicas: registrar, buscar e resolver. Uma aplicação de descoberta de serviços deve
possibilitar que se registre o serviço a ser anunciado, especificando o nome do serviço, o tipo
de serviço, seu endereço IP e sua porta. Deve também possibilitar buscar o serviço. Essa
busca deve ser feita por tipo de serviço, assim a relação de todos os serviços de determinado
38
tipo disponíveis na rede deve ser mostrada. E finalmente, resolver os serviços. Na busca de
serviços a operação realizada apenas lista os nomes dos serviços disponíveis, os nomes dos
serviços são descobertos através de trocas de mensagens do tipo PTR. Porém para se utilizar
os serviço é necessário saber seu IP e porta. Para se obter essas informações é necessário
uma nova operação que é chamada resolução de serviço, onde os dados do serviço
escolhido são descoberto através de trocas de mensagens do tipo SRV. A resolução do
serviço é feita no momento de se utilizar o serviço para garantir que os dados fornecidos
sejam atuais.
A descoberta de serviços para redes ad-hoc é uma ferramenta que torna a usabilidade da
rede muito maior. É comum, participantes de redes ad-hoc não conhecerem os outros nós
da rede e assim, não conhecerem os serviços disponíveis na rede. A descoberta de serviços
proporciona que sejam implementadas diversas aplicações que possam ser publicadas e bem
utilizadas pelos integrantes da rede.
3.4 IMPLEMENTAÇÕES
O protocolo de auto-atribuição com IPv4LL surgiu anteriormente ao padrão ZeroConf. As
primeiras implementações de IPv4 Link-Local apareceram no MAC OS 8.5, MAC OS X 10.0,
Windows 98 e no Linux através do ZCIP5. Clientes Multicast DNS podiam ser encontrados no
MAC OS 9.2, MAC OS X, no Windows através do Bonjour for Windows 6 e no Linux através do
NICTA. DNS-SD estava disponível no MAC OS X 10.2 em diante e no Linux através do projeto
open-source Darwin7.
Implementações ZeroConf são encontradas nas principais plataformas. A implementação
mais conhecida é a Apple Bonjour 8, seguida do Ahavi 9, a implementação ZeroConf para
Linux e BSD. Há também o Bonjour for Windows.
5
http://sourceforge.net/projects/zeroconf/
http://support.apple.com/en_US/downloads/#bonjour for windows
7
http://darwinsource.sourceforge.net/
8
http://developer.apple.com/opensource/
9
http://avahi.org/
6
39
Além de implementações para os principais sistemas operacionais, existem diversos projetos
open-source que disponibilizam APIs em diversas linguagens, para o desenvolvimento de
aplicações
ZeroConf.
Um projeto
open-source
bem
estruturado,
em
constante
10
desenvolvimento é o JmDNS , que implementa Multicast DNS em Java e disponibiliza uma
API para descoberta de serviços. Em python existe o projeto pyZeroConf11.
3.5 CONSIDERAÇÕES SOBRE O CAPÍTULO
ZeroConf oferece uma solução prática, simples e fácil de se implementar uma rede IP,
proporcionando ao usuário comum a habilidade de criar uma rede com o mínimo de
configuração e tendo a seu dispor a ferramenta de descoberta de serviço. Por ser um
protocolo que visa ser utilizado em equipamentos com pouca capacidade computacional
como câmeras e impressoras, é ideal para ser utilizados em redes de dispositivos móveis. A
descoberta de serviços proporciona que a rede seja muito mais fácil de utilizar e que seus
recursos sejam melhor utilizados. Com isso, pretende-se mostrar no próximo capítulo a
implementação de descoberta de serviços em celulares Android, para serem utilizados em
redes ad-hoc, através da API JmDNS.
Foi escolhida a API JmDNS por ela ser escrita em Java, o que facilita a adaptação para o uso
em Android, já que em Android se programa em Java Standard Edition com exceção da parte
gráfica. E também por ser uma API atual que está em constante aprimoramento.
10
11
http://jmdns.sourceforge.net/
http://sourceforge.net/projects/pyzeroconf/
40
4 IMPLEMENTAÇÃO
Como forma de concretizar e por em prática os estudos realizados neste trabalho, foi
realizada uma etapa de implementação. Nesta etapa visou-se a criação de redes ad-hoc com
suporte à descoberta de serviços utilizando-se como base uma plataforma móvel aberta.
Para essa implementação foi escolhida a plataforma Android pois, além de ser uma
plataforma open source, trata-se de uma tecnologia consideravelmente recente. Outro
aspecto motivador, é seu SDK que apresenta ferramentas que facilitam o desenvolvimento
de aplicações.
Como protocolo para descoberta de serviços foi utilizado o DNS Service Discovery, proposto
pelo padrão ZeroConf e implementado pela API open source JmDNS. Como foi dito
anteriormente, o padrão ZeroConf se adapta bem ao uso em redes ad-hoc, entre outras
razões por apresentar um protocolo de descoberta de serviços descentralizado. JmDNS foi
escolhida por ser um projeto open source ativo que apresenta frequentes melhorias, e
também por ser implementado em Java que é compatível com Android. A API compreende a
implementação de um Multicast DNS, com os registros DNS que são as mensagens trocadas
pelos nós para a descoberta dos serviços fornecendo também os métodos necessários para
o registro, descoberta e resolução dos serviços.
Este capítulo consiste numa explanação sobre a plataforma Android, sobre redes ad-hoc em
Android e sua implementação. Além disso, apresenta a API utilizada JmDNS e descreve as
duas aplicações teste desenvolvidas, de descoberta de serviços e de mensagem instantânea.
4.1 PLATAFORMA ANDROID
Google Android é uma plataforma open source para dispositivos móveis. É mantida pela
Open Handset Alliance (OHA), uma aliança composta por fabricantes de aparelhos móveis,
operadoras de celulares, fabricantes de semicondutores, empresas de softwares e empresas
de comercialização. A aliança tem como objetivos proporcionar inovações em dispositivos
41
móveis e melhor responder às necessidades do consumidor. São também aspirações da
aliança garantir aos desenvolvedores uma estrutura open source que possibilite uma maior
liberdade para o desenvolvimento e oportunidades de colaboração e aproveitamento de
código.
A plataforma foi lançada em novembro de 2007, sendo disponibilizado um Software
Development Kit (SDK), contendo todas as ferramentas necessárias ao desenvolvimento de
aplicações. De 2007 a 2011 foram lançadas 10 versões da plataforma e SDK, demonstrando
um rápido desenvolvimento e constante melhoria da plataforma.
As aplicações são desenvolvidas em Java, utilizando uma máquina virtual otimizada criada
especialmente para a plataforma. A SDK fornece diversas ferramentas para auxiliar o
desenvolvimento, como o emulador que permite o teste das aplicações, possibilitando o
desenvolvimento mesmo de quem não possui um aparelho Android.
4.1.1 Arquitetura
A pilha de softwares Android é composta por um kernel Linux, bibliotecas C/C++, Android
Runtime, framework de aplicações e a camada de aplicações como mostra a figura 6.
Figura 6: Arquitetura Android
42
Na base da pilha tem-se um kernel Linux 2.6 responsável pelos drivers, gerenciamento de
processamento e memória, segurança e gerenciamento de energia. Acima do kernel estão as
bibliotecas C/C++ como libc, biblioteca de mídia para áudio e vídeo, SGL e OpenGL para
gráficos 2D e 3D, WebKit para web browser, entre outras.
O Android Runtime é componente que roda as aplicações e junto às bibliotecas formam a
base do framework de aplicações. É composto por bibliotecas centrais e pela máquina virtual
Dalvik. As bibliotecas centrais provêem as funcionalidades disponíveis nas bibliotecas
centrais Java e também nas bibliotecas específicas Android e são implementadas em Java.
Dalvik é uma máquina virtual baseada em registradores que foi otimizada para rodar em
dispositivos móveis, ela substitui a Java Virtual Machine. Todo o hardware e serviços do
sistema são acessados através da máquina virtual, o que garante o desenvolvimento
independente de hardware. A máquina virtual executa Dalvik executable files (.dex), sendo
estes arquivos otimizados gerados a partir das classes Java.
O framework de aplicações fornece as classes utilizadas nas aplicações Android,
disponibilizando uma abstração para acesso ao hardware e gerenciamento para a interface
do usuário e recursos de aplicações.
Todas as aplicações, nativas ou de terceiros são construídas utilizando as mesmas
bibliotecas. As aplicações rodam no Android Runtime utilizando classes e serviços
disponibilizados pelo framework de aplicações.
4.1.2 Ambiente de Desenvolvimento
O SDK Android inclui diversas ferramentas para a criação, teste e debug dos projetos.
Compreendendo Android SDK and Virtual Device Manager, emulador, Dalvik Debug Monitor
Service (DDMS), Android Asset Packaging Tool (AAPT) e Android Debug Bridge (ADB).
Android SDK and Virtual Device Manager é uma ferramenta usada para criar dispositivos
virtuais para rodarem no emulador. Na criação dos dispositivos virtuais são atribuídas
43
características como nome, versão da plataforma e resolução de tela. É possível a criação de
vários dispositivos virtuais, constituindo assim vários cenários para testes de aplicações. Esta
ferramenta também é utilizada para a instalação e atualização de SDKs e seus componentes.
O emulador é uma implementação da máquina virtual Android que roda dispositivos virtuais
para o teste das aplicações desenvolvidas. O emulador provê o acesso a redes WiFi,
possibilitando o teste de aplicações na rede. Para a conexão entre duas instâncias do
emulador em um mesmo host é necessário o redirecionamento de portas. As limitações do
emulador compreendem conexões USB, captura de vídeo, simulação de bateria, Bluetooth e
multicast.
DDMS é uma ferramenta de debug que permite interagir com processos ativos, visualizar
pilha e heap de memória, visualizar e pausar threads, e explorar o sistema de arquivos, tanto
do emulador quanto de um aparelho Android.
AAPT é a ferramenta utilizada para construir o pacote de arquivos de extensão (.apk). É o
formato de distribuição de aplicações Android.
ADB é uma ferramenta que permite a conexão com o emulador ou aparelho. É composta por
um daemon que roda no emulador, um serviço que roda no hardware de desenvolvimento e
uma aplicação cliente (como o DDMS) que se comunica com o daemon através do serviço. O
ADB permite a instalação de aplicações, a manipulação de arquivos e a utilização de
comandos shell no emulador ou aparelho.
Para facilitar o desenvolvimento é utilizada a IDE (Integrated Development Environment)
Eclipse, uma IDE conhecida para o desenvolvimento em Java, juntamente com um plug-in
para Android chamado ADT (Android Development Tools). O plug-in incorpora as
ferramentas de desenvolvimento ao Eclipse.
44
4.2 AD-HOC EM ANDROID
Apesar de ser uma plataforma muito bem estruturada e oferecer diversos recursos ao
programador, a plataforma ainda é nova e apresenta alguns pontos que precisam ser
melhorados. Sendo uma plataforma open source, pode-se contar com a colaboração da
comunidade de desenvolvedores Android para as soluções de alguns problemas ainda não
resolvidos pelas versões oficiais da Google.
Um desses pontos falhos é a ausência de suporte a redes ad-hoc em Android. Somente o
WiFi infraestruturado é disponibilizado ao usuário. Não existem APIs que possibilitem a
criação e manipulação de redes ad-hoc.
Durante a pesquisa, foram encontradas duas soluções, propostas pela comunidade de
desenvolvedores, para este problema. A primeira envolve a alteração de arquivos de
configuração do WiFi do sistema, a segunda envolve a troca do sistema instalado no celular.
Acesso root, é um tipo de acesso ao sistema Linux que possibilita a modificação de arquivos
de configuração, entre outras modificações do sistema. Por motivos de segurança, em um
sistema Linux convencional só o administrador do sistema possui o acesso root. Em Android,
o usuário não tem acesso root ao sistema, o que impossibilita que certas alterações sejam
feitas no kernel Linux.
Para habilitar o celular a redes ad-hoc, pelas duas soluções encontradas é necessário
primeiramente garantir acesso root ao sistema. Isso é conseguido através de aplicações
disponibilizadas pela comunidade de desenvolvedores, por exemplo a aplicação “Universal
Androot” 12.
A
primeira
solução,
que
consistia
em
alterar
os
arquivos
de
configuração
wpa_supplicant.conf e tiwlan.ini, foi descartada pois era necessário definir o nome da rede
nos arquivos, ou seja, uma vez escolhida o nome da rede ad-hoc, o aparelho só reconheceria
a rede que tivesse aquele nome definido nos arquivos de configuração. Por se tratar de uma
solução limitada, ela foi descartada.
12
Disponibilizada em http://www.droidware.com.br/apks/UniversalAndroot_1.6.1.apk
45
A solução escolhida foi a troca do sistema Android do aparelho, por um sistema modificado
que reconhece as redes ad-hoc da mesma forma que reconhece as redes infraestruturadas.
Para o usuário, é transparente se a rede listada é ad-hoc ou infraestruturada.
O novo sistema a ser instalado chama-se CyanogenMod 13. Para cada tipo de aparelho, HTC
Magic ou Dream 14 por exemplo, há uma versão do sistema para ser instalada. Mais
informações de como executar essa troca é encontrada na documentação15 do projeto
CyanogenMod.
A troca do sistema é uma operação delicada, pois um erro no procedimento pode causar a
inutilização total do aparelho. Além disso, como a instalação depende do tipo do aparelho,
há diferentes formas de se instalar o novo sistema, o que requereu uma análise mais atenta
da forma adequada de se fazer a instalação.
Nenhuma das duas soluções, entretanto, possibilitam a criação da rede ad-hoc diretamente
do celular, o que se pode fazer é reconhecer a existência de uma rede ad-hoc e conectar-se a
ela. Uma solução ideal possibilitaria a criação de redes ad-hoc diretamente no aparelho,
permitindo a formação de uma MANET composta por celulares Android.
Foram efetuadas diversas tentativas da criação de redes ad-hoc diretamento dos celulares.
Em (JRADI; REEDTZ, 2010) encontra-se um roteiro para a criação dessas redes mas para
outros modelos de celular. Mesmo seguindo o roteiro, não foi possível a criação da rede.
Sendo necessária uma solução alternativa, onde os celulares se juntavam à uma rede já
existente.
A rede, portanto, foi inicializada por um netbook rodando ubuntu 10.4. O ubuntu oferece ao
usuário a possibilidade de criar redes ad-hoc, após criada, os celulares Android reconheciam
a rede e se conectavam à mesma.
Assim, foi possível a formação de rede ad-hoc com a participação de celulares Android. O
netbook serviu apenas como inicializador da rede, não interferindo nos outros experimentos
realizados. É importante salientar que a rede criada é single-hop, visto que a implementação
13
Encontrado em http://www.cyanogenmod.com/.
São modelos distintos de aparelhos Android que apresentam diferentes versões de SO e diferenças de
hardware, como presença ou ausência de teclado.
15
http://wiki.cyanogenmod.com/index.php?title=Main_Page
14
46
de roteamento apresentou-se como um desafio grande não havendo tempo hábil para
execução do mesmo âmbito deste trabalho.
Após estabelecida a rede, o próximo passo é a implantação da descoberta de serviços, para
facilitar o uso e reconhecimento de funcionalidades da rede. A implementação do autoendereçamento que também compõe o padrão ZeroConf, foge ao escopo desse trabalho,
sendo proposto como trabalho futuro.
4.3 JmDNS
Para o desenvolvimento da aplicação de descoberta de serviços foi utilizada a API JmDNS 16.
A API é um projeto open source e implementa em Java o multicast DNS e a descoberta de
serviços pelo protocolo DNS Service Discovery, propostos pelo padrão ZeroConf. É
importante ressaltar, que a API não implementa a auto-atribuição com IPv4LL.
A API oferece as funcionalidades de publicação, descoberta e resolução de serviços. Apesar
de não ser uma API específica para Android, ela foi compatível com o desenvolvimento em
Android. Somente um método da classe InetAddress mostrou-se incompatível com Android,
e foi substituído. Uma das desvantagens da API é a falta de documentação, que tornou o
trabalho muito mais custoso e demorado.
4.4 APLICAÇÃO DE DESCOBERTA DE SERVIÇOS
A aplicação desenvolvida, nomeada de “ZeroConf for Android”, tem o intuito de testar os
passos de publicação, descoberta e resolução de serviços. As telas principais da aplicação
são:
16
http://sourceforge.net/projects/jmdns/
47
(a)
(b)
(c)
Figura 7: (a) Tela inicial aplicação de descoberta de serviço (b) Tela de registro de serviço (c) Tela de descoberta de serviços
Na figura 7(a) temos a tela inicial, que dá as opções de registro de serviço ou descoberta de
serviços. Ao selecionar o registro de serviço, é apresentado ao usuário a figura 7(b), onde é
possível preencher os campos de nome do serviço, tipo de serviço e porta em que esse
serviço espera conexões. O nome do serviço é o identificador do serviço, caso haja dois
nomes iguais, um sufixo numérico é colocado no nome para diferenciá-lo. Ao selecionar a
descoberta de serviços, é apresentada ao usuário a interface ilustrada na figura 7(c), com a
listagem dos serviços existentes na rede.
Por motivos de simplificação da implementação, a aplicação de descoberta de serviços busca
por um tipo especifico de serviço. O tipo de serviço usado é o serviço de presença, que pode
ser utilizado, por exemplo, por aplicações de chat para notificar o status de presença do
usuário, on-line ou off-line. Esse serviço será exemplificado pela aplicação de mensagem
instantânea descrita posteriormente.
4.4.1 Cenário de Utilização da Aplicação
Alice está conectada à rede LPRM_ADHOC e deseja verificar se tem algum de seus colegas na
proximidade do CT IX. Pela aplicação ZeroConf for Android, faz uma busca por serviços de
presença. Na figura 8 pode-se verificar a tela inicial da aplicação de descoberta de serviços.
48
No lado direito da figura é ilustrada uma representação da rede ad-hoc estabelecida entre
Alice e os outros nós da rede, um registro PTR é enviado de forma multicast aos nós da rede
buscando por serviços de presença.
Figura 8: Alice busca por serviços
Como não há outros usuários registrados na rede, o registro PTR enviado anteriormente não
será respondido. Assim na figura 9, Alice descobre que não há serviços de presença sendo
anunciados. Quando a aplicação não encontra nenhum serviço fornece a mensagem “No
Services”.
Figura 9: Nenhum serviço encontrado
Alice decide assim, publicar sua própria presença e continuar seus afazeres, quando seus
amigos entrarem na rede, poderão verificar sua presença. Anunciar a presença significa
49
publicar a existência do serviço escrevendo o IP e porta do serviço num registro SRV como
pode ser verificado na figura 10. Esse registro SRV criado deve ser enviado aos nós da rede
também de forma multicast.
Um nome deve ser escolhido, o nome é o identificador único do serviço, assim é verificada a
unicidade do nome, caso contrário é adicionado um número a frente do nome para garantir
a exclusividade. A verificação e garantia de unicidade do nome é realizada pela API JmDNS
no momento do registro do serviço.
Figura 10: Alice registra serviço de presença
Passado um tempo, Bob se conecta à rede LPRM_ADHOC, abre sua aplicação de serviços, e
registra sua presença, como pode ser verificado na figura 11. Da mesma forma que a figura
anterior, é criado um registro SRV com todas as informações do serviço de presença de Bob.
Figura 11: Bob registra serviço de presença
50
Depois de registrada a presença, Bob decide verificar se há alguém disponível para
conversar, através da descoberta de serviços. Na figura 12, pode-se observar que Bob envia
um registro PTR buscando pelos serviços de presença publicados na rede.
Figura 12: Bob busca por serviços de presença
Bob descobre que Alice está presente. Como pode ser verificado na figura 13, Bob recebe
como resposta um registro PTR indicando que o serviço “alice” está disponível. Na tela de
descoberta de serviço são listados os serviços da rede.
Figura 13: Resultado de busca de serviços
Bob pretendendo iniciar uma conversa com Alice, clica na linha “alice._presence._tcp.local”
para a resolução desse serviço. Como ilustrado na figura 14, ao clicar na linha é enviado um
registro SRV com o nome do serviço, pedindo pelo IP e porta. A resolução é sempre
51
separada da descoberta do serviço, pois um serviço com mesmo nome pode assumir
endereços IPs diferentes dependendo do momento. Por exemplo, ao sair e entrar na rede,
pode ser atribuído outro endereço IP ao dispositivo que roda o serviço.
Figura 14: Resolução de serviço
Pela figura 15 observa-se que a resolução do serviço “alice” é executado. É possível conferir
o IP e porta do serviço de presença na tela da aplicação. Para a resolução do serviço, Alice
responde com um registro SRV completo, o mesmo usado para o registro de seu serviço.
Figura 15: Resultado da resolução de serviço
As informações de endereço IP e porta são suficientes para o funcionamento da aplicação de
mensagem instantânea. Entretanto, através do registro TXT, é possível descobrir
informações adicionais do serviço, como parâmetros e atributos de interesse do cliente. Por
52
exemplo, um serviço de impressão anunciado pode ter em seu registro TXT informações
sobre o tipo de impressão (laser ou jato de tinta) ou tinta disponível (preto e branco e/ou
colorida).
Após a resolução do serviço, é possível criar uma conexão TCP que proporcionará a troca de
mensagens entre os usuários.
4.5 APLICAÇÃO DE MENSAGEM INSTANTÂNEA
A aplicação de mensagem instantânea “IM Android” serve como prova de conceito. Utilizada
como uma ilustração da utilidade da descoberta de serviços, nesse caso do serviço de
presença. O serviço de presença é utilizado para o reconhecimento dos usuários da rede que
desejam que seu status on-line seja público.
Após escolher alguém para conversar através da aplicação ZeroConf for Android, é possível
iniciar uma conversa através de uma stream TCP com a porta e IP indicados. Só é possível
conversar com uma pessoa por vez. O propósito da aplicação é testar a possibilidade de
utilização do IP e portas anunciados.
A aplicação de mensagem instantânea foi escolhida devido a sua utilidade, uma das
funcionalidades mais básicas da rede é o de chat entre seus componentes, e também devido
a facilidade de implementação.
4.5.1 Cenário de Utilização da Aplicação
A aplicação de mensagem instantânea foi implementada como uma extensão da aplicação
de descoberta de serviços. Assim como pode-se observar na figura 16, na tela de resolução
de serviços aparece a opção de se conectar ao serviço ou recusá-lo. Bob, portanto, clica no
53
botão “connect”. Nesse momento são estabelecidos os sockets e os streams de texto para o
início da conversa.
Figura 16: Tela de conexão
Após o estabelecimento da conexão, é apresentada tanto a Alice quanto a Bob, a tela de
troca de mensagens. Como mostra a figura 17(a), a tela apresenta um setor com o histórico
das mensagens trocadas e outro para a escrita e envio das mensagens. Na figura 17(b),
pode-se observar o inicio da conversa, com o histórico mostrando as mensagens do próprio
usuário e as mensagens recebidas.
(a)
(b)
Figura 17: (a) Tela de troca de mensagens (b) Chat
54
Assim, a aplicação de mensagem instantânea está pronta para ser utilizada. Por
simplificação, só é possível conversar com um usuário por vez.
4.6 DIFICULDADES NA IMPLEMENTAÇÃO
Diversas dificuldades e limitações durante o curso das implementações realizadas tornaram
o estudo mais aprofundado e desafiador. A plataforma Android, apesar de ser bem
estruturada e apresentar uma SDK completa e robusta, ainda é muito recente. A literatura
disponível apresenta pouco material sobre conceitos e programação mais avançada. A
comunidade de desenvolvedores, que pode ser alcançada através de diversos fóruns,
também tem dificuldade em solucionar problemas mais complexos, encontrando-se sempre
soluções superficiais e não otimizadas para os problemas de assuntos como threads e
handlers (manipulador utilizado para a troca de mensagens entre as threads de background
e a thread da UI) e a API WiFi.
A troca constante de versões do sistema apesar de demonstrar uma evolução do sistema,
apresenta também uma instabilidade. É comum que de uma versão para outra algumas
bibliotecas sejam extintas, inativando algumas funcionalidades antes existentes.
O emulador não dá suporte a multicasting, o que impossibilitou os testes de serem
executados no SDK. Os testes foram executados em dois celulares um HTC Dream e um HTC
Magic, tornando o processo de testes mais demorado. Vale ressaltar que a instalação das
aplicações no celular é mais trabalhosa.
Com relação à adaptação da API JmDNS, como foi dito anteriormente, houve um método da
classe InetAddress utilizado pela API que em Android não é muito estável, de acordo com a
própria documentação do Android. O uso desse método causou uma falha da resolução dos
serviços. Era possível listar os serviços existentes, mas não era possível dizer seu IP e porta.
Assim até ser encontrado a razão desse problema, atrasou-se a implementação em algumas
semanas.
55
Houve a tentativa de criar uma rede ad-hoc diretamente dos celulares. Não foi possível a
criação da rede pois o aparelho não reconhecia a atribuição de endereço IP fixo. Apesar de
ser possível setar um endereço IP fixo, esse endereço não é reconhecido pelo próprio
sistema. Tornando assim, necessário o auxílio de outro sistema (netbook) para a criação da
rede ad-hoc.
4.7 CONSIDERAÇÕES SOBRE O CAPÍTULO
Este capítulo descreveu as atividades práticas realizadas envolvendo os conceitos estudados
de redes ad-hoc e descoberta de serviços. Inicialmente foi feita uma apresentação mais
detalhada do ambiente Android, que foi a plataforma de desenvolvimento móvel adotada.
Apesar de bem estruturada e oferecer um SDK completo, a plataforma é ainda recente. Por
isso, apresenta certas limitações, como a falta de suporte a redes ad-hoc de forma nativa. O
desenvolvimento para essa plataforma também fica comprometido, pois sua literatura
disponível sobre a programação avançada é escassa e trata os conceitos de forma
superficial.
As atividades práticas realizadas consistiram na habilitação ao reconhecimento de redes adhoc pelos dispositivos Android e a implementação de aplicações para serem usadas nas
mesmas. A solução encontrada para habilitar os celulares à redes ad-hoc consistiu na troca
do sistema operacional do aparelho por uma versão implementada pela comunidade de
desenvolvedores. Nessa versão, as redes ad-hoc existentes podem ser visualizadas
juntamente com as redes infraestruturadas.
As aplicações desenvolvidas foram baseadas no padrão ZeroConf e utilizaram a API JmDNS,
que implementa o multicast DNS e DNS Service Discovery do padrão ZeroConf em Java.
A primeira aplicação desenvolvida, ZeroConf for Android dá suporte a descoberta de
serviços às redes ad-hoc formadas por dispositivos Android. A descoberta de serviços é
importante pois proporciona um melhor aproveitamento dos recursos disponíveis na rede,
principalmente em redes ad-hoc que são dinâmicas e os nós variam bastante. Neste caso
56
específico, a aplicação se destina a descoberta de serviços de presença, serviços tais que são
usados na segunda aplicação desenvolvida: IM Android.
IM Android é uma aplicação de mensagem instantânea adaptada ao uso em redes ad-hoc.
Ao invés de possuírem uma lista de amigos, os usuários publicam e descobrem serviços de
presença. O serviço de presença informa quais usuários da rede estão disponíveis ao chat. A
aplicação de mensagem instantânea é um exemplo da utilidade da descoberta de serviços,
vários outros serviços podem ser implementados e incorporados à aplicação de descoberta
de serviços.
57
5 CONCLUSÕES E TRABALHOS FUTUROS
Este trabalho apresentou um estudo focado em três assuntos principais correlacionados:
dispositivos móveis, redes ad-hoc móveis e descoberta de serviços. Esses assuntos foram
escolhidos devido à situação atual de desenvolvimento das tecnologias de hardware e
software de dispositivos móveis que impulsionaram o uso de redes móveis e redes ad-hoc
móveis. A descoberta de serviços, apesar de já existir em redes cabeadas, ganha maior
relevância e utilização no contexto de redes ad-hoc, devido a sua importância para a boa
utilização dessas redes.
O desenvolvimento de aplicações e soluções para dispositivos móveis requer um maior
cuidado na implementação devido às limitações dos recursos desses dispositivos (CPU,
memória, bateria) e também devido ao tamanho reduzido de telas e teclados. Apesar dessas
diferenças em relação a sistemas desktop, as plataformas móveis vêm sendo melhoradas,
facilitando a migração de programas desktop para celulares. Além disso, o suporte a redes
WiFi ou mesmo ad-hoc tem sido cada vez mais promovido.
As pesquisas em redes ad-hoc atuais se concentram no problema do roteamento. Pois o
comportamento dinâmico da rede e a imprevisibilidade de sua topologia, o torna um dos
maiores desafios. Assim, não há um protocolo de roteamento que se destaque em relação
aos outros.
A descoberta de serviços é utilizada em redes infraestruturadas e ad-hoc, entretanto tem
uma maior relevância no contexto das redes ad-hoc. A descoberta de serviços se mostra
essencial pela dificuldade de se conhecer previamente os nós da rede ad-hoc visto que pode
haver uma alta rotatividade dos nós que a formam. Portanto, para se conhecer os serviços
disponíveis na rede e poder utilizá-los, se faz necessário algum mecanismo de descoberta e
anúncio de serviços.
Dos protocolos estudados, o que o escolhido para o desenvolvimento da aplicação foi o DNS
Service Discovery, proposto pelo padrão ZeroConf. Pois o DNS-SD é um protocolo
descentralizado, que utiliza de mensagens multicast e colaboração dos componentes da
58
rede para a descoberta de serviços. Essas características propiciaram sua aplicação a redes
ad-hoc.
O padrão ZeroConf além de propor um protocolo de descoberta de serviços, especifica o
Multicast DNS que é o mecanismo utilizado na descoberta de serviços, e também propõe a
auto-atribuição de endereços IP. A auto-atribuição também pode ser implementada para
redes ad-hoc, porém sua implementação fugiu ao escopo desse trabalho devido à limitação
de tempo.
Além dos estudos teóricos realizados, o trabalho consistiu em uma parte prática para teste
dos conceitos estudados. Foi então escolhida a plataforma móvel Android o
desenvolvimento de aplicações e para o uso de redes ad-hoc.
Android é uma plataforma recente, lançada em 2007. É open source, dispõem de uma SDK
completa que facilita o desenvolvimento de aplicações e a linguagem utilizada para a
programação é Java. Entretanto, a plataforma apresenta algumas limitações, como por
exemplo não suportar nativamente a criação e uso de redes ad-hoc. Mesmo assim, acreditase no potencial da plataforma Android e que com o amadurecimento do sistema, poderá se
tornar uma das plataformas mais populares e estáveis.
Devido à limitação do suporte nativo a redes ad-hoc pelos celulares Android, foi necessário
habilitar os celulares para oferecer este suporte. Através da comunidade de
desenvolvedores, foi possível encontrar uma versão não oficial do sistema Android, cujas
modificações possibilitavam o reconhecimento de redes ad-hoc existentes. Assim, os
celulares Android, após serem atualizados com essa nova versão do sistema foram capazes
de se juntarem a redes ad-hoc pré-existentes. O problema da criação de uma rede ad-hoc
por um celular Android não foi solucionado, ficando dependente de novas melhorias do
sistema.
Foram implementadas duas aplicações para a plataforma Android. Uma aplicação de
descoberta de serviços para ser utilizada em redes ad-hoc e uma aplicação de mensagem
instantânea que usa a descoberta de serviços no seu funcionamento.
Ambas as aplicações foram desenvolvidas com o auxílio da API JmDNS, que se trata de um
projeto open source que implementa o Multicast DNS e o DNS Service Discovery do padrão
59
ZeroConf. A API foi escolhida por ser de código aberta, ser escrita em Java, além de ser um
projeto que encontra-se ativo e em constante melhoria. A falta de documentação da API
dificultou a implementação das aplicações, aumentando consideravelmente o tempo de
desenvolvimento das mesmas. Após superada a curva de aprendizado da API, ela facilitou
muito a implementação das aplicações.
A aplicação de descoberta de serviços possibilita o anúncio e descoberta de serviços de
presença, que são serviços que anunciam a presença de algum usuário da rede. Na
descoberta de serviços é possível verificar quais usuários estão disponíveis na rede,
descobrindo também IP e porta para a comunicação com esses usuários.
As aplicações de descoberta de serviços e mensagem instantânea estão fortemente
relacionadas, pois a segunda utiliza os serviços de presença descobertos pela primeira.
Através das informações de IP e porta é realizada uma conexão entre os usuários, que
podem assim trocar mensagens de texto.
O desenvolvimento para celulares é uma área bastante promissora. Por ser recente a
popularização desses dispositivos, há ainda muitos problemas específicos de computação
móvel e redes ad-hoc móveis. Este estudo teve um caráter exploratório, e com o estudo
pôde ser observada a correlação entre os temas apresentados.
5.1 TRABALHOS FUTUROS
Ficam como sugestões de trabalhos futuros:
•
A criação de redes ad-hoc formada unicamente por celulares Android. O estado
atual de desenvolvimento das versões oficiais e não oficiais do Android, não
permitem a criação de redes ad-hoc diretamente pelos celulares, por enquanto só é
possível aderir a uma rede já existente;
•
A implementação de roteamento para redes ad-hoc em Android. Devido à extensão
do trabalho de implementar o roteamento e a falta de tempo, as redes ad-hoc multihop não puderam ser implementadas;
60
• Atribuição automática de endereço IP com IPv4LL. Na solução apresentada, os
endereços IPs são distribuidos pelo servidor DHCP do netbook responsável pela
criação da rede ad-hoc. Uma rede ad-hoc composta somente por celulares
necessitará de atribuição automática ou manual de endereço IP, sendo aquela mais
aconselhável.
61
REFERÊNCIAS
CHESHIRE, S.; STEINBERG, D.H. Zero Configuration Networking: The Definitive Guide. EUA:
O’Reilly, 2005.
CONTI, M.; GIORDANO, S. Multihop Ad Hoc Networking: The Theory. IEEE Communications
Magazine, v. 45, n. 4, p. 78-86, 2007.
GIORDANO, S. Mobile Ad-Hoc Networks. In: STOJMENOVIC, I. Handbook of Wireless
Networks and Mobile Computing. John Wiley & Sons, 2002.
JRADI, R.K.; REEDTZ, L.S. Ad-hoc network on Android. 2010. Monografia (Graduação em
Informática) – Informatics and Mathematical Modeling, Techinical University of Denmark,
Dinamarca.
RICHARD III, G.G. Service Advertisement and Discovery: Enabling Universal Device
Cooperation. IEEE Internet Computing, v. 4, n. 5, p. 18-26, 2000. p. 398-404.
SU, J.; GUO, W. A Survey of Service Discovery Protocols for Mobile Ad Hoc Networks. In:
International Conference on Communications, Circuits and Systems, 2008.
VERVERIDIS, C.N.; POLYZOS, G.C. Service Discovery for Mobile Ad Hoc Networks: A Survey of
Issues and Techniques. IEEE Communications Survey & Tutorials, v. 10, n. 3, p. 30-45, 2008.
Download

Estudo sobre Redes Ad-Hoc Móveis com Suporte à