Vous êtes sur la page 1sur 11

FAESA

Faculdades Integradas Espírito-Santenses

Marcell de Oliveira
Sandro Rodrigues

ALGORITMOS DE ROTEAMENTO

Vitória
Junho/2008
Princípios Básicos
Os roteadores utilizam os algoritmos de roteamento para encontrar o melhor
caminho para um destino. Quando dizemos "melhor caminho" estamos considerando
parâmetros como o número de saltos (a viagem que um pacote utiliza de um
roteador, ou ponto imediato, para outro na rede), tempo de atraso e custo de
comunicação de transmissão de um pacote.

Com base na forma como os roteadores obtêm dados sobre a estrutura da rede e a
sua análise destas informações para especificar o melhor caminho, temos duas
rotinas de algoritmos principais: algoritmos de roteamento globais e algoritmos
de roteamento descentralizados. Nas rotinas de roteamento descentralizado,
cada roteador possui os dados sobre o outro roteador conectado diretamente a ele.
Ele não conhece as informações sobre todos os roteadores da rede. Estes
algoritmos são também conhecidos como algoritmos DV (vetor distância). Nos
algoritmos de rotina global, cada roteador tem informações completas sobre todos
os outros roteadores da rede e o estado do tráfego nela. Estes algoritmos são
também conhecidos como algoritmos LS (estado do enlace).

Algoritmos LS
Nos algoritmos LS, cada roteador tem que seguir alguns procedimentos descritos
abaixo.
* Identificar os roteadores que estão fisicamente conectados a ele e receber seus
endereços IP. Quando um roteador inicia seu trabalho, ele envia, primeiramente, um
pacote com um "ALO" para a rede. Cada roteador que recebe este pacote responde
com uma mensagem que contém seu endereço de IP.
* Medir o tempo de atraso (ou quaisquer outros parâmetros importantes da rede,
como média de tráfego) para roteadores vizinhos. Para poder fazer isto, os
roteadores enviam pacotes de eco pela rede. Todos os roteadores que recebem
estes pacotes respondem com um pacote de resposta. Dividindo o tempo de
percurso por 2, os roteadores podem contar o tempo de atraso (tempo de percurso é
a medida do atraso na rede, encontrado pelo tempo que um pacote de
dados ricocheteou em algum host remoto). Perceba que este tempo inclui tanto o
tempo de transmissão como o tempo de processamento. O tempo que leva o pacote
a atingir o seu destino e o tempo que leva o receptor para processá-lo e responder.

* Transmitir suas informações pela rede para outros roteadores e receber as


informações dos outros roteadores. Nesta etapa, todos os roteadores compartilham
seu conhecimento e transmitem suas informações uns aos outros. Desta forma,
cada roteador pode conhecer a estrutura e o estado da rede.

* Usando-se um algoritmo apropriado, identifica-se a melhor rota entre dois nós da


rede. Nesta etapa, os roteadores escolhem o melhor caminho para cada nó. Eles
fazem isto usando um algoritmo, como o algoritmo de menor caminho de Dijkstra.
Neste algoritmo, um roteador, com base nas informações colhidas de outros
roteadores, constrói um grafo da rede. Este grafo mostra a localização dos
roteadores na rede e suas ligações uns com os outros. Cada enlace é rotulado com
um número chamado peso ou custo. Este número é uma relação entre o tempo de
atraso, média do tráfego e ocasionalmente o simples número de saltos entre os nós.
Por exemplo, se houver duas ligações entre um nó e um destino, o roteador escolhe
a ligação com menor peso.

Exemplo de LS: Algoritmos de Dijkstra


