Wireshark имеет два типа фильтров: фильтры отображения и фильтры захвата.
Фильтры отображения являются более гибкими, чем фильтры захвата (есть некоторые вещи, которые фильтры захвата не могут сделать), потому что фильтры отображения смотрят на данные после того, как они уже были скопированы в журнал пакетов Wireshark.
Фильтры захвата могут быть огромным преимуществом для производительности, если у вас есть много отдельных потоков данных, проходящих через сетевой интерфейс, но вы хотите захватить только небольшую их часть. Данные никогда не копируются в wireshark, если они не соответствуют фильтрам захвата.
На самом деле вы можете попробовать это и почувствовать разницу в производительности в пользовательском интерфейсе (и наблюдать разницу в производительности при использовании процессора), выполнив что-то вроде этого:
- Запустите быстрый веб-сервер на localhost.
- Начните огромную загрузку HTTP-файла (гигабайты данных).
- Захват на локальном сетевом интерфейсе с фильтром захвата, который игнорирует порт, где происходит огромная загрузка.
- Полностью очистите фильтр захвата и сравните производительность и загрузку ЦП на шаге 3 с настройкой фильтра того же типа на стороне фильтра дисплея.
IIRC, Wireshark сбрасывает свои колпачки пакетов на диск (чтобы он не выходил за пределы OOM), поэтому, возможно, узкое место, которое возникает при использовании «слишком широких» фильтров захвата, связано с тем, что вашей дисковой подсистеме приходится регистрировать все происходящее на сетевом интерфейсе.
Вот почему, если вы подключаетесь к очень занятому серверу только для того, чтобы наблюдать за одним конкретным потоком или процессом, важно установить разумные фильтры захвата. В противном случае wireshark привнесет значительную нагрузку на процессор и пропускную способность ввода / вывода.
В любом случае, в Windows реализация захвата пакетов происходит в основном на стороне ядра. Wireshark использует инструмент под названием WinPcap, модуль ядра, который фактически компилирует ваши фильтры захвата в собственный код во время выполнения, чтобы создать чрезвычайно оптимизированный тест на соответствие фильтра захвата или нет. Если фильтр не совпадает, пакет никогда не копируется в пространство процесса wireshark.
Реализация бэкэнда на стороне ядра pcap может варьироваться в зависимости от платформы, и, следовательно, может изменяться его производительность и эффективность.