Directed Diffusion Danilo Michalczuk Taveira 1 1 Universidade Federal do Rio de Janeiro (UFRJ) Grupo de Teleinformática e Automação (GTA) Disciplina CPE825 - Roteamento em Redes de Computadores danilo@gta.ufrj.br 1. Introdução Com os avanços tecnológicos, os recursos computacionais como capacidade de processamento, memória e meios de armazenamento estão cada vez mais se tornando viáveis de serem incorporados a diferentes dispositivos. Esse processo possibilitou o surgimento de nós sensores inteligentes, capazes de se comunicarem entre si formando uma rede de sensores que pode realizar uma dada tarefa de sensoriamento, de acordo com ordens passadas aos nós sensores. Um aspecto importante desse tipo de rede é que os nós geralmente funcionam alimentados por bateria, tornando a energia um aspecto muito importante que deve ser observado tanto no projeto da sua arquitetura quanto nos protocolos e aplicações que sejam executadas nesses nós. O protocolo Directed Diffusion foi projetado para redes de sensores. O operador responsável pela rede pode enviar uma mensagem contendo o tipo de evento que deve ser analisado pelos nós sensores e a área de interesse. Os nós da rede irão repassar essa informação até que chegue aos nós da região de interesse. Os nós intermediários podem direcionar ou responder a mensagens de interesse em eventos com base em informações já conhecidas anteriormente, diminuindo a troca de informações desnecessárias, o que é importante para a redução do consumo de energia. 2. Directed Diffusion O protocolo é composto por vários elementos: interesses, mensagens de dados, gradientes e reforços. A mensagem de interesse é utilizada para propagar a tarefa a ser realizada pelos nós, sendo composta por parâmetros que irão definir o tipo de tarefa a ser realizada e a área a ser observada. As mensagens de dado são geradas a partir dos eventos observados e processados pelos nós sensores. Os dados, dessa forma, representam um evento que foi detectado pelos sensores, sendo descrito através de pares de atributos e valores. As mensagens de interesse quando são propagadas através da rede criam gradientes que são estados guardados pelos nós que receberam as mensagens de interesse, indicando os nós que enviaram interesses. Os gradientes definem os nós que devem receber os dados que sejam do interesse especificado. 2.1. Esquemas de nomes Os interesses e dados são representados por pares de atributos e valores que serão diferentes para cada tipo de rede de sensores. O interesse contém um campo de tipo que define o tipo de evento a ser analisado, um intervalo que representa a taxa de mensagens de dados ou eventos desejada, a duração da tarefa, uma estampa de tempo representando o horário em que foi gerado e as coordenadas da área de interesse.
As mensagens de dado geradas pelos nós sensores quando detectam o evento de interesse, contém a informação do tipo de evento que foi observado, a localização do nó, estampa de tempo da observação do evento e pode ainda conter campos contendo o valor e confiança do valor medido para o evento, caso aplicável. 2.2. Interesses e Gradientes Os interesses podem ser originados em qualquer um dos nós da rede, geralmente através de uma tarefa programada por uma pessoa. O nó que origina o interesse é chamado de nó sorvedouro e será o nó que receberá os eventos correspondentes ao interesse gerado. Os interesses devem ser inicialmente propagados pela rede, para o estabelecimento dos gradientes e o posterior envio dos dados dos eventos. Quando uma tarefa é passada ao nó sorvedouro, ela é guardada em uma tabela de tarefas do nó e só será removida após o período de duração que foi especificado inicialmente. Para cada tarefa que o nó sorvedouro possui, são enviadas mensagens de interesse para cada um dos seus vizinhos. Essas mensagens de interesse contêm a mesma duração e área que foram especificadas na tarefa original. Já o campo de intervalo entre os eventos é alterado para um valor maior do que o original. Dessa forma, são criados e propagados interesses com uma taxa de eventos menor do que a original. Esses interesses são chamados de interesses exploratórios e têm como objetivo determinar se existem nós sensores da rede que irão atender ao interesse original. Os interesses exploratórios são constantemente reenviados pelo nó sorvedouro, alterando apenas a estampa de tempo do interesse. O procedimento de reenvio é utilizado, pois a rede de sensores geralmente não possui confiabilidade na transmissão dos pacotes. Cada nó da rede mantém um cache de interesses, onde cada item corresponde a um interesse distinto. Se dois interesses recebidos forem do mesmo tipo e suas áreas não forem disjuntas, eles podem ser agregados em apenas um interesse, reduzindo o número de estados na tabela de interesses. Cada uma das entradas da tabela de interesses contém um campo de estampa de tempo que é atualizado a cada interesse recebido. Além disso, cada entrada também contém vários campos de gradientes, para cada um dos vizinhos que enviaram o interesse. Cada um dos gradientes contém a informação da taxa de eventos que foi solicitada e a duração do gradiente, ambos derivados do interesse recebido. Quando um nó recebe um interesse, ele primeiramente verifica se o interesse existe na tabela de interesses. Caso ainda não exista, é criada uma nova entrada na tabela, com apenas um gradiente para o nó que enviou o interesse. Caso o interesse recebido já esteja presente na tabela de interesses, verifica-se então se existe um gradiente para o nó de origem do interesse. Se o gradiente para o nó não existir, é criado um novo gradiente. Independentemente do gradiente já existir ou não, os campos da estampa de tempo e duração da tabela interesse são atualizados com base nos dados do interesse recebido. No momento em que um gradiente para um determinado nó expira, ele é removido da entrada da tabela de interesses ao qual estava associado. No momento em que o último gradiente de um determinado interesse é removido, o interesse também é removido da tabela.
Como cada nó transmite os interesses sem a informação sobre o nó sorvedouro, os nós não tem como distinguir entre a mensagem de interesse enviada pelo sorvedouro e outra mensagem que foi enviada por um segundo nó que recebeu e repassou a mensagem de interesse do próprio nó. Dessa forma, são criados gradientes bidirecionais, que criam loops. O problema da resolução dos loops é feito através do algoritmo de propagação dos dados, que será visto em seguida. Ao receber um interesse, um nó deve enviar interesses para os seus vizinhos de forma a possibilitar a propagação dos interesses através da rede. Uma possibilidade para o envio de interesses é o nó enviá-los para todos os seus vizinhos, inundando toda a rede com as mensagens de interesse. Outra possibilidade é enviar os interesses apenas na direção dos nós especificados na área de interesse, assumindo a existência de informações geográficas sobre o posicionamento dos vizinhos de cada nó. Outra maneira de enviar seletivamente os interesses é através do uso de cache de dados. Um nó que anteriormente recebeu informações sobre uma determinada área através de um de seus vizinhos, irá enviar as mensagens de interesse para essa área através desse vizinho. Uma outra possibilidade que pode ser explorada é o estabelecimento de gradientes através de mensagens de dados recebidas. Esse mecanismo é vantajoso para redes onde é necessário que um nó informe aos demais sobre um determinado evento, mesmo sem outros nós terem enviados interesse para o evento. 2.3. Propagação dos Dados Um nó que esteja na região de algum dos interesses recebidos, liga os seus sensores para monitorar os eventos que foi projetado para observar, já que os sensores normalmente ficam desligados para economizar energia. Ao detectar algum evento a partir dos seus sensores, o nó processa o evento e procura na sua tabela de interesses se existe algum interesse que coincida com o tipo de evento que foi observado. Se existir algum interesse para o evento observado, o nó envia uma mensagem de dados em unicast contendo a descrição do evento para todos os nós que são listados nos gradientes para o interesse. Um nó que receba uma mensagem de dados verifica se possui algum interesse que corresponda ao tipo e a área onde o evento informado pela mensagem de dados. Se o nó não possuir nenhum interesse para o dado, ele é descartado, já que não será utilizado pelo nó e o mesmo não possui nenhum gradiente para outros nós com interesse no evento. Por outro lado, caso exista algum interesse para o dado recebido, o nó verifica o cache de dados associado à entrada da tabela de interesses. Esse cache de dados guarda as últimas mensagens de dados que foram recebidas recentemente. Caso a mensagem esteja presente no cache de dados, significa que ela foi recebida recentemente, fazendo com que ela não seja reencaminhada, para evitar a formação de loops, já que o mecanismo de estabelecimento de gradientes não garante a ausência de loops. Caso a mensagem não esteja presente no cache, ela é adicionada ao cache e reencaminhada para todos os vizinhos que são listados nos gradientes para o interesse. O cache de dados também é utilizado para determinar a taxa de eventos que está sendo recebida pelo nó. Antes de reenviar a mensagem de dados, o nó verifica a taxa de eventos para cada um dos seus gradientes. Se a taxa dos gradientes for maior ou igual à taxa de eventos que está sendo recebida, as mensagens são encaminhadas. Caso algum
dos gradientes tenha uma taxa de eventos menor, o nó não envia algumas mensagens de dados para os nós com taxa de evento menor, de forma a não ultrapassar a taxa de eventos que foi requisitada no interesse do nó representado pelo gradiente. 2.4. Reforço dos Caminhos O sorvedouro repetidamente envia interesses exploratórios para o evento desejado com uma baixa taxa de eventos, de forma a descobrir quais os nós da rede que podem fornecer informações sobre o evento desejado. Quando algum dos nós detecta o evento que era de interesse, ele começa a enviar dados a uma baixa taxa, que foi especificada nos interesses exploratórios. Esses eventos que são recebidos inicialmente são chamados de eventos exploratórios. Pelo próprio mecanismo de propagação dos interesses, os eventos exploratórios irão chegar ao nó sorvedouro através de vários caminhos. Quando o sorvedouro recebe os eventos exploratórios, tem que realizar o reforço de um ou mais caminhos, de forma a receber os eventos na taxa que foi inicialmente especificada na tarefa recebida. 2.4.1. Reforço Positivo O primeiro passo a ser realizado pelo nó sorvedouro ao receber eventos exploratórios é reforçar os vizinhos dos quais o nó recebeu um evento que não foi recebido anteriormente. Para realizar o reforço de um determinado nó, o sorvedouro reenvia um interesse com um intervalo de tempo menor, o que representa uma taxa de eventos maior. Quando o vizinho do nó sorvedouro recebe o novo interesse ele atualiza o campo do gradiente para o nó sorvedouro com a nova taxa de eventos e verifica se a taxa de todos os seus outros gradientes é menor do que a atual. Caso positivo, a taxa atual de eventos que é recebida pelo nó não será capaz de satisfazer ao novo gradiente. Nesse caso, o nó que recebeu o interesse do sorvedouro faz o reforço de alguns de seus vizinhos, da mesma forma como foi feito pelo nó sorvedouro e o processo é repetido para todos os nós que precisarem reforçar seus vizinhos. No processo de reforço dos nós vizinhos, um nó pode escolher reforçar todos os vizinhos dos quais recebeu eventos recentemente ou, então, reforçar o vizinho que enviou o último evento. Nesse caso podem ser escolhidos vários caminhos, fazendo com que os dados cheguem de forma mais rápida ao compromisso da utilização de mais recursos da rede, já que serão necessárias mais transmissões para a utilização de múltiplos caminhos. 2.4.2. Reparo Local O reforço positivo pode ser utilizado também para o reparo de caminhos que falharam, o que é comum em redes de sensores sem-fio. Quando um determinado nó detecta que um caminho que estava sendo utilizado para receber os dados falhou, o nó realiza um processo de reforço positivo de alguns de seus vizinhos, como foi mostrado anteriormente. Dessa forma, novos caminhos podem ser utilizados de forma a tentar garantir a taxa de eventos solicitada no interesse.
2.4.3. Reforço Negativo O mecanismo de reforço negativo é utilizado para amenizar o problema do uso de múltiplos caminhos, que acabam consumindo mais energia da rede. Quando um dos caminhos é reforçado, deve-se realizar um reforço negativo no caminho utilizado anteriormente. Uma das possibilidades para realizar o reforço negativo é através da expiração de gradientes que não são reforçados. Dessa forma, para deixar de utilizar um caminho o nó simplesmente para de enviar interesses para o nó que não quer reforçar o caminho. Os interesses exploratórios, no entanto, continuam sendo enviados mesmo para o nó do caminho que está sofrendo o processo de reforço negativo. A abordagem de esperar os gradientes expirarem apesar de ser mais simples não é tão eficiente em comparação com a realização do reforço negativo de forma explícita, através de uma mensagem especial enviada aos vizinhos que não são mais úteis. Quando um vizinho sofre um reforço negativo, ele verifica se todos os seus outros gradientes são exploratórios. Caso positivo, ele não precisa receber eventos a taxas maiores, e realiza o reforço negativo dos seus vizinhos. A proposta do protocolo é realizar o reforço negativo para todos os nós que não enviaram eventos em um determinado tempo T ou se já foram recebidos um número N de eventos a partir de outros nós, desde o último evento recebido. A prevenção de loops que é feita através do cache de dados, pode ser otimizada através do reforço negativo dos caminhos que contém loops, de forma a aumentar a eficiência da rede, já que as mensagens de dados não serão mais enviadas em forma duplicada, diminuindo o consumo de energia. 3. Conclusão O protocolo Directed Diffusion é diferente dos outros protocolos de roteamento que são geralmente utilizados em redes de sensores e redes ad hoc, pois todo o protocolo é baseado nos dados e no interesse pelos dados, não existindo o conceito de encaminhamento dos dados para um determinado grupo de destinatários especificado pela origem. Os dados podem ser reencaminhados para alguns dos vizinhos ou descartados pelos nós intermediários, o que não acontece nos protocolos tradicionais, onde a fonte especifica o destino e os nós intermediários apenas reencaminham os pacotes. Dessa forma, não existe o conceito de um nó atuar como roteador ou encaminhar pacotes de dados, já que cada nó pode interpretar as mensagens de dados. Esse paradigma se justifica já que as redes de sensores não são redes de propósito geral, o seu principal objetivo é encaminhar os dados de eventos observados pelos sensores até um determinado nó sorvedouro da rede. Alguns aspectos do protocolo, no entanto, podem causar problemas de implementação, como a necessidade de informação sobre a localização geográfica dos nós para a determinação se os mesmos pertencem a região de interesse ou não. Apesar da possibilidade dessa limitação poder ser resolvida através da configuração manual da informação de posição de cada nó, ela não é viável para redes com muitos nós, tornando necessário que os nós possuam um sistema de posicionamento global (GPS), o que encarece os nós e gasta mais energia. Além disso, o protocolo utiliza estampas de tempo para informar o instante da ocorrência dos eventos, o que torna necessário um mecanismo de sincronia entre os relógios dos nós sensores, para obter um resultado preciso sobre o momento de ocorrência dos eventos.
Referências [1] C. Intanagonwiwat, R. Govindan e D. Estrin, Directed diffusion: a scalable and robust communication paradigm for sensor networks, em Mobile Computing and Networking, pp. 56 67, 2000. [2] C. Intanagonwiwat, R. Govindan, D. Estrin, J. Heidemann e F. Silva, Directed diffusion for wireless sensor networking, em Transactions on Networking, feb 2003. [3] C. Intanagonwiwat, Directed diffusion: An application-specific and data-centric communication paradigm for wireless sensor networks, dezembro de 2002. Computer Science Department.