Sei sulla pagina 1di 6

Aluno: Francisco Bruno Filgueiras de Souza Mtricula : 11305676 Algoritmo de Vetor de Distncia O algoritmo de vetor de distncia consiste em atualizar

sua tabela de roteamento com mensagens(vetores de distncia) indo e vindo dos ns vizinhos, inicialmente cada n tem conhecimento apenas de seu prprio vetor de distncia, de maneira assncrona cada n manda seu vetor de distncia aos seus ns vizinhos, quando um n X recebe um vetor de distncia vinda do n Y ele ir usar o algoritmo de Bellman-Ford para analisar se houve mudana no seu prprio vetor de distncia por conta dessa mensagem recebida, se sim, ele envia o seu novo vetor de distncia aos seus vizinhos, o algoritmo s chega ao fim de sua execuo quando no h mais trocas de informaes entre os ns. Por Exemplo, numa rede conectada por 3 roteadores como abaixo teremos.

N X na primeira vez que recebe vetores de distncia dos vizinhos. Dx(x) = 0 Dx(y) = min{c(x,y) + dy(y) , c(x,z) + dz(x)} = min{6 + 0 , 30 + 2} = 6 Dx(z) = min{c(x,z) + dz(z) , c(x,y) + dy(z)} = min{30 + 0 , 6 + 2} = 8 N Y na primeira vez que recebe vetores de distncia dos vizinhos. Dy(x) = min{c(y,x) + dx(x) , c(x,z) + dz(x)} = min{6 + 0 , 2 + 30} = 6 Dy(y) = 0 Dy(z) = min{c(y,z) + dz(z) , c(x,y) + dy(z)} = min{2 + 0 , 6 + 30} = 2 No houve mudana no seu vetor de distncia logo no h envio dessa informao para seus vizinhos

N Z na primeira vez que recebe vetores de distncia dos vizinhos. Dz(x) = min{c(z,x) + dx(x) , c(z,y) + dy(z)} = min{30 + 0 , 2 + 6} = 8 Dz(y) = min{c(z,y) + dy(y) , c(z,x) + dx(y)} = min{2 + 0 , 30 + 6} = 2 Dz(z) = 0 N X na segunda vez que recebe vetores de distncia dos vizinhos. Dx(x) = 0 Dx(y) = min{c(x,y) + dy(y) , c(x,z) + dz(x)} = min{6 + 0 , 30 + 2} = 6 Dx(z) = min{c(x,z) + dz(z) , c(x,y) + dy(z)} = min{30 + 0 , 6 + 2} = 8 No houve mudana no seu vetor de distncia logo no h envio dessa informao para seus vizinhos N Y na segunda vez que recebe vetores de distncia dos vizinhos. Dy(x) = min{c(y,x) + dx(x) , c(x,z) + dz(x)} = min{6 + 0 , 2 + 8} = 6 Dy(y) = 0 Dy(z) = min{c(y,z) + dz(z) , c(x,y) + dy(z)} = min{2 + 0 , 6 + 8} = 2 No houve mudana no seu vetor de distncia logo no h envio dessa informao para seus vizinhos

N Z na segunda vez que recebe vetores de distncia dos vizinhos. Dz(x) = min{c(z,x) + dx(x) , c(z,y) + dy(z)} = min{30 + 0 , 2 + 6} = 8 Dz(y) = min{c(z,y) + dy(y) , c(z,x) + dx(y)} = min{2 + 0 , 30 + 6} = 2 Dz(z) = 0 No houve mudana no seu vetor de distncia logo no h envio dessa informao para seus vizinhos

O que acontece se mudarmos o enlace que liga X e Y do valor de 6 para 1?

No tempo t0, y percebe que o custo mudou de 6 para 1 dai ele ento atualiza seu vetor de distncia e manda essa informao aos seus vizinhos. Dy(x) = min{c(y,x) + dx(x) , c(x,z) + dz(x)} = min{1 + 0 , 30 + 8} = 1 Dy(y) = 0 Dy(z) = min{c(y,z) + dz(z) , c(x,y) + dy(z)} = min{2 + 0 , 6 + 2} = 2 N Y no t0 estar assim:

No tempo t1 z recebe o vetor de distncia de y e atualiza sua tabela de roteamento. Dz(x) = min{c(z,x) + dx(x) , c(z,y) + dy(z)} = min{30 + 0 , 2 + 1} = 3 Dz(y) = min{c(z,y) + dy(y) , c(z,x) + dx(y)} = min{2 + 0 , 30 + 6} = 2 Dz(z) = 0 Ficando assim:

No tempo t2 y receber a tabela de distncia de z j que este teve sua tabela modificada, j em y aps recalcular seu vetor os menores custos no mudam, logo no h mais necessidade de trocar informaes, as tabelas esto atualizadas de forma correta exatamente como deveria estar. Uma mudana para um valor baixo refletiu positivamente em todos os aspectos, melhorando o desempenho e com ausncia de erros.

O que acontece se mudarmos o enlace que liga X e Y do valor de 6 para 80?

O n y primeiramente perceber a mudana e ira recalcular seu vetor de distncia Dy(x) = min{c(y,x) + dx(x) , c(x,z) + dz(x)} = min{80 + 0 , 2 + 8} = 10 Dy(y) = 0 Dy(z) = min{c(y,z) + dz(z) , c(x,y) + dy(z)} = min{2 + 0 , 80 + 8} = 2 Analisando a figura e o resultado notamos que o caminho de z a x est completamente errado sendo valorado como 10, no entando o n y apenas sabe que c(y,x) = 80 e dz(x) = 8 conforme seu vizinho x e sua tabela de roteamentos os informa respectivamente. Desse modo com essas informaes para se chegar a x, y tem que fazer o percurso atravs de z esperando completa-lo com o custo de 8, a partir desse momento temos um loop de roteamento. Momento em que o n y nota a mudana no valor do custo do enlace que o liga ao n x.

Ao ter seu vetor de distncia modificado o n y informa a seus vizinhos, possvel notar que o caminho que leva ao n x mais curto o que passa pelo n Z (8). Ele ir retorna ao n z, que ao receber o vetor de distncia estar assim:

Indicando que o melhor caminho que vai at x passa por Y, j que ele alterou seu vetor ele repassa a informao pro seus vizinho mais uma vez, y recebendo a informao ficar assim:

E esse procedimento de loop se repetir at que o caminho mais curto que est sendo recalculado incremente a um valor maior que 30. Diferente de quando diminumos o valor do enlace, esse procedimento pode levar uma eternidade se o enlace ao invs de 30 fosse 99999(ou maior) por exemplo.

Adio de Reverso Envenenada


Uma forma de prevenir esse loop usar o conceito de adio de reverso envenenada, que tem como lgica impedir que o loop acontea adicionado um sinal de infinito em ambos os caminhos fazendo com que as tabelas tenham a de se estabilizar com os valores corretos. Por exemplo. Vendo que para se chegar a x existe um caminho de z que passa por y temos que z pode informar a y que o caminho dz(x) = , no nosso caso a tabela ficaria assim:

Fazendo assim foramos o y a tomar o caminho a x diretamente a ele. z faz isso mesmo sabendo que sua rota para x era 8 ele faz isso intencionalmente, depois de receber a atualizao de y z imediatamente ter a rota traada diretamente a x. Com o vetor atualizado z receber a mensagem de y ficando assim:

Atualizado ele manda seu vetor aos vizinhos. Y atualiza seu vetor ficando assim:

Agora que z se encontra no caminho de menor custo y envenena o caminho dy(x) deixando essa rota inativa para z mesmo sabendo y que esse valor 32.