Все интерфейсы nework зависают в течение многих секунд, в то время как один интерфейс идет/вниз

Я создаю клиент-серверное приложение, которое использует несколько сетевых интерфейсов параллельно для дублирования, и я заметил, что, в то время как один сетевой интерфейс понижается или повышается, коммуникация в других интерфейсах зависает в течение нескольких секунд.

Я мог воспроизвести это поведение без своего приложения простым способом:

  • существует 2 интерфейса, доступные на компьютере 1 (Ethernet и WiFi)
  • ping от компьютера 2 IP-адрес соединения Ethernet компьютера 1
  • разъедините WiFi компьютера 1
  • ping зависает в течение многих секунд, и затем пакеты перемещаются снова между этими 2 компьютерами.

Зависание происходит также, если я возвращаюсь на соединении WiFi на компьютере 1. Это происходит также, если я проверяю с помощью ping-запросов WiFi IP и поворот от/на соединения Ethernet (или отключаю/включаю кабель).

Я использую Linux Ubuntu 12.04 на обоих компьютерах.

Какие-либо идеи, почему это происходит, и если / как этого можно избежать?

1
задан 3 June 2014 в 03:05
1 ответ

Это связано с интересной комбинацией "неразборчивого ARP" поведения Linux и ARP-кэширования. По сути, происходит то, что wifi, несмотря на отсутствие IP-адреса, принимает ARP-запросы и посылает ARP-ответы. Если это и есть ARP-ответ, который другая машина в локальной подсети (обычно это маршрутизатор) получает первой, то это то, что попадает в ARP-кэш. Пауза в трафике разрешается, когда запись ARP затухает и ARP-запрос повторяется, и тогда другой интерфейс дает единственный ответ, и все идет нормально.

Чтобы Linux не делал этого "ARP на всех интерфейсах для любого настроенного адреса", необходимо установить sysctl net.ipv4.conf..arp_ignore на 1.

.
0
ответ дан 4 December 2019 в 08:37

Теги

Похожие вопросы