top of page

Balanceamento de tráfego entre links (Introdução)

Atualizado: 29 de set. de 2020

Geralmente, em redes corporativas, nos deparamos com um volume muito grande de tráfego. Isso se dá pela quantidade de dispositivos e aplicações que rodam ao mesmo tempo dentro dessa rede.

Para evitar diversos problemas, como lentidão, sobrecarga de um determinado link e diversos outros incômodos que gera uma conexão ocupada, o administrador da rede pode optar por utilizar o balanceamento de tráfego.

O que é um link?


Para entrar de forma tranquila no assunto, precisamos relembrar o que é um link. Um link, de forma simplificada, é uma conexão ativa com a internet. Quem entrega essa conexão é um provedor de internet ou operadora.

A ideia do balanceamento, é ter dois ou mais links de forma que todo o tráfego será distribuído de forma justa entre eles. E por que justa?! Porque nem sempre os links terão a mesma capacidade.



Links simétricos e assimétricos


Podemos ter link simétricos (iguais), por exemplo:

  • Dois links de 100Mbps

  • Três links de 50Mbps

  • Quatro links de 25Mbps

Ou então podemos ter links assimétricos (diferentes), por exemplo:

  • Um link de 50Mbps e outro de 100Mbps

  • Um link de 25Mbps, um de 50Mbps e outro de 100Mbps

  • Um link de 2Mbps, um de 4Mbps e outro de 10Mbps


O balanceamento (Links simétricos)

Existem métodos diferentes para fazer o balanceamento de tráfego, portanto, para ilustrar esse tópico, vou utilizar o método PCC (Peer Connection Classifier ou numa tradução livre, Classificador de conexões de mesmo nível).


O PCC funciona da seguinte maneira:

Passo 1:


Ele pega dados de uma conexão, passa eles por um algoritmo e transforma em um número inteiro.


Esses dados podem ser escolhidos pelo autor da regra, podendo ser:

  • IP de origem

  • IP de destino

  • Porta de origem

  • Porta de destino

  • entre outros.

Exemplo:


Suponhamos que eu queira utilizar os 4 parâmetros citados acima:

  • IP de origem: 192.168.1.15

  • IP de destino: 200.200.200.201

  • Porta de origem: 61523

  • Porta de destino: 80


Todos esses números passarão pelo algoritmo, onde serão retirados os pontos e será gerado apenas um número inteiro de 32 bits, vamos usar como exemplo o número 58935.


Cada conexão, por ter números de portas diferentes e IP's de destino diferentes, vai gerar um número inteiro aleatório.


Obs.: Os conceitos de IP, porta e conexão serão tratados em outros tópicos.


Passo 2:


Esse número inteiro será dividido pela quantidade de links disponível, por exemplo:


Se houverem 3 links disponíveis, o número inteiro será dividido por 3.


Exemplo (com número inteiro gerado acima):


58935 dividido por 3 é igual à 19645, mas não é esse número que interessa pra gente e sim o RESTO da divisão. Se voltarmos ao fundamental, vamos lembrar da conta de divisão que fazíamos no lápis. Na imagem abaixo, em vermelho, está um exemplo de resto de uma conta de divisão:


No caso do número 58935 dividido por 3, o resto também é 0 (zero). Mas como seria impossível ficar dividindo números tão grandes para achar o resto, vou deixar um site em que vai facilitar o nosso serviço: https://www.4devs.com.br/resto_da_divisao


Mas o que tem a ver o resto da divisão com o balanceamento de links? Pois bem, é através desses restos que o PCC vai determinar por qual link determinado pacote irá sair.


Se tivermos 3 links:


  • Quando o resto da divisão for 0, o pacote sai pelo link 1;

  • Quando o resto da divisão for 1, o pacote sai pelo link 2;

  • Quando o resto da divisão for 2, o pacote sai pelo link 3;


Obs.: O resto 3 não existe, pois 3 é divisível por 3, o que daria resto 0.


Exemplo:


Temos 3 links de 100Mbps;


  • O link 1 é do provedor X, usado quando o resto for 0

  • O link 2 é do provedor Y, usado quando o resto for 1

  • O link 3 é do provedor Z, usado quando o resto for 2


Suponhamos que um dos nossos hosts gerou um pacote e depois dos dados desse pacote ter passado pelo algoritmo, gerou o número: 67754


Dividindo esse número por 3 (quantidade de links) temos o resto 2, ou seja, esse pacote vai passar pelo link do provedor Z;


Outro host gerou um pacote que resultou no número 47476, onde temos o resto 1, portanto esse pacote passará pelo link do provedor Y.


Para cada pacote gerado, esse cálculo será feito.


