Кто сначала захватывает пакеты - ядро ​​или драйвер? - PullRequest
1 голос
/ 09 августа 2011

Я пытаюсь отправить пакеты с одного компьютера на другой, используя tcpreplay и tcpdump.

Если я напишу драйвер для захвата пакетов непосредственно с сетевого адаптера, по какому пути пойдет?

1) N / W пакет ----> NIC карта ----> приложение (без роли ядра)

2) N / W пакет -----> Ядро -----> NIC карта ---> приложение

Спасибо

Ответы [ 2 ]

6 голосов
/ 09 августа 2011

Обычно это в следующем порядке:

  • Аппаратные средства сетевого адаптера получают электрический сигнал, аппаратные средства обновляют некоторые из его регистров и буферов, которые обычно отображаются в физическую память компьютера
  • Аппаратное обеспечение активируетсялиния IRQ
  • Ядро перехватывает в процедуру обработки прерываний и вызывает функцию обработки IRQ драйвера
  • Драйвер выясняет, для RX это или TX
  • Для RX драйверустанавливает DMA из аппаратных буферов NIC в память ядра, зарезервированную для сетевых буферов
  • Драйвер уведомляет сетевой стек ядра верхнего уровня о том, что вход доступен
  • Процедура ввода сетевого стека определяет протокол, опционально делаетфильтрация, и заинтересовано ли приложение в этом входе, и если да, буферизует пакет для обработки приложения, и если процесс блокируется в ожидании ввода, ядро ​​помечает его как работоспособный
  • В какой-то момент планировщик ядрапомещает этот процесс в процессор и возобновляетn потребляет сетевой входной сигнал

Тогда существуют отклонения от этой модели, но это особые случаи для конкретного оборудования / ОС.Один из поставщиков, который занимается непосредственным подключением к оборудованию, - это Solarflare , есть и другие.

3 голосов
/ 09 августа 2011

Драйвер - это фрагмент кода, который напрямую взаимодействует с оборудованием.Таким образом, это первый фрагмент кода, который увидит пакет.

Однако драйвер работает в пространстве ядра;это само по себе является частью ядра.И он, безусловно, будет полагаться на возможности ядра (например, управление памятью) для выполнения своей работы.Так что «нет роли ядра» не будет правдой.

...