Aqui queremos achar o melhor caminho entre A e E (veja abaixo). Podemos ver que
existem 6 possibilidades de caminhos entre A e E (ABE, ACE, ABDE, ACDE,
ABDCE, ACDBE) e é claro que ABDE é o melhor caminho porque seu peso é o
menor. Mas nem tudo é tão simples e existem alguns casos complicados nos quais
temos de usar algoritmos para encontrar o melhor caminho.
1. Como vemos na imagem abaixo, o nó fonte (A) foi escolhido como um T-
node, e seu rótulo é permanente (mostramos os nós "permanentes" com círculos
cheios e T-nodes com o símbolo ).

2. Nesta etapa, vemos que o conjunto de registros de estado de nós "tentativa"


diretamente ligados ao T-node (B,C) foi alterado. Além disto, desde que B tenha
menor peso, ele será escolhido como T-node e seu rótulo será mudado para
permanente (veja abaixo).

3. Nesta etapa, como na 2, o conjunto de registros de estado de nós "tentativa"


diretamente ligados ao T-node (D,E) foi alterado. Além disto, desde que D tenha
menor peso, ele será escolhido como T-node e seu rótulo será mudado para
permanente (veja abaixo).

4. Nesta etapa, não temos qualquer nó "tentativa", então, só identificamos o


próximo T-node. Desde que E tenha o menor peso, ele será escolhido como T-
node.
Chegamos ao fim. Agora temos que identificar o caminho. O nó prévio de E é D, o
nó prévio de D é B e o nó prévio de B é A. Logo, o melhor caminho é ABDE. Neste
caso, o peso total é 4 (1+2+1).
Apesar deste algoritmo funcionar bem, é muito complicado e toma muito tempo dos
roteadores para processá-lo, com isso, a eficiência da rede diminui. Além disto, se
um roteador passa uma informação errada para outros roteadores, todas as
decisões dos roteadores irão se tornar ineficazes. Para entender melhor este
algoritmo, aqui está o programa fonte escrito em C:

#define MAX_NODES 1024


/* máximo número de nós */
#define INFINITY 1000000000
/* um número maior do que todo o caminho
máximo */
int n,dist[MAX_NODES][MAX_NODES];
/*dist[I][j] é a distância de i para j */
void shortest_path(int s,int t,int path[ ])
{struct state
{
/* o caminho em que se trabalha */
int predecessor ;
/*nó prévio */
int length
/*comprimento da fonte até o nó*/
enum {permanent, tentative} label
/*estado do rótulo*/
}state[MAX_NODES];
int I, k, min;
struct state *
p;
for (p=andstate[0];p < andstate[n];p++)
{
/*estado de inicialização*/
p->predecessor=-1
p->length=INFINITY
p->label=tentative;
}
state[t].length=0;
state[t].label=permanent;
k=t; /*k é o nó inicial */
do
{
/* é o melhor caminho de k? */
for I=0; I < n; I++)
/*este diagrama possui n nós */
if (dist[k][I] !=0 andand state[I].label==tentative)
{
if (state[k].length+dist[k][I] < state[I].length)
{
state[I].predecessor=k;
state[I].length=state[k].length + dist[k][I]
}
}
/* Encontre como tentativa o nó etiquetado com
a menor etiqueta. */
k=0;min=INFINITY;
for (I=0;I < n;I++)
{
if(state[I].label==tentative and
state[I].length < min)=state[I].length;
{
k=I;
}
state[k].label=permanent
}
while (k!=s);
/*Copie o caminho na matriz de saída*/
I=0;k=0
Do{path[I++]=k;k=state[k].predecessor;
}
while (k > =0);
}

Algoritmos DV
Algoritmos DV são também conhecidos como algoritmos de roteamento Bellman-
Ford e algoritmos de roteamento Ford-Fulkerson. Nestes algoritmos, cada roteador
possui uma tabela de roteamento que mostra o melhor caminho para cada destino.
Nos algoritmos DV, cada roteador deve seguir alguns procedimentos.
1. Ele conta o peso dos enlaces conectados diretamente a ele e salva a
informação na sua tabela.
2. Num determinado período de tempo, ele envia sua tabela ao roteador vizinho
(não para todos os roteadores) e recebe a tabela de roteamento de cada um de
seus vizinhos.
3. Baseado na informação das tabelas de roteamento de seus vizinhos, ele
atualiza a sua.

