Сетевой стек в операционной системе Linux работает следующим образом: 3
- Ядро получает прерывания от сетевого адаптера и обрабатывает пакеты из очереди. 3
- Пакеты пропускаются через канальный (Ethernet), сетевой (IP) и транспортный (TCP, UDP) уровни протоколов. 3
- В конечном итоге информация помещается в буферы сокетов, откуда её могут использовать приложения с помощью стандартных системных вызовов. 3
Некоторые этапы работы сетевого стека:
- Сетевая карта пишет пакеты в свою внутреннюю память. 1 В оперативной памяти под неё выделен кольцевой буфер. 1
- По прерыванию процессора сетевая карта копирует свою память в кольцевой буфер и делает пометку, что у неё есть пакеты, которые надо обработать. 1
- Сетевой стек периодически проверяет пометки от сетевых карт о необходимости обработать пакеты. 1
К сетевым пакетам дополнительно применяются правила маршрутизации и фильтрации подсистемы Netfilter, которая позволяет подключать дополнительные модули ядра для управления сетевыми пакетами. 3