Как минимизировать потерю пакетов UDP
Я получаю ~ 3000 пакетов UDP в секунду, каждый из которых имеет размер ~ 200 байт. Я написал приложение Java, которое слушает эти пакеты UDP и просто записывает данные в файл. Затем сервер отправляет 15000 сообщений с ранее указанной скоростью. После записи в файл он содержит всего ~ 3500 сообщений. Используя wireshark, я подтвердил, что все 15000 сообщений были получены моим сетевым интерфейсом. После этого я попытался изменить размер буфера сокета (который изначально составлял 8496 байт):
(java.net.MulticastSocket)socket.setReceiveBufferSize(32*1024);
Это изменение увеличило количество сохраненных сообщений до ~ 8000. Я продолжал увеличивать размер буфера до 1 МБ. После этого количество сохраненных сообщений достигло ~ 14400. Увеличение размера буфера до больших значений не приведет к увеличению количества сохраненных сообщений. Я думаю, что достиг максимально допустимого размера буфера. Тем не менее, мне нужно захватить все 15000 сообщений, которые были получены моим сетевым интерфейсом.
Любая помощь будет оценена. Заранее спасибо.