Um dos mais importantes problemas com o algoritmo DV é chamado "contagem ao


infinito".

Imagine uma rede com um diagrama como mostrado abaixo. Como vemos, há
somente uma ligação entre A e a outra parte da rede. Aqui podemos ver o grafo e a
tabela de roteamento de todos os nós:
A B C D

A 0,- 1,A 2,B 3,C

B 1,B 0,- 2,C 3,D

C 2,B 1,C 0,- 1,C

D 3,B 2,C 0,- 0,-

Imagine que o enlace entre A e B está cortado. Neste momento, B corrige sua
tabela. Após um intervalo de tempo específico, os roteadores trocam suas tabelas, e
B recebe a tabela de roteamento de C. Desde que C não saiba o que aconteceu ao
enlace entre A e B, ele diz ter um enlace com A com o peso de 2 (1 de C para B, e 1
de B para A. Ele não sabe que B não tem um enlace com A). B recebe esta tabela e
pensa que existe um enlace isolado entre C e A, então ele corrige sua tabela e
alterando de infinito para 3 (1 de B para C e 2 de C para A, como disse C). Uma vez
mais, roteadores trocam suas tabelas. Quando C recebe a tabela de roteamento de
B, ele vê que B alterou o peso de seu enlace de A de 1 para 3, então C atualiza sua
tabela e altera o peso da ligação de A para 4 (1 de C para B, e 3 de B para A, como
disse B).
Este processo se repete até que todos os nós descubram que o peso da ligação A é
infinito. Desta forma, especialistas dizem que o algoritmo DV possui uma baixa taxa
de convergência.
Uma maneira de resolver este problema é os roteadores enviarem informações
somente aos vizinhos que não estão exclusivamente ligados ao destino. Por
exemplo, neste caso, C não deveria enviar qualquer informação para B sobre A,
porque B é o único caminho para A.
Roteamento Hierárquico
Como vimos, tanto nos algoritmos LS como no DV, cada roteador tem que salvar
algumas informações de outros roteadores. Quando o tamanho da rede cresce, o
número de roteadores na rede aumenta. Conseqüentemente, o tamanho das tabelas
de roteamento aumenta, e os roteadores não conseguem gerenciar o tráfego da
rede com eficiência. Usamos roteamento hierárquico para superar este problema.
Vamos examinar este assunto com um exemplo:
Usamos o algoritmo DV para encontrar o melhor caminho entre os nós. Na situação
descrita abaixo, todos os nós da rede têm que salvar uma tabela de roteamento com
17 registros. Aqui temos um grafo e uma tabela de roteamento para A:

Destino Linha Peso

A --- ---

B B 1

C C 1

D B 2

E B 3

F B 3

G B 4

H B 5
I C 5

J C 6

K C 5

L C 4

M C 4

N C 3

O C 4

P C 2

Q C 3

Destino Linha Peso

A --- ---

B B 1

C C 1
Região 2 B 2

Região 3 C 2

Região 4 C 3

Região 5 C 4

Se A quer enviar um pacote de dados para qualquer roteador na região 2 (D, E, F ou


G), ele o envia para B, e assim por diante. Como vemos, neste tipo de roteamento,
as tabelas podem ser totalizadas, fazendo crescer a eficiência da rede. O exemplo
acima mostra dois níveis de roteamento hierárquico. Podemos também usar 3 ou 4
níveis de roteamentos hierárquicos.
Nos roteamentos hierárquicos de nível três, a rede é classificada em um número de
clusters. Cada cluster é feito de um número de regiões, e cada região contém um
número de roteadores. O roteamento hierárquico é largamente usado em
roteamento de Internet e usa vários protocolos de roteamento.

Vous aimerez peut-être aussi