Algoritmo baseado em vetor de distâncias Distance-vector-based (DV) Equação de Bellman-Ford (programação dinâmica) Define d x (y) := custo do caminho de menor custo de x para y Então d x (y) = min v {c(x,v) + d v (y)} Em que min é calculado para todos os vizinhos v de x
Exemplo de grafo (fonte: Kurose) fonte u, destino z d u (z) = 4
Algoritmo de Bellman-Ford Solução da equação de Bellman-Ford Fornece os registros da tabela de roteamento de um nó fonte Sugere a forma de comunicação vizinho para vizinho que ocorrerá no algoritmo DV
Algoritmo de Bellman-Ford Para um nó x, D x (y) estima o menor custo de x para y, para todos os nós y em N Vetor de distância do nó x: D x = [D x (y): yєn] O nó x conhece o custo para cada vizinho v: c(x,v) O nó x mantém D x = [D x (y): yєn] O nó x também mantém os vetores de distância de seus vizinhos Para cada vizinho v, x mantém D v = [D v (y): y є N]
Algoritmo de Bellman-Ford Para cada nó, x: 1 Inicialização: 2 para todos os nós destinos y em N: 3 D x (y) = c(x,y) /* se y não é um vizinho então c(x,y) = */ 4 para cada vizinho w 5 D w (y) = para todos os destinos y em N 6 para cada vizinho w 7 envia um vetor de distâncias D x = [D x (y): y em N] para w 8 9 loop 10 wait (até que ocorra uma mudança no custo do enlace ao vizinho w ou 11 até a recepção de um vetor de distâncias do vizinho w) 12 13 para cada y em N: 14 D x (y) = min v {c(x,v) + D v (y)}
Algoritmo de Bellman-Ford 15 16 if D x (y) mudou para algum destino y 17 envia um vetor de distâncias D x = [D x (y): y em N] para todos os vizinhos 18 19 forever
Algoritmo de Bellman-Ford Ideia básica: Cada nó envia periodicamente sua própria estimativa de vetor de distância aos vizinhos Quando o nó x recebe nova estimativa de DV do vizinho, ele atualiza seu próprio DV usando a equação B-F: D x (y) = min v {c(x,v) + D v (y)} para cada nó y em N Ao menos em condições naturais, a estimativa D x (y) converge para o menor custo atual d x (y)
Algoritmo de Bellman-Ford Iterativo, assíncrono: cada iteração local é causada por: Mudança no custo do enlace local Mensagem de atualização DV do vizinho Distribuído: Cada nó notifica os vizinhos apenas quando seu DV mudar Os vizinhos então notificam seus vizinhos, se necessário
Algoritmo de Bellman-Ford Exemplo do algoritmo DV Cada linha é um vetor de distâncias Cada nó envia seu vetor de distâncias ao seus vizinhos (setas da figura a seguir) Após receber as atualizações, cada nó recalcula o próprio vetor de distâncias Se houver mudanças, os nós reenviam seus vetores de distâncias aos vizinhos
Exemplo do algoritmo DV (fonte: Kurose) D x (y) = min{c(x,y) + D y (y), c(x,z) + D z (y)} = min{2+0, 7+1} = 2 D x (z) = min{c(x,y) + D y (z), c(x,z) + D z (z)} = min{2+1, 7+0} = 3
Algoritmo de Bellman-Ford Mudanças no custo do enlace: Registros na tabela de distâncias de y e z até o destino x: no tempo t 0, y detecta a mudança do custo do enlace, atualiza seu DV e informa aos seus vizinhos. no tempo t 1, z recebe a atualização de y e atualiza sua tabela. Calcula um novo custo mínimo para x e envia seu DV aos vizinhos. no tempo t 2, y recebe a atualização de z e atualiza sua tabela de distância. Menores custos de y não mudam, e daí y não envia qualquer mensagem a z. boas notícias viajam depressa
Algoritmo de Bellman-Ford Mudanças no custo do enlace: más notícias viajam devagar
Algoritmo de Bellman-Ford Mudanças no custo do enlace: Más notícias viajam devagar problema da contagem ao infinito! 44 iterações antes de o algoritmo estabilizar: Pag. 280 do Kurose
Algoritmo de Bellman-Ford Reversão envenenada: Se Z roteia por Y para alcançar X : Z diz a Y que sua distância (de Z) para X é infinita (então Y não roteará até X via Z) Isso resolverá completamente o problema da contagem ao infinito? Ver Kurose
Algoritmos de roteamento Cálculo de roteamento No DV, cada nó Fala somente com os vizinhos diretamente conectados a ele Informa as estimativas de menor custo entre ele mesmo e todos os outros nós da rede (nós que ele sabe que existem) No LS, cada nó Fala com todos os nós (via broadcast) Informa somente os custos dos enlaces diretamente ligados a ele
Algoritmos de roteamento Complexidade LS: com n nós, E links, O(NE) mensagens enviadas DV: trocas somente entre vizinhos Tempo de convergência varia Tempo de convergência LS: algoritmo O(N 2 ) exige mensagens O(NE) Pode ter oscilações DV: tempo de convergência varia Pode haver loops de roteamento Problema da contagem ao infinito
Algoritmos de roteamento Robustez: o que acontece se um roteador funciona mal? LS: Nós podem informar custos de link incorretos Cada nó calcula sua própria tabela de roteamento DV: Nó DV pode informar custo de caminho incorreto Tabela de cada nó é usada por outros Propagação de erros pela rede
Roteamento hierárquico Em função de duas razões principais Escalabilidade Autonomia administrativa Roteadores são agrupados em sistemas autônomos (Autonomous Systems - ASs) Sob um mesmo controle administrativo Protocolos intrassistema autônomo Protocolos intersistema autônomo
Exemplo de sistemas autônomos (fonte: Kurose)
Roteamento hierárquico Protocolo intraas Obtém informações sobre os roteadores dentro do mesmo AS Protocolo interas Obtém informações sobre condições de alcance de ASs vizinhos Propaga essas informações a todos os outros roteadores internos ao AS
Roteamento hierárquico Exemplo 1 AS1 aprende através do protocolo interas que a subrede x é alcançável através do AS3 (roteador de borda 1c) Protocolo interas propaga essa informação para todos os roteadores do AS1 Com informações do protocolo intraas, 1d determina que sua interface I está no caminho de menor custo para 1c 1d coloca o registro (x,i) na sua tabela de roteamento
Roteamento hierárquico Exemplo 2 AS1 aprende através do protocolo interas que a subrede x é alcançável através do AS3 e do AS2 1d deve determinar para qual roteador encaminhar os pacotes para a sub-rede x Roteamento da batata quente AS se livra do pacote (a batata quente) o mais rápido possível (com o menor custo possível)
Roteamento hierárquico Etapas da inclusão na tabela de roteamento (fonte: Kurose)