> Есть ли какие-либо варианты аггрегации мелких пакетов по достижению заданного размера или
> по таймауту?Вообще буквально так работает FreeBSD ipfw pipe, там буквально есть корзина, которая заполняется пакетами и освобождается, либо когда пакет задержан на сколько заказано, либо когда корзина переполнилась.
На практике, надо померять распределение траффика, посчитать сколько пакетов в секунду проходит сейчас и поделить на сколько хочется иметь и получится 1/(задержка в секундах).
Дальше это уже вопрос настройки VPN, который будет просто отправлять сразу блоком - главное что этими пайпами оно будет получать сразу вот этот блок.
В Линуксе это вобщем тоже можно сделать, но сильно менее удобно.
Я экспериментировал с этой штукой, но траффик через диверт вытаскивал в скрипт и там в скрипте делал нужные мне манипуляции, это делается через юсерспейс, поэтому небыстрая штука получилась, но так точно работает, это факт.
В принципе можно переписать на С++, а также там есть ebpf кажется расширение чтобы оно прямо в ядре работало, тогда без проблем любые скорости.
По сложности, это задача на пару дней.
Также подобным образом сортировал пакеты по размеру (чтобы маленькие проходили раньше больших).
Поначалу экспериментов ничего не вышло, тк просто не увидел вообще никакой сортировки, потому что по учебнику сделал очень маленькую корзину и очень маленькую задержку и оно вообще не задерживало и не сортировало.
Потом проанализировал мой траффик, сколько там был период между пакетами и сделал задержку и размер буфера (корзины) так чтобы за ее время в среднем десяток пакетов накапливалось, и тогда сразу всё поехало как заказал.