Размер буфера для захвата пакетов в пространстве ядра?

16

Проходя man-страницу tcpdump, кажется, что ядро ​​может отбросить пакеты, если буфер заполнен. Мне подумалось, может:

  1. этот размер настраивается и / или
  2. где я могу увидеть размер моего дистрибутива?

Со страницы руководства (для удобства):

пакеты, «отброшенные ядром» (это количество пакетов, которые были отброшены из-за недостатка места в буфере механизмом захвата пакетов в ОС, в которой работает tcpdump, если ОС сообщает эту информацию приложениям; если нет, будет сообщено как 0).

скоро
источник

Ответы:

27

Tcpdump имеет возможность -Bустановить размер буфера захвата. Затем значение передается в libpcap (библиотека, используемая tcpdump для фактического захвата пакета) через pcap_set_buffer_size()функцию. Страница man tcpdump не указывает, в каких единицах измерения размер буфера указывается с помощью -B, но из источника кажется, что это KiB.

Страница справочника pcap_set_buffer_size()не задает размер буфера по умолчанию (который используется, если эта функция не вызывается), но, опять же, из источника libpcap это кажется 2 МБ, по крайней мере, в Linux (но, скорее всего, зависит от системы).

Что касается буферизации и отбрасывания пакетов, вам также следует обратить внимание на соответствующую настройку параметра snaplen ( -s). man tcpdump:

-s     Snarf  snaplen bytes of data from each packet rather than the
default of 65535 bytes.  Packets truncated because of a limited snapshot
are indicated in the output with ``[|proto]'', where proto is the name of
the protocol level at which the truncation has occurred. Note that  taking
larger  snapshots both increases the amount of time it  takes  to
process packets and, effectively, decreases the amount of packet buffering.
This may cause packets to be lost. You should limit snaplen to the
smallest number that will capture the protocol information you're
interested in. Setting snaplen to 0 sets it to the default of 65535, for
back-wards compatibility with recent older versions of tcpdump.

Это означает, что с фиксированным размером буфера вы можете увеличить количество пакетов, которые помещаются в буфер (и, следовательно, не отбрасываются), уменьшая размер привязки.

Петр Узел
источник
2
Я знаю, что это старый поток (и мне нравится этот ответ), но когда вы цитируете источники на GitHub, пожалуйста, укажите текущую фиксацию (поскольку ветка master может измениться), например: github.com/mcr/tcpdump/blob/ ... .
Бруно Нери
@brunonery Это не проблема для сайтов Stack Exchange, где мы действительно поощряем пользователей улучшать ответы, даже если само сообщение довольно старое. (В отличие от форумов, где его осуждают.)
Léo Lam
исправил устаревшие ссылки
Eli Heady