Я просматривал много технических документов по захвату / обработке пакетов и стекам хостов, пытаясь понять все это, есть несколько областей, в которых я обеспокоен, надеюсь, кто-то может помочь.
Предполагая, что вы 'перезапуск tcpdump: после того, как пакет скопирован из кольцевого буфера сетевого адаптера (верно, физическая память сетевого адаптера?), он сразу же сохраняется в mbuf?и затем BPF получает копию пакета из mbuf, который затем сохраняется в буфере BPF, то есть в памяти одновременно две копии?Я пытаюсь понять точный процесс.
Или это больше похоже на: пакет копируется с сетевой карты как в mbuf (для обработки стека хоста), так и в псевдо-одновременную передачу BPF?
Как только пакет проходит через стек хостаобработка входными функциями ip / tcp с использованием mbuf в качестве местоположения (указывающего на mbuf), т. е. пакеты сохраняются в mbufs, если пакет не адресован для системы, скажем, полученный при мониторинге трафика через концентратор или порт SPAN / Monitor,пакет отбрасывается и никогда не попадает в стек хоста.
Я, кажется, наткнулся на диаграммы, которые показывают кольцевой буфер сетевого адаптера (RX / TX) в «ящике» ядра / отделяя его от пространства пользователя, что заставляет меня догадываться, действительно ли кольцевой буфер выделен системной памятиотличается от физической памяти на сетевой карте.
Предполагая, что кольцевой буфер ссылается на физическую память сетевой карты, верно ли, что драйвер устройства определяет размер кольцевого буфера сетевой карты, оставляя в стороне физические ограничения?например, можно ли уменьшить буфер, изменив драйвер?
Спасибо!