У меня проблема с очередью 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
(как следует из названия :)), похоже, связано с той ошибкой, которую я получаю.
Я приложил все усилия, чтобы найти материал об этой ошибке, но не смог найти ничего, что указывало бы мне в нужном направлении.
Нижняя граница: Почему я получаю эту ошибку и как ее избежать?