От Guy Harris сами:
«пакеты Захваченных» номер является номером, который увеличивается каждый раз, когда ТСРйитр видит пакет, поэтому он рассчитывает пакеты, которые ТСРйитр считывает из Libpcap и, таким образом, что Libpcap считываемых из BPF и поставки в tcpdump.
Число «пакетов, полученных по фильтру», является номером «ps_recv» из вызова pcap_stats(); с BPF, это номер bs_recv из BIOCGSTATS ioctl. Этот счет включает все пакеты, которые были переданы БНФ; эти пакеты все еще могут находиться в буфере, который еще не был прочитан libpcap (и, следовательно, не передан tcpdump), или может быть в буфере, который был прочитан libpcap, но еще не передан tcpdump, поэтому он может считать пакеты, которые не сообщаются как «захваченные».
И от tcpdump
man page:
пакетов `` отброшенных ядром «» (это число пакетов, которые были отброшены из-за недостатка буферного пространства, с помощью механизма захвата пакетов в ОС на котором запущен tcpdump, если ОС сообщает эту информацию приложениям, а если нет, она будет отображаться как 0).
Чтобы попытаться улучшить производительность захвата, вот несколько вещей, чтобы попробовать:
- Не захватывать в беспорядочном режиме, если не нужно. Это сократит объем трафика, который должен обработать ядро. Сделайте это, используя опцию
-p
.
- Поскольку вас интересует только трафик TCP, примените выражение захвата, которое ограничивает трафик только TCP. Сделайте это, добавив
"tcp"
к вашей команде.
- Попробуйте записать пакеты в файл (или файлы для ограничения размера), а не отображать пакеты на экран. Сделайте это с помощью опции
-w file
или просмотрите параметры -C file_size
и -G rotate_seconds
, если вы хотите ограничить размер файлов.
- Вы можете попытаться улучшить приоритет планирования
tcpdump
через nice
.
С Performance вики страницы Wireshark в:
- остановки другие программы, работающие на этой машине, чтобы удалить системную нагрузку
- купить большую, быструю машину :)
- увеличить размер буфера (который вы уже делаете)
- установить длинную длину (которую вы уже делаете)
- записывать файлы захвата на RAM-диск
Пробуйте использовать PF_RING.
Вы также можете попробовать использовать dumpcap
вместо tcpdump
, хотя я был бы удивлен, если бы производительность была существенно иной.
Вы можете попытаться выполнить захват с помощью внешнего выделенного устройства с использованием порта TAP или Switch + SPAN. Смотрите wiki-страницу Wireshark's Ethernet Capture Setup для идей.
Другая перспективная возможность: Capturing Packets in Linux at a Speed of Millions of Packets per Second without Using Third Party Libraries.
См. Также Шаркфест Эндрю Брауна '14 Maximizing Packet Capture Performance документ для еще большего количества идей.
Удачи вам!
Большое спасибо !!!! –