Envia pacotes TCP / IP por três rotas e escolhe o mais rápido

1

Existe uma maneira de dividir o tráfego TCP / IP entre três rotas e ter os primeiros pacotes a serem usados?

Estou imaginando algo como multi-homing, mas com a exigência de que o tráfego seja enviado em todos os três links de cada vez.

Temos três rotas (em diferentes interfaces físicas para ISPs diferentes) para um endereço IP e queremos alcançar a latência mínima em todos os momentos com redundância / failover. Gostaríamos que a camada de aplicativos visse um único endereço IP, mas fizesse o tráfego fazer o melhor uso das três conexões.

A latência / disponibilidade pode mudar em todas as três conexões, então eu estava pensando sobre a possibilidade de enviar pacotes para todas as rotas e ter o pacote vencedor sendo o que foi usado.

    
por chillitom 08.04.2013 / 17:38

3 respostas

2

A abordagem que você está sugerindo está completamente errada na minha opinião.

Por quê?

É um desperdício de recursos, é como "segurança através da obscuridade" remendar um problema ao invés de corrigi-lo diretamente, e isso vai criar complexidade que pode ser evitada através de uma solução melhor projetada , Eu não gosto disso!)

Então, o que então?

Como você mesmo disse, a latência de cada link será flutuante. Eu vejo algumas abordagens aqui, de qualquer forma, a solução precisa ser uma que foi projetada para tal cenário (enfrentando problemas de latência e RTT). Veja as soluções para isso, seu problema real, não o problema meta de "como usar todos os três links de uma só vez?".

Solução Um

Primeiro, se você tiver três links, separe 1 ou 2 deles e reinove o dinheiro em algo com uma latência garantida. Os ISPs vendem links ponto-a-ponto (assim, leve um para o seu destino) com um SLA de atraso, e seu para um vencedor ali mesmo. Você pode manter o terceiro link como backup, se quiser.

Solução Dois

A segunda opção é usar algo como <> como o OER da Cisco (roteamento otimizado de borda). Outros fornecedores têm tecnologias semelhantes, ou se você tiver um firewall / roteador / gateway * nix, por exemplo, você também pode criar scripts ou codificar uma solução semelhante para você. Usando o Cisco OER como exemplo, ele permite que você configure testes (ou seja, ping's) para um destino, ele mede a qualidade do teste, se ele se degrada até um certo ponto, o tráfego é redirecionado de outra maneira. Assim, você pode configurar testes de latência e sempre usar a rota de menor latência.

Solução Três

MPLS TE - Switching Protocol Multi-Protocol - Engenharia de Tráfego. Eu sei que é um pouco difícil, mas o MPLS-TE permite que você configure túneis entre dois pontos finais e, mais uma vez, direcione o tráfego para o menor caminho de latência. Isso é um pouco mais especializado; Você precisa de um bom ISP que possa fazer isso para você, ou você precisa investir em alguns roteadores meio decentes e configurá-lo para si mesmo. Você pode executar o MPLS sobre GRE entre rotas remotas e configurá-lo.

Solução Quatro

Uma ideia possível é que você pode usar várias VPNs ou túneis entre as duas extremidades de sua rede e introduzir balanceamento de carga por pacote (round robbin'ing) em todos os três links. Você pode fazer isso com os roteadores Cisco e Juniper, por exemplo, ou novamente, se você usa o Linux, você pode usar um pacote como teql ou comprar um dispositivo de hardware como um FireBrick. Se todos os links tiverem latências semelhantes (para que você não esteja misturando ADSL, 3G e fibra), isso funcionaria. Geralmente, não é recomendado que pacotes fora de ordem possam causar problemas em aplicativos, portanto, não há combinação de links de estilo de latência, como acabamos de mencionar. Mas, eu tenho isso habilitado através de um par de links agora, e fiz no meu último lugar, e eles estão livres de problemas. Tenho certeza de que um pacote pode chegar fora de ordem de vez em quando, mas deve ser muito raro, já que eu nunca notei nenhum problema.

Solução Cinco

Você mencionou a latência relacionada ao seu aplicativo. Desde que eu não sei o que é seu aplicativo ou como funciona, sempre pode haver a chance externa de que há alguma sanidade em mim recomendando que você faça algo sobre isso na camada de aplicativo. Quero dizer, recodifique o aplicativo para lidar com links de alta latência. A merda acontece, mesmo se você implementar uma solução mágica de rede de baixa latência, a merda acontece, a latência aumentará, o plano para pior, codifique em seu aplicativo para lidar com cenários indesejáveis, caso o pior aconteça (planejamento defeituoso e tudo, FMEA, etc.).

    
por 08.04.2013 / 21:40
0

Este é provavelmente um método muito ruim para fazer isso, já que você apenas satura os links com o tráfego. Se eu estou entendendo isso corretamente, então o software de VPN / encapsulamento não é realmente o que você quer, pois é mais um método para proteger o tráfego que chega à sua rede interna ou acesso remoto.

Parece-me que você precisa comprar um dispositivo de hardware que permita a agregação de links e que decida de forma inteligente para qual porta seu tráfego de saída precisaria ser encaminhado. Muitos firewalls atuais podem fazer isso ou você provavelmente pode usar um dispositivo Cisco e usar o BGP.

    
por 08.04.2013 / 20:38
0

Não há como enviar pacotes unicast "multicast" da maneira que você sugere. Aqui estão algumas alternativas:

Tente executar uma versão recente do OLSRD, como o OpenWRT OLSRd constrói em cada interface WAN e o Debian ou Ubuntu OLSRd nas interfaces do host multi-homed. O OLSRD configurado com LinkQualityLevel definido como 2 deve resultar no uso do link ISP de latência mais baixa, embora não seja a menor latência para qualquer destino específico da Internet diferente do próximo salto para o ISP.

Se os destinos forem conhecidos antecipadamente ou se você tiver um bom conjunto de destinos representativos, você poderá escrever um daemon em Python ou Perl que testa periodicamente os tempos de ping em cada destino. Você executaria o daemon em cada interface WAN (provavelmente significando cada roteador voltado para um ISP) e consultaria os dados de ping do host multi-homed usando um programa cliente que alterasse a rota padrão no host multi-homed de acordo com o melhor tempo de ping . Isso provavelmente levará de cinquenta a cem horas de programação para escrever e depurar.

Se você usar o BGP, precisará registrar um ASN e solicitar aos seus ISPs que configurem seus roteadores para falar com o BGP. Isso provavelmente não é viável para você, a menos que você registre um grande bloco de endereços IP.

O tipo de roteamento que você está tentando fazer é geralmente chamado de Roteamento de estado de link otimizado .

    
por 08.04.2013 / 21:11