Почему пакеты tcpdump отбрасываются интерфейсом?

Почему пакеты tcpdump отбрасываются интерфейсом?

Я использую Ubuntu 14.04 через Virtual Box на хосте Windows 7. Сетевая карта представляет собой адаптер USB-Ethernet.

Themanдля tcpdumpуказывается, что может быть причиной «отбрасывания пакетов ядром», но не указывается, что является причиной «отбрасывания пакетов интерфейсом».

Может ли кто-нибудь пролить свет на то, почему интерфейс может терять пакеты? Или как мне узнать причину потери пакетов?

решение1

Как вы указали, в документации нет ничего о счетчике "пакетов, отброшенных интерфейсом". Так что нам нужно немного покопаться в исходном коде.

Изисходный код tcpdump, счетчик сбросов интерфейса извлекается из stats.ps_ifdrop:

if (stats.ps_ifdrop != 0) {
    if (!verbose)
        fputs(", ", stderr);
    else
        putc('\n', stderr);
    (void)fprintf(stderr, "%u packet%s dropped by interface\n",
        stats.ps_ifdrop, PLURAL_SUFFIX(stats.ps_ifdrop));

Отчеловек pcap_stats:

ps_ifdrop
    number of packets dropped by the network interface or its driver.

И изисходный код libpcap:

 *  "ps_ifdrop" is supported. It will return the number
 *  of drops the interface reports in /proc/net/dev,
 *  if that is available.

ИтакСчетчик tcpdump «Пакеты, отброшенные интерфейсом» соответствует пакетам, зарегистрированным как отброшенные /proc/net/devво время tcpdumpзахвата..

/proc/dev/netОбъясняется значение полей.здесь

Чтобы лучше понять причины падений, я бы начал с рассмотрения следующей статистики:

  • ethtool -S <interface>
  • grep '' /sys/class/net/<interface>/statistics/*

решение2

В общем, это будет потому, что компьютер слишком занят, чтобы обработать входящий пакет, а интерфейсу некуда его поместить. Драйвер мог не предоставить буферы интерфейсу, прерывание могло быть заблокировано слишком долго, серьезные проблемы с нехваткой ресурсов и т. д.

Сейчас это случается нечасто, поскольку реализация ОС и производительность оборудования улучшились, но в ранние годы это было реальной проблемой, когда (например) дисковод мог перегрузить шину памяти или ОС приходилось выделять интерфейсу буфер в рамках обслуживания прерывания приема (плохая конструкция оборудования).

Связанный контент