4.3 IMPLEMENTAÇÃO DO ANTHOCNET
4.3.6 Classe AntHocNet : protocolo
A classe AntHocNet é a implementação do protocolo no NS-2. Sendo ela a responsável por receber os pacotes enviados pelo simulador e determinar as rotas. O NS-2 não obriga que o protocolo de rede utilize uma tabela de roteamento central, isto é, cada implementação de protocolo fica livre criar a sua da forma que bem quiser. No caso do AntHocNet utiliza uma tabela de feromônio, como visto na Subseção 4.3.4.
Com essa flexibilidade, o NS-2 atrela toda a responsabilidade do rotamento para o protocolo, assim quando é registrado uma necessidade de enviar um pacote TCP (por exemplo), o simulador constrói o pacote e executa o método recv do protocolo de rotea- mento. Esse método pertence originalmente da classe Agent, o qual visto na Figura 4.9 é estendida pela classe AntHocNet.
Na implementação do protocolo, nada foi modificado de Agent. O desenvolvimento do protocolo se preocupou em reutilizar o máximo de métodos e classes fornecidos pelo NS-2. Com isso, a classe ficou focada em resolver o problema de roteamento. Na Figura 4.9 é visto o diagrama da classe implementada para este trabalho.
Nela é possível ver que a maioria dos métodos foi projetado para receber e enviar formigas pela rede, isto é, quando o NS-2 executa o método recv do protocolo, este pode criar ou mesmo retransmitir uma formiga. Sendo o método recv o mais importante da classe, pois na execução da simulação todos os pacotes passam por ele.
Como a estrutura das formigas foi projetada para ser o mais genérica possível, faci- litou a detecção dos pacotes recebidos pelo protocolo, pois ou os pacotes recebidos pelo protocolo são formigas ou não são.
O algorítimo que faz esse controle é visto na Figura 4.10. Inicialmente quanto um pacote é recebido pelo protocolo, é realiza a primeira checagem a fim de comprovar se uma formiga foi recebida.
Figura 4.9: Diagrama de classe de AntHocNet.
Caso o pacote em questão não seja uma formiga, e sim um TCP (por exemplo) o protocolo vai consultar a tabela de feromônio para ver se encontra uma rota valida para o destino requerido pelo pacote TCP, caso encontre o envia imediatamente, senão o armazena uma lista de pacotes e então pede ao formigueiro para que crie uma REFA e assim, esta é enviada para descobrir um caminho.
O encaminhamento de pacotes através de um ou mais rotas é a parte básica que se espera de um protocolo de roteamento. O que complica nesse processo é a obtenção de novas rotas pelo protocolo. Que neste caso, se dá quando o método recebe uma formiga. Esta é classificada em três grupos (ver Subseção 4.3.3):
• hello : utiliza o cabeçalho AntHelloPacket ;
• forward : utiliza o cabeçalho AntForwardPacket ;
Primeiramente, um protocolo só consegue funcionar corretamente se ele souber quem são seus nós vizinhos. Esta tarefa é confiada a formiga hello, pois é ela quem informa ao protocolo que este possui um vizinho. Essa formiga é então lida pelo formigueiro, o qual armazena a informação do nó vizinho e verifica se este enviou outras informações de rotas virtuais (ver Subseção 3.3.1.2) e assim atualizar a tabela de feromônio virtual.
Figura 4.10: Algorítimo de recebimento de pacotes.
Esse envio de formigas hello é feito por todos os nós em tempos que variam de 750 á 1.250 milissegundos. Processo semelhante acontece ao enviar PRFA, onde cada nó as envia em tempos com variação de 1.000 á 2.500 milissegundos. Na Tabela 4.8 é apresentado estes dados.
Tanto a PRFA quanto a REFA são consideradas formigas forward pelo protocolo, e por isso são executadas da mesma maneira, isto é, se detectado que elas alcançaram seu destino, o protocolo então requisita ao formigueiro que crie uma formiga back do mesmo tipo que a formigas forward recebida. Assim, se for uma REFA o formigueiro criará uma
Tabela 4.8: Tabela de formigas que são enviadas periodicamente. formiga Intervalo de Tempo Descrição formiga hello 750 á 1.250 milissegundos formiga enviada para
descobrir os nós vizinhos. PRFA 1.000 á 2.500 milissegundos formiga enviada para
realizar a manutenção das rotas.
REBA e para PRFA, uma PRBA.
A formiga back é usada exclusivamente para atualizar as trilhas de feromônio. Assim, quando o protocolo recebe uma, a usa para calcular o valor do feromônio a ser incremen- tado. Este cálculo é feito usando a Equação 4.4, a qual utiliza os seguintes parâmetros:
1. h : número de saltos do nó destino (d) até o nó atual (i). Esse valor é pego do cabeçalho da formiga back (ver hops na Tabela 4.4);
2. Hi
d : estimativa de tempo do nó destino (d) até o nó atual (i). Esse valor é pego do
cabeçalho da formiga back (ver prevSINR na Tabela 4.4);
Esse cálculo é baseado na Equação 3.4 e utilizada o valor 50 milissegundos para a constante Sχ. Esse valor é multiplicado pelo número de saltos h para estimar um tempo
que supostamente levaria para a formiga ser enviada pela rede.
tid = Hi d+ h × 50 2 −1 (4.4)
O valor do incremento tnd é usado pelo formigueiro que atualiza a tabela de feromônio. O protocolo então verifica se a formiga back alcançou o seu destino, pra poder liberar os pacotes que estão a espera de uma rota, e assim enviá-los corretamente.
4.4 Considerações do Capítulo
Neste capítulo foi apresentado a implementação do protocolo de roteamento híbrido AntHocNet no simulador de redes NS-2. Toda sua estrutura de classes foi desenvolvida e criada neste trabalho.
Esta modelagem de classes orientadas a objetos, possibilita a reutilização de código e proporciona um tratamento de classes de maneira genérica. Um bom exemplo é visto na
implementação das classes de formiga. Onde cada classe ficou especializada numa função, isto é, uma formiga back é diferente de uma formiga forward, pois esta não armazena o feromônio. E mesmo assim, as duas são consideradas formigas, onde que cada uma possui uma função dentro do formigueiro. Essa generalização é feita usando herança de classes.
Outro ponto importante a destacar sobre a implementação, é visto na divisão de função de roteamento entre as classes AntHocNet (protocolo) e AntNest (formigueiro). Essa separação é feita para que cada classe se especialize numa tarefa, isto é, o formigueiro fica responsável pela tarefa de atualizar as tabelas de feromônio e o protocolo em enviar e receber formigas.
Com essa modelagem baseada nas funções que cada classe deve possuir e qual tarefa deve realizar, facilita a manutenção de código e abre margem para inclusão ou mesmo modificação das funções de roteamento. Isto pode ocasionar na geração de novas classes, mas o que não quer dizer, por exemplo, que se for criada um novo tipo de formiga, a tabela de feromônio deva ser modificada.
Com a finalização da implementação, iniciou-se o desenvolvimento dos cenários, apre- sentados no Capítulo 5. Deixando para o Capítulo 6 as descrições sobre as simulações realizadas no NS-2 entre o AntHocNet, desenvolvido neste trabalho, e o protocolo AODV, já incluso no simulador.
5 Modelagem dos Cenários
Os cenários criados para as simulações foram escritos na forma de scripts TCL. Nestes cenários é possível configurar vários parâmetros a serem utilizados na simulação. Um exemplo é o tipo do protocolo de roteamento que é usado.
Seguindo os parâmetros usando na simulação do AntHocNet e AODV, vistos na Sub- seção 3.3.2, deve-se criar uma ambiente base que comporte 100 nós que se movam numa área retangular de 3.000 × 1.000m2. A velocidade em que os nós devem se mover deve
variar entre 0 e 20m/s, sendo que após o movimento o nó deve permanecer parado por 30 segundos.
Toda simulação deve ocorrer num tempo de 900 segundos. Nesse período 20 diferentes comunicações são formadas aleatoriamente em uma determinada origem e um destino.
Esse ambiente serve de base para os três tipos simulações, isso é, cada cenário varia pelo menos um dos parâmetros do ambiente base. Além disso, cada cenário é avaliado utilizando as métricas:
• Taxa de Pacotes Entregues (Packets delivered Ratio): é a proporção de pacotes TCP que foram recebidos pelos nós de destinos, divido pela quantidade de pacotes TCP enviados pelos nós de origem.
Rdelivery = P P acketsrecv T CP P P acketssend T CP (5.1)
• Atraso Médio Fim-a-Fim (Average End-to-End Packet Delay): é o somatório da média de tempo que um pacote TCP levou para ir do nó de origem até o nó de destino, dividido pela quantidade total de pacotes TCPs recebidos.
Rdelay = P ∆tT CP P Qtrecv T CP (5.2) ∆tT CP = trecvT CP − t send T CP (5.3)
• Overhead de Roteamento (Routing Overhead ): é a proporção de pacotes do proto- colo de roteamento que são transmitidos, dividido pelo total de pacotes emitidos na rede.
Rdelivery =
P P acketsrouting
Com essas bases iniciou-se a análise para ver se era possível criar essas condições no NS-2. E logo de início o trabalho sofreu uma pequena derrota, pois não tinha uma solução para simular o “tempo de parada do nó”. Esse critério era essencial para a simulação vista na Seção 5.2, pois conforme o decorrer do tempo os nós tendem a aumentar o seu tempo de parada.
Outro problema que concentrou tempo foi o de simular o aumento de nós na rede e também o aumento da área do ambiente. Esses parâmetros são fixos e não se tinha uma função que possibilitasse a inclusão de novos nós durante a simulação. Essa métrica é usada nos cenários 2 e 3 e as suas soluções para aumento dos nós e da área estão descritos na Seção 5.3 e Seção 5.4 respectivamente.
Essa descrição da forma que foram construídos os cenários é detalhada neste capítulo, pois assim como o desenvolvimento do protocolo (ver Capítulo 4), consumiram um bom tempo de implementação e análise. Na Seção 5.1 é apresentada a descrição e o funcio- namento básico do programa que foi desenvolvido para gerar scripts TCL, seguindo os requisitos de cada cenário.