Algoritmos de encaminhamento
Dijkstra, distance vector, ciclos, convergência, RIP, OSPF e BGP.
No grafo seguinte, a ligação A–C custa 5, mas passar por B custa apenas 3; um algoritmo de encaminhamento precisa de descobrir esta alternativa e registar B como próximo salto. O custo é definido pelo problema e não representa necessariamente atraso ou capacidade.
Link state e Dijkstra
Num algoritmo link state, cada router divulga custos das suas ligações e constrói a topologia, calculando depois menores custos a partir de si. Cada router precisa de receber a descrição completa das ligações e custos, não apenas distâncias calculadas por outros: só com o grafo consegue correr Dijkstra localmente.
Dijkstra mantém distâncias provisórias e nós fixados. Começa com origem a zero e restantes a infinito. Escolhe o não fixado de menor distância, fixa-o e tenta melhorar vizinhos com atual + custo. Os custos devem ser não negativos.
Resolução a partir de A. Depois de fixar A, B tem 2 e C tem 5; fixa B, e C melhora para 3 enquanto D fica em 6; fixa C, e D melhora para 4; fixa D. Os predecessores dão A-B-C-D. Para chegar a D, o próximo salto a partir de A é B, não C nem D.
| Passo | Fixado | Dist B | Dist C | Dist D |
|---|---|---|---|---|
| 0 | A | 2 | 5 | infinito |
| 1 | B | 2 | 3 | 6 |
| 2 | C | 2 | 3 | 4 |
| 3 | D | 2 | 3 | 4 |
Em igualdade de custos pode haver vários caminhos mínimos. Usa o critério de desempate do enunciado, se existir. Uma resposta com custo correto pode ter um caminho diferente e igualmente válido.
Distance vector e Bellman-Ford
Em distance vector, o router troca distâncias com vizinhos sem conhecer o grafo completo, segundo:
percorre os vizinhos de , cujos custos locais são conhecidos, e cada candidato soma custo até ao vizinho e a distância que esse vizinho anunciou para o destino. Guarda também o vizinho que produziu o mínimo.
Exemplo. X liga a A com custo 2 e a B com custo 5. Para Z, A anuncia 7 e B anuncia 1; via A custa 9 e via B custa 6, por isso X anuncia 6 e usa B.
Num traço por rondas síncronas, todos calculam com os vetores da ronda anterior. Atualizar imediatamente um router e usar esse resultado no seguinte modela uma execução diferente. Regista a inicialização: frequentemente distância zero a si, custos conhecidos aos vizinhos e infinito aos restantes.
Falhas, ciclos e count to infinity
Considera Z–A–B, com custo 1 por ligação e sem split horizon. Inicialmente A anuncia distância 1 a Z e B anuncia 2 via A; quando Z–A falha, A pode receber o anúncio antigo de B e escolher distância 3 via B. B recebe esse novo valor e passa a anunciar 4 via A, e as atualizações seguintes produzem 5, 6 e assim por diante, embora nenhum dos dois tenha caminho para Z.
| Atualização recebida | Distância de A a Z | Distância de B a Z |
|---|---|---|
| Antes da falha | 1, direta | 2, via A |
| A usa anúncio antigo de B | 3, via B | 2, via A |
| B usa anúncio novo de A | 3, via B | 4, via A |
| A usa anúncio novo de B | 5, via B | 4, via A |
Este traço é assíncrono: uma atualização já calculada pode ser usada na seguinte. A subida prossegue até ao infinito definido pelo protocolo. Num exercício com rondas síncronas, conserva os vetores anteriores durante toda a ronda.
Split horizon evita anunciar numa interface uma rota aprendida nessa interface. Poison reverse anuncia-a com distância infinita. Triggered updates divulgam alterações sem esperar pelo intervalo periódico. Estas técnicas ajudam, mas poison reverse não elimina todos os ciclos com três ou mais routers.
Porquê só dois? Numa falha entre vizinhos diretos, não anunciar de volta ao vizinho que ensinou a rota corta o ciclo de comprimento dois. Mas numa topologia em anel, a má notícia pode dar a volta pelo outro lado: um terceiro router, que ainda não soube da falha, anuncia a rota antiga a outro vizinho, e a contagem recomeça. O infinito do protocolo, 16 no RIP, limita a duração do ciclo, não o impede.
Encaminhar um pacote num ciclo não significa que o algoritmo tenha terminado: as tabelas podem estar num estado transitório. O TTL/Hop Limit limita a vida do pacote; não resolve a convergência das tabelas.
Protocolos e âmbito
| Protocolo | Ideia | Âmbito habitual |
|---|---|---|
| RIP | Vetor de distâncias, custo em saltos | Interior de um sistema autónomo |
| OSPF | Estado de ligações e caminhos mínimos | Interior de um sistema autónomo, com áreas |
| BGP | Vetor de caminhos e políticas | Entre sistemas autónomos e distribuição interna dessas rotas |
No RIP, 16 representa infinito e limita a dimensão dos caminhos. OSPF divulga estado das ligações e calcula rotas sobre a base de dados. BGP inclui o percurso de sistemas autónomos e aplica políticas; «menor número de routers» não explica a sua seleção.
Um sistema autónomo reúne redes sob uma administração e política de encaminhamento. Há rotas estáticas, introduzidas por configuração, e dinâmicas, aprendidas por protocolo. Uma rota por omissão pode evitar conhecer individualmente todos os destinos externos.
Custo e débito não são a mesma conta
Supondo custo , duas ligações de 4 Mbit/s custam , enquanto um direto de 3 Mbit/s custa e por isso é escolhido, embora o primeiro tenha bottleneck de 4 Mbit/s. Minimizar a soma dos inversos não equivale a maximizar o menor débito.
Para um exercício, entrega a tabela por iteração, o custo final, o caminho e o próximo salto. Se pedirem o débito, faz depois a conta independente sobre as capacidades do caminho escolhido.
Exercícios
Escolher gateway e custo por vetor
R1 recebe vetores de três vizinhos para 200.0.0.0/24: o da esquerda
anuncia 11 e a ligação custa 3; o da direita anuncia 7 e a ligação custa 6;
o de baixo anuncia 8 e a ligação custa 4. Os endereços dos vizinhos são
110.0.7.2, 110.0.8.2 e 110.0.9.2, pela mesma ordem. Que gateway e
custo regista R1? Usa o formato endereço,custo sem espaços.
Pista
Solução
Os candidatos são , e . R1 regista 110.0.9.2,12.
A ligação local mais barata nem sempre vence: conta o caminho completo.
Confere a tua resposta:
- Somo o custo da ligação a cada distância anunciada.
- Escolho o mínimo e o vizinho que o anunciou.
- Escrevo o par endereço e custo no formato pedido.
Informar um router link state
Num protocolo link state, o que precisa de receber cada router?
Pista
Pergunta o que permite correr Dijkstra localmente.
Solução
A descrição completa da topologia e dos custos.
- Topologia detalhada: routers, ligações e custos.. Com o grafo, cada router calcula os seus caminhos mínimos.
- Listas de destinos com a distância de cada vizinho.. Isso é anúncio de distance vector, não estado de ligações.
- O custo total de cada vizinho até um nó raiz.. O cálculo é distribuído; não há raiz nem custos agregados.
Construir caminhos e próximos saltos
Grafo não dirigido: AB custa 2, AC 5, BC 1, BD 4 e CD 1. Executa Dijkstra a partir de A, mostrando os nós fixados, distâncias provisórias e predecessores. Entrega custo, caminho e próximo salto de A para cada outro nó. Explica por que escolher primeiro a ligação direta A–C não dá o melhor caminho para C.
Pista
Solução
Depois de fixar A, B tem distância 2 via A, C tem 5 via A e D está a infinito. Fixa B: C melhora para 3 via B e D para 6 via B. Fixa C: D melhora para 4 via C. Fixa D, terminando.
| Destino | Custo | Caminho | Próximo salto |
|---|---|---|---|
| B | 2 | A–B | B |
| C | 3 | A–B–C | B |
| D | 4 | A–B–C–D | B |
A ligação A–C custa 5, enquanto A–B–C custa 3. Uma distância provisória pode melhorar antes de o nó ser fixado. O predecessor de D é C, mas o próximo salto de A para D é B.
Confere a tua resposta:
- Fixo pela menor distância provisória.
- Relaxo C por B e D por C.
- Distingo predecessor de próximo salto.
Erros frequentes
Comparar anúncios
X-A custa 3, X-B custa 6. A anuncia distância 5 para Z; B anuncia 1. Qual a distância mínima de X a Z?
Pista
Acrescenta o custo da primeira ligação a cada anúncio.
Separar objetivos
Custos 1/R. Caminho 1 tem dois enlaces de 4 Mbit/s; caminho 2 tem um de 3 Mbit/s. Qual é escolhido por menor soma de custos?
Pista
Calcula o custo total de cada percurso.
Solução
Caminho 2, custo 1/3. O seu débito máximo é 3 Mbit/s neste modelo, embora o caminho 1 tenha bottleneck 4.
- Caminho 2.. 1/3 é menor que 1/4+1/4.
- Caminho 1.. Tem maior bottleneck, mas essa não é a função de custo.
- São iguais.. 0,5 não é igual a 0,333.
Seguir rondas e anúncios após uma falha
Numa cadeia não dirigida A–B–C–D, cada ligação custa 1. Inicialmente cada router conhece custo zero a si, 1 aos vizinhos e infinito aos restantes. Em rondas síncronas, indica as distâncias de A a C e D após as duas primeiras rondas e o próximo salto para D.
Depois de convergir, A chega a D via B. Usando poison reverse, que distância a D anuncia A a B? Justifica por que esse anúncio não é uma rota alternativa para B se a ligação B–C falhar.
Pista
Solução
Na primeira ronda A aprende C com custo 2, mas D continua a infinito: B ainda não conhecia D no início da ronda. Na segunda A aprende D com custo 3, via B. Cada atualização usa o vetor anterior, sem propagar resultados novos na mesma ronda.
A anuncia infinito para D a B, porque a sua rota para D foi aprendida através de B. Sem essa indicação, B poderia interpretar a rota antiga de A como alternativa à ligação que falhou, criando um ciclo A–B. Poison reverse impede esta reintrodução pelo mesmo vizinho; não garante eliminar todos os ciclos em topologias maiores.
Confere a tua resposta:
- Uso apenas vetores da ronda anterior.
- Obtenho C=2 na primeira ronda e D=3 na segunda.
- Anuncio infinito ao vizinho usado como próximo salto.
- Distingo a proteção do ciclo de dois nós de uma garantia geral.