UNIVERSIDADE TÉCNICA DE LISBOA
INSTITUTO SUPERIOR TÉCNICO
Computação Móvel
Enunciado do 2º Trabalho de Laboratório
Implementação do Protocolo DSR em OMNET++
António Grilo
MARÇO DE 2008
1
1 Objectivos
As redes ad-hoc são redes auto-organizadas que não carecem de infrastrutura. Nas redes ad-hoc os
terminais funcionam simultaneamente como terminais utilizador e encaminhadores (routers), utilizando
algoritmos e protocolos apropriados tal como o que irá ser desenvolvido e testado neste 2º trabalho de
laboratório, designado Dynamic Source Routing (DSR)1. Este protocolo não existe no pacote INET
Framework para OMNET++, e como tal terá de ser implementado em C++.
2 Software Base Fornecido aos Alunos
Aos alunos é fornecido o ficheiro ThroughputDSR.rar que contém uma simulação exemplo para
INET Framework. Este exemplo é em tudo idêntico ao exemplo ThroughputAdHoc utilizado no 1º
trabalho, com a diferença de que em cada estação existe um submódulo dsr (do tipo
DynamicSourceRouting) entre o submódulo wlan e o submódulo sink ou cli (conforme se trate da
aplicação cliente ou servidor). Pode visualizar estas diferenças por consulta dos respectivos ficheiros
.ned.
O módulo DynamicSourceRouting utilizado pelas estações é um módulo simples definido nos ficheiros
DynamicSourceRouting.ned e DynamicSourceRouting.cc. Notar que como este é um módulo simples,
tem de ter associada a implementação em C++. Ao abrir o ficheiro DynamicSourceRouting.cc irá
verificar que esta implementação está vazia, fazendo transparentemente a passagem de pacotes entre as
camadas superior e inferior. É neste ficheiro que os alunos deverão implementar a funcionalidade do
protocolo DSR.
Para correr o exemplo fornecido siga os passos seguintes:
1. Descomprima
o
ficheiro
ThroughputDSR.rar
no
directório
\INET20061020\Examples\Wireless\ (será criado aí um subdiractório ThroughputDSR).
2. Copie os ficheiros DynamicSourceRouting.ned e DynamicSourceRouting.cc para o directório
\INET-20061020\Network\Extras.
3. Recompile o pacote INET Framework novamente por forma a que o executável resultante
passe a reconhecer o módulo DynamicSourceRouting.
4. Volte ao directório \INET-20061020\Examples\Wireless\ThroughputDSR\ e execute o ficheiro
Throughput.bat da forma habitual.
3 Dynamic Source Routing (DSR)
O DRS é um protocolo de encaminhamento reactivo, i.e. o estabelecimento de rota para um
determinado destino só é despoletado quando existe tráfego para enviar a esse destino. O DSR é
composto por duas funções: Descoberta de Rotas e Manutenção de Rotas, cuja implementação neste
trabalho vale respectivamente 17 e 3 valores.
Uma rota consiste numa sequência de nós que um determinado pacote de dados deve percorrer para
chegar ao destino a partir de uma determinada origem. Nos protocolos do tipo source routing, a
sequência de nós que um pacote de dados deve percorrer é inserido explicitamente no cabeçalho do
pacote pelo nó de origem. Desta forma, o encaminhamento em cada nó é realizado com base
exclusivamente no cabeçalho do pacote, sem necessidade de troca periódica de mensagens de “Hello”
entre vizinhos. No entanto, a origem necessita de saber a rota exacta que o pacote vai seguir até ao
destino, a qual é obtida pela função de Descoberta de Rotas e mantida numa cache durante um
determinado intervalo de tempo (e.g., 5 s).
A Descoberta de Rotas é iniciada pela origem de um pacote de dados sempre que a rota até ao destino
não se encontre já na cache. O procedimento é iniciado através da difusão (broadcast) de um pacote de
sinalização ROUTE_REQUEST, em que se indica (v. Fig. 1):
 O endereço do destino da rota que se pretende obter.
D. Johnson, D. Maltz, J. Broch, “DSR: The Dynamic Source Routing Protocol for Multi-Hop
Wireless Ad Hoc Networks”. In Ad Hoc Networking, edited by Charles E. Perkins, Chapter 5, pp. 139172, Addison-Wesley, 2001. Disponível em http://monarch.cs.cmu.edu/monarch-papers/dsrchapter00.pdf (último acesso em 21/03/2007)
1
2
 O endereço do nó de origem.
 A lista de nós que compõem a rota desde a origem até ao destino. No início esta lista está vazia.
 Um campo hop limit que contém o número de saltos máximo tolerado durante a procura. Este
campo é decrementado em cada nó e o pacote ROUTE_REQUEST é eliminado uma vez que este
valor chegue a 0.
 Um número de sequência do pedido colocado pelo nó de origem.
0
Endereço do nó Endereço do nó Número de
(ROUTE_REQ de destino
de origem
Sequência
UEST)
32 bits
48 bits
48 bits
16 bits
Hop Limit
Comprimento
da Lista de Nós
(N)
8 bits
8 bits
Lista de Nós
N * 48 bits
Fig. 1: Formato do pacote ROUTE_REQUEST.
Quando outro nó recebe o ROUTE_REQUEST, no caso de ele ser o destino retorna um pacote
ROUTE_REPLY contendo a rota acumulada no ROUTE_REQUEST (incluindo o seu próprio
endereço). Na verdade, o ROUTE_REPLY tem o mesmo formato do ROUTE_REQUEST, diferindo
apenas no código da mensagem (v. Fig. 2).
Endereço do Endereço do
1
(ROUTE_REP nó de destino nó de origem
do
do
LY)
ROUTE_REQ. ROUTE_REQ.
32 bits
48 bits
48 bits
Número de
Sequência
Hop Limit
Comprimento
da Lista de Nós
(N)
16 bits
8 bits
8 bits
Lista de Nós
N * 48 bits
Fig. 2: Formato do pacote ROUTE_REPLY.
Uma vez que receba este ROUTE_REPLY, o nó de origem guarda a rota na cache, a qual possui o
formato semelhante ao representado na Tab. 1. Notar que no caso de receber vários pacotes
ROUTE_REPLY, a origem pode guardar as várias rotas possíveis por forma a poder utilizá-las em caso
de falha.
Tab. 1: Exemplo de cache de rotas.
Nó de Destino
Comprimento da Rota
Rota
G
6
B, C, D, E, F, G
5
P, Q, R, S, G
4
W, X, Y, Z
Z
Vejamos agora o que acontece nos nós intermédios que recebem o ROUTE_REQUEST. Caso o nó
intermédio já tenha visto outro pacote ROUTE_REQUEST com a mesma origem, destino e número de
sequência, ou no caso de o seu próprio endereço já fazer parte da rota, ou ainda no caso de o Hop Limit
ser igual a 0, o ROUTE_REQUEST não é propagado. Caso contrário, o nó intermédio adiciona o seu
endereço à lista de endereços, decrementa o Hop Limit e reenvia o pacote em difusão.
Na origem do ROUTE_REQUEST, os pacotes de dados que aguardam o estabelecimento de uma rota
são colocados num tampão especial. Uma vez estabelecida a rota, estes pacotes são imediatamente
transmitidos. No caso de o tempo de estabelecimento da rota exceder um determinado limite (e.g., 5 s),
o pacote é eliminado.
3
Para transmitir um pacote de dados, o DSR inclui no cabeçalho a rota até ao destino (v. Fig. 3). O
pacote é enviado em unicast para o próximo nó da rota.
2 (DATA)
32 bits
Endereço do nó Endereço do nó Número de
de destino
de origem
Sequência
48 bits
48 bits
Comprimento
da Lista de Nós
(N)
16 bits
Lista de Nós
Variável
N * 48 bits
8 bits
Dados
Fig. 3: Formato do pacote DATA.
A função de Manutenção de Rotas consiste em garantir a entrega dos pacotes de dados em cada salto,
através de um pacote ACK (v. Fig. 4). Se ao enviar o pacote de dados o ACK não tiver sido recebido
após um determinado intervalo de tempo (e.g., 1s), o emissor retransmite o pacote. Deve definir-se um
número máximo de tentativas de retransmissão (e.g., 3).
3 (ACK)
32 bits
Endereço IP do Endereço IP do
nó de destino nó de origem
32 bits
32 bits
Número de
Sequência
16 bits
Fig. 4: Formato do pacote ACK.
No caso de o número máximo de retransmissões ser ultrapassado, considera-se que a rota falhou, sendo
enviado para a origem um pacote ROUTE_ERROR (v. Fig. 5). Ao receber o pacote ROUTE_ERROR,
a origem deve eliminar a rota da sua cache e reenviar o pacote de dados através de uma rota alternativa.
No caso de esta não existir, deverá reiniciar os procedimentos de Descoberta de Rota.
4
Endereço do nó Endereço do nó Número de
(ROUTE_ERR de destino
de origem
Sequência
OR)
32 bits
48 bits
48 bits
16 bits
Comprimento
da Lista de Nós
(N)
8 bits
Lista de Nós
N * 48 bits
Fig. 5: Formato do pacote ROUTE_ERROR.
Atenção: Não se considera confirmação de entrega extremo-a-extremo, funcionalidade própria da
camada de Transporte.
4 Testes de Desempenho do DSR
No final do trabalho, os alunos devem apresentar um relatório, respondendo às questões seguintes,
utilizando um formato de relatório similar ao utilizado para o 1º trabalho. Os alunos deverão ainda
anexar ao relatório os ficheiros que contêm as medições obtidas, assim como as folhas de cálculo
associadas.
Q4.1) Considere uma rede estática linear com número variável de nós cuidadosamente dispostos por
forma a que a comunicação apenas se possa estabelecer entre cada par de nós adjacentes. Considere
ainda que os dados são gerados num dos extremos da rede e transmitidos para o outro extremo,
servindo os nós intermédios apenas para funções de encaminhamento. Obtenha os valores do débito da
rede em função do número de saltos (hops) considerando para o número de saltos os valores {1, 2, 3, 4,
5, 6, 7, 8}.
Q4.2) Considere uma rede estática numa área de 10000×10000 m em que os nós estão dispostos em
matriz e, em que cada nó pode transmitir para qualquer outro, escolhido ao acaso. Obtenha o débito da
rede em função da densidade de nós, para os valores de densidade {16×10-6, 32×10-6} nós/m2.
Q4.3) Considere uma rede móvel numa área de 10000×10000 m, em que a mobilidade dos nós obedece
ao
modelo
Random
Waypoint
implementado
nos
ficheiros
\Work\INET-
4
20061020\Mobility\RandomWPMobility.* em lugar do modelo de mobilidade nula (Null Mobility)
utilizado até aqui. Considere que em que cada nó pode transmitir para qualquer outro, escolhido ao
acaso. Obtenha o débito da rede em função da velocidade média dos nós, para os valores de velocidade
{1, 2, 4, 8, 10} m/s. Considere que a densidade média de nós é igual 16×10 -6 nós/m2 e que os nós são
distribuídos ao acaso no início da simulação.
Nos testes acima descritos considere que o tamanho do pacote é de 1000 octetos e o intervalo entre
pacotes de 0.0005 s e **.mac.rtsThresholdBytes=500. Considere para os restantes
parâmetros os valores que já se encontram atribuídos no ficheiro omnetpp.ini fornecido. Cada valor de
débito apresentado nos gráficos deverá corresponder ao valor médio de um mínimo de 10 simulações.
5