Em sites mais rigorosos, como de bancos, vamos ter dificuldades. Tendo em conta que os números de porta de origem costumam ser aleatórios, cada pacote vai acabar gerando um resto diferente, consequentemente saindo por um link diferente com um IP público diferente. Quando um pacote chegar ao servidor do banco com IP's públicos de origem diferentes, vai gerar uma suspeita e o acesso do cliente vai ser negado.


Para contornar esse problema, podemos usar apenas o IP de origem e de destino como parâmetros para o algoritmo gerar o número inteiro, pois assim quando o IP de origem (cliente) e IP de destino (banco) forem iguais, os pacotes sairão sempre pelo mesmo link.


Isso deixa o balanceamento menos preciso, pois a aleatoriedade dos números será menor e o cliente pode acessar muito mais o site do banco, do que outros serviços, mas não impedirá o cliente de usufruir totalmente do seu acesso à internet.


Vimos acima o balanceamento de tráfego, mas usamos no exemplo links simétricos (de capacidades iguais), mas e quando os links são assimétricos? Não podemos simplesmente dividir o número inteiro pela quantidade de links disponíveis, pois isso vai gerar uma distribuição injusta do tráfego, sobrecarregando um link enquanto os outros estão com folga.


O balanceamento (Links assimétricos)


Quando temos links assimétricos (de capacidades diferentes) a ideia é a mesma, porém com algumas pequenas alterações.


Vamos usar o seguinte exemplo:


  • O link 1 do provedor Alpha, é de 50Mbps

  • O link 2 do provedor Beta, é de 100Mbps

  • O link 3 do provedor Ômega, é de 150Mbps


Obs.: Os nomes de provedores usados acima, são fictícios.


Para dividirmos proporcionalmente o tráfego entre esses links, vamos precisar calcular o MDC (Máximo Divisor Comum) entre esses 3 links. Esse MDC é o maior número pelo qual os 3 números são divisíveis.


Uma das formas de descobrir o MDC é utilizando a seguinte ferramenta: https://www.4devs.com.br/calculadora_mdc


A ferramenta é bem simples de usar, em cada campo colocaremos a velocidade de cada um dos links e o site nos entregará o MDC.


O MDC dos links que estamos usando acima como exemplo é 50, o maior número pelo qual todos os 3 podem ser divididos.


Fazendo a divisão ficará dessa forma:


  • Link 1: 50Mbps / 50 é igual a 1

  • Link 2: 100Mbps / 50 é igual a 2

  • Link 3: 150Mbps / 50 é igual a 3


O que isso significa? O link 1 irá receber 1 resto, o Link 2 irá receber 2 restos e o Link 3 irá receber 3 restos, totalizando 6 restos (0 à 5), dessa forma:


Quando o algoritmo gerar aquele número inteiro que comentamos antes, esse número será dividido por 6, ficando da seguinte forma:


  • Quando o resto for 0, o pacote será enviado pelo link 1;

  • Quando o resto for 1 e 2, o pacote será enviado pelo link 2;

  • Quando o resto for 3, 4 e 5, o pacote será enviado pelo link 3.


Cada link está recebendo a quantidade de restos, consequentemente a quantidade de tráfegos (pacotes) proporcional à sua capacidade perante os outros.


Considerações importantes


Não é recomendável usar o balanceamento quando a capacidade dos links é muito diferente. Por exemplo, quando um link é de 5Mbps e o outro de 100Mbps, pois quando forem divididos pelo MDC vai gerar 21 restos e consequentemente 21 regras no roteador. Tantas regras podem ocupar uma parte considerável do processamento do roteador, o que não é algo desejável quando se tem um tráfego grande passando por ali. Nesse caso o melhor a se fazer é utilizar o link de 100Mbps como principal e o de 5Mbps como redundante, caso o principal fique indisponível.


Quando temos links "quebrados", por exemplo: 35Mbps, 65Mbps, 95Mbps, para diminuir a quantidade de restos gerados e consequentemente a quantidade de regras, podemos arredondar esse links de forma que tenham um MDC que diminua a quantidade de restos no final. Por exemplo, se arredondarmos os links acima para 30Mbps, 60Mbps, 90Mbps teremos um MDC que vai gerar uma quantidade menor de restos no final.


No primeiro caso, temos 39 restos;


No segundo caso, onde arredondamos, temos apenas 6 restos.


Não existe problema em arredondar os links, pois de qualquer forma, devido à aleatoriedade dos números inteiros gerados pelo algoritmo, o balanceamento nunca é perfeito.

394 visualizações0 comentário

Posts recentes

Ver tudo
bottom of page