Назад | Перейти на главную страницу

Ошибка Netlink при использовании IP-очереди

У меня проблема с очередью IP.

У меня есть Linux-машина, которую я использую для экспериментов. Linux-машина сконфигурирована как маршрутизатор, имеющий две сетевые карты, соединяющий два других компьютера и управляющий их сетевым трафиком. Все входящие пакеты захватываются с помощью iptables и анализируются приложением C.

Приложение, анализирующее пакеты, имеет встроенную задержку, как часть эксперимента.

Итак, у меня есть один очень быстрый компьютер, отправляющий пакеты через мой Linux-маршрутизатор, и (относительно) медленный Linux-маршрутизатор, который анализирует и обрабатывает пакеты один за другим.

Эта ситуация приводит к тому, что когда я запускаю приложение-отправитель на одном из компьютеров, подключенных к linux-router, моя IP-очередь на linux-router заполняется (почти) мгновенно.

Максимальная длина IP-очереди в настоящее время установлена ​​на 1024, и если она переполняется, пакеты отбрасываются. Это ожидаемо, и я согласен с этим.

Но (и здесь становится интересно), то и дело я получаю следующую ошибку:

«Не удалось получить сообщение netlink: нет свободного места в буфере»

Вначале я думал, что это произошло из-за переполнения IP-очереди, но после некоторого анализа я обнаружил, что иногда я получаю сообщение об ошибке, даже если буфер IP-очереди не переполняется, и иногда я НЕ получаю сообщение, хотя буфер DID переполнение.

Когда я бегу > cat /proc/net/ip_queue, Я получаю следующую таблицу (также используется для отслеживания переполнения IP-очереди):

Peer PID          : 27389
Copy mode         : 2
Copy range        : 65535
Queue length      : 0
Queue max. length : 1024
Queue dropped     : 1166875
Netlink dropped   : 2916

Глядя на последние два значения, Queue dropped похоже, относится к пакетам, которым не удалось попасть в очередь IP, потому что буфер был заполнен. Я вижу, как это значение растет, когда я бомбардирую linux-router. Netlink dropped (как следует из названия :)), похоже, связано с той ошибкой, которую я получаю.

Я приложил все усилия, чтобы найти материал об этой ошибке, но не смог найти ничего, что указывало бы мне в нужном направлении.

Нижняя граница: Почему я получаю эту ошибку и как ее избежать?