Почему ядро отбросило бы пакеты?

Можно просто поместить grub-install наряду с этими тремя командами в файле и добавляют его где-нибудь в ПУТИ так, чтобы можно было выполнить его каждый раз, когда Вы должны.

Кроме того, псевдоним grub-install в корне ~/.bashrc (в зависимости от того, какая оболочка базируется использование) к grub-install && grub-install /dev/sd{a,b,c}1

50
16.07.2014, 13:31
6 ответов

Из руководства tcpdump:

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

Небольшое пояснение:

tcpdump захватывает необработанные пакеты, проходящие через сетевой интерфейс. Пакеты должны быть проанализированы и отфильтрованы в соответствии с правилами, указанными вами в командной строке, и это займет некоторое время, поэтому входящие пакеты должны быть помещены в буфер (очередь) для обработки. Иногда пакетов слишком много, они сохраняются в буфере, но они сохраняются быстрее, чем обрабатываются, поэтому в конечном итоге в буфере заканчивается место, поэтому ядро ​​отбрасывает все последующие пакеты, пока в буфере не останется немного свободного места.

Вы можете увеличить размер буфера с помощью параметра -B ( - размер-буфера ) следующим образом:

tcpdump -B 4096 ....

Обратите внимание, что размер указывается в килобайтах, поэтому Строка выше устанавливает размер буфера равным 4 МБ.

51
27.01.2020, 19:33
[

] Согласно []man tcpdump[]:[

] [
] [

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

] [
] [

]Ядро помещает захваченные пакеты в буфер захвата фиксированного размера [][]. Если []tcpdump[] не очистит этот буфер достаточно быстро, ядро начнет перезаписывать старые пакеты в буфер и соответственно увеличивать счетчик []drop[]. Значение этого счетчика - то, что вы видите как "брошено ядром".[

] [

] Кстати, вы можете [] изменить размер буфера захвата []: Передать []tcpdump[] опцию []-B[] с размером KiB.[

].
12
27.01.2020, 19:33

Еще один момент, который следует учитывать/проверить, что tcpdump может потратить много времени, выполняя DNS-запросы для разрешения IP-адресов в доменные имена. Если они вам не нужны, попробуйте установить флаг -n (без поиска), например:

tcpdump -n port 80
28
27.01.2020, 19:33

Помимо того, что написано на странице руководства, похоже, есть еще одна причина, по которой пакеты могут отбрасываться ядром. Я наблюдал 100% отбрасывание пакетов из tcpdump , где единственным трафиком в сети был один 512-битный пакет PRBS в секунду. Ясно, что объяснение буферного пространства здесь не имеет смысла - я думаю, что ядро ​​может обрабатывать 0,5 КБ / с.

Что-то из того, что было в моем дистрибутиве (Ubuntu 14.04), могло выполнять какую-то интеллектуальную фильтрацию на канальном уровне, которой не нравились мои тестовые пакеты. Мое обходное решение заключалось в создании нового сетевого пространства имен следующим образом:

sudo -i
ip netns add debug
ip link set dev eth0 netns debug
ip netns exec debug bash
ifconfig eth0 1.2.3.4 up

Во внутренней оболочке netns любые процессы ОС, которые раньше вызывали проблемы, отсутствуют, а tcpdump показывает мне все пакеты, которые я ожидаю увидеть.

2
27.01.2020, 19:33

Я считаю полезным использование опции tcpdump -c. Таким образом, вы можете установить количество пакетов, а затем остановиться, и вы не сможете заполнить буфер.

Например, этот будет перехватывать запросы tcp на локальном хосте.

tcpdump -ni lo tcp -c 20
2
27.01.2020, 19:33

Я обнаружил, что для того, чтобы не быть "выброшенным ядром", мне пришлось использовать все три вещи, рекомендованные выше:

tcpdump -c 10000 -n -B 10240
0
27.01.2020, 19:33

Теги

Похожие вопросы