Существует множество способов получения необработанных пакетов и их доставки в приложение пользовательского пространства. Дьявол как обычно в деталях.
Если все, что нам нужно, это доставлять пакеты в приложение пользовательского пространства - нет разницы, какое решение использовать. Libpcap, или tun / taps, или Netfilter, или pf-ring, или что-то еще. Все будет хорошо.
Но если нам нужно обрабатывать 100 миллионов пакетов в секунду (~ 30 циклов ЦП на пакет на 3 ГГц) - я не думаю, что у нас есть другие варианты, кроме DPDK. Google для "отчета о производительности DPDK" и посмотрите.
DPDK - это инфраструктура, которая хорошо работает на многих платформах (x86, ARM, POWER и т. Д.) И поддерживает множество сетевых карт. Не нужно писать драйвер, поддержка самых популярных сетевых карт уже есть.
Существует также поддержка управления ядрами ЦП, огромными страницами, буферами памяти, шифрованием, фрагментацией IP-адреса и т. Д. И т. Д. Все это разработано для пересылки 100 Мбит / с. Если нам нужно это представление ...