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


16

Переглядаючи сторінку man на tcpdump, схоже, ядро ​​може скинути пакети, якщо буфер заповнений. Мені було цікаво, чи:

  1. цей розмір може бути налаштований та / або
  2. де я можу побачити розмір свого дистрибутива?

На головній сторінці (для легкої довідки):

пакети `` скинуті ядром '' (це кількість пакетів, які були скинуті, через брак буферного простору, механізмом захоплення пакетів в ОС, на якій працює tcpdump, якщо ОС повідомляє цю інформацію програмам; якщо ні, то це буде повідомлено як 0).

Відповіді:


27

Tcpdump має можливість -Bвстановити розмір буфера захоплення. Потім значення передається в libpcap (бібліотека, яку використовує tcpdump для фактичного захоплення пакету) за допомогою pcap_set_buffer_size()функції. Tcpdump manpage не вказує, в яких одиницях розмір буфера вказаний з -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, будь ласка, вкажіть на поточний фіксатор (як головна гілка може змінитися), наприклад: github.com/mcr/tcpdump/blob/ … .
bruno nery

@brunonery Це не проблема із сайтами Stack Exchange, де ми насправді заохочуємо користувачів до вдосконалення відповідей, навіть якщо сама публікація є досить старою. (На відміну від форумів, де це нахмурене.)
Лео Лам

виправили застарілі посилання
Елі Хеді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.