В этой статье мы рассмотрим, как осуществляется приём пакетов на компьютерах под управлением ядра Linux, а также разберём вопросы мониторинга и настройки каждого компонента сетевого стека по мере движения пакетов из сети в приложения пользовательского пространства. Здесь вы найдёте много исходного кода, потому что без глубокого понимания процессов вы не сможете настроить и отслеживать сетевой стек Linux.
Также рекомендуем ознакомиться с иллюстрированным руководством на ту же тему, там есть поясняющие схемы и дополнительная информация.
2. Обзор проблематики
3. Подробный разбор
3.1. Драйвер сетевого устройства
3.2. SoftIRQ
3.3. Подсистема сетевого устройства в Linux
3.4. Механизм управления принимаемыми пакетами (Receive Packet Steering (RPS))
3.5. Механизм управления принимаемыми потоками (Receive Flow Steering (RFS))
3.6. Аппаратно ускоренное управление принимаемыми потоками (Accelerated Receive Flow Steering (aRFS))
3.7. Повышение (moving up) сетевого стека с помощью netif_receive_skb
3.8. netif_receive_skb
3.9. Регистрация уровня протокола
3.10. Дополнительная информация
4. Заключение