Какие существуют алгоритмы для потоковый обработки сетевых данных?
Реализовал приложение для обработки заголовков пакетов, смысл таков: в один интерфейс eth0 входят данные из серой сети изменяются и выходят из eth1, ответы прилетают на eth1 и снова собираются для серой сети. Приложение оттестировал и отпрофилировал, узкие места закрыл. ЯП Golang, использовал его мощь в виде каналов и горутин. Сейчас смог выжать скорость в 35 мб/сек, максимальная ширина канала 50 мб/сек.
Ваш вопрос не содержит основной информации. Какая именно обработка вам нужна.
Сам алгоритм потоковой обработки прост - берем данные из входного буфера, обрабатываем, кладем в выходной буфер. Тут вам никто ничего лучшего не подскажет.
Попробуйте убрать всю логику обработки - пусть ваше приложение тупо ничег ос данными не делает. Читает их до места, где у вас логика, и сразу же возвращает. Если тормозит уже это, то это проблема не в обработке, а в чтении, выводе сетевых данных. Тут нужно смотреть на вашу реализацию, может где-то буфиризацию прикрутить надо, может проблема с мультитредингом и локами.
Если такое демо не тормозит, то пишите, что вы конкретно с данными делаете.
Для редактирования заголовка пакета использую nfqueue, сегодня проводил тест на мини-пк, на который и хочу поставить приложение для обработки с CPU: Intel Celeron J3160, и запустил на своём личном с AMD Ryzen 5 3500U , на моём потерей в сети 0%. Думаю дело в процессоре, как он может быстро поднять пакет в userspace,а суть в том, что я могу знать откуда пойдёт исходящие соединение ( что я могу просто iptables обработать) но я не могу знать откуда из вне может прийти соединение.
Я просто все что приходит от и из вне ( обе вероятнее всего будут серые сети) упаковываю в самописный туннель что работает по L3 , на другом конце также стоит моё второе приложение и распаковывает пакет и делает его таким каково оно было изначально, если сделать Gre туннель для VPN то он будет работать L2 поверх L3 и не будет tcp акселерации которая на L3 работает. То есть я обеспечиваю L3 Vpn что-то вроде этого)