Todas as interfaces do nework param por segundos enquanto uma interface sobe / desce

1

Estou construindo um aplicativo cliente / servidor que usa várias interfaces de rede em paralelo para redundância, e notei que, enquanto uma interface de rede fica inativa ou sobe, a comunicação em outras interfaces trava por vários segundos.

Eu consegui reproduzir esse comportamento sem meu aplicativo de maneira simples:

  • existem 2 interfaces disponíveis no computador 1 (Ethernet e WiFi)
  • ping do computador 2 o endereço IP da conexão Ethernet do computador 1
  • desconecte o WiFi do computador 1
  • o ping trava por segundos e os pacotes estão viajando novamente entre os dois computadores.

O enforcamento acontece também se eu voltar na conexão WiFi no computador 1. Também acontece se eu fizer ping no WiFi IP e desligar / ligar a conexão Ethernet (ou desconectar / conectar o cabo).

Estou usando o Linux Ubuntu 12.04 em ambos os computadores.

Alguma idéia de por que isso está acontecendo, e se / como isso pode ser evitado?

    
por user3698377 02.06.2014 / 09:27

1 resposta

0

Isso se deve a uma combinação interessante do comportamento "ARP promíscuo" do Linux e ao armazenamento em cache do ARP. Essencialmente, o que está acontecendo é que o wifi, apesar de não ter o endereço IP em si, está recebendo solicitações ARP e está enviando respostas ARP. Se essa é a resposta ARP, a outra máquina na sub-rede local (geralmente o roteador) recebe primeiro, é isso que vai para o cache ARP. A pausa no tráfego é resolvida quando a entrada ARP se torna obsoleta e a solicitação ARP é repetida, ponto no qual a outra interface fornece a única resposta e tudo continua normalmente.

Para impedir que o Linux faça isso com "ARP em todas as interfaces para qualquer endereço configurado", você precisa definir o sysctl net.ipv4.conf.<interface>.arp_ignore to 1 .

    
por 12.08.2015 / 10:35