O mesmo roteador, três verdades diferentes
Um único equipamento físico, várias identidades de roteamento, e por que um grafo de nós e arestas não consegue contê-las
Michel Wijnberg
Os quatro primeiros textos desta série tratavam de confiança: modelar a rede corretamente, observá-la com segurança, reproduzir o encaminhamento com honestidade e recusar-se a adivinhar. Este começa um segundo conjunto, sobre o que de fato é preciso para sustentar essa linha.
E começa pela coisa que derruba a maioria das ferramentas de topologia antes que elas cheguem perto de uma pergunta interessante: um roteador não é uma coisa só.
Um roteador com dois de tudo
Este é o nrt1-cr1 do meu laboratório:
Olhe no canto superior direito. Não é um selo de função. São dois:
OSPFv2 ABR·ASBR
OSPFv3 ABR·ASBR
E embaixo, em Protocols & Areas:
| Instância de protocolo | Áreas | Papel |
|---|---|---|
| OSPFv2 · processo 1 (ipv4) | 0.0.0.0, 14.18.20.0 | ABR · ASBR |
| OSPFv3 · processo 1 (ipv6) | 0.0.0.0, 14.18.20.0 | ABR · ASBR |
Parece duplicação. Não é. São duas instâncias de protocolo independentes com dois bancos
de dados de estado de enlace independentes, e o nrt1-cr1 conquista o título de ABR
separadamente em cada uma por estar ligado a mais de uma área naquela instância. Os
rótulos de área coincidem porque alguém os numerou para coincidir, e não porque sejam o
mesmo objeto. No banco de dados eles têm UUIDs diferentes, porque a área 14.18.20.0 do
OSPFv2 e a área 14.18.20.0 do OSPFv3 são áreas diferentes que por acaso compartilham um
nome.
Essa distinção soa pedante até o momento exato em que as duas discordam. O que, como se descobre, sempre acontece.
Um fio, dois custos, cem por cento das vezes
Este é um único enlace físico entre dois roteadores:
Um cabo. Et0/3 para Et0/3, 10G, carregando 172.24.2.13/30 e
fddb:10:24:2::6/127. O Osprey desenha isso como uma aresta só, porque fisicamente é uma
aresta só, e dá a ela uma aba por protocolo.
Agora leia os custos:
OSPFv2 Area 12.1.24.0 cost 10
OSPFv3 Area 12.1.24.0 cost 1
Mesmo fio. Mesmo número de área. Métrica diferente.
Eu não armei isso para a captura de tela. Depois conferi todo enlace dual-stack do AS 200, e o resultado é mais interessante que o exemplo isolado:
| Enlaces dual-stack no AS 200 | 124 |
|---|---|
| …em que os custos de OSPFv2 e OSPFv3 diferem | 124 (100%) |
| em (v2 = 10, v3 = 1) | 85 |
| em (v2 = 10000, v3 = 10) | 39 |
Todos, sem exceção, diferem, mas olhe os dois grupos: 39 enlaces estão separados por um fator 1000, e 85 por um fator 10. Essa assimetria é a parte interessante, e explicá-la exigiu perguntar ao roteador.
Routing Process "ospf 1" Reference bandwidth unit is 100000 mbps
Routing Process "ospfv3 1" Reference bandwidth unit is 100 mbps
Um ajuste, não dois. O custo é a largura de banda de referência dividida pela largura de banda da interface, então os dois processos estão escalando os mesmos fios por números que diferem exatamente por 1000. Nos enlaces de 10 Mbps isso chega intacto: 10000 contra 10. Nos enlaces de 10 Gbps o OSPFv3 calcula 100/10000 = 0,01, e o menor custo que um roteador anuncia é 1. O piso come o resto.
Ou seja, a distorção não é uniforme, e é precisamente isso que a torna perigosa. Um escalonamento uniforme seria inofensivo: multiplique todos os custos de uma topologia pela mesma constante e o caminho mais curto não se move. Aqui a constante é 1000 em alguns enlaces e 10 em outros, porque um limite inferior interveio. Os dois protocolos, portanto, ordenam os mesmos enlaces de forma diferente entre si, e o tráfego IPv4 e o IPv6 podem tomar caminhos diferentes nesta rede. Você não consegue enxergar quais no olho. Tem de calcular os dois.
Uma ferramenta que desenha “um enlace, um custo” precisa escolher um daqueles dois números. Escolha qual escolher, ela está errada metade das vezes, e nunca vai lhe dizer em qual metade você está.
Por que a hierarquia é estrutural
Esta é a razão de o modelo de dados do Osprey não ser Node, Edge, Protocol:
Network → Autonomous System → Routing Domain → Protocol Instance → Area → Device
↳ Interface
Cada nível existe porque alguma coisa na rede pode diferir ao longo dele:
- Network: a fronteira do locatário. O mesmo equipamento físico pode ser monitorado sob dois locatários com credenciais diferentes e visões diferentes.
- Autonomous System: a identidade BGP, e o escopo a que um feed BMP pertence.
- Routing Domain: tabela global, uma VRF ou uma L3VPN. Mesmo roteador, tabelas de roteamento diferentes, alcançabilidade genuinamente diferente.
- Protocol Instance: único em (domínio de roteamento, protocolo, id de processo, família
de endereços). É este nível que faz do
nrt1-cr1dois roteadores. - Area: onde o LSDB de fato vive e, portanto, onde o SPF de fato roda.
- Device: muitos-para-muitos com as áreas, via uma tabela de associação. Não uma chave estrangeira. Uma chave estrangeira teria forçado a mentira de que um roteador vive em uma área.
E as interfaces têm escopo (device_id, if_index, area_id), porque a mesma porta física
participa de várias instâncias de protocolo ao mesmo tempo, com custo diferente, estado de
vizinho diferente e família de endereços diferente em cada uma.
Os papéis derivados caem dessa estrutura em vez de serem armazenados como rótulos:
- ABR = ligado a mais de uma área dentro de uma instância
- ASBR = o bit E marcado no LSA do próprio roteador (RFC 2328 §A.4.2), que é o roteador declarando que origina informação de roteamento externa. Não uma contagem de associações: um roteador pode ser ASBR vivendo em uma única área, e pode abranger várias instâncias sem ser um
- VRF-Lite = presente em mais de um domínio de roteamento
É por isso que o nrt1-cr1 pode ser ABR duas vezes, e por isso o selo é desenhado duas vezes.
Ninguém digitou “ABR” em lugar nenhum. É uma consequência das associações, recalculada a partir
dos LSDBs.
As topologias são todas reais ao mesmo tempo
O jeito útil de pensar nisso é que não existe a topologia. Existem várias, todas são simultaneamente verdadeiras, e elas respondem a perguntas diferentes:
| Topologia | Construída a partir de | Responde |
|---|---|---|
| Física | LLDP / CDP, IP-MIB | O que está cabeado com o quê |
| L2 | Adjacência de bridge/VLAN | O que compartilha um domínio de broadcast |
| IGP (por instância) | LSDB por protocolo e por área | No que cada protocolo acredita |
| BGP | RIB do BMP | O que é alcançável e por meio de quem |
| Encaminhamento | A tabela própria de cada roteador | Para onde um pacote de fato vai |
“A e B estão conectados?” tem cinco respostas corretas diferentes, dependendo de qual delas você quis dizer. Dois roteadores podem compartilhar um cabo e nenhuma adjacência IGP. Podem compartilhar uma adjacência IGP e nunca encaminhar um pacote um ao outro. Podem ser pares BGP por um caminho que atravessa três equipamentos que nenhum dos dois enxerga.
O terceiro texto era, na verdade, um argumento sobre as duas últimas linhas: que a topologia IGP e a topologia de encaminhamento não são o mesmo grafo, e tratá-las como um só produzia caminhos fictícios uma vez em cada oito. Este texto é o mesmo argumento um nível abaixo: a topologia física e a topologia de protocolo também não são o mesmo grafo, e 124 enlaces do meu laboratório provam isso com um fator de dez.
O que isso custa
Ser honesto sobre isso não é de graça. Significa:
- Dois LSDBs para percorrer onde uma ferramenta mais simples percorre um
- Uma tabela de associação em vez de uma chave estrangeira
- Papéis recalculados em vez de armazenados
- Toda consulta de caminho precisando saber sobre qual instância e qual família de endereços está sendo perguntada
- Uma interface que precisa mostrar uma faixa de abas em um enlace em vez de um número
A alternativa é um grafo que renderiza mais rápido, demonstra melhor e escolhe silenciosamente um de dois custos em cada enlace dual-stack da sua rede.
Já operei redes em que os caminhos IPv4 e IPv6 divergiam e ninguém percebeu por meses, porque toda ferramenta na parede desenhava uma linha entre dois roteadores. A linha não estava errada. Ela só estava respondendo a uma pergunta que ninguém tinha feito.
A seguir: o que acontece quando essas fontes se contradizem abertamente: Quando a rede discorda de si mesma.