Гипотетический сценарий:
Поток пакетов udp поступает на компьютер X, на котором запущены две программы - одна для прослушивания пакетов с помощью recv (), а другая для pcap.
В этом случае, насколько я понимаю, пакеты сохраняются в интерфейсе до тех пор, пока он не будет опрошен ядром, которое затем перемещает их в буфер в памяти ядра и копирует пакеты в два других буфера - один буфер для программы, слушающей с помощью recv, и один буфер для программы, слушающей с помощью pcap. Пакеты удаляются из соответствующего буфера при чтении - либо pcap_next (), либо recv (), при следующем запуске планировщика процессов (я полагаю, в этом случае они блокируются). Это правильно? На самом деле используются 4 буфера или они обрабатываются как-то иначе?
Я ищу максимально подробное описание того, какие буферы действительно задействованы в этом случае, и как пакеты перемещаются из одного в другой (например, копируется ли пакет в буфер pcaps, прежде чем он перейдет к буфер recv, после или неопределенный?).
Я знаю, что это кажется большим вопросом, но все, что меня действительно волнует, это где хранится пакет и как долго он остается там. Точки пули в порядке. В идеале я хотел бы получить общий ответ, но если он варьируется в зависимости от ОС, меня больше всего интересует Linux.