Algoritmo baseado em vetor de distâncias Distance-vector-based (DV) Equação de Bellman-Ford (programação dinâmica) Define dx(y) := custo do caminho de menor custo de x para y Então dx(y) = minv {c(x,v) + dv(y)} Em que min é calculado para todos os vizinhos v de x Exemplo de grafo (fonte: Kurose) fonte u, destino z → du(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, Dx(y) estima o menor custo de x para y, para todos os nós y em N • Vetor de distância do nó x: Dx = [Dx(y): y є N] • O nó x conhece o custo para cada vizinho v: c(x,v) • O nó x mantém Dx = [Dx(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 Dv = [Dv(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 Dx(y) = c(x,y) /* se y não é um vizinho então c(x,y) = ∞ */ 4 para cada vizinho w 5 Dw(y) = ∞ para todos os destinos y em N 6 para cada vizinho w 7 envia um vetor de distâncias Dx = [Dx(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 Dx(y) = minv{c(x,v) + Dv(y)} Algoritmo de Bellman-Ford 15 16 if Dx(y) mudou para algum destino y 17 envia um vetor de distâncias Dx = [Dx(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: Dx(y) = minv{c(x,v) + Dv(y)} para cada nó y em N • Ao menos em condições naturais, a estimativa Dx(y) converge para o menor custo atual dx(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) Dx(y) = min{c(x,y) + Dy(y), c(x,z) + Dz(y)} = min{2+0 , 7+1} = 2 Dx(z) = min{c(x,y) + Dy(z), c(x,z) + Dz(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 t0, y detecta a mudança do custo do enlace, atualiza seu DV e informa aos seus vizinhos. no tempo t1, 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 t2, 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(N2) 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)