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