Путь сетевого пакета

Высокоуровневый путь, по которому проходит пакет от прибытия до приёмного буфера сокета выглядит так:

  1. Драйвер загружается и инициализируется.
  2. Пакет прибывает из сети в сетевую карту.
  3. Пакет копируется (посредством DMA) в кольцевой буфер памяти ядра.
  4. Генерируется аппаратное прерывание, чтобы система узнала о появлении пакета в памяти.
  5. Драйвер вызывает NAPI, чтобы начать цикл опроса (poll loop), если он ещё не начат.
  6. На каждом CPU системы работают процессы ksoftirqd. Они регистрируются во время загрузки. Эти процессы вытаскивают пакеты из кольцевого буфера с помощью вызова NAPI-функции poll, зарегистрированной драйвером устройства во время инициализации.
  7. Очищаются (unmapped) те области памяти в кольцевом буфере, в которые были записаны сетевые данные.
  8. Данные, отправленные напрямую в память (DMA), передаются для дальнейшей обработки на сетевой уровень в виде ‘skb’.
  9. Если включено управление пакетами, или если в сетевой карте есть несколько очередей приёма, то фреймы входящих сетевых данных распределяются по нескольким CPU системы.
  10. Фреймы сетевых данных передаются из очереди на уровни протоколов.
  11. Уровни протоколов обрабатывают данные.
  12. Данные добавляются в буферы приёма, прикреплённые к сокетам уровнями протоколов.

Взято с ресурса habrahabr